@payloadcms/richtext-lexical 3.0.0-canary.ef0a8d0 → 3.0.0-canary.f1f97ff

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 (156) hide show
  1. package/dist/exports/client/Field-YNHIDK3D.js +2 -0
  2. package/dist/exports/client/Field-YNHIDK3D.js.map +7 -0
  3. package/dist/exports/client/RelationshipComponent-ZR2OCBGL.js +2 -0
  4. package/dist/exports/client/RelationshipComponent-ZR2OCBGL.js.map +7 -0
  5. package/dist/exports/client/bundled.css +1 -1
  6. package/dist/exports/client/{chunk-LGMNC5KQ.js → chunk-6QXGZYUK.js} +2 -2
  7. package/dist/exports/client/chunk-EBB2CEB6.js +2 -0
  8. package/dist/exports/client/chunk-EBB2CEB6.js.map +7 -0
  9. package/dist/exports/client/chunk-IPCJ5EVK.js +2 -0
  10. package/dist/exports/client/chunk-IPCJ5EVK.js.map +7 -0
  11. package/dist/exports/client/{chunk-QZIAQPM7.js → chunk-IWZVO3AI.js} +2 -2
  12. package/dist/exports/client/chunk-IWZVO3AI.js.map +7 -0
  13. package/dist/exports/client/chunk-VUVXZJJR.js +2 -0
  14. package/dist/exports/client/chunk-VUVXZJJR.js.map +7 -0
  15. package/dist/exports/client/{component-VQ4OUM2Q.js → component-D4GWDXK5.js} +2 -2
  16. package/dist/exports/client/component-KA7FDRMA.js +2 -0
  17. package/dist/exports/client/component-KA7FDRMA.js.map +7 -0
  18. package/dist/exports/client/componentInline-6EKPZSCV.js +2 -0
  19. package/dist/exports/client/componentInline-6EKPZSCV.js.map +7 -0
  20. package/dist/exports/client/index.d.ts +0 -1
  21. package/dist/exports/client/index.d.ts.map +1 -1
  22. package/dist/exports/client/index.js +7 -7
  23. package/dist/exports/client/index.js.map +4 -4
  24. package/dist/features/blocks/component/BlockContent.d.ts +3 -3
  25. package/dist/features/blocks/component/BlockContent.d.ts.map +1 -1
  26. package/dist/features/blocks/component/BlockContent.js +5 -2
  27. package/dist/features/blocks/component/BlockContent.js.map +1 -1
  28. package/dist/features/blocks/component/index.d.ts +0 -4
  29. package/dist/features/blocks/component/index.d.ts.map +1 -1
  30. package/dist/features/blocks/component/index.js +6 -2
  31. package/dist/features/blocks/component/index.js.map +1 -1
  32. package/dist/features/blocks/componentInline/index.d.ts +10 -0
  33. package/dist/features/blocks/componentInline/index.d.ts.map +1 -0
  34. package/dist/features/blocks/componentInline/index.js +133 -0
  35. package/dist/features/blocks/componentInline/index.js.map +1 -0
  36. package/dist/features/blocks/feature.client.d.ts +6 -2
  37. package/dist/features/blocks/feature.client.d.ts.map +1 -1
  38. package/dist/features/blocks/feature.client.js +70 -8
  39. package/dist/features/blocks/feature.client.js.map +1 -1
  40. package/dist/features/blocks/feature.server.d.ts +2 -1
  41. package/dist/features/blocks/feature.server.d.ts.map +1 -1
  42. package/dist/features/blocks/feature.server.js +99 -34
  43. package/dist/features/blocks/feature.server.js.map +1 -1
  44. package/dist/features/blocks/graphQLPopulationPromise.d.ts +3 -2
  45. package/dist/features/blocks/graphQLPopulationPromise.d.ts.map +1 -1
  46. package/dist/features/blocks/graphQLPopulationPromise.js +2 -2
  47. package/dist/features/blocks/graphQLPopulationPromise.js.map +1 -1
  48. package/dist/features/blocks/i18n.d.ts.map +1 -1
  49. package/dist/features/blocks/i18n.js +192 -0
  50. package/dist/features/blocks/i18n.js.map +1 -1
  51. package/dist/features/blocks/nodes/BlocksNode.d.ts +3 -2
  52. package/dist/features/blocks/nodes/BlocksNode.d.ts.map +1 -1
  53. package/dist/features/blocks/nodes/BlocksNode.js +2 -2
  54. package/dist/features/blocks/nodes/BlocksNode.js.map +1 -1
  55. package/dist/features/blocks/nodes/InlineBlocksNode.d.ts +39 -0
  56. package/dist/features/blocks/nodes/InlineBlocksNode.d.ts.map +1 -0
  57. package/dist/features/blocks/nodes/InlineBlocksNode.js +94 -0
  58. package/dist/features/blocks/nodes/InlineBlocksNode.js.map +1 -0
  59. package/dist/features/blocks/plugin/commands.d.ts +5 -0
  60. package/dist/features/blocks/plugin/commands.d.ts.map +1 -1
  61. package/dist/features/blocks/plugin/commands.js +2 -0
  62. package/dist/features/blocks/plugin/commands.js.map +1 -1
  63. package/dist/features/blocks/plugin/index.d.ts.map +1 -1
  64. package/dist/features/blocks/plugin/index.js +76 -7
  65. package/dist/features/blocks/plugin/index.js.map +1 -1
  66. package/dist/features/blocks/validate.d.ts +3 -2
  67. package/dist/features/blocks/validate.d.ts.map +1 -1
  68. package/dist/features/blocks/validate.js +2 -2
  69. package/dist/features/blocks/validate.js.map +1 -1
  70. package/dist/features/link/feature.server.js +1 -1
  71. package/dist/features/link/feature.server.js.map +1 -1
  72. package/dist/features/link/nodes/types.d.ts +3 -2
  73. package/dist/features/link/nodes/types.d.ts.map +1 -1
  74. package/dist/features/link/nodes/types.js.map +1 -1
  75. package/dist/features/link/plugins/floatingLinkEditor/utilities.d.ts +1 -1
  76. package/dist/features/link/plugins/floatingLinkEditor/utilities.d.ts.map +1 -1
  77. package/dist/features/link/plugins/floatingLinkEditor/utilities.js.map +1 -1
  78. package/dist/features/relationship/nodes/components/RelationshipComponent.d.ts +0 -1
  79. package/dist/features/relationship/nodes/components/RelationshipComponent.d.ts.map +1 -1
  80. package/dist/features/relationship/nodes/components/RelationshipComponent.js +2 -3
  81. package/dist/features/relationship/nodes/components/RelationshipComponent.js.map +1 -1
  82. package/dist/features/typesServer.d.ts +5 -5
  83. package/dist/features/typesServer.d.ts.map +1 -1
  84. package/dist/features/typesServer.js.map +1 -1
  85. package/dist/features/upload/nodes/UploadNode.d.ts +2 -4
  86. package/dist/features/upload/nodes/UploadNode.d.ts.map +1 -1
  87. package/dist/features/upload/nodes/UploadNode.js.map +1 -1
  88. package/dist/field/Field.d.ts +1 -1
  89. package/dist/field/Field.d.ts.map +1 -1
  90. package/dist/field/Field.js.map +1 -1
  91. package/dist/field/index.d.ts +1 -1
  92. package/dist/field/index.d.ts.map +1 -1
  93. package/dist/field/index.js +10 -10
  94. package/dist/field/index.js.map +1 -1
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +5 -6
  97. package/dist/index.js.map +1 -1
  98. package/dist/lexical/LexicalProvider.d.ts +1 -1
  99. package/dist/lexical/LexicalProvider.d.ts.map +1 -1
  100. package/dist/lexical/LexicalProvider.js +2 -2
  101. package/dist/lexical/LexicalProvider.js.map +1 -1
  102. package/dist/lexical/config/client/EditorConfigProvider.d.ts +1 -1
  103. package/dist/lexical/config/client/EditorConfigProvider.d.ts.map +1 -1
  104. package/dist/lexical/config/client/EditorConfigProvider.js.map +1 -1
  105. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts +4 -4
  106. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -1
  107. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
  108. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts +0 -1
  109. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts.map +1 -1
  110. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +1 -20
  111. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
  112. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts +2 -2
  113. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts.map +1 -1
  114. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js.map +1 -1
  115. package/dist/lexical/plugins/SlashMenu/index.d.ts.map +1 -1
  116. package/dist/lexical/plugins/SlashMenu/index.js +43 -41
  117. package/dist/lexical/plugins/SlashMenu/index.js.map +1 -1
  118. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +1 -1
  119. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  120. package/dist/lexical/ui/icons/InlineBlocks/index.d.ts +3 -0
  121. package/dist/lexical/ui/icons/InlineBlocks/index.d.ts.map +1 -0
  122. package/dist/lexical/ui/icons/InlineBlocks/index.js +20 -0
  123. package/dist/lexical/ui/icons/InlineBlocks/index.js.map +1 -0
  124. package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts.map +1 -1
  125. package/dist/populateGraphQL/populateLexicalPopulationPromises.js.map +1 -1
  126. package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.d.ts +2 -2
  127. package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.d.ts.map +1 -1
  128. package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.js.map +1 -1
  129. package/dist/utilities/fieldsDrawer/Drawer.d.ts +2 -2
  130. package/dist/utilities/fieldsDrawer/Drawer.d.ts.map +1 -1
  131. package/dist/utilities/fieldsDrawer/Drawer.js.map +1 -1
  132. package/dist/validate/validateNodes.d.ts +1 -1
  133. package/dist/validate/validateNodes.d.ts.map +1 -1
  134. package/dist/validate/validateNodes.js.map +1 -1
  135. package/package.json +9 -9
  136. package/dist/exports/client/Field-5KHQLTCU.js +0 -2
  137. package/dist/exports/client/Field-5KHQLTCU.js.map +0 -7
  138. package/dist/exports/client/RelationshipComponent-EJB6LBDR.js +0 -2
  139. package/dist/exports/client/RelationshipComponent-EJB6LBDR.js.map +0 -7
  140. package/dist/exports/client/chunk-QZIAQPM7.js.map +0 -7
  141. package/dist/exports/client/chunk-SVDDFJRT.js +0 -2
  142. package/dist/exports/client/chunk-SVDDFJRT.js.map +0 -7
  143. package/dist/exports/client/chunk-XMCXIHWD.js +0 -2
  144. package/dist/exports/client/chunk-XMCXIHWD.js.map +0 -7
  145. package/dist/exports/client/component-Z5R2PHH3.js +0 -2
  146. package/dist/exports/client/component-Z5R2PHH3.js.map +0 -7
  147. package/dist/features/blocks/drawer/index.d.ts +0 -9
  148. package/dist/features/blocks/drawer/index.d.ts.map +0 -1
  149. package/dist/features/blocks/drawer/index.js +0 -78
  150. package/dist/features/blocks/drawer/index.js.map +0 -1
  151. package/dist/lexical/utils/cloneDeep.d.ts +0 -2
  152. package/dist/lexical/utils/cloneDeep.d.ts.map +0 -1
  153. package/dist/lexical/utils/cloneDeep.js +0 -50
  154. package/dist/lexical/utils/cloneDeep.js.map +0 -1
  155. /package/dist/exports/client/{chunk-LGMNC5KQ.js.map → chunk-6QXGZYUK.js.map} +0 -0
  156. /package/dist/exports/client/{component-VQ4OUM2Q.js.map → component-D4GWDXK5.js.map} +0 -0
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { DecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js';
3
3
  import ObjectID from 'bson-objectid';
4
+ import { deepCopyObjectSimple } from 'payload/shared';
4
5
  import React from 'react';
5
6
  const BlockComponent = /*#__PURE__*/ React.lazy(()=>import('../component/index.js').then((module)=>({
6
7
  default: module.BlockComponent
@@ -43,7 +44,6 @@ export class BlockNode extends DecoratorBlockNode {
43
44
  return false;
44
45
  }
45
46
  decorate(editor, config) {
46
- // @ts-expect-error
47
47
  return /*#__PURE__*/ _jsx(BlockComponent, {
48
48
  formData: this.getFields(),
49
49
  nodeKey: this.getKey()
@@ -72,7 +72,7 @@ export class BlockNode extends DecoratorBlockNode {
72
72
  return `Block Field`;
73
73
  }
74
74
  setFields(fields) {
75
- const fieldsCopy = JSON.parse(JSON.stringify(fields));
75
+ const fieldsCopy = deepCopyObjectSimple(fields);
76
76
  const writable = this.getWritable();
77
77
  writable.__fields = fieldsCopy;
78
78
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/blocks/nodes/BlocksNode.tsx"],"sourcesContent":["import type { SerializedDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport type {\n DOMConversionMap,\n DOMExportOutput,\n EditorConfig,\n ElementFormatType,\n LexicalEditor,\n LexicalNode,\n NodeKey,\n Spread,\n} from 'lexical'\n\nimport { DecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport ObjectID from 'bson-objectid'\nimport React, { type JSX } from 'react'\n\nexport type BlockFields<TBlockFields extends object = Record<string, unknown>> = {\n /** Block form data */\n blockName: string\n blockType: string\n id: string\n} & TBlockFields\n\nconst BlockComponent = React.lazy(() =>\n import('../component/index.js').then((module) => ({\n default: module.BlockComponent,\n })),\n)\n\nexport type SerializedBlockNode<TBlockFields extends object = Record<string, unknown>> = Spread<\n {\n children?: never // required so that our typed editor state doesn't automatically add children\n fields: BlockFields<TBlockFields>\n type: 'block'\n },\n SerializedDecoratorBlockNode\n>\n\nexport class BlockNode extends DecoratorBlockNode {\n __fields: BlockFields\n\n constructor({\n fields,\n format,\n key,\n }: {\n fields: BlockFields\n format?: ElementFormatType\n key?: NodeKey\n }) {\n super(format, key)\n this.__fields = fields\n }\n\n static clone(node: BlockNode): BlockNode {\n return new BlockNode({\n fields: node.__fields,\n format: node.__format,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'block'\n }\n\n static importDOM(): DOMConversionMap<HTMLDivElement> | null {\n return {}\n }\n\n static importJSON(serializedNode: SerializedBlockNode): BlockNode {\n if (serializedNode.version === 1) {\n // Convert (version 1 had the fields wrapped in another, unnecessary data property)\n serializedNode = {\n ...serializedNode,\n fields: {\n ...(serializedNode as any).fields.data,\n },\n version: 2,\n }\n }\n const node = $createBlockNode(serializedNode.fields)\n node.setFormat(serializedNode.format)\n return node\n }\n\n static isInline(): false {\n return false\n }\n decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element {\n // @ts-expect-error\n return <BlockComponent formData={this.getFields()} nodeKey={this.getKey()} />\n }\n\n exportDOM(): DOMExportOutput {\n const element = document.createElement('div')\n\n const text = document.createTextNode(this.getTextContent())\n element.append(text)\n return { element }\n }\n\n exportJSON(): SerializedBlockNode {\n return {\n ...super.exportJSON(),\n type: 'block',\n fields: this.getFields(),\n version: 2,\n }\n }\n\n getFields(): BlockFields {\n return this.getLatest().__fields\n }\n\n getTextContent(): string {\n return `Block Field`\n }\n\n setFields(fields: BlockFields): void {\n const fieldsCopy = JSON.parse(JSON.stringify(fields)) as BlockFields\n\n const writable = this.getWritable()\n writable.__fields = fieldsCopy\n }\n}\n\nexport function $createBlockNode(fields: Exclude<BlockFields, 'id'>): BlockNode {\n return new BlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n })\n}\n\nexport function $isBlockNode(node: BlockNode | LexicalNode | null | undefined): node is BlockNode {\n return node instanceof BlockNode\n}\n"],"names":["DecoratorBlockNode","ObjectID","React","BlockComponent","lazy","then","module","default","BlockNode","__fields","constructor","fields","format","key","clone","node","__format","__key","getType","importDOM","importJSON","serializedNode","version","data","$createBlockNode","setFormat","isInline","decorate","editor","config","formData","getFields","nodeKey","getKey","exportDOM","element","document","createElement","text","createTextNode","getTextContent","append","exportJSON","type","getLatest","setFields","fieldsCopy","JSON","parse","stringify","writable","getWritable","id","toHexString","$isBlockNode"],"mappings":";AAYA,SAASA,kBAAkB,QAAQ,8CAA6C;AAChF,OAAOC,cAAc,gBAAe;AACpC,OAAOC,WAAyB,QAAO;AASvC,MAAMC,+BAAiBD,MAAME,IAAI,CAAC,IAChC,MAAM,CAAC,yBAAyBC,IAAI,CAAC,CAACC,SAAY,CAAA;YAChDC,SAASD,OAAOH,cAAc;QAChC,CAAA;AAYF,OAAO,MAAMK,kBAAkBR;IAC7BS,SAAqB;IAErBC,YAAY,EACVC,MAAM,EACNC,MAAM,EACNC,GAAG,EAKJ,CAAE;QACD,KAAK,CAACD,QAAQC;QACd,IAAI,CAACJ,QAAQ,GAAGE;IAClB;IAEA,OAAOG,MAAMC,IAAe,EAAa;QACvC,OAAO,IAAIP,UAAU;YACnBG,QAAQI,KAAKN,QAAQ;YACrBG,QAAQG,KAAKC,QAAQ;YACrBH,KAAKE,KAAKE,KAAK;QACjB;IACF;IAEA,OAAOC,UAAkB;QACvB,OAAO;IACT;IAEA,OAAOC,YAAqD;QAC1D,OAAO,CAAC;IACV;IAEA,OAAOC,WAAWC,cAAmC,EAAa;QAChE,IAAIA,eAAeC,OAAO,KAAK,GAAG;YAChC,mFAAmF;YACnFD,iBAAiB;gBACf,GAAGA,cAAc;gBACjBV,QAAQ;oBACN,GAAG,AAACU,eAAuBV,MAAM,CAACY,IAAI;gBACxC;gBACAD,SAAS;YACX;QACF;QACA,MAAMP,OAAOS,iBAAiBH,eAAeV,MAAM;QACnDI,KAAKU,SAAS,CAACJ,eAAeT,MAAM;QACpC,OAAOG;IACT;IAEA,OAAOW,WAAkB;QACvB,OAAO;IACT;IACAC,SAASC,MAAqB,EAAEC,MAAoB,EAAe;QACjE,mBAAmB;QACnB,qBAAO,KAAC1B;YAAe2B,UAAU,IAAI,CAACC,SAAS;YAAIC,SAAS,IAAI,CAACC,MAAM;;IACzE;IAEAC,YAA6B;QAC3B,MAAMC,UAAUC,SAASC,aAAa,CAAC;QAEvC,MAAMC,OAAOF,SAASG,cAAc,CAAC,IAAI,CAACC,cAAc;QACxDL,QAAQM,MAAM,CAACH;QACf,OAAO;YAAEH;QAAQ;IACnB;IAEAO,aAAkC;QAChC,OAAO;YACL,GAAG,KAAK,CAACA,YAAY;YACrBC,MAAM;YACNhC,QAAQ,IAAI,CAACoB,SAAS;YACtBT,SAAS;QACX;IACF;IAEAS,YAAyB;QACvB,OAAO,IAAI,CAACa,SAAS,GAAGnC,QAAQ;IAClC;IAEA+B,iBAAyB;QACvB,OAAO,CAAC,WAAW,CAAC;IACtB;IAEAK,UAAUlC,MAAmB,EAAQ;QACnC,MAAMmC,aAAaC,KAAKC,KAAK,CAACD,KAAKE,SAAS,CAACtC;QAE7C,MAAMuC,WAAW,IAAI,CAACC,WAAW;QACjCD,SAASzC,QAAQ,GAAGqC;IACtB;AACF;AAEA,OAAO,SAAStB,iBAAiBb,MAAkC;IACjE,OAAO,IAAIH,UAAU;QACnBG,QAAQ;YACN,GAAGA,MAAM;YACTyC,IAAIzC,QAAQyC,MAAM,IAAInD,SAASM,OAAO,GAAG8C,WAAW;QACtD;IACF;AACF;AAEA,OAAO,SAASC,aAAavC,IAAgD;IAC3E,OAAOA,gBAAgBP;AACzB"}
1
+ {"version":3,"sources":["../../../../src/features/blocks/nodes/BlocksNode.tsx"],"sourcesContent":["import type { SerializedDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport type {\n DOMConversionMap,\n DOMExportOutput,\n EditorConfig,\n ElementFormatType,\n LexicalEditor,\n LexicalNode,\n NodeKey,\n Spread,\n} from 'lexical'\nimport type { JsonObject } from 'payload'\n\nimport { DecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport ObjectID from 'bson-objectid'\nimport { deepCopyObjectSimple } from 'payload/shared'\nimport React, { type JSX } from 'react'\n\nexport type BlockFields<TBlockFields extends JsonObject = JsonObject> = {\n /** Block form data */\n blockName: string\n blockType: string\n id: string\n} & TBlockFields\n\nconst BlockComponent = React.lazy(() =>\n import('../component/index.js').then((module) => ({\n default: module.BlockComponent,\n })),\n)\n\nexport type SerializedBlockNode<TBlockFields extends JsonObject = JsonObject> = Spread<\n {\n children?: never // required so that our typed editor state doesn't automatically add children\n fields: BlockFields<TBlockFields>\n type: 'block'\n },\n SerializedDecoratorBlockNode\n>\n\nexport class BlockNode extends DecoratorBlockNode {\n __fields: BlockFields\n\n constructor({\n fields,\n format,\n key,\n }: {\n fields: BlockFields\n format?: ElementFormatType\n key?: NodeKey\n }) {\n super(format, key)\n this.__fields = fields\n }\n\n static clone(node: BlockNode): BlockNode {\n return new BlockNode({\n fields: node.__fields,\n format: node.__format,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'block'\n }\n\n static importDOM(): DOMConversionMap<HTMLDivElement> | null {\n return {}\n }\n\n static importJSON(serializedNode: SerializedBlockNode): BlockNode {\n if (serializedNode.version === 1) {\n // Convert (version 1 had the fields wrapped in another, unnecessary data property)\n serializedNode = {\n ...serializedNode,\n fields: {\n ...(serializedNode as any).fields.data,\n },\n version: 2,\n }\n }\n const node = $createBlockNode(serializedNode.fields)\n node.setFormat(serializedNode.format)\n return node\n }\n\n static isInline(): false {\n return false\n }\n decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return <BlockComponent formData={this.getFields()} nodeKey={this.getKey()} />\n }\n\n exportDOM(): DOMExportOutput {\n const element = document.createElement('div')\n\n const text = document.createTextNode(this.getTextContent())\n element.append(text)\n return { element }\n }\n\n exportJSON(): SerializedBlockNode {\n return {\n ...super.exportJSON(),\n type: 'block',\n fields: this.getFields(),\n version: 2,\n }\n }\n\n getFields(): BlockFields {\n return this.getLatest().__fields\n }\n\n getTextContent(): string {\n return `Block Field`\n }\n\n setFields(fields: BlockFields): void {\n const fieldsCopy = deepCopyObjectSimple(fields)\n\n const writable = this.getWritable()\n writable.__fields = fieldsCopy\n }\n}\n\nexport function $createBlockNode(fields: Exclude<BlockFields, 'id'>): BlockNode {\n return new BlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n })\n}\n\nexport function $isBlockNode(node: BlockNode | LexicalNode | null | undefined): node is BlockNode {\n return node instanceof BlockNode\n}\n"],"names":["DecoratorBlockNode","ObjectID","deepCopyObjectSimple","React","BlockComponent","lazy","then","module","default","BlockNode","__fields","constructor","fields","format","key","clone","node","__format","__key","getType","importDOM","importJSON","serializedNode","version","data","$createBlockNode","setFormat","isInline","decorate","editor","config","formData","getFields","nodeKey","getKey","exportDOM","element","document","createElement","text","createTextNode","getTextContent","append","exportJSON","type","getLatest","setFields","fieldsCopy","writable","getWritable","id","toHexString","$isBlockNode"],"mappings":";AAaA,SAASA,kBAAkB,QAAQ,8CAA6C;AAChF,OAAOC,cAAc,gBAAe;AACpC,SAASC,oBAAoB,QAAQ,iBAAgB;AACrD,OAAOC,WAAyB,QAAO;AASvC,MAAMC,+BAAiBD,MAAME,IAAI,CAAC,IAChC,MAAM,CAAC,yBAAyBC,IAAI,CAAC,CAACC,SAAY,CAAA;YAChDC,SAASD,OAAOH,cAAc;QAChC,CAAA;AAYF,OAAO,MAAMK,kBAAkBT;IAC7BU,SAAqB;IAErBC,YAAY,EACVC,MAAM,EACNC,MAAM,EACNC,GAAG,EAKJ,CAAE;QACD,KAAK,CAACD,QAAQC;QACd,IAAI,CAACJ,QAAQ,GAAGE;IAClB;IAEA,OAAOG,MAAMC,IAAe,EAAa;QACvC,OAAO,IAAIP,UAAU;YACnBG,QAAQI,KAAKN,QAAQ;YACrBG,QAAQG,KAAKC,QAAQ;YACrBH,KAAKE,KAAKE,KAAK;QACjB;IACF;IAEA,OAAOC,UAAkB;QACvB,OAAO;IACT;IAEA,OAAOC,YAAqD;QAC1D,OAAO,CAAC;IACV;IAEA,OAAOC,WAAWC,cAAmC,EAAa;QAChE,IAAIA,eAAeC,OAAO,KAAK,GAAG;YAChC,mFAAmF;YACnFD,iBAAiB;gBACf,GAAGA,cAAc;gBACjBV,QAAQ;oBACN,GAAG,AAACU,eAAuBV,MAAM,CAACY,IAAI;gBACxC;gBACAD,SAAS;YACX;QACF;QACA,MAAMP,OAAOS,iBAAiBH,eAAeV,MAAM;QACnDI,KAAKU,SAAS,CAACJ,eAAeT,MAAM;QACpC,OAAOG;IACT;IAEA,OAAOW,WAAkB;QACvB,OAAO;IACT;IACAC,SAASC,MAAqB,EAAEC,MAAoB,EAAe;QACjE,qBAAO,KAAC1B;YAAe2B,UAAU,IAAI,CAACC,SAAS;YAAIC,SAAS,IAAI,CAACC,MAAM;;IACzE;IAEAC,YAA6B;QAC3B,MAAMC,UAAUC,SAASC,aAAa,CAAC;QAEvC,MAAMC,OAAOF,SAASG,cAAc,CAAC,IAAI,CAACC,cAAc;QACxDL,QAAQM,MAAM,CAACH;QACf,OAAO;YAAEH;QAAQ;IACnB;IAEAO,aAAkC;QAChC,OAAO;YACL,GAAG,KAAK,CAACA,YAAY;YACrBC,MAAM;YACNhC,QAAQ,IAAI,CAACoB,SAAS;YACtBT,SAAS;QACX;IACF;IAEAS,YAAyB;QACvB,OAAO,IAAI,CAACa,SAAS,GAAGnC,QAAQ;IAClC;IAEA+B,iBAAyB;QACvB,OAAO,CAAC,WAAW,CAAC;IACtB;IAEAK,UAAUlC,MAAmB,EAAQ;QACnC,MAAMmC,aAAa7C,qBAAqBU;QAExC,MAAMoC,WAAW,IAAI,CAACC,WAAW;QACjCD,SAAStC,QAAQ,GAAGqC;IACtB;AACF;AAEA,OAAO,SAAStB,iBAAiBb,MAAkC;IACjE,OAAO,IAAIH,UAAU;QACnBG,QAAQ;YACN,GAAGA,MAAM;YACTsC,IAAItC,QAAQsC,MAAM,IAAIjD,SAASO,OAAO,GAAG2C,WAAW;QACtD;IACF;AACF;AAEA,OAAO,SAASC,aAAapC,IAAgD;IAC3E,OAAOA,gBAAgBP;AACzB"}
@@ -0,0 +1,39 @@
1
+ import type { DOMConversionMap, DOMExportOutput, EditorConfig, LexicalEditor, LexicalNode, NodeKey, SerializedLexicalNode, Spread } from 'lexical';
2
+ import { DecoratorNode } from 'lexical';
3
+ import React, { type JSX } from 'react';
4
+ export type InlineBlockFields = {
5
+ /** Block form data */
6
+ [key: string]: any;
7
+ blockType: string;
8
+ id: string;
9
+ };
10
+ export type SerializedInlineBlockNode = Spread<{
11
+ children?: never;
12
+ fields: InlineBlockFields;
13
+ type: 'inlineBlock';
14
+ }, SerializedLexicalNode>;
15
+ export declare class InlineBlockNode extends DecoratorNode<React.ReactElement> {
16
+ __fields: InlineBlockFields;
17
+ constructor({ fields, key }: {
18
+ fields: InlineBlockFields;
19
+ key?: NodeKey;
20
+ });
21
+ static clone(node: InlineBlockNode): InlineBlockNode;
22
+ static getType(): string;
23
+ static importDOM(): DOMConversionMap<HTMLDivElement> | null;
24
+ static importJSON(serializedNode: SerializedInlineBlockNode): InlineBlockNode;
25
+ static isInline(): false;
26
+ canIndent(): boolean;
27
+ createDOM(): HTMLSpanElement;
28
+ decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element;
29
+ exportDOM(): DOMExportOutput;
30
+ exportJSON(): SerializedInlineBlockNode;
31
+ getFields(): InlineBlockFields;
32
+ getTextContent(): string;
33
+ isInline(): boolean;
34
+ setFields(fields: InlineBlockFields): void;
35
+ updateDOM(): boolean;
36
+ }
37
+ export declare function $createInlineBlockNode(fields: Exclude<InlineBlockFields, 'id'>): InlineBlockNode;
38
+ export declare function $isInlineBlockNode(node: InlineBlockNode | LexicalNode | null | undefined): node is InlineBlockNode;
39
+ //# sourceMappingURL=InlineBlocksNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InlineBlocksNode.d.ts","sourceRoot":"","sources":["../../../../src/features/blocks/nodes/InlineBlocksNode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,MAAM,EACP,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAEvC,OAAO,KAAK,EAAE,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAA;AAEvC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,sBAAsB;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;IAElB,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,MAAM,CAAA;CACX,CAAA;AAQD,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAC5C;IACE,QAAQ,CAAC,EAAE,KAAK,CAAA;IAChB,MAAM,EAAE,iBAAiB,CAAA;IACzB,IAAI,EAAE,aAAa,CAAA;CACpB,EACD,qBAAqB,CACtB,CAAA;AAED,qBAAa,eAAgB,SAAQ,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC;IACpE,QAAQ,EAAE,iBAAiB,CAAA;gBAEf,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAAE,MAAM,EAAE,iBAAiB,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE;IAKzE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe;IAOpD,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,SAAS,IAAI,gBAAgB,CAAC,cAAc,CAAC,GAAG,IAAI;IAI3D,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,yBAAyB,GAAG,eAAe;IAK7E,MAAM,CAAC,QAAQ,IAAI,KAAK;IAGxB,SAAS;IAIT,SAAS;IAOT,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO;IAIlE,SAAS,IAAI,eAAe;IAS5B,UAAU,IAAI,yBAAyB;IAQvC,SAAS,IAAI,iBAAiB;IAI9B,cAAc,IAAI,MAAM;IAIxB,QAAQ;IAIR,SAAS,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAO1C,SAAS,IAAI,OAAO;CAGrB;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,GAAG,eAAe,CAOhG;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,eAAe,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,GACrD,IAAI,IAAI,eAAe,CAEzB"}
@@ -0,0 +1,94 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import ObjectID from 'bson-objectid';
3
+ import { DecoratorNode } from 'lexical';
4
+ import { deepCopyObjectSimple } from 'payload/shared';
5
+ import React from 'react';
6
+ const InlineBlockComponent = /*#__PURE__*/ React.lazy(()=>import('../componentInline/index.js').then((module)=>({
7
+ default: module.InlineBlockComponent
8
+ })));
9
+ export class InlineBlockNode extends DecoratorNode {
10
+ __fields;
11
+ constructor({ fields, key }){
12
+ super(key);
13
+ this.__fields = fields;
14
+ }
15
+ static clone(node) {
16
+ return new InlineBlockNode({
17
+ fields: node.__fields,
18
+ key: node.__key
19
+ });
20
+ }
21
+ static getType() {
22
+ return 'inlineBlock';
23
+ }
24
+ static importDOM() {
25
+ return {};
26
+ }
27
+ static importJSON(serializedNode) {
28
+ const node = $createInlineBlockNode(serializedNode.fields);
29
+ return node;
30
+ }
31
+ static isInline() {
32
+ return false;
33
+ }
34
+ canIndent() {
35
+ return true;
36
+ }
37
+ createDOM() {
38
+ const element = document.createElement('span');
39
+ element.classList.add('inline-block-container');
40
+ return element;
41
+ }
42
+ decorate(editor, config) {
43
+ return /*#__PURE__*/ _jsx(InlineBlockComponent, {
44
+ formData: this.getFields(),
45
+ nodeKey: this.getKey()
46
+ });
47
+ }
48
+ exportDOM() {
49
+ const element = document.createElement('span');
50
+ element.classList.add('inline-block-container');
51
+ const text = document.createTextNode(this.getTextContent());
52
+ element.append(text);
53
+ return {
54
+ element
55
+ };
56
+ }
57
+ exportJSON() {
58
+ return {
59
+ type: 'inlineBlock',
60
+ fields: this.getFields(),
61
+ version: 1
62
+ };
63
+ }
64
+ getFields() {
65
+ return this.getLatest().__fields;
66
+ }
67
+ getTextContent() {
68
+ return `Block Field`;
69
+ }
70
+ isInline() {
71
+ return true;
72
+ }
73
+ setFields(fields) {
74
+ const fieldsCopy = deepCopyObjectSimple(fields);
75
+ const writable = this.getWritable();
76
+ writable.__fields = fieldsCopy;
77
+ }
78
+ updateDOM() {
79
+ return false;
80
+ }
81
+ }
82
+ export function $createInlineBlockNode(fields) {
83
+ return new InlineBlockNode({
84
+ fields: {
85
+ ...fields,
86
+ id: fields?.id || new ObjectID.default().toHexString()
87
+ }
88
+ });
89
+ }
90
+ export function $isInlineBlockNode(node) {
91
+ return node instanceof InlineBlockNode;
92
+ }
93
+
94
+ //# sourceMappingURL=InlineBlocksNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/blocks/nodes/InlineBlocksNode.tsx"],"sourcesContent":["import type {\n DOMConversionMap,\n DOMExportOutput,\n EditorConfig,\n LexicalEditor,\n LexicalNode,\n NodeKey,\n SerializedLexicalNode,\n Spread,\n} from 'lexical'\n\nimport ObjectID from 'bson-objectid'\nimport { DecoratorNode } from 'lexical'\nimport { deepCopyObjectSimple } from 'payload/shared'\nimport React, { type JSX } from 'react'\n\nexport type InlineBlockFields = {\n /** Block form data */\n [key: string]: any\n //blockName: string\n blockType: string\n id: string\n}\n\nconst InlineBlockComponent = React.lazy(() =>\n import('../componentInline/index.js').then((module) => ({\n default: module.InlineBlockComponent,\n })),\n)\n\nexport type SerializedInlineBlockNode = Spread<\n {\n children?: never // required so that our typed editor state doesn't automatically add children\n fields: InlineBlockFields\n type: 'inlineBlock'\n },\n SerializedLexicalNode\n>\n\nexport class InlineBlockNode extends DecoratorNode<React.ReactElement> {\n __fields: InlineBlockFields\n\n constructor({ fields, key }: { fields: InlineBlockFields; key?: NodeKey }) {\n super(key)\n this.__fields = fields\n }\n\n static clone(node: InlineBlockNode): InlineBlockNode {\n return new InlineBlockNode({\n fields: node.__fields,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'inlineBlock'\n }\n\n static importDOM(): DOMConversionMap<HTMLDivElement> | null {\n return {}\n }\n\n static importJSON(serializedNode: SerializedInlineBlockNode): InlineBlockNode {\n const node = $createInlineBlockNode(serializedNode.fields)\n return node\n }\n\n static isInline(): false {\n return false\n }\n canIndent() {\n return true\n }\n\n createDOM() {\n const element = document.createElement('span')\n element.classList.add('inline-block-container')\n\n return element\n }\n\n decorate(editor: LexicalEditor, config: EditorConfig): JSX.Element {\n return <InlineBlockComponent formData={this.getFields()} nodeKey={this.getKey()} />\n }\n\n exportDOM(): DOMExportOutput {\n const element = document.createElement('span')\n element.classList.add('inline-block-container')\n\n const text = document.createTextNode(this.getTextContent())\n element.append(text)\n return { element }\n }\n\n exportJSON(): SerializedInlineBlockNode {\n return {\n type: 'inlineBlock',\n fields: this.getFields(),\n version: 1,\n }\n }\n\n getFields(): InlineBlockFields {\n return this.getLatest().__fields\n }\n\n getTextContent(): string {\n return `Block Field`\n }\n\n isInline() {\n return true\n }\n\n setFields(fields: InlineBlockFields): void {\n const fieldsCopy = deepCopyObjectSimple(fields)\n\n const writable = this.getWritable()\n writable.__fields = fieldsCopy\n }\n\n updateDOM(): boolean {\n return false\n }\n}\n\nexport function $createInlineBlockNode(fields: Exclude<InlineBlockFields, 'id'>): InlineBlockNode {\n return new InlineBlockNode({\n fields: {\n ...fields,\n id: fields?.id || new ObjectID.default().toHexString(),\n },\n })\n}\n\nexport function $isInlineBlockNode(\n node: InlineBlockNode | LexicalNode | null | undefined,\n): node is InlineBlockNode {\n return node instanceof InlineBlockNode\n}\n"],"names":["ObjectID","DecoratorNode","deepCopyObjectSimple","React","InlineBlockComponent","lazy","then","module","default","InlineBlockNode","__fields","constructor","fields","key","clone","node","__key","getType","importDOM","importJSON","serializedNode","$createInlineBlockNode","isInline","canIndent","createDOM","element","document","createElement","classList","add","decorate","editor","config","formData","getFields","nodeKey","getKey","exportDOM","text","createTextNode","getTextContent","append","exportJSON","type","version","getLatest","setFields","fieldsCopy","writable","getWritable","updateDOM","id","toHexString","$isInlineBlockNode"],"mappings":";AAWA,OAAOA,cAAc,gBAAe;AACpC,SAASC,aAAa,QAAQ,UAAS;AACvC,SAASC,oBAAoB,QAAQ,iBAAgB;AACrD,OAAOC,WAAyB,QAAO;AAUvC,MAAMC,qCAAuBD,MAAME,IAAI,CAAC,IACtC,MAAM,CAAC,+BAA+BC,IAAI,CAAC,CAACC,SAAY,CAAA;YACtDC,SAASD,OAAOH,oBAAoB;QACtC,CAAA;AAYF,OAAO,MAAMK,wBAAwBR;IACnCS,SAA2B;IAE3BC,YAAY,EAAEC,MAAM,EAAEC,GAAG,EAAgD,CAAE;QACzE,KAAK,CAACA;QACN,IAAI,CAACH,QAAQ,GAAGE;IAClB;IAEA,OAAOE,MAAMC,IAAqB,EAAmB;QACnD,OAAO,IAAIN,gBAAgB;YACzBG,QAAQG,KAAKL,QAAQ;YACrBG,KAAKE,KAAKC,KAAK;QACjB;IACF;IAEA,OAAOC,UAAkB;QACvB,OAAO;IACT;IAEA,OAAOC,YAAqD;QAC1D,OAAO,CAAC;IACV;IAEA,OAAOC,WAAWC,cAAyC,EAAmB;QAC5E,MAAML,OAAOM,uBAAuBD,eAAeR,MAAM;QACzD,OAAOG;IACT;IAEA,OAAOO,WAAkB;QACvB,OAAO;IACT;IACAC,YAAY;QACV,OAAO;IACT;IAEAC,YAAY;QACV,MAAMC,UAAUC,SAASC,aAAa,CAAC;QACvCF,QAAQG,SAAS,CAACC,GAAG,CAAC;QAEtB,OAAOJ;IACT;IAEAK,SAASC,MAAqB,EAAEC,MAAoB,EAAe;QACjE,qBAAO,KAAC5B;YAAqB6B,UAAU,IAAI,CAACC,SAAS;YAAIC,SAAS,IAAI,CAACC,MAAM;;IAC/E;IAEAC,YAA6B;QAC3B,MAAMZ,UAAUC,SAASC,aAAa,CAAC;QACvCF,QAAQG,SAAS,CAACC,GAAG,CAAC;QAEtB,MAAMS,OAAOZ,SAASa,cAAc,CAAC,IAAI,CAACC,cAAc;QACxDf,QAAQgB,MAAM,CAACH;QACf,OAAO;YAAEb;QAAQ;IACnB;IAEAiB,aAAwC;QACtC,OAAO;YACLC,MAAM;YACN/B,QAAQ,IAAI,CAACsB,SAAS;YACtBU,SAAS;QACX;IACF;IAEAV,YAA+B;QAC7B,OAAO,IAAI,CAACW,SAAS,GAAGnC,QAAQ;IAClC;IAEA8B,iBAAyB;QACvB,OAAO,CAAC,WAAW,CAAC;IACtB;IAEAlB,WAAW;QACT,OAAO;IACT;IAEAwB,UAAUlC,MAAyB,EAAQ;QACzC,MAAMmC,aAAa7C,qBAAqBU;QAExC,MAAMoC,WAAW,IAAI,CAACC,WAAW;QACjCD,SAAStC,QAAQ,GAAGqC;IACtB;IAEAG,YAAqB;QACnB,OAAO;IACT;AACF;AAEA,OAAO,SAAS7B,uBAAuBT,MAAwC;IAC7E,OAAO,IAAIH,gBAAgB;QACzBG,QAAQ;YACN,GAAGA,MAAM;YACTuC,IAAIvC,QAAQuC,MAAM,IAAInD,SAASQ,OAAO,GAAG4C,WAAW;QACtD;IACF;AACF;AAEA,OAAO,SAASC,mBACdtC,IAAsD;IAEtD,OAAOA,gBAAgBN;AACzB"}
@@ -1,4 +1,9 @@
1
1
  import type { LexicalCommand } from 'lexical';
2
2
  import type { InsertBlockPayload } from './index.js';
3
3
  export declare const INSERT_BLOCK_COMMAND: LexicalCommand<InsertBlockPayload>;
4
+ export declare const INSERT_INLINE_BLOCK_COMMAND: LexicalCommand<Partial<InsertBlockPayload>>;
5
+ export declare const OPEN_INLINE_BLOCK_DRAWER_COMMAND: LexicalCommand<{
6
+ fields: Partial<InsertBlockPayload>;
7
+ nodeKey?: string;
8
+ }>;
4
9
  //# sourceMappingURL=commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../src/features/blocks/plugin/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAI7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD,eAAO,MAAM,oBAAoB,EAAE,cAAc,CAAC,kBAAkB,CAC7B,CAAA"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../src/features/blocks/plugin/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAI7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD,eAAO,MAAM,oBAAoB,EAAE,cAAc,CAAC,kBAAkB,CAC7B,CAAA;AAEvC,eAAO,MAAM,2BAA2B,EAAE,cAAc,CAAC,OAAO,CAAC,kBAAkB,CAAC,CACtC,CAAA;AAE9C,eAAO,MAAM,gCAAgC,EAAE,cAAc,CAAC;IAC5D,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACnC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAqD,CAAA"}
@@ -1,4 +1,6 @@
1
1
  import { createCommand } from 'lexical';
2
2
  export const INSERT_BLOCK_COMMAND = createCommand('INSERT_BLOCK_COMMAND');
3
+ export const INSERT_INLINE_BLOCK_COMMAND = createCommand('INSERT_INLINE_BLOCK_COMMAND');
4
+ export const OPEN_INLINE_BLOCK_DRAWER_COMMAND = createCommand('OPEN_INLINE_BLOCK_DRAWER_COMMAND');
3
5
 
4
6
  //# sourceMappingURL=commands.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/blocks/plugin/commands.ts"],"sourcesContent":["import type { LexicalCommand } from 'lexical'\n\nimport { createCommand } from 'lexical'\n\nimport type { InsertBlockPayload } from './index.js'\n\nexport const INSERT_BLOCK_COMMAND: LexicalCommand<InsertBlockPayload> =\n createCommand('INSERT_BLOCK_COMMAND')\n"],"names":["createCommand","INSERT_BLOCK_COMMAND"],"mappings":"AAEA,SAASA,aAAa,QAAQ,UAAS;AAIvC,OAAO,MAAMC,uBACXD,cAAc,wBAAuB"}
1
+ {"version":3,"sources":["../../../../src/features/blocks/plugin/commands.ts"],"sourcesContent":["import type { LexicalCommand } from 'lexical'\n\nimport { createCommand } from 'lexical'\n\nimport type { InsertBlockPayload } from './index.js'\n\nexport const INSERT_BLOCK_COMMAND: LexicalCommand<InsertBlockPayload> =\n createCommand('INSERT_BLOCK_COMMAND')\n\nexport const INSERT_INLINE_BLOCK_COMMAND: LexicalCommand<Partial<InsertBlockPayload>> =\n createCommand('INSERT_INLINE_BLOCK_COMMAND')\n\nexport const OPEN_INLINE_BLOCK_DRAWER_COMMAND: LexicalCommand<{\n fields: Partial<InsertBlockPayload>\n nodeKey?: string\n}> = createCommand('OPEN_INLINE_BLOCK_DRAWER_COMMAND')\n"],"names":["createCommand","INSERT_BLOCK_COMMAND","INSERT_INLINE_BLOCK_COMMAND","OPEN_INLINE_BLOCK_DRAWER_COMMAND"],"mappings":"AAEA,SAASA,aAAa,QAAQ,UAAS;AAIvC,OAAO,MAAMC,uBACXD,cAAc,wBAAuB;AAEvC,OAAO,MAAME,8BACXF,cAAc,+BAA8B;AAE9C,OAAO,MAAMG,mCAGRH,cAAc,oCAAmC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/blocks/plugin/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAMzD,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;AAE3D,eAAO,MAAM,YAAY,EAAE,eAAe,CAAC,wBAAwB,CA8ClE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/blocks/plugin/index.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAwB,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACjF,OAAO,KAAK,EAAE,wBAAwB,EAAe,MAAM,sBAAsB,CAAA;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAazD,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;AAI3D,eAAO,MAAM,YAAY,EAAE,eAAe,CAAC,wBAAwB,CAyIlE,CAAA"}
@@ -1,14 +1,26 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js';
4
- import { $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils';
5
- import { $getPreviousSelection, $getSelection, $isParagraphNode, $isRangeSelection, COMMAND_PRIORITY_EDITOR } from 'lexical';
6
- import React, { useEffect } from 'react';
7
- import { BlocksDrawerComponent } from '../drawer/index.js';
4
+ import { $insertNodeToNearestRoot, $wrapNodeInElement, mergeRegister } from '@lexical/utils';
5
+ import { getTranslation } from '@payloadcms/translations';
6
+ import { useModal, useTranslation } from '@payloadcms/ui';
7
+ import { $createParagraphNode, $getNodeByKey, $getPreviousSelection, $getSelection, $insertNodes, $isParagraphNode, $isRangeSelection, $isRootOrShadowRoot, COMMAND_PRIORITY_EDITOR } from 'lexical';
8
+ import React, { useEffect, useState } from 'react';
9
+ import { useEditorConfigContext } from '../../../lexical/config/client/EditorConfigProvider.js';
10
+ import { FieldsDrawer } from '../../../utilities/fieldsDrawer/Drawer.js';
8
11
  import { $createBlockNode, BlockNode } from '../nodes/BlocksNode.js';
9
- import { INSERT_BLOCK_COMMAND } from './commands.js';
12
+ import { $createInlineBlockNode } from '../nodes/InlineBlocksNode.js';
13
+ import { INSERT_BLOCK_COMMAND, INSERT_INLINE_BLOCK_COMMAND, OPEN_INLINE_BLOCK_DRAWER_COMMAND } from './commands.js';
14
+ const drawerSlug = 'lexical-inlineBlocks-create';
10
15
  export const BlocksPlugin = ()=>{
11
16
  const [editor] = useLexicalComposerContext();
17
+ const { closeModal, toggleModal } = useModal();
18
+ const [blockFields, setBlockFields] = useState(null);
19
+ const [blockType, setBlockType] = useState('');
20
+ const [targetNodeKey, setTargetNodeKey] = useState(null);
21
+ const { i18n, t } = useTranslation();
22
+ const { editorConfig } = useEditorConfigContext();
23
+ const reducedBlock = editorConfig?.resolvedFeatureMap?.get('blocks')?.sanitizedClientFeatureProps?.reducedInlineBlocks?.find((block)=>block.slug === blockFields?.blockType);
12
24
  useEffect(()=>{
13
25
  if (!editor.hasNodes([
14
26
  BlockNode
@@ -32,11 +44,68 @@ export const BlocksPlugin = ()=>{
32
44
  }
33
45
  });
34
46
  return true;
47
+ }, COMMAND_PRIORITY_EDITOR), editor.registerCommand(INSERT_INLINE_BLOCK_COMMAND, (fields)=>{
48
+ if (targetNodeKey) {
49
+ const node = $getNodeByKey(targetNodeKey);
50
+ if (!node) {
51
+ return false;
52
+ }
53
+ node.setFields(fields);
54
+ setTargetNodeKey(null);
55
+ return true;
56
+ }
57
+ const inlineBlockNode = $createInlineBlockNode(fields);
58
+ $insertNodes([
59
+ inlineBlockNode
60
+ ]);
61
+ if ($isRootOrShadowRoot(inlineBlockNode.getParentOrThrow())) {
62
+ $wrapNodeInElement(inlineBlockNode, $createParagraphNode).selectEnd();
63
+ }
64
+ return true;
65
+ }, COMMAND_PRIORITY_EDITOR), editor.registerCommand(OPEN_INLINE_BLOCK_DRAWER_COMMAND, ({ fields, nodeKey })=>{
66
+ setBlockFields(fields ?? null);
67
+ setTargetNodeKey(nodeKey ?? null);
68
+ setBlockType(fields?.blockType ?? '');
69
+ if (nodeKey) {
70
+ toggleModal(drawerSlug);
71
+ return true;
72
+ }
73
+ let rangeSelection = null;
74
+ editor.getEditorState().read(()=>{
75
+ const selection = $getSelection();
76
+ if ($isRangeSelection(selection)) {
77
+ rangeSelection = selection;
78
+ }
79
+ });
80
+ if (rangeSelection) {
81
+ //setLastSelection(rangeSelection)
82
+ toggleModal(drawerSlug);
83
+ }
84
+ return true;
35
85
  }, COMMAND_PRIORITY_EDITOR));
36
86
  }, [
37
- editor
87
+ editor,
88
+ targetNodeKey,
89
+ toggleModal
38
90
  ]);
39
- return /*#__PURE__*/ _jsx(BlocksDrawerComponent, {});
91
+ const blockDisplayName = reducedBlock?.labels?.singular ? getTranslation(reducedBlock?.labels?.singular, i18n) : reducedBlock?.slug;
92
+ return /*#__PURE__*/ _jsx(FieldsDrawer, {
93
+ data: blockFields,
94
+ drawerSlug: drawerSlug,
95
+ drawerTitle: t(`lexical:blocks:inlineBlocks:${blockFields?.id ? 'edit' : 'create'}`, {
96
+ label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label')
97
+ }),
98
+ featureKey: "blocks",
99
+ handleDrawerSubmit: (_fields, data)=>{
100
+ closeModal(drawerSlug);
101
+ if (!data) {
102
+ return;
103
+ }
104
+ data.blockType = blockType;
105
+ editor.dispatchCommand(INSERT_INLINE_BLOCK_COMMAND, data);
106
+ },
107
+ schemaPathSuffix: blockFields?.blockType
108
+ });
40
109
  };
41
110
 
42
111
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/blocks/plugin/index.tsx"],"sourcesContent":["'use client'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils'\nimport {\n $getPreviousSelection,\n $getSelection,\n $isParagraphNode,\n $isRangeSelection,\n COMMAND_PRIORITY_EDITOR,\n} from 'lexical'\nimport React, { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../typesClient.js'\nimport type { BlocksFeatureClientProps } from '../feature.client.js'\nimport type { BlockFields } from '../nodes/BlocksNode.js'\n\nimport { BlocksDrawerComponent } from '../drawer/index.js'\nimport { $createBlockNode, BlockNode } from '../nodes/BlocksNode.js'\nimport { INSERT_BLOCK_COMMAND } from './commands.js'\n\nexport type InsertBlockPayload = Exclude<BlockFields, 'id'>\n\nexport const BlocksPlugin: PluginComponent<BlocksFeatureClientProps> = () => {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n if (!editor.hasNodes([BlockNode])) {\n throw new Error('BlocksPlugin: BlocksNode not registered on editor')\n }\n\n return mergeRegister(\n editor.registerCommand<InsertBlockPayload>(\n INSERT_BLOCK_COMMAND,\n (payload: InsertBlockPayload) => {\n editor.update(() => {\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n const blockNode = $createBlockNode(payload)\n // Insert blocks node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(blockNode)\n\n const { focus } = selection\n const focusNode = focus.getNode()\n\n // First, delete currently selected node if it's an empty paragraph and if there are sufficient\n // paragraph nodes (more than 1) left in the parent node, so that we don't \"trap\" the user\n if (\n $isParagraphNode(focusNode) &&\n focusNode.getTextContentSize() === 0 &&\n focusNode\n .getParent()\n .getChildren()\n .filter((node) => $isParagraphNode(node)).length > 1\n ) {\n focusNode.remove()\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n )\n }, [editor])\n\n return <BlocksDrawerComponent />\n}\n"],"names":["useLexicalComposerContext","$insertNodeToNearestRoot","mergeRegister","$getPreviousSelection","$getSelection","$isParagraphNode","$isRangeSelection","COMMAND_PRIORITY_EDITOR","React","useEffect","BlocksDrawerComponent","$createBlockNode","BlockNode","INSERT_BLOCK_COMMAND","BlocksPlugin","editor","hasNodes","Error","registerCommand","payload","update","selection","blockNode","focus","focusNode","getNode","getTextContentSize","getParent","getChildren","filter","node","length","remove"],"mappings":"AAAA;;AACA,SAASA,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,wBAAwB,EAAEC,aAAa,QAAQ,iBAAgB;AACxE,SACEC,qBAAqB,EACrBC,aAAa,EACbC,gBAAgB,EAChBC,iBAAiB,EACjBC,uBAAuB,QAClB,UAAS;AAChB,OAAOC,SAASC,SAAS,QAAQ,QAAO;AAMxC,SAASC,qBAAqB,QAAQ,qBAAoB;AAC1D,SAASC,gBAAgB,EAAEC,SAAS,QAAQ,yBAAwB;AACpE,SAASC,oBAAoB,QAAQ,gBAAe;AAIpD,OAAO,MAAMC,eAA0D;IACrE,MAAM,CAACC,OAAO,GAAGf;IAEjBS,UAAU;QACR,IAAI,CAACM,OAAOC,QAAQ,CAAC;YAACJ;SAAU,GAAG;YACjC,MAAM,IAAIK,MAAM;QAClB;QAEA,OAAOf,cACLa,OAAOG,eAAe,CACpBL,sBACA,CAACM;YACCJ,OAAOK,MAAM,CAAC;gBACZ,MAAMC,YAAYjB,mBAAmBD;gBAErC,IAAIG,kBAAkBe,YAAY;oBAChC,MAAMC,YAAYX,iBAAiBQ;oBACnC,8HAA8H;oBAC9HlB,yBAAyBqB;oBAEzB,MAAM,EAAEC,KAAK,EAAE,GAAGF;oBAClB,MAAMG,YAAYD,MAAME,OAAO;oBAE/B,+FAA+F;oBAC/F,0FAA0F;oBAC1F,IACEpB,iBAAiBmB,cACjBA,UAAUE,kBAAkB,OAAO,KACnCF,UACGG,SAAS,GACTC,WAAW,GACXC,MAAM,CAAC,CAACC,OAASzB,iBAAiByB,OAAOC,MAAM,GAAG,GACrD;wBACAP,UAAUQ,MAAM;oBAClB;gBACF;YACF;YAEA,OAAO;QACT,GACAzB;IAGN,GAAG;QAACQ;KAAO;IAEX,qBAAO,KAACL;AACV,EAAC"}
1
+ {"version":3,"sources":["../../../../src/features/blocks/plugin/index.tsx"],"sourcesContent":["'use client'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $insertNodeToNearestRoot, $wrapNodeInElement, mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useModal, useTranslation } from '@payloadcms/ui'\nimport {\n $createParagraphNode,\n $getNodeByKey,\n $getPreviousSelection,\n $getSelection,\n $insertNodes,\n $isParagraphNode,\n $isRangeSelection,\n $isRootOrShadowRoot,\n COMMAND_PRIORITY_EDITOR,\n type RangeSelection,\n} from 'lexical'\nimport React, { useEffect, useState } from 'react'\n\nimport type { ClientComponentProps, PluginComponent } from '../../typesClient.js'\nimport type { BlocksFeatureClientProps, ClientBlock } from '../feature.client.js'\nimport type { BlockFields } from '../nodes/BlocksNode.js'\nimport type { InlineBlockNode } from '../nodes/InlineBlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../lexical/config/client/EditorConfigProvider.js'\nimport { FieldsDrawer } from '../../../utilities/fieldsDrawer/Drawer.js'\nimport { $createBlockNode, BlockNode } from '../nodes/BlocksNode.js'\nimport { $createInlineBlockNode } from '../nodes/InlineBlocksNode.js'\nimport {\n INSERT_BLOCK_COMMAND,\n INSERT_INLINE_BLOCK_COMMAND,\n OPEN_INLINE_BLOCK_DRAWER_COMMAND,\n} from './commands.js'\n\nexport type InsertBlockPayload = Exclude<BlockFields, 'id'>\n\nconst drawerSlug = 'lexical-inlineBlocks-create'\n\nexport const BlocksPlugin: PluginComponent<BlocksFeatureClientProps> = () => {\n const [editor] = useLexicalComposerContext()\n const { closeModal, toggleModal } = useModal()\n const [blockFields, setBlockFields] = useState<BlockFields>(null)\n const [blockType, setBlockType] = useState<string>('' as any)\n const [targetNodeKey, setTargetNodeKey] = useState<null | string>(null)\n const { i18n, t } = useTranslation<string, any>()\n\n const { editorConfig } = useEditorConfigContext()\n\n const reducedBlock: ClientBlock = (\n editorConfig?.resolvedFeatureMap?.get('blocks')\n ?.sanitizedClientFeatureProps as ClientComponentProps<BlocksFeatureClientProps>\n )?.reducedInlineBlocks?.find((block) => block.slug === blockFields?.blockType)\n\n useEffect(() => {\n if (!editor.hasNodes([BlockNode])) {\n throw new Error('BlocksPlugin: BlocksNode not registered on editor')\n }\n\n return mergeRegister(\n editor.registerCommand<InsertBlockPayload>(\n INSERT_BLOCK_COMMAND,\n (payload: InsertBlockPayload) => {\n editor.update(() => {\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n const blockNode = $createBlockNode(payload)\n // Insert blocks node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(blockNode)\n\n const { focus } = selection\n const focusNode = focus.getNode()\n\n // First, delete currently selected node if it's an empty paragraph and if there are sufficient\n // paragraph nodes (more than 1) left in the parent node, so that we don't \"trap\" the user\n if (\n $isParagraphNode(focusNode) &&\n focusNode.getTextContentSize() === 0 &&\n focusNode\n .getParent()\n .getChildren()\n .filter((node) => $isParagraphNode(node)).length > 1\n ) {\n focusNode.remove()\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n editor.registerCommand(\n INSERT_INLINE_BLOCK_COMMAND,\n (fields) => {\n if (targetNodeKey) {\n const node: InlineBlockNode = $getNodeByKey(targetNodeKey)\n\n if (!node) {\n return false\n }\n\n node.setFields(fields as BlockFields)\n\n setTargetNodeKey(null)\n return true\n }\n\n const inlineBlockNode = $createInlineBlockNode(fields as BlockFields)\n $insertNodes([inlineBlockNode])\n if ($isRootOrShadowRoot(inlineBlockNode.getParentOrThrow())) {\n $wrapNodeInElement(inlineBlockNode, $createParagraphNode).selectEnd()\n }\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n editor.registerCommand(\n OPEN_INLINE_BLOCK_DRAWER_COMMAND,\n ({ fields, nodeKey }) => {\n setBlockFields((fields as BlockFields) ?? null)\n setTargetNodeKey(nodeKey ?? null)\n setBlockType(fields?.blockType ?? ('' as any))\n\n if (nodeKey) {\n toggleModal(drawerSlug)\n return true\n }\n\n let rangeSelection: RangeSelection | null = null\n\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n rangeSelection = selection\n }\n })\n\n if (rangeSelection) {\n //setLastSelection(rangeSelection)\n toggleModal(drawerSlug)\n }\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n )\n }, [editor, targetNodeKey, toggleModal])\n\n const blockDisplayName = reducedBlock?.labels?.singular\n ? getTranslation(reducedBlock?.labels?.singular, i18n)\n : reducedBlock?.slug\n\n return (\n <FieldsDrawer\n data={blockFields}\n drawerSlug={drawerSlug}\n drawerTitle={t(`lexical:blocks:inlineBlocks:${blockFields?.id ? 'edit' : 'create'}`, {\n label: blockDisplayName ?? t('lexical:blocks:inlineBlocks:label'),\n })}\n featureKey=\"blocks\"\n handleDrawerSubmit={(_fields, data) => {\n closeModal(drawerSlug)\n if (!data) {\n return\n }\n\n data.blockType = blockType\n\n editor.dispatchCommand(INSERT_INLINE_BLOCK_COMMAND, data)\n }}\n schemaPathSuffix={blockFields?.blockType}\n />\n )\n}\n"],"names":["useLexicalComposerContext","$insertNodeToNearestRoot","$wrapNodeInElement","mergeRegister","getTranslation","useModal","useTranslation","$createParagraphNode","$getNodeByKey","$getPreviousSelection","$getSelection","$insertNodes","$isParagraphNode","$isRangeSelection","$isRootOrShadowRoot","COMMAND_PRIORITY_EDITOR","React","useEffect","useState","useEditorConfigContext","FieldsDrawer","$createBlockNode","BlockNode","$createInlineBlockNode","INSERT_BLOCK_COMMAND","INSERT_INLINE_BLOCK_COMMAND","OPEN_INLINE_BLOCK_DRAWER_COMMAND","drawerSlug","BlocksPlugin","editor","closeModal","toggleModal","blockFields","setBlockFields","blockType","setBlockType","targetNodeKey","setTargetNodeKey","i18n","t","editorConfig","reducedBlock","resolvedFeatureMap","get","sanitizedClientFeatureProps","reducedInlineBlocks","find","block","slug","hasNodes","Error","registerCommand","payload","update","selection","blockNode","focus","focusNode","getNode","getTextContentSize","getParent","getChildren","filter","node","length","remove","fields","setFields","inlineBlockNode","getParentOrThrow","selectEnd","nodeKey","rangeSelection","getEditorState","read","blockDisplayName","labels","singular","data","drawerTitle","id","label","featureKey","handleDrawerSubmit","_fields","dispatchCommand","schemaPathSuffix"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
+ import type { Block } from 'payload';
1
2
  import type { NodeValidation } from '../typesServer.js';
2
- import type { BlocksFeatureProps } from './feature.server.js';
3
3
  import type { SerializedBlockNode } from './nodes/BlocksNode.js';
4
- export declare const blockValidationHOC: (props: BlocksFeatureProps) => NodeValidation<SerializedBlockNode>;
4
+ import type { SerializedInlineBlockNode } from './nodes/InlineBlocksNode.js';
5
+ export declare const blockValidationHOC: (blocks: Block[]) => NodeValidation<SerializedBlockNode | SerializedInlineBlockNode>;
5
6
  //# sourceMappingURL=validate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/features/blocks/validate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,EAAe,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE7E,eAAO,MAAM,kBAAkB,UACtB,kBAAkB,KACxB,cAAc,CAAC,mBAAmB,CA2CpC,CAAA"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/features/blocks/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAIpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAe,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AAE5E,eAAO,MAAM,kBAAkB,WACrB,KAAK,EAAE,KACd,cAAc,CAAC,mBAAmB,GAAG,yBAAyB,CA2ChE,CAAA"}
@@ -1,10 +1,10 @@
1
1
  import { buildStateFromSchema } from '@payloadcms/ui/forms/buildStateFromSchema';
2
- export const blockValidationHOC = (props)=>{
2
+ export const blockValidationHOC = (blocks)=>{
3
3
  return async ({ node, validation })=>{
4
4
  const blockFieldData = node.fields ?? {};
5
5
  const { options: { id, operation, preferences, req } } = validation;
6
6
  // find block
7
- const block = props.blocks.find((block)=>block.slug === blockFieldData.blockType);
7
+ const block = blocks.find((block)=>block.slug === blockFieldData.blockType);
8
8
  // validate block
9
9
  if (!block) {
10
10
  return 'Block not found';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/features/blocks/validate.ts"],"sourcesContent":["import { buildStateFromSchema } from '@payloadcms/ui/forms/buildStateFromSchema'\n\nimport type { NodeValidation } from '../typesServer.js'\nimport type { BlocksFeatureProps } from './feature.server.js'\nimport type { BlockFields, SerializedBlockNode } from './nodes/BlocksNode.js'\n\nexport const blockValidationHOC = (\n props: BlocksFeatureProps,\n): NodeValidation<SerializedBlockNode> => {\n return async ({ node, validation }) => {\n const blockFieldData = node.fields ?? ({} as BlockFields)\n\n const {\n options: { id, operation, preferences, req },\n } = validation\n\n // find block\n const block = props.blocks.find((block) => block.slug === blockFieldData.blockType)\n\n // validate block\n if (!block) {\n return 'Block not found'\n }\n\n /**\n * Run buildStateFromSchema as that properly validates block and block sub-fields\n */\n\n const result = await buildStateFromSchema({\n id,\n data: blockFieldData,\n fieldSchema: block.fields,\n operation: operation === 'create' || operation === 'update' ? operation : 'update',\n preferences,\n req,\n siblingData: blockFieldData,\n })\n\n let errorPaths = []\n for (const fieldKey in result) {\n if (result[fieldKey].errorPaths) {\n errorPaths = errorPaths.concat(result[fieldKey].errorPaths)\n }\n }\n\n if (errorPaths.length) {\n return 'The following fields are invalid: ' + errorPaths.join(', ')\n }\n\n return true\n }\n}\n"],"names":["buildStateFromSchema","blockValidationHOC","props","node","validation","blockFieldData","fields","options","id","operation","preferences","req","block","blocks","find","slug","blockType","result","data","fieldSchema","siblingData","errorPaths","fieldKey","concat","length","join"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,4CAA2C;AAMhF,OAAO,MAAMC,qBAAqB,CAChCC;IAEA,OAAO,OAAO,EAAEC,IAAI,EAAEC,UAAU,EAAE;QAChC,MAAMC,iBAAiBF,KAAKG,MAAM,IAAK,CAAC;QAExC,MAAM,EACJC,SAAS,EAAEC,EAAE,EAAEC,SAAS,EAAEC,WAAW,EAAEC,GAAG,EAAE,EAC7C,GAAGP;QAEJ,aAAa;QACb,MAAMQ,QAAQV,MAAMW,MAAM,CAACC,IAAI,CAAC,CAACF,QAAUA,MAAMG,IAAI,KAAKV,eAAeW,SAAS;QAElF,iBAAiB;QACjB,IAAI,CAACJ,OAAO;YACV,OAAO;QACT;QAEA;;KAEC,GAED,MAAMK,SAAS,MAAMjB,qBAAqB;YACxCQ;YACAU,MAAMb;YACNc,aAAaP,MAAMN,MAAM;YACzBG,WAAWA,cAAc,YAAYA,cAAc,WAAWA,YAAY;YAC1EC;YACAC;YACAS,aAAaf;QACf;QAEA,IAAIgB,aAAa,EAAE;QACnB,IAAK,MAAMC,YAAYL,OAAQ;YAC7B,IAAIA,MAAM,CAACK,SAAS,CAACD,UAAU,EAAE;gBAC/BA,aAAaA,WAAWE,MAAM,CAACN,MAAM,CAACK,SAAS,CAACD,UAAU;YAC5D;QACF;QAEA,IAAIA,WAAWG,MAAM,EAAE;YACrB,OAAO,uCAAuCH,WAAWI,IAAI,CAAC;QAChE;QAEA,OAAO;IACT;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../src/features/blocks/validate.ts"],"sourcesContent":["import type { Block } from 'payload'\n\nimport { buildStateFromSchema } from '@payloadcms/ui/forms/buildStateFromSchema'\n\nimport type { NodeValidation } from '../typesServer.js'\nimport type { BlockFields, SerializedBlockNode } from './nodes/BlocksNode.js'\nimport type { SerializedInlineBlockNode } from './nodes/InlineBlocksNode.js'\n\nexport const blockValidationHOC = (\n blocks: Block[],\n): NodeValidation<SerializedBlockNode | SerializedInlineBlockNode> => {\n return async ({ node, validation }) => {\n const blockFieldData = node.fields ?? ({} as BlockFields)\n\n const {\n options: { id, operation, preferences, req },\n } = validation\n\n // find block\n const block = blocks.find((block) => block.slug === blockFieldData.blockType)\n\n // validate block\n if (!block) {\n return 'Block not found'\n }\n\n /**\n * Run buildStateFromSchema as that properly validates block and block sub-fields\n */\n\n const result = await buildStateFromSchema({\n id,\n data: blockFieldData,\n fieldSchema: block.fields,\n operation: operation === 'create' || operation === 'update' ? operation : 'update',\n preferences,\n req,\n siblingData: blockFieldData,\n })\n\n let errorPaths = []\n for (const fieldKey in result) {\n if (result[fieldKey].errorPaths) {\n errorPaths = errorPaths.concat(result[fieldKey].errorPaths)\n }\n }\n\n if (errorPaths.length) {\n return 'The following fields are invalid: ' + errorPaths.join(', ')\n }\n\n return true\n }\n}\n"],"names":["buildStateFromSchema","blockValidationHOC","blocks","node","validation","blockFieldData","fields","options","id","operation","preferences","req","block","find","slug","blockType","result","data","fieldSchema","siblingData","errorPaths","fieldKey","concat","length","join"],"mappings":"AAEA,SAASA,oBAAoB,QAAQ,4CAA2C;AAMhF,OAAO,MAAMC,qBAAqB,CAChCC;IAEA,OAAO,OAAO,EAAEC,IAAI,EAAEC,UAAU,EAAE;QAChC,MAAMC,iBAAiBF,KAAKG,MAAM,IAAK,CAAC;QAExC,MAAM,EACJC,SAAS,EAAEC,EAAE,EAAEC,SAAS,EAAEC,WAAW,EAAEC,GAAG,EAAE,EAC7C,GAAGP;QAEJ,aAAa;QACb,MAAMQ,QAAQV,OAAOW,IAAI,CAAC,CAACD,QAAUA,MAAME,IAAI,KAAKT,eAAeU,SAAS;QAE5E,iBAAiB;QACjB,IAAI,CAACH,OAAO;YACV,OAAO;QACT;QAEA;;KAEC,GAED,MAAMI,SAAS,MAAMhB,qBAAqB;YACxCQ;YACAS,MAAMZ;YACNa,aAAaN,MAAMN,MAAM;YACzBG,WAAWA,cAAc,YAAYA,cAAc,WAAWA,YAAY;YAC1EC;YACAC;YACAQ,aAAad;QACf;QAEA,IAAIe,aAAa,EAAE;QACnB,IAAK,MAAMC,YAAYL,OAAQ;YAC7B,IAAIA,MAAM,CAACK,SAAS,CAACD,UAAU,EAAE;gBAC/BA,aAAaA,WAAWE,MAAM,CAACN,MAAM,CAACK,SAAS,CAACD,UAAU;YAC5D;QACF;QAEA,IAAIA,WAAWG,MAAM,EAAE;YACrB,OAAO,uCAAuCH,WAAWI,IAAI,CAAC;QAChE;QAEA,OAAO;IACT;AACF,EAAC"}
@@ -29,7 +29,7 @@ export const LinkFeature = createServerFeature({
29
29
  // the text field is not included in the node data.
30
30
  // Thus, for tasks like validation, we do not want to pass it a text field in the schema which will never have data.
31
31
  // Otherwise, it will cause a validation error (field is required).
32
- const sanitizedFieldsWithoutText = deepCopyObject(sanitizedFields).filter((field)=>field.name !== 'text');
32
+ const sanitizedFieldsWithoutText = deepCopyObject(sanitizedFields).filter((field)=>!('name' in field) || field.name !== 'text');
33
33
  return {
34
34
  ClientFeature: LinkFeatureClient,
35
35
  clientFeatureProps: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/features/link/feature.server.ts"],"sourcesContent":["import type { CollectionSlug, Config, Field, FieldAffectingData, SanitizedConfig } from 'payload'\n\nimport { sanitizeFields } from 'payload'\nimport { deepCopyObject } from 'payload/shared'\n\nimport type { ClientProps } from './feature.client.js'\n\n// eslint-disable-next-line payload/no-imports-from-exports-dir\nimport { LinkFeatureClient } from '../../exports/client/index.js'\nimport { createServerFeature } from '../../utilities/createServerFeature.js'\nimport { convertLexicalNodesToHTML } from '../converters/html/converter/index.js'\nimport { createNode } from '../typeUtilities.js'\nimport { linkPopulationPromiseHOC } from './graphQLPopulationPromise.js'\nimport { i18n } from './i18n.js'\nimport { LinkMarkdownTransformer } from './markdownTransformer.js'\nimport { AutoLinkNode } from './nodes/AutoLinkNode.js'\nimport { LinkNode } from './nodes/LinkNode.js'\nimport { transformExtraFields } from './plugins/floatingLinkEditor/utilities.js'\nimport { linkValidation } from './validate.js'\n\nexport type ExclusiveLinkCollectionsProps =\n | {\n /**\n * The collections that should be disabled for internal linking. Overrides the `enableRichTextLink` property in the collection config.\n * When this property is set, `enabledCollections` will not be available.\n **/\n disabledCollections?: CollectionSlug[]\n\n // Ensures that enabledCollections is not available when disabledCollections is set\n enabledCollections?: never\n }\n | {\n // Ensures that disabledCollections is not available when enabledCollections is set\n disabledCollections?: never\n\n /**\n * The collections that should be enabled for internal linking. Overrides the `enableRichTextLink` property in the collection config\n * When this property is set, `disabledCollections` will not be available.\n **/\n enabledCollections?: CollectionSlug[]\n }\n\nexport type LinkFeatureServerProps = {\n /**\n * A function or array defining additional fields for the link feature. These will be\n * displayed in the link editor drawer.\n */\n fields?:\n | ((args: {\n config: SanitizedConfig\n defaultFields: FieldAffectingData[]\n }) => (Field | FieldAffectingData)[])\n | Field[]\n /**\n * Sets a maximum population depth for the internal doc default field of link, regardless of the remaining depth when the field is reached.\n * This behaves exactly like the maxDepth properties of relationship and upload fields.\n *\n * {@link https://payloadcms.com/docs/getting-started/concepts#field-level-max-depth}\n */\n maxDepth?: number\n} & ExclusiveLinkCollectionsProps\n\nexport const LinkFeature = createServerFeature<\n LinkFeatureServerProps,\n LinkFeatureServerProps,\n ClientProps\n>({\n feature: async ({ config: _config, isRoot, props }) => {\n if (!props) {\n props = {}\n }\n const validRelationships = _config.collections.map((c) => c.slug) || []\n\n const _transformedFields = transformExtraFields(\n deepCopyObject(props.fields),\n _config,\n props.enabledCollections,\n props.disabledCollections,\n props.maxDepth,\n )\n\n const sanitizedFields = await sanitizeFields({\n config: _config as unknown as Config,\n fields: _transformedFields,\n requireFieldLevelRichTextEditor: isRoot,\n validRelationships,\n })\n props.fields = sanitizedFields\n\n // the text field is not included in the node data.\n // Thus, for tasks like validation, we do not want to pass it a text field in the schema which will never have data.\n // Otherwise, it will cause a validation error (field is required).\n const sanitizedFieldsWithoutText = deepCopyObject(sanitizedFields).filter(\n (field) => field.name !== 'text',\n )\n\n return {\n ClientFeature: LinkFeatureClient,\n clientFeatureProps: {\n disabledCollections: props.disabledCollections,\n enabledCollections: props.enabledCollections,\n } as ExclusiveLinkCollectionsProps,\n generateSchemaMap: () => {\n if (!sanitizedFields || !Array.isArray(sanitizedFields) || sanitizedFields.length === 0) {\n return null\n }\n\n const schemaMap = new Map<string, Field[]>()\n schemaMap.set('fields', sanitizedFields)\n\n return schemaMap\n },\n i18n,\n markdownTransformers: [LinkMarkdownTransformer],\n nodes: [\n createNode({\n converters: {\n html: {\n converter: async ({ converters, node, parent, req }) => {\n const childrenText = await convertLexicalNodesToHTML({\n converters,\n lexicalNodes: node.children,\n parent: {\n ...node,\n parent,\n },\n req,\n })\n\n const rel: string = node.fields.newTab ? ' rel=\"noopener noreferrer\"' : ''\n const target: string = node.fields.newTab ? ' target=\"_blank\"' : ''\n\n let href: string = node.fields.url\n if (node.fields.linkType === 'internal') {\n href =\n typeof node.fields.doc?.value === 'string'\n ? node.fields.doc?.value\n : node.fields.doc?.value?.id\n }\n\n return `<a href=\"${href}\"${target}${rel}>${childrenText}</a>`\n },\n nodeTypes: [AutoLinkNode.getType()],\n },\n },\n node: AutoLinkNode,\n // Since AutoLinkNodes are just internal links, they need no hooks or graphQL population promises\n validations: [linkValidation(props, sanitizedFieldsWithoutText)],\n }),\n createNode({\n converters: {\n html: {\n converter: async ({ converters, node, parent, req }) => {\n const childrenText = await convertLexicalNodesToHTML({\n converters,\n lexicalNodes: node.children,\n parent: {\n ...node,\n parent,\n },\n req,\n })\n\n const rel: string = node.fields.newTab ? ' rel=\"noopener noreferrer\"' : ''\n const target: string = node.fields.newTab ? ' target=\"_blank\"' : ''\n\n const href: string =\n node.fields.linkType === 'custom'\n ? node.fields.url\n : (node.fields.doc?.value as string)\n\n return `<a href=\"${href}\"${target}${rel}>${childrenText}</a>`\n },\n nodeTypes: [LinkNode.getType()],\n },\n },\n getSubFields: () => {\n return sanitizedFieldsWithoutText\n },\n getSubFieldsData: ({ node }) => {\n return node?.fields\n },\n graphQLPopulationPromises: [linkPopulationPromiseHOC(props)],\n node: LinkNode,\n validations: [linkValidation(props, sanitizedFieldsWithoutText)],\n }),\n ],\n sanitizedServerFeatureProps: props,\n }\n },\n key: 'link',\n})\n"],"names":["sanitizeFields","deepCopyObject","LinkFeatureClient","createServerFeature","convertLexicalNodesToHTML","createNode","linkPopulationPromiseHOC","i18n","LinkMarkdownTransformer","AutoLinkNode","LinkNode","transformExtraFields","linkValidation","LinkFeature","feature","config","_config","isRoot","props","validRelationships","collections","map","c","slug","_transformedFields","fields","enabledCollections","disabledCollections","maxDepth","sanitizedFields","requireFieldLevelRichTextEditor","sanitizedFieldsWithoutText","filter","field","name","ClientFeature","clientFeatureProps","generateSchemaMap","Array","isArray","length","schemaMap","Map","set","markdownTransformers","nodes","converters","html","converter","node","parent","req","childrenText","lexicalNodes","children","rel","newTab","target","href","url","linkType","doc","value","id","nodeTypes","getType","validations","getSubFields","getSubFieldsData","graphQLPopulationPromises","sanitizedServerFeatureProps","key"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/features/link/feature.server.ts"],"sourcesContent":["import type { CollectionSlug, Config, Field, FieldAffectingData, SanitizedConfig } from 'payload'\n\nimport { sanitizeFields } from 'payload'\nimport { deepCopyObject } from 'payload/shared'\n\nimport type { ClientProps } from './feature.client.js'\n\n// eslint-disable-next-line payload/no-imports-from-exports-dir\nimport { LinkFeatureClient } from '../../exports/client/index.js'\nimport { createServerFeature } from '../../utilities/createServerFeature.js'\nimport { convertLexicalNodesToHTML } from '../converters/html/converter/index.js'\nimport { createNode } from '../typeUtilities.js'\nimport { linkPopulationPromiseHOC } from './graphQLPopulationPromise.js'\nimport { i18n } from './i18n.js'\nimport { LinkMarkdownTransformer } from './markdownTransformer.js'\nimport { AutoLinkNode } from './nodes/AutoLinkNode.js'\nimport { LinkNode } from './nodes/LinkNode.js'\nimport { transformExtraFields } from './plugins/floatingLinkEditor/utilities.js'\nimport { linkValidation } from './validate.js'\n\nexport type ExclusiveLinkCollectionsProps =\n | {\n /**\n * The collections that should be disabled for internal linking. Overrides the `enableRichTextLink` property in the collection config.\n * When this property is set, `enabledCollections` will not be available.\n **/\n disabledCollections?: CollectionSlug[]\n\n // Ensures that enabledCollections is not available when disabledCollections is set\n enabledCollections?: never\n }\n | {\n // Ensures that disabledCollections is not available when enabledCollections is set\n disabledCollections?: never\n\n /**\n * The collections that should be enabled for internal linking. Overrides the `enableRichTextLink` property in the collection config\n * When this property is set, `disabledCollections` will not be available.\n **/\n enabledCollections?: CollectionSlug[]\n }\n\nexport type LinkFeatureServerProps = {\n /**\n * A function or array defining additional fields for the link feature. These will be\n * displayed in the link editor drawer.\n */\n fields?:\n | ((args: {\n config: SanitizedConfig\n defaultFields: FieldAffectingData[]\n }) => (Field | FieldAffectingData)[])\n | Field[]\n /**\n * Sets a maximum population depth for the internal doc default field of link, regardless of the remaining depth when the field is reached.\n * This behaves exactly like the maxDepth properties of relationship and upload fields.\n *\n * {@link https://payloadcms.com/docs/getting-started/concepts#field-level-max-depth}\n */\n maxDepth?: number\n} & ExclusiveLinkCollectionsProps\n\nexport const LinkFeature = createServerFeature<\n LinkFeatureServerProps,\n LinkFeatureServerProps,\n ClientProps\n>({\n feature: async ({ config: _config, isRoot, props }) => {\n if (!props) {\n props = {}\n }\n const validRelationships = _config.collections.map((c) => c.slug) || []\n\n const _transformedFields = transformExtraFields(\n deepCopyObject(props.fields),\n _config,\n props.enabledCollections,\n props.disabledCollections,\n props.maxDepth,\n )\n\n const sanitizedFields = await sanitizeFields({\n config: _config as unknown as Config,\n fields: _transformedFields,\n requireFieldLevelRichTextEditor: isRoot,\n validRelationships,\n })\n props.fields = sanitizedFields\n\n // the text field is not included in the node data.\n // Thus, for tasks like validation, we do not want to pass it a text field in the schema which will never have data.\n // Otherwise, it will cause a validation error (field is required).\n const sanitizedFieldsWithoutText = deepCopyObject(sanitizedFields).filter(\n (field) => !('name' in field) || field.name !== 'text',\n )\n\n return {\n ClientFeature: LinkFeatureClient,\n clientFeatureProps: {\n disabledCollections: props.disabledCollections,\n enabledCollections: props.enabledCollections,\n } as ExclusiveLinkCollectionsProps,\n generateSchemaMap: () => {\n if (!sanitizedFields || !Array.isArray(sanitizedFields) || sanitizedFields.length === 0) {\n return null\n }\n\n const schemaMap = new Map<string, Field[]>()\n schemaMap.set('fields', sanitizedFields)\n\n return schemaMap\n },\n i18n,\n markdownTransformers: [LinkMarkdownTransformer],\n nodes: [\n createNode({\n converters: {\n html: {\n converter: async ({ converters, node, parent, req }) => {\n const childrenText = await convertLexicalNodesToHTML({\n converters,\n lexicalNodes: node.children,\n parent: {\n ...node,\n parent,\n },\n req,\n })\n\n const rel: string = node.fields.newTab ? ' rel=\"noopener noreferrer\"' : ''\n const target: string = node.fields.newTab ? ' target=\"_blank\"' : ''\n\n let href: string = node.fields.url\n if (node.fields.linkType === 'internal') {\n href =\n typeof node.fields.doc?.value === 'string'\n ? node.fields.doc?.value\n : node.fields.doc?.value?.id\n }\n\n return `<a href=\"${href}\"${target}${rel}>${childrenText}</a>`\n },\n nodeTypes: [AutoLinkNode.getType()],\n },\n },\n node: AutoLinkNode,\n // Since AutoLinkNodes are just internal links, they need no hooks or graphQL population promises\n validations: [linkValidation(props, sanitizedFieldsWithoutText)],\n }),\n createNode({\n converters: {\n html: {\n converter: async ({ converters, node, parent, req }) => {\n const childrenText = await convertLexicalNodesToHTML({\n converters,\n lexicalNodes: node.children,\n parent: {\n ...node,\n parent,\n },\n req,\n })\n\n const rel: string = node.fields.newTab ? ' rel=\"noopener noreferrer\"' : ''\n const target: string = node.fields.newTab ? ' target=\"_blank\"' : ''\n\n const href: string =\n node.fields.linkType === 'custom'\n ? node.fields.url\n : (node.fields.doc?.value as string)\n\n return `<a href=\"${href}\"${target}${rel}>${childrenText}</a>`\n },\n nodeTypes: [LinkNode.getType()],\n },\n },\n getSubFields: () => {\n return sanitizedFieldsWithoutText\n },\n getSubFieldsData: ({ node }) => {\n return node?.fields\n },\n graphQLPopulationPromises: [linkPopulationPromiseHOC(props)],\n node: LinkNode,\n validations: [linkValidation(props, sanitizedFieldsWithoutText)],\n }),\n ],\n sanitizedServerFeatureProps: props,\n }\n },\n key: 'link',\n})\n"],"names":["sanitizeFields","deepCopyObject","LinkFeatureClient","createServerFeature","convertLexicalNodesToHTML","createNode","linkPopulationPromiseHOC","i18n","LinkMarkdownTransformer","AutoLinkNode","LinkNode","transformExtraFields","linkValidation","LinkFeature","feature","config","_config","isRoot","props","validRelationships","collections","map","c","slug","_transformedFields","fields","enabledCollections","disabledCollections","maxDepth","sanitizedFields","requireFieldLevelRichTextEditor","sanitizedFieldsWithoutText","filter","field","name","ClientFeature","clientFeatureProps","generateSchemaMap","Array","isArray","length","schemaMap","Map","set","markdownTransformers","nodes","converters","html","converter","node","parent","req","childrenText","lexicalNodes","children","rel","newTab","target","href","url","linkType","doc","value","id","nodeTypes","getType","validations","getSubFields","getSubFieldsData","graphQLPopulationPromises","sanitizedServerFeatureProps","key"],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import type { SerializedElementNode, SerializedLexicalNode, Spread } from 'lexical';
2
+ import type { JsonValue } from 'payload';
2
3
  export type LinkFields = {
3
- [key: string]: unknown;
4
+ [key: string]: JsonValue;
4
5
  doc: {
5
6
  relationTo: string;
6
7
  value: {
7
- [key: string]: unknown;
8
+ [key: string]: JsonValue;
8
9
  id: string;
9
10
  } | string;
10
11
  } | null;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/features/link/nodes/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAEnF,MAAM,MAAM,UAAU,GAAG;IAEvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;IACtB,GAAG,EAAE;QACH,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EACD;YAEE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;YACtB,EAAE,EAAE,MAAM,CAAA;SACX,GACD,MAAM,CAAA;KACX,GAAG,IAAI,CAAA;IACR,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC/B,MAAM,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,qBAAqB,GAAG,qBAAqB,IAAI,MAAM,CAC9F;IACE,MAAM,EAAE,UAAU,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;CACb,EACD,qBAAqB,CAAC,CAAC,CAAC,CACzB,CAAA;AACD,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,qBAAqB,GAAG,qBAAqB,IAAI;IAC5F,IAAI,EAAE,UAAU,CAAA;CACjB,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/features/link/nodes/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AACnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,MAAM,MAAM,UAAU,GAAG;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,GAAG,EAAE;QACH,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EACD;YAEE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;YACxB,EAAE,EAAE,MAAM,CAAA;SACX,GACD,MAAM,CAAA;KACX,GAAG,IAAI,CAAA;IACR,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC/B,MAAM,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,qBAAqB,GAAG,qBAAqB,IAAI,MAAM,CAC9F;IACE,MAAM,EAAE,UAAU,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;CACb,EACD,qBAAqB,CAAC,CAAC,CAAC,CACzB,CAAA;AACD,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,qBAAqB,GAAG,qBAAqB,IAAI;IAC5F,IAAI,EAAE,UAAU,CAAA;CACjB,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/link/nodes/types.ts"],"sourcesContent":["import type { SerializedElementNode, SerializedLexicalNode, Spread } from 'lexical'\n\nexport type LinkFields = {\n // unknown, custom fields:\n [key: string]: unknown\n doc: {\n relationTo: string\n value:\n | {\n // Actual doc data, populated in afterRead hook\n [key: string]: unknown\n id: string\n }\n | string\n } | null\n linkType: 'custom' | 'internal'\n newTab: boolean\n url: string\n}\n\nexport type SerializedLinkNode<T extends SerializedLexicalNode = SerializedLexicalNode> = Spread<\n {\n fields: LinkFields\n id?: string // optional if AutoLinkNode\n type: 'link'\n },\n SerializedElementNode<T>\n>\nexport type SerializedAutoLinkNode<T extends SerializedLexicalNode = SerializedLexicalNode> = {\n type: 'autolink'\n} & Omit<SerializedLinkNode<T>, 'id' | 'type'>\n"],"names":[],"mappings":"AA4BA,WAE8C"}
1
+ {"version":3,"sources":["../../../../src/features/link/nodes/types.ts"],"sourcesContent":["import type { SerializedElementNode, SerializedLexicalNode, Spread } from 'lexical'\nimport type { JsonValue } from 'payload'\n\nexport type LinkFields = {\n [key: string]: JsonValue\n doc: {\n relationTo: string\n value:\n | {\n // Actual doc data, populated in afterRead hook\n [key: string]: JsonValue\n id: string\n }\n | string\n } | null\n linkType: 'custom' | 'internal'\n newTab: boolean\n url: string\n}\n\nexport type SerializedLinkNode<T extends SerializedLexicalNode = SerializedLexicalNode> = Spread<\n {\n fields: LinkFields\n id?: string // optional if AutoLinkNode\n type: 'link'\n },\n SerializedElementNode<T>\n>\nexport type SerializedAutoLinkNode<T extends SerializedLexicalNode = SerializedLexicalNode> = {\n type: 'autolink'\n} & Omit<SerializedLinkNode<T>, 'id' | 'type'>\n"],"names":[],"mappings":"AA4BA,WAE8C"}
@@ -5,5 +5,5 @@ import type { CollectionSlug, Field, FieldAffectingData, SanitizedConfig } from
5
5
  export declare function transformExtraFields(customFieldSchema: ((args: {
6
6
  config: SanitizedConfig;
7
7
  defaultFields: FieldAffectingData[];
8
- }) => Field[]) | Field[], config: SanitizedConfig, enabledCollections?: CollectionSlug[], disabledCollections?: CollectionSlug[], maxDepth?: number): Field[];
8
+ }) => (Field | FieldAffectingData)[]) | Field[], config: SanitizedConfig, enabledCollections?: CollectionSlug[], disabledCollections?: CollectionSlug[], maxDepth?: number): Field[];
9
9
  //# sourceMappingURL=utilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../../../../src/features/link/plugins/floatingLinkEditor/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAIzF;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,iBAAiB,EACb,CAAC,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,aAAa,EAAE,kBAAkB,EAAE,CAAA;CAAE,KAAK,KAAK,EAAE,CAAC,GACrF,KAAK,EAAE,EACX,MAAM,EAAE,eAAe,EACvB,kBAAkB,CAAC,EAAE,cAAc,EAAE,EACrC,mBAAmB,CAAC,EAAE,cAAc,EAAE,EACtC,QAAQ,CAAC,EAAE,MAAM,GAChB,KAAK,EAAE,CAmBT"}
1
+ {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../../../../src/features/link/plugins/floatingLinkEditor/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAIzF;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,iBAAiB,EACb,CAAC,CAAC,IAAI,EAAE;IACN,MAAM,EAAE,eAAe,CAAA;IACvB,aAAa,EAAE,kBAAkB,EAAE,CAAA;CACpC,KAAK,CAAC,KAAK,GAAG,kBAAkB,CAAC,EAAE,CAAC,GACrC,KAAK,EAAE,EACX,MAAM,EAAE,eAAe,EACvB,kBAAkB,CAAC,EAAE,cAAc,EAAE,EACrC,mBAAmB,CAAC,EAAE,cAAc,EAAE,EACtC,QAAQ,CAAC,EAAE,MAAM,GAChB,KAAK,EAAE,CAmBT"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/features/link/plugins/floatingLinkEditor/utilities.ts"],"sourcesContent":["import type { CollectionSlug, Field, FieldAffectingData, SanitizedConfig } from 'payload'\n\nimport { getBaseFields } from '../../drawer/baseFields.js'\n\n/**\n * This function is run to enrich the basefields which every link has with potential, custom user-added fields.\n */\nexport function transformExtraFields(\n customFieldSchema:\n | ((args: { config: SanitizedConfig; defaultFields: FieldAffectingData[] }) => Field[])\n | Field[],\n config: SanitizedConfig,\n enabledCollections?: CollectionSlug[],\n disabledCollections?: CollectionSlug[],\n maxDepth?: number,\n): Field[] {\n const baseFields: FieldAffectingData[] = getBaseFields(\n config,\n enabledCollections,\n disabledCollections,\n maxDepth,\n )\n\n let fields: Field[]\n\n if (typeof customFieldSchema === 'function') {\n fields = customFieldSchema({ config, defaultFields: baseFields })\n } else if (Array.isArray(customFieldSchema)) {\n fields = customFieldSchema\n } else {\n fields = baseFields as Field[]\n }\n\n return fields\n}\n"],"names":["getBaseFields","transformExtraFields","customFieldSchema","config","enabledCollections","disabledCollections","maxDepth","baseFields","fields","defaultFields","Array","isArray"],"mappings":"AAEA,SAASA,aAAa,QAAQ,6BAA4B;AAE1D;;CAEC,GACD,OAAO,SAASC,qBACdC,iBAEW,EACXC,MAAuB,EACvBC,kBAAqC,EACrCC,mBAAsC,EACtCC,QAAiB;IAEjB,MAAMC,aAAmCP,cACvCG,QACAC,oBACAC,qBACAC;IAGF,IAAIE;IAEJ,IAAI,OAAON,sBAAsB,YAAY;QAC3CM,SAASN,kBAAkB;YAAEC;YAAQM,eAAeF;QAAW;IACjE,OAAO,IAAIG,MAAMC,OAAO,CAACT,oBAAoB;QAC3CM,SAASN;IACX,OAAO;QACLM,SAASD;IACX;IAEA,OAAOC;AACT"}
1
+ {"version":3,"sources":["../../../../../src/features/link/plugins/floatingLinkEditor/utilities.ts"],"sourcesContent":["import type { CollectionSlug, Field, FieldAffectingData, SanitizedConfig } from 'payload'\n\nimport { getBaseFields } from '../../drawer/baseFields.js'\n\n/**\n * This function is run to enrich the basefields which every link has with potential, custom user-added fields.\n */\nexport function transformExtraFields(\n customFieldSchema:\n | ((args: {\n config: SanitizedConfig\n defaultFields: FieldAffectingData[]\n }) => (Field | FieldAffectingData)[])\n | Field[],\n config: SanitizedConfig,\n enabledCollections?: CollectionSlug[],\n disabledCollections?: CollectionSlug[],\n maxDepth?: number,\n): Field[] {\n const baseFields: FieldAffectingData[] = getBaseFields(\n config,\n enabledCollections,\n disabledCollections,\n maxDepth,\n )\n\n let fields: (Field | FieldAffectingData)[]\n\n if (typeof customFieldSchema === 'function') {\n fields = customFieldSchema({ config, defaultFields: baseFields })\n } else if (Array.isArray(customFieldSchema)) {\n fields = customFieldSchema\n } else {\n fields = baseFields\n }\n\n return fields as Field[]\n}\n"],"names":["getBaseFields","transformExtraFields","customFieldSchema","config","enabledCollections","disabledCollections","maxDepth","baseFields","fields","defaultFields","Array","isArray"],"mappings":"AAEA,SAASA,aAAa,QAAQ,6BAA4B;AAE1D;;CAEC,GACD,OAAO,SAASC,qBACdC,iBAKW,EACXC,MAAuB,EACvBC,kBAAqC,EACrCC,mBAAsC,EACtCC,QAAiB;IAEjB,MAAMC,aAAmCP,cACvCG,QACAC,oBACAC,qBACAC;IAGF,IAAIE;IAEJ,IAAI,OAAON,sBAAsB,YAAY;QAC3CM,SAASN,kBAAkB;YAAEC;YAAQM,eAAeF;QAAW;IACjE,OAAO,IAAIG,MAAMC,OAAO,CAACT,oBAAoB;QAC3CM,SAASN;IACX,OAAO;QACLM,SAASD;IACX;IAEA,OAAOC;AACT"}
@@ -3,7 +3,6 @@ import React from 'react';
3
3
  import type { RelationshipData } from '../RelationshipNode.js';
4
4
  import './index.scss';
5
5
  type Props = {
6
- children?: React.ReactNode;
7
6
  className?: string;
8
7
  data: RelationshipData;
9
8
  format?: ElementFormatType;
@@ -1 +1 @@
1
- {"version":3,"file":"RelationshipComponent.d.ts","sourceRoot":"","sources":["../../../../../src/features/relationship/nodes/components/RelationshipComponent.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAgBhD,OAAO,KAA+D,MAAM,OAAO,CAAA;AAEnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAK9D,OAAO,cAAc,CAAA;AAQrB,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,gBAAgB,CAAA;IACtB,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AA8JD,eAAO,MAAM,qBAAqB,UAAW,KAAK,KAAG,KAAK,CAAC,SAE1D,CAAA"}
1
+ {"version":3,"file":"RelationshipComponent.d.ts","sourceRoot":"","sources":["../../../../../src/features/relationship/nodes/components/RelationshipComponent.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAgBhD,OAAO,KAA+D,MAAM,OAAO,CAAA;AAEnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAK9D,OAAO,cAAc,CAAA;AAQrB,KAAK,KAAK,GAAG;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,gBAAgB,CAAA;IACtB,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AA4JD,eAAO,MAAM,qBAAqB,UAAW,KAAK,KAAG,KAAK,CAAC,SAE1D,CAAA"}