@payloadcms/richtext-lexical 3.0.0-beta.127 → 3.0.0-beta.129
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +1 -1
- package/dist/cell/rscEntry.d.ts +12 -0
- package/dist/cell/rscEntry.d.ts.map +1 -0
- package/dist/cell/rscEntry.js +82 -0
- package/dist/cell/rscEntry.js.map +1 -0
- package/dist/exports/client/Field-SHUAQNQD.js +2 -0
- package/dist/exports/client/Field-SHUAQNQD.js.map +7 -0
- package/dist/exports/client/RelationshipComponent-IMM4CFBE.js +2 -0
- package/dist/exports/client/RelationshipComponent-IMM4CFBE.js.map +7 -0
- package/dist/exports/client/bundled.css +1 -1
- package/dist/exports/client/{chunk-NEO76RJK.js → chunk-352SHIZR.js} +2 -2
- package/dist/exports/client/chunk-75T7MDBH.js +2 -0
- package/dist/exports/client/chunk-75T7MDBH.js.map +7 -0
- package/dist/exports/client/{chunk-XY4TCSM7.js → chunk-O4IOO4EU.js} +2 -2
- package/dist/exports/client/chunk-OOBB5GCO.js +2 -0
- package/dist/exports/client/chunk-OOBB5GCO.js.map +7 -0
- package/dist/exports/client/chunk-PDAZFJVO.js +2 -0
- package/dist/exports/client/chunk-PDAZFJVO.js.map +7 -0
- package/dist/exports/client/{chunk-32KXGBIQ.js → chunk-ZOYGBIAN.js} +2 -2
- package/dist/exports/client/component-EHTN2BHZ.js +2 -0
- package/dist/exports/client/component-EHTN2BHZ.js.map +7 -0
- package/dist/exports/client/component-YE2TDR5O.js +2 -0
- package/dist/exports/client/component-YE2TDR5O.js.map +7 -0
- package/dist/exports/client/componentInline-N5LJ2LY2.js +2 -0
- package/dist/exports/client/componentInline-N5LJ2LY2.js.map +7 -0
- package/dist/exports/client/index.d.ts +0 -1
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +8 -8
- package/dist/exports/client/index.js.map +4 -4
- package/dist/exports/server/rsc.d.ts +3 -0
- package/dist/exports/server/rsc.d.ts.map +1 -0
- package/dist/exports/server/rsc.js +3 -0
- package/dist/exports/server/rsc.js.map +1 -0
- package/dist/features/blocks/client/component/BlockContent.d.ts +1 -0
- package/dist/features/blocks/client/component/BlockContent.d.ts.map +1 -1
- package/dist/features/blocks/client/component/BlockContent.js +15 -15
- package/dist/features/blocks/client/component/BlockContent.js.map +1 -1
- package/dist/features/blocks/client/component/index.d.ts.map +1 -1
- package/dist/features/blocks/client/component/index.js +68 -52
- package/dist/features/blocks/client/component/index.js.map +1 -1
- package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
- package/dist/features/blocks/client/componentInline/index.js +14 -19
- package/dist/features/blocks/client/componentInline/index.js.map +1 -1
- package/dist/features/blocks/client/index.d.ts.map +1 -1
- package/dist/features/blocks/client/index.js +26 -24
- package/dist/features/blocks/client/index.js.map +1 -1
- package/dist/features/blocks/client/plugin/index.d.ts.map +1 -1
- package/dist/features/blocks/client/plugin/index.js +83 -75
- package/dist/features/blocks/client/plugin/index.js.map +1 -1
- package/dist/features/blocks/server/index.d.ts.map +1 -1
- package/dist/features/blocks/server/index.js +20 -10
- package/dist/features/blocks/server/index.js.map +1 -1
- package/dist/features/blocks/server/validate.d.ts.map +1 -1
- package/dist/features/blocks/server/validate.js +8 -5
- package/dist/features/blocks/server/validate.js.map +1 -1
- package/dist/features/debug/testRecorder/client/plugin/index.js +25 -14
- package/dist/features/debug/testRecorder/client/plugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js +19 -7
- package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js +16 -3
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js +58 -19
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.d.ts.map +1 -1
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.js +38 -32
- package/dist/features/experimental_table/client/plugins/TablePlugin/index.js.map +1 -1
- package/dist/features/experimental_table/server/index.d.ts.map +1 -1
- package/dist/features/experimental_table/server/index.js +3 -1
- package/dist/features/experimental_table/server/index.js.map +1 -1
- package/dist/features/format/bold/feature.client.d.ts.map +1 -1
- package/dist/features/format/bold/feature.client.js +2 -1
- package/dist/features/format/bold/feature.client.js.map +1 -1
- package/dist/features/format/inlineCode/feature.client.d.ts.map +1 -1
- package/dist/features/format/inlineCode/feature.client.js +2 -1
- package/dist/features/format/inlineCode/feature.client.js.map +1 -1
- package/dist/features/format/italic/feature.client.d.ts.map +1 -1
- package/dist/features/format/italic/feature.client.js +2 -1
- package/dist/features/format/italic/feature.client.js.map +1 -1
- package/dist/features/format/strikethrough/feature.client.d.ts.map +1 -1
- package/dist/features/format/strikethrough/feature.client.js +2 -1
- package/dist/features/format/strikethrough/feature.client.js.map +1 -1
- package/dist/features/format/subscript/feature.client.d.ts.map +1 -1
- package/dist/features/format/subscript/feature.client.js +2 -1
- package/dist/features/format/subscript/feature.client.js.map +1 -1
- package/dist/features/format/superscript/feature.client.d.ts.map +1 -1
- package/dist/features/format/superscript/feature.client.js +2 -1
- package/dist/features/format/superscript/feature.client.js.map +1 -1
- package/dist/features/format/underline/feature.client.d.ts.map +1 -1
- package/dist/features/format/underline/feature.client.js +2 -1
- package/dist/features/format/underline/feature.client.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +52 -15
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/index.js +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/index.js.map +1 -1
- package/dist/features/link/server/i18n.d.ts.map +1 -1
- package/dist/features/link/server/i18n.js +64 -32
- package/dist/features/link/server/i18n.js.map +1 -1
- package/dist/features/link/server/index.d.ts.map +1 -1
- package/dist/features/link/server/index.js +3 -1
- package/dist/features/link/server/index.js.map +1 -1
- package/dist/features/link/server/validate.d.ts.map +1 -1
- package/dist/features/link/server/validate.js +8 -5
- package/dist/features/link/server/validate.js.map +1 -1
- package/dist/features/relationship/client/components/RelationshipComponent.d.ts.map +1 -1
- package/dist/features/relationship/client/components/RelationshipComponent.js +6 -4
- package/dist/features/relationship/client/components/RelationshipComponent.js.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.js +77 -49
- package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.js +93 -52
- package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.js +1 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +2 -2
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/index.js +25 -22
- package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
- package/dist/features/toolbars/types.d.ts +3 -1
- package/dist/features/toolbars/types.d.ts.map +1 -1
- package/dist/features/toolbars/types.js.map +1 -1
- package/dist/features/typesServer.d.ts +4 -17
- package/dist/features/typesServer.d.ts.map +1 -1
- package/dist/features/typesServer.js.map +1 -1
- package/dist/features/upload/client/component/index.d.ts.map +1 -1
- package/dist/features/upload/client/component/index.js +8 -4
- package/dist/features/upload/client/component/index.js.map +1 -1
- package/dist/features/upload/server/feature.server.d.ts.map +1 -1
- package/dist/features/upload/server/feature.server.js +3 -1
- package/dist/features/upload/server/feature.server.js.map +1 -1
- package/dist/features/upload/server/validate.d.ts.map +1 -1
- package/dist/features/upload/server/validate.js +7 -4
- package/dist/features/upload/server/validate.js.map +1 -1
- package/dist/field/Field.d.ts.map +1 -1
- package/dist/field/Field.js +27 -41
- package/dist/field/Field.js.map +1 -1
- package/dist/field/bundled.css +1 -1
- package/dist/field/index.d.ts.map +1 -1
- package/dist/field/index.js +26 -27
- package/dist/field/index.js.map +1 -1
- package/dist/field/rscEntry.d.ts +9 -0
- package/dist/field/rscEntry.d.ts.map +1 -0
- package/dist/field/rscEntry.js +37 -0
- package/dist/field/rscEntry.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -14
- package/dist/index.js.map +1 -1
- package/dist/lexical/LexicalProvider.d.ts +1 -1
- package/dist/lexical/LexicalProvider.d.ts.map +1 -1
- package/dist/lexical/LexicalProvider.js +2 -2
- package/dist/lexical/LexicalProvider.js.map +1 -1
- package/dist/lexical/config/client/EditorConfigProvider.d.ts +4 -3
- package/dist/lexical/config/client/EditorConfigProvider.d.ts.map +1 -1
- package/dist/lexical/config/client/EditorConfigProvider.js +5 -5
- package/dist/lexical/config/client/EditorConfigProvider.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts +4 -4
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +14 -5
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts +2 -2
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +5 -5
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts +3 -2
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/index.d.ts.map +1 -1
- package/dist/lexical/plugins/SlashMenu/index.js +15 -24
- package/dist/lexical/plugins/SlashMenu/index.js.map +1 -1
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js +6 -4
- package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +6 -4
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
- package/dist/lexical/theme/EditorTheme.d.ts.map +1 -1
- package/dist/lexical/theme/EditorTheme.js +0 -2
- package/dist/lexical/theme/EditorTheme.js.map +1 -1
- package/dist/types.d.ts +15 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utilities/fieldsDrawer/Drawer.d.ts +1 -0
- package/dist/utilities/fieldsDrawer/Drawer.d.ts.map +1 -1
- package/dist/utilities/fieldsDrawer/Drawer.js +25 -20
- package/dist/utilities/fieldsDrawer/Drawer.js.map +1 -1
- package/dist/utilities/fieldsDrawer/DrawerContent.d.ts.map +1 -1
- package/dist/utilities/fieldsDrawer/DrawerContent.js +99 -143
- package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
- package/dist/utilities/fieldsDrawer/useLexicalDrawer.js +1 -1
- package/dist/utilities/fieldsDrawer/useLexicalDrawer.js.map +1 -1
- package/dist/utilities/generateImportMap.d.ts.map +1 -1
- package/dist/utilities/generateImportMap.js +2 -3
- package/dist/utilities/generateImportMap.js.map +1 -1
- package/dist/utilities/generateSchemaMap.d.ts.map +1 -1
- package/dist/utilities/generateSchemaMap.js +13 -10
- package/dist/utilities/generateSchemaMap.js.map +1 -1
- package/dist/utilities/initLexicalFeatures.d.ts +18 -0
- package/dist/utilities/initLexicalFeatures.d.ts.map +1 -0
- package/dist/utilities/initLexicalFeatures.js +95 -0
- package/dist/utilities/initLexicalFeatures.js.map +1 -0
- package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.d.ts.map +1 -1
- package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.js +5 -1
- package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.js.map +1 -1
- package/dist/utilities/useLexicalFeature.d.ts.map +1 -1
- package/dist/utilities/useLexicalFeature.js +12 -4
- package/dist/utilities/useLexicalFeature.js.map +1 -1
- package/dist/validate/index.d.ts.map +1 -1
- package/dist/validate/index.js +1 -1
- package/dist/validate/index.js.map +1 -1
- package/package.json +43 -35
- package/dist/cell/index.d.ts +0 -9
- package/dist/cell/index.d.ts.map +0 -1
- package/dist/cell/index.js +0 -120
- package/dist/cell/index.js.map +0 -1
- package/dist/exports/client/Field-Y47DV2NP.js +0 -2
- package/dist/exports/client/Field-Y47DV2NP.js.map +0 -7
- package/dist/exports/client/RelationshipComponent-LBWKOBGF.js +0 -2
- package/dist/exports/client/RelationshipComponent-LBWKOBGF.js.map +0 -7
- package/dist/exports/client/chunk-7SR2HYD6.js +0 -2
- package/dist/exports/client/chunk-7SR2HYD6.js.map +0 -7
- package/dist/exports/client/chunk-GD6LBQBJ.js +0 -2
- package/dist/exports/client/chunk-GD6LBQBJ.js.map +0 -7
- package/dist/exports/client/chunk-IIWHHN4J.js +0 -2
- package/dist/exports/client/chunk-IIWHHN4J.js.map +0 -7
- package/dist/exports/client/component-4TP4L5EV.js +0 -2
- package/dist/exports/client/component-4TP4L5EV.js.map +0 -7
- package/dist/exports/client/component-XMR5NN36.js +0 -2
- package/dist/exports/client/component-XMR5NN36.js.map +0 -7
- package/dist/exports/client/componentInline-NUDJIIQ4.js +0 -2
- package/dist/exports/client/componentInline-NUDJIIQ4.js.map +0 -7
- package/dist/utilities/generateComponentMap.d.ts +0 -6
- package/dist/utilities/generateComponentMap.d.ts.map +0 -1
- package/dist/utilities/generateComponentMap.js +0 -93
- package/dist/utilities/generateComponentMap.js.map +0 -1
- /package/dist/exports/client/{chunk-NEO76RJK.js.map → chunk-352SHIZR.js.map} +0 -0
- /package/dist/exports/client/{chunk-XY4TCSM7.js.map → chunk-O4IOO4EU.js.map} +0 -0
- /package/dist/exports/client/{chunk-32KXGBIQ.js.map → chunk-ZOYGBIAN.js.map} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as l}from"react/jsx-runtime";import u from"bson-objectid";import a from"react";import{DecoratorBlockNode as i}from"@lexical/react/LexicalDecoratorBlockNode.js";import c from"bson-objectid";import{deepCopyObjectSimple as f}from"payload/shared";var o=class extends i{__fields;constructor({fields:t,format:e,key:s}){super(e,s),this.__fields=t}static clone(t){return new this({fields:t.__fields,format:t.__format,key:t.__key})}static getType(){return"block"}static importDOM(){return{}}static importJSON(t){t.version===1&&(t={...t,fields:{...t.fields.data},version:2});let e=p(t.fields);return e.setFormat(t.format),e}static isInline(){return!1}decorate(t,e){return null}exportDOM(){let t=document.createElement("div"),e=document.createTextNode(this.getTextContent());return t.append(e),{element:t}}exportJSON(){return{...super.exportJSON(),type:"block",fields:this.getFields(),version:2}}getFields(){return this.getLatest().__fields}getTextContent(){return"Block Field"}setFields(t){let e=f(t),s=this.getWritable();s.__fields=e}};function p(r){return new o({fields:{...r,id:r?.id||new c.default().toHexString()}})}var m=a.lazy(()=>import("./component-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{jsx as l}from"react/jsx-runtime";import u from"bson-objectid";import a from"react";import{DecoratorBlockNode as i}from"@lexical/react/LexicalDecoratorBlockNode.js";import c from"bson-objectid";import{deepCopyObjectSimple as f}from"payload/shared";var o=class extends i{__fields;constructor({fields:t,format:e,key:s}){super(e,s),this.__fields=t}static clone(t){return new this({fields:t.__fields,format:t.__format,key:t.__key})}static getType(){return"block"}static importDOM(){return{}}static importJSON(t){t.version===1&&(t={...t,fields:{...t.fields.data},version:2});let e=p(t.fields);return e.setFormat(t.format),e}static isInline(){return!1}decorate(t,e){return null}exportDOM(){let t=document.createElement("div"),e=document.createTextNode(this.getTextContent());return t.append(e),{element:t}}exportJSON(){return{...super.exportJSON(),type:"block",fields:this.getFields(),version:2}}getFields(){return this.getLatest().__fields}getTextContent(){return"Block Field"}setFields(t){let e=f(t),s=this.getWritable();s.__fields=e}};function p(r){return new o({fields:{...r,id:r?.id||new c.default().toHexString()}})}var m=a.lazy(()=>import("./component-EHTN2BHZ.js").then(r=>({default:r.BlockComponent}))),n=class extends o{static clone(t){return super.clone(t)}static getType(){return super.getType()}static importJSON(t){t.version===1&&(t={...t,fields:{...t.fields.data},version:2});let e=d(t.fields);return e.setFormat(t.format),e}decorate(t,e){return l(m,{formData:this.getFields(),nodeKey:this.getKey()})}exportJSON(){return super.exportJSON()}};function d(r){return new n({fields:{...r,id:r?.id||new u.default().toHexString()}})}function v(r){return r instanceof n}export{n as a,d as b,v as c};
|
|
2
|
+
//# sourceMappingURL=chunk-352SHIZR.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{b as E}from"./chunk-PDAZFJVO.js";import{c as N}from"react/compiler-runtime";import{jsx as M}from"react/jsx-runtime";import{Drawer as z,EditDepthProvider as tt,useModal as et}from"@payloadcms/ui";import"react";import{jsx as $,jsxs as J}from"react/jsx-runtime";import{Form as B,FormSubmit as K,RenderFields as L,useDocumentInfo as G,useServerFunctions as V,useTranslation as q}from"@payloadcms/ui";import{abortAndIgnore as R}from"@payloadcms/ui/shared";import{useCallback as Q,useEffect as P,useRef as X,useState as Y}from"react";import{v4 as Z}from"uuid";var I=({data:r,featureKey:t,fieldMapOverride:e,handleDrawerSubmit:o,schemaFieldsPathOverride:n,schemaPath:S,schemaPathSuffix:m})=>{let{t:d}=q(),{id:c,collectionSlug:u,docPermissions:i,getDocPreferences:a,globalSlug:s}=G(),l=X(new AbortController),[f,p]=Y(!1),{fieldProps:{featureClientSchemaMap:b,permissions:D}}=E(),{getFormState:g}=V(),h=n??`${S}.lexical_internal_feature.${t}${m?`.${m}`:""}`,_=e??b[t]?.[h];P(()=>{let x=new AbortController;return(async()=>{let{state:A}=await g({id:c,collectionSlug:u,data:r??{},docPermissions:i,docPreferences:await a(),globalSlug:s,operation:"update",renderAllFields:!0,schemaPath:h,signal:x.signal});p(A)})(),()=>{R(x)}},[h,c,r,g,u,s,i,a]);let w=Q(async({formState:x})=>{R(l.current);let v=new AbortController;l.current=v;let{state:A}=await g({id:c,collectionSlug:u,docPermissions:i,docPreferences:await a(),formState:x,globalSlug:s,operation:"update",schemaPath:h,signal:v.signal});return A||x},[g,c,u,i,a,s,h]);return P(()=>()=>{R(l.current)},[]),f===!1?null:J(B,{beforeSubmit:[w],disableValidationOnSubmit:!0,fields:Array.isArray(_)?_:[],initialState:f,onChange:[w],onSubmit:o,uuid:Z(),children:[$(L,{fields:Array.isArray(_)?_:[],forceRender:!0,parentIndexPath:"",parentPath:"",parentSchemaPath:h,permissions:D,readOnly:!1}),$(K,{children:d("fields:saveChanges")})]})};var Ut=r=>{let t=N(15),{className:e,data:o,drawerSlug:n,drawerTitle:S,featureKey:m,fieldMapOverride:d,handleDrawerSubmit:c,schemaFieldsPathOverride:u,schemaPath:i,schemaPathSuffix:a}=r,{closeModal:s}=et(),l=S??"",f;t[0]!==s||t[1]!==n||t[2]!==c?(f=(b,D)=>{s(n),setTimeout(()=>{c(b,D)},1)},t[0]=s,t[1]=n,t[2]=c,t[3]=f):f=t[3];let p;return t[4]!==o||t[5]!==m||t[6]!==d||t[7]!==f||t[8]!==u||t[9]!==i||t[10]!==a||t[11]!==e||t[12]!==n||t[13]!==l?(p=M(tt,{children:M(z,{className:e,slug:n,title:l,children:M(I,{data:o,featureKey:m,fieldMapOverride:d,handleDrawerSubmit:f,schemaFieldsPathOverride:u,schemaPath:i,schemaPathSuffix:a})})}),t[4]=o,t[5]=m,t[6]=d,t[7]=f,t[8]=u,t[9]=i,t[10]=a,t[11]=e,t[12]=n,t[13]=l,t[14]=p):p=t[14],p};import{c as rt}from"react/compiler-runtime";import{useLexicalComposerContext as ot}from"@lexical/react/LexicalComposerContext";import{useModal as nt}from"@payloadcms/ui";import{$getPreviousSelection as at,$getSelection as it,$setSelection as st}from"lexical";import{useEffect as lt,useState as j}from"react";var Gt=(r,t)=>{let e=rt(24),[o]=ot(),[n,S]=j(null),[m,d]=j(!1),{closeModal:c,isModalOpen:u,modalState:i,toggleModal:a}=nt(),s;e[0]!==o?(s=()=>{o.read(()=>{let v=it()??at();S(v)})},e[0]=o,e[1]=s):s=e[1];let l=s,f;e[2]!==n||e[3]!==o?(f=()=>{n&&o.update(()=>{st(n.clone())},{discrete:!0,skipTransforms:!0})},e[2]=n,e[3]=o,e[4]=f):f=e[4];let p=f,b;e[5]!==c||e[6]!==r?(b=()=>{c(r)},e[5]=c,e[6]=r,e[7]=b):b=e[7];let D=b,g;e[8]!==u||e[9]!==r||e[10]!==l||e[11]!==p||e[12]!==a?(g=()=>{u(r)?p():l(),d(!0),a(r)},e[8]=u,e[9]=r,e[10]=l,e[11]=p,e[12]=a,e[13]=g):g=e[13];let h=g,_,w;e[14]!==m||e[15]!==i||e[16]!==r||e[17]!==t||e[18]!==p?(_=()=>{if(!m)return;let v=i[r];v&&!v?.isOpen&&(d(!1),t?setTimeout(()=>{p()},0):p())},w=[i,r,p,m,t],e[14]=m,e[15]=i,e[16]=r,e[17]=t,e[18]=p,e[19]=_,e[20]=w):(_=e[19],w=e[20]),lt(_,w);let x;return e[21]!==D||e[22]!==h?(x={closeDrawer:D,toggleDrawer:h},e[21]=D,e[22]=h,e[23]=x):x=e[23],x};import{c as ct}from"react/compiler-runtime";import{useAuth as ut,useConfig as ft,useEntityVisibility as pt}from"@payloadcms/ui";import*as O from"react";var mt=(r,t)=>r.filter(({slug:e,admin:{enableRichTextRelationship:o},upload:n})=>t?.visibleEntities.collections.includes(e)?t?.uploads?o&&!!n:n?!1:o:!1),Xt=r=>{let t=ct(16),e,o,n;t[0]!==r?({children:n,uploads:e,...o}=r,t[0]=r,t[1]=e,t[2]=o,t[3]=n):(e=t[1],o=t[2],n=t[3]);let S=e===void 0?!1:e,{config:m}=ft(),{collections:d}=m,{user:c}=ut(),{visibleEntities:u}=pt(),i;t[4]!==d||t[5]!==S||t[6]!==c||t[7]!==u?(i=()=>mt(d,{uploads:S,user:c,visibleEntities:u}).map(l=>{let{slug:f}=l;return f}),t[4]=d,t[5]=S,t[6]=c,t[7]=u,t[8]=i):i=t[8];let[a]=O.useState(i);if(!a.length)return null;let s;if(t[9]!==o||t[10]!==a||t[11]!==n){let l;t[13]!==o||t[14]!==a?(l={...o,enabledCollectionSlugs:a},t[13]=o,t[14]=a,t[15]=l):l=t[15],s=O.cloneElement(n,l),t[9]=o,t[10]=a,t[11]=n,t[12]=s}else s=t[12];return s};import{createCommand as dt}from"lexical";var Nt=dt("INSERT_UPLOAD_WITH_DRAWER_COMMAND");import{jsx as _t}from"react/jsx-runtime";import k from"bson-objectid";import{$applyNodeReplacement as bt}from"lexical";import*as W from"react";import{jsx as ht}from"react/jsx-runtime";import{DecoratorBlockNode as xt}from"@lexical/react/LexicalDecoratorBlockNode.js";import F from"bson-objectid";import{$applyNodeReplacement as St}from"lexical";import"react";function T(r){return r.parentElement!=null&&r.parentElement.tagName==="LI"&&r.previousSibling===null&&r.getAttribute("aria-roledescription")==="checkbox"}function gt(r){if(r.hasAttribute("data-lexical-upload-relation-to")&&r.hasAttribute("data-lexical-upload-id")){let e=r.getAttribute("data-lexical-upload-id"),o=r.getAttribute("data-lexical-upload-relation-to");if(e!=null&&o!=null)return{node:U({data:{fields:{},relationTo:o,value:e}})}}let t=r;return t.src.startsWith("file:///")||T(t),null}var C=class extends xt{__data;constructor({data:t,format:e,key:o}){super(e,o),this.__data=t}static clone(t){return new this({data:t.__data,format:t.__format,key:t.__key})}static getType(){return"upload"}static importDOM(){return{img:t=>({conversion:gt,priority:0})}}static importJSON(t){t.version===1&&t?.value?.id&&(t.value=t.value.id),t.version===2&&!t?.id&&(t.id=new F.default().toHexString(),t.version=3);let e={id:t.id,fields:t.fields,relationTo:t.relationTo,value:t.value},o=U({data:e});return o.setFormat(t.format),o}static isInline(){return!1}decorate(){return ht(RawUploadComponent,{data:this.__data,format:this.__format,nodeKey:this.getKey()})}exportDOM(){let t=document.createElement("img");return t.setAttribute("data-lexical-upload-id",String(this.__data?.value)),t.setAttribute("data-lexical-upload-relation-to",this.__data?.relationTo),{element:t}}exportJSON(){return{...super.exportJSON(),...this.getData(),type:"upload",version:3}}getData(){return this.getLatest().__data}setData(t){let e=this.getWritable();e.__data=t}updateDOM(){return!1}};function U({data:r}){return r?.id||(r.id=new F.default().toHexString()),St(new C({data:r}))}var vt=W.lazy(()=>import("./component-YE2TDR5O.js").then(r=>({default:r.UploadComponent})));function Dt(r){if(r.hasAttribute("data-lexical-upload-relation-to")&&r.hasAttribute("data-lexical-upload-id")){let e=r.getAttribute("data-lexical-upload-id"),o=r.getAttribute("data-lexical-upload-relation-to");if(e!=null&&o!=null)return{node:H({data:{fields:{},relationTo:o,value:e}})}}let t=r;return t.src.startsWith("file:///")||T(t),null}var y=class extends C{static clone(t){return super.clone(t)}static getType(){return super.getType()}static importDOM(){return{img:t=>({conversion:Dt,priority:0})}}static importJSON(t){t.version===1&&t?.value?.id&&(t.value=t.value.id),t.version===2&&!t?.id&&(t.id=new k.default().toHexString(),t.version=3);let e={id:t.id,fields:t.fields,relationTo:t.relationTo,value:t.value},o=H({data:e});return o.setFormat(t.format),o}decorate(){return _t(vt,{data:this.__data,nodeKey:this.getKey()})}exportJSON(){return super.exportJSON()}};function H({data:r}){return r?.id||(r.id=new k.default().toHexString()),bt(new y({data:r}))}function ue(r){return r instanceof y}export{Ut as a,Gt as b,Xt as c,Nt as d,y as e,H as f,ue as g};
|
|
2
|
+
//# sourceMappingURL=chunk-75T7MDBH.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/utilities/fieldsDrawer/Drawer.tsx", "../../../src/utilities/fieldsDrawer/DrawerContent.tsx", "../../../src/utilities/fieldsDrawer/useLexicalDrawer.tsx", "../../../src/features/relationship/client/utils/EnabledRelationshipsCondition.tsx", "../../../src/features/upload/client/drawer/commands.ts", "../../../src/features/upload/client/nodes/UploadNode.tsx", "../../../src/features/upload/server/nodes/UploadNode.tsx"],
|
|
4
|
+
"sourcesContent": ["'use client'\nimport type { ClientField, Data, FormState, JsonObject } from 'payload'\n\nimport { Drawer, EditDepthProvider, useModal } from '@payloadcms/ui'\nimport React from 'react'\n\nimport { DrawerContent } from './DrawerContent.js'\n\nexport type FieldsDrawerProps = {\n readonly className?: string\n readonly data?: Data\n readonly drawerSlug: string\n readonly drawerTitle?: string\n readonly featureKey: string\n readonly fieldMapOverride?: ClientField[]\n readonly handleDrawerSubmit: (fields: FormState, data: JsonObject) => void\n readonly schemaFieldsPathOverride?: string\n readonly schemaPath: string\n readonly schemaPathSuffix?: string\n}\n\n/**\n * This FieldsDrawer component can be used to easily create a Drawer that contains a form with fields within your feature.\n * The fields are taken directly from the schema map based on your `featureKey` and `schemaPathSuffix`. Thus, this can only\n * be used if you provide your field schema inside the `generateSchemaMap` prop of your feature.server.ts.\n */\nexport const FieldsDrawer: React.FC<FieldsDrawerProps> = ({\n className,\n data,\n drawerSlug,\n drawerTitle,\n featureKey,\n fieldMapOverride,\n handleDrawerSubmit,\n schemaFieldsPathOverride,\n schemaPath,\n schemaPathSuffix,\n}) => {\n const { closeModal } = useModal()\n // The Drawer only renders its children (and itself) if it's open. Thus, by extracting the main content\n // to DrawerContent, this should be faster\n return (\n <EditDepthProvider>\n <Drawer className={className} slug={drawerSlug} title={drawerTitle ?? ''}>\n <DrawerContent\n data={data}\n featureKey={featureKey}\n fieldMapOverride={fieldMapOverride}\n handleDrawerSubmit={(args, args2) => {\n // Simply close drawer - no need for useLexicalDrawer here as at this point,\n // we don't need to restore the cursor position. This is handled by the useEffect in useLexicalDrawer.\n closeModal(drawerSlug)\n\n // Actual drawer submit logic needs to be triggered after the drawer is closed.\n // That's because the lexical selection / cursor restore logic that is striggerer by\n // `useLexicalDrawer` neeeds to be triggered before any editor.update calls that may happen\n // in the `handleDrawerSubmit` function.\n setTimeout(() => {\n handleDrawerSubmit(args, args2)\n }, 1)\n }}\n schemaFieldsPathOverride={schemaFieldsPathOverride}\n schemaPath={schemaPath}\n schemaPathSuffix={schemaPathSuffix}\n />\n </Drawer>\n </EditDepthProvider>\n )\n}\n", "'use client'\nimport type { FormState } from 'payload'\n\nimport {\n Form,\n FormSubmit,\n RenderFields,\n useDocumentInfo,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { v4 as uuid } from 'uuid'\n\nimport type { FieldsDrawerProps } from './Drawer.js'\n\nimport { useEditorConfigContext } from '../../lexical/config/client/EditorConfigProvider.js'\n\nexport const DrawerContent: React.FC<Omit<FieldsDrawerProps, 'drawerSlug' | 'drawerTitle'>> = ({\n data,\n featureKey,\n fieldMapOverride,\n handleDrawerSubmit,\n schemaFieldsPathOverride,\n schemaPath,\n schemaPathSuffix,\n}) => {\n const { t } = useTranslation()\n const { id, collectionSlug, docPermissions, getDocPreferences, globalSlug } = useDocumentInfo()\n\n const onChangeAbortControllerRef = useRef(new AbortController())\n\n const [initialState, setInitialState] = useState<false | FormState | undefined>(false)\n\n const {\n fieldProps: { featureClientSchemaMap, permissions },\n } = useEditorConfigContext()\n\n const { getFormState } = useServerFunctions()\n\n const schemaFieldsPath =\n schemaFieldsPathOverride ??\n `${schemaPath}.lexical_internal_feature.${featureKey}${schemaPathSuffix ? `.${schemaPathSuffix}` : ''}`\n\n const fields: any = fieldMapOverride ?? featureClientSchemaMap[featureKey]?.[schemaFieldsPath] // Field Schema\n\n useEffect(() => {\n const controller = new AbortController()\n\n const awaitInitialState = async () => {\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: data ?? {},\n docPermissions,\n docPreferences: await getDocPreferences(),\n globalSlug,\n operation: 'update',\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n setInitialState(state)\n }\n\n void awaitInitialState()\n\n return () => {\n abortAndIgnore(controller)\n }\n }, [\n schemaFieldsPath,\n id,\n data,\n getFormState,\n collectionSlug,\n globalSlug,\n docPermissions,\n getDocPreferences,\n ])\n\n const onChange = useCallback(\n async ({ formState: prevFormState }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n docPermissions,\n docPreferences: await getDocPreferences(),\n formState: prevFormState,\n globalSlug,\n operation: 'update',\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!state) {\n return prevFormState\n }\n\n return state\n },\n [\n getFormState,\n id,\n collectionSlug,\n docPermissions,\n getDocPreferences,\n globalSlug,\n schemaFieldsPath,\n ],\n )\n\n // cleanup effect\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n if (initialState === false) {\n return null\n }\n\n return (\n <Form\n beforeSubmit={[onChange]}\n disableValidationOnSubmit\n fields={Array.isArray(fields) ? fields : []}\n initialState={initialState}\n onChange={[onChange]}\n onSubmit={handleDrawerSubmit}\n uuid={uuid()}\n >\n <RenderFields\n fields={Array.isArray(fields) ? fields : []}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={permissions}\n readOnly={false}\n />\n <FormSubmit>{t('fields:saveChanges')}</FormSubmit>\n </Form>\n )\n}\n", "'use client'\nimport type { BaseSelection } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useModal } from '@payloadcms/ui'\nimport { $getPreviousSelection, $getSelection, $setSelection } from 'lexical'\nimport { useCallback, useEffect, useState } from 'react'\n\n/**\n *\n * Wrapper around useModal that restores and saves selection state (cursor position) when opening and closing the drawer.\n * By default, the lexical cursor position may be lost when opening a drawer and clicking somewhere on that drawer.\n */\nexport const useLexicalDrawer = (slug: string, restoreLate?: boolean) => {\n const [editor] = useLexicalComposerContext()\n const [selectionState, setSelectionState] = useState<BaseSelection | null>(null)\n const [wasOpen, setWasOpen] = useState<boolean>(false)\n\n const {\n closeModal: closeBaseModal,\n isModalOpen: isBaseModalOpen,\n modalState,\n toggleModal: toggleBaseModal,\n } = useModal()\n\n const storeSelection = useCallback(() => {\n editor.read(() => {\n const selection = $getSelection() ?? $getPreviousSelection()\n setSelectionState(selection)\n })\n }, [editor])\n\n const restoreSelection = useCallback(() => {\n if (selectionState) {\n editor.update(\n () => {\n $setSelection(selectionState.clone())\n },\n { discrete: true, skipTransforms: true },\n )\n }\n }, [editor, selectionState])\n\n const closeDrawer = () => {\n //restoreSelection() // Should already be stored by the useEffect below\n closeBaseModal(slug)\n }\n\n const toggleDrawer = () => {\n if (!isBaseModalOpen(slug)) {\n storeSelection()\n } else {\n restoreSelection()\n }\n setWasOpen(true)\n toggleBaseModal(slug)\n }\n\n // We need to handle drawer closing via a useEffect, as toggleDrawer / closeDrawer will not be triggered if the drawer\n // is closed by clicking outside of the drawer. This useEffect will handle everything.\n useEffect(() => {\n if (!wasOpen) {\n return\n }\n\n const thisModalState = modalState[slug]\n // Exists in modalState (thus has opened at least once before) and is closed\n if (thisModalState && !thisModalState?.isOpen) {\n setWasOpen(false)\n\n if (restoreLate) {\n // restoreLate is used for upload extra field drawers. For some reason, the selection is not restored if we call restoreSelection immediately.\n setTimeout(() => {\n restoreSelection()\n }, 0)\n } else {\n restoreSelection()\n }\n }\n }, [modalState, slug, restoreSelection, wasOpen, restoreLate])\n\n return {\n closeDrawer,\n toggleDrawer,\n }\n}\n", "'use client'\nimport type { ClientCollectionConfig, ClientUser, VisibleEntities } from 'payload'\n\nimport { useAuth, useConfig, useEntityVisibility } from '@payloadcms/ui'\nimport * as React from 'react'\n\ntype Options = {\n uploads: boolean\n user: ClientUser\n visibleEntities: VisibleEntities\n}\n\ntype FilteredCollectionsT = (\n collections: ClientCollectionConfig[],\n options?: Options,\n) => ClientCollectionConfig[]\n\nconst filterRichTextCollections: FilteredCollectionsT = (collections, options) => {\n return collections.filter(({ slug, admin: { enableRichTextRelationship }, upload }) => {\n if (!options?.visibleEntities.collections.includes(slug)) {\n return false\n }\n\n if (options?.uploads) {\n return enableRichTextRelationship && Boolean(upload) === true\n }\n\n return upload ? false : enableRichTextRelationship\n })\n}\n\nexport const EnabledRelationshipsCondition: React.FC<any> = (props) => {\n const { children, uploads = false, ...rest } = props\n const {\n config: { collections },\n } = useConfig()\n const { user } = useAuth()\n const { visibleEntities } = useEntityVisibility()\n\n const [enabledCollectionSlugs] = React.useState(() =>\n filterRichTextCollections(collections, { uploads, user: user!, visibleEntities }).map(\n ({ slug }) => slug,\n ),\n )\n\n if (!enabledCollectionSlugs.length) {\n return null\n }\n\n return React.cloneElement(children, { ...rest, enabledCollectionSlugs })\n}\n", "'use client'\nimport type { LexicalCommand } from 'lexical'\n\nimport { createCommand } from 'lexical'\n\nexport const INSERT_UPLOAD_WITH_DRAWER_COMMAND: LexicalCommand<{\n replace: { nodeKey: string } | false\n}> = createCommand('INSERT_UPLOAD_WITH_DRAWER_COMMAND')\n", "'use client'\nimport type { SerializedDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport type { DOMConversionMap, DOMConversionOutput, LexicalNode, Spread } from 'lexical'\nimport type { JSX } from 'react'\n\nimport ObjectID from 'bson-objectid'\nimport { $applyNodeReplacement } from 'lexical'\nimport * as React from 'react'\n\nimport type { UploadData } from '../../server/nodes/UploadNode.js'\n\nimport { isGoogleDocCheckboxImg, UploadServerNode } from '../../server/nodes/UploadNode.js'\n\nconst RawUploadComponent = React.lazy(() =>\n import('../../client/component/index.js').then((module) => ({ default: module.UploadComponent })),\n)\n\nfunction $convertUploadElement(domNode: HTMLImageElement): DOMConversionOutput | null {\n if (\n domNode.hasAttribute('data-lexical-upload-relation-to') &&\n domNode.hasAttribute('data-lexical-upload-id')\n ) {\n const id = domNode.getAttribute('data-lexical-upload-id')\n const relationTo = domNode.getAttribute('data-lexical-upload-relation-to')\n\n if (id != null && relationTo != null) {\n const node = $createUploadNode({\n data: {\n fields: {},\n relationTo,\n value: id,\n },\n })\n return { node }\n }\n }\n const img = domNode\n if (img.src.startsWith('file:///') || isGoogleDocCheckboxImg(img)) {\n return null\n }\n // TODO: Auto-upload functionality here!\n //}\n return null\n}\n\nexport type SerializedUploadNode = {\n children?: never // required so that our typed editor state doesn't automatically add children\n type: 'upload'\n} & Spread<UploadData, SerializedDecoratorBlockNode>\n\nexport class UploadNode extends UploadServerNode {\n static clone(node: UploadServerNode): UploadServerNode {\n return super.clone(node)\n }\n\n static getType(): string {\n return super.getType()\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n img: (node: HTMLImageElement) => ({\n conversion: $convertUploadElement,\n priority: 0,\n }),\n }\n }\n\n static importJSON(serializedNode: SerializedUploadNode): UploadNode {\n if (serializedNode.version === 1 && (serializedNode?.value as unknown as { id: string })?.id) {\n serializedNode.value = (serializedNode.value as unknown as { id: string }).id\n }\n if (serializedNode.version === 2 && !serializedNode?.id) {\n serializedNode.id = new ObjectID.default().toHexString()\n serializedNode.version = 3\n }\n\n const importedData: UploadData = {\n id: serializedNode.id,\n fields: serializedNode.fields,\n relationTo: serializedNode.relationTo,\n value: serializedNode.value,\n }\n\n const node = $createUploadNode({ data: importedData })\n node.setFormat(serializedNode.format)\n\n return node\n }\n\n decorate(): JSX.Element {\n return <RawUploadComponent data={this.__data} nodeKey={this.getKey()} />\n }\n\n exportJSON(): SerializedUploadNode {\n return super.exportJSON()\n }\n}\n\nexport function $createUploadNode({\n data,\n}: {\n data: Omit<UploadData, 'id'> & Partial<Pick<UploadData, 'id'>>\n}): UploadNode {\n if (!data?.id) {\n data.id = new ObjectID.default().toHexString()\n }\n return $applyNodeReplacement(new UploadNode({ data: data as UploadData }))\n}\n\nexport function $isUploadNode(node: LexicalNode | null | undefined): node is UploadNode {\n return node instanceof UploadNode\n}\n", "import type { SerializedDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport type {\n DOMConversionMap,\n DOMConversionOutput,\n DOMExportOutput,\n ElementFormatType,\n LexicalNode,\n NodeKey,\n Spread,\n} from 'lexical'\nimport type { CollectionSlug, DataFromCollectionSlug, JsonObject } from 'payload'\nimport type { JSX } from 'react'\n\nimport { DecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport ObjectID from 'bson-objectid'\nimport { $applyNodeReplacement } from 'lexical'\nimport * as React from 'react'\n\nexport type UploadData<TUploadExtraFieldsData extends JsonObject = JsonObject> = {\n [TCollectionSlug in CollectionSlug]: {\n fields: TUploadExtraFieldsData\n // Every lexical node that has sub-fields needs to have a unique ID. This is the ID of this upload node, not the ID of the linked upload document\n id: string\n relationTo: TCollectionSlug\n // Value can be just the document ID, or the full, populated document\n value: DataFromCollectionSlug<TCollectionSlug> | number | string\n }\n}[CollectionSlug]\n\nexport function isGoogleDocCheckboxImg(img: HTMLImageElement): boolean {\n return (\n img.parentElement != null &&\n img.parentElement.tagName === 'LI' &&\n img.previousSibling === null &&\n img.getAttribute('aria-roledescription') === 'checkbox'\n )\n}\n\nfunction $convertUploadServerElement(domNode: HTMLImageElement): DOMConversionOutput | null {\n if (\n domNode.hasAttribute('data-lexical-upload-relation-to') &&\n domNode.hasAttribute('data-lexical-upload-id')\n ) {\n const id = domNode.getAttribute('data-lexical-upload-id')\n const relationTo = domNode.getAttribute('data-lexical-upload-relation-to')\n\n if (id != null && relationTo != null) {\n const node = $createUploadServerNode({\n data: {\n fields: {},\n relationTo,\n value: id,\n },\n })\n return { node }\n }\n }\n const img = domNode\n if (img.src.startsWith('file:///') || isGoogleDocCheckboxImg(img)) {\n return null\n }\n // TODO: Auto-upload functionality here!\n //}\n return null\n}\n\nexport type SerializedUploadNode = {\n children?: never // required so that our typed editor state doesn't automatically add children\n type: 'upload'\n} & Spread<UploadData, SerializedDecoratorBlockNode>\n\nexport class UploadServerNode extends DecoratorBlockNode {\n __data: UploadData\n\n constructor({\n data,\n format,\n key,\n }: {\n data: UploadData\n format?: ElementFormatType\n key?: NodeKey\n }) {\n super(format, key)\n this.__data = data\n }\n\n static clone(node: UploadServerNode): UploadServerNode {\n return new this({\n data: node.__data,\n format: node.__format,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'upload'\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n img: (node: HTMLImageElement) => ({\n conversion: $convertUploadServerElement,\n priority: 0,\n }),\n }\n }\n\n static importJSON(serializedNode: SerializedUploadNode): UploadServerNode {\n if (serializedNode.version === 1 && (serializedNode?.value as unknown as { id: string })?.id) {\n serializedNode.value = (serializedNode.value as unknown as { id: string }).id\n }\n if (serializedNode.version === 2 && !serializedNode?.id) {\n serializedNode.id = new ObjectID.default().toHexString()\n serializedNode.version = 3\n }\n\n const importedData: UploadData = {\n id: serializedNode.id,\n fields: serializedNode.fields,\n relationTo: serializedNode.relationTo,\n value: serializedNode.value,\n }\n\n const node = $createUploadServerNode({ data: importedData })\n node.setFormat(serializedNode.format)\n\n return node\n }\n\n static isInline(): false {\n return false\n }\n\n decorate(): JSX.Element {\n // @ts-expect-error\n return <RawUploadComponent data={this.__data} format={this.__format} nodeKey={this.getKey()} />\n }\n\n exportDOM(): DOMExportOutput {\n const element = document.createElement('img')\n element.setAttribute('data-lexical-upload-id', String(this.__data?.value))\n element.setAttribute('data-lexical-upload-relation-to', this.__data?.relationTo)\n\n return { element }\n }\n\n exportJSON(): SerializedUploadNode {\n return {\n ...super.exportJSON(),\n ...this.getData(),\n type: 'upload',\n version: 3,\n }\n }\n\n getData(): UploadData {\n return this.getLatest().__data\n }\n\n setData(data: UploadData): void {\n const writable = this.getWritable()\n writable.__data = data\n }\n\n updateDOM(): false {\n return false\n }\n}\n\nexport function $createUploadServerNode({\n data,\n}: {\n data: Omit<UploadData, 'id'> & Partial<Pick<UploadData, 'id'>>\n}): UploadServerNode {\n if (!data?.id) {\n data.id = new ObjectID.default().toHexString()\n }\n return $applyNodeReplacement(new UploadServerNode({ data: data as UploadData }))\n}\n\nexport function $isUploadServerNode(\n node: LexicalNode | null | undefined,\n): node is UploadServerNode {\n return node instanceof UploadServerNode\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["c", "_c", "Drawer", "EditDepthProvider", "useModal", "Form", "FormSubmit", "RenderFields", "useDocumentInfo", "useServerFunctions", "useTranslation", "abortAndIgnore", "useCallback", "useEffect", "useRef", "useState", "v4", "uuid", "DrawerContent", "data", "featureKey", "fieldMapOverride", "handleDrawerSubmit", "schemaFieldsPathOverride", "schemaPath", "schemaPathSuffix", "t", "useTranslation", "id", "collectionSlug", "docPermissions", "getDocPreferences", "globalSlug", "useDocumentInfo", "onChangeAbortControllerRef", "useRef", "AbortController", "initialState", "setInitialState", "useState", "fieldProps", "featureClientSchemaMap", "permissions", "useEditorConfigContext", "getFormState", "useServerFunctions", "schemaFieldsPath", "fields", "useEffect", "controller", "state", "docPreferences", "operation", "renderAllFields", "signal", "abortAndIgnore", "onChange", "useCallback", "formState", "prevFormState", "current", "_jsxs", "Form", "beforeSubmit", "disableValidationOnSubmit", "Array", "isArray", "onSubmit", "uuid", "_jsx", "RenderFields", "forceRender", "parentIndexPath", "parentPath", "parentSchemaPath", "readOnly", "FormSubmit", "FieldsDrawer", "t0", "$", "_c", "className", "data", "drawerSlug", "drawerTitle", "featureKey", "fieldMapOverride", "handleDrawerSubmit", "schemaFieldsPathOverride", "schemaPath", "schemaPathSuffix", "closeModal", "useModal", "t1", "t2", "args", "args2", "setTimeout", "t3", "_jsx", "EditDepthProvider", "children", "Drawer", "slug", "title", "DrawerContent", "c", "_c", "useLexicalComposerContext", "useModal", "$getPreviousSelection", "$getSelection", "$setSelection", "useEffect", "useState", "useLexicalDrawer", "slug", "restoreLate", "$", "editor", "selectionState", "setSelectionState", "wasOpen", "setWasOpen", "closeModal", "closeBaseModal", "isModalOpen", "isBaseModalOpen", "modalState", "toggleModal", "toggleBaseModal", "t0", "read", "selection", "storeSelection", "t1", "update", "clone", "discrete", "skipTransforms", "restoreSelection", "t2", "closeDrawer", "t3", "toggleDrawer", "t4", "t5", "thisModalState", "isOpen", "setTimeout", "t6", "c", "_c", "useAuth", "useConfig", "useEntityVisibility", "React", "filterRichTextCollections", "collections", "options", "filter", "slug", "admin", "enableRichTextRelationship", "upload", "visibleEntities", "includes", "uploads", "Boolean", "EnabledRelationshipsCondition", "props", "$", "t0", "rest", "children", "undefined", "config", "t1", "user", "t2", "map", "t3", "enabledCollectionSlugs", "useState", "length", "t4", "cloneElement", "createCommand", "INSERT_UPLOAD_WITH_DRAWER_COMMAND", "ObjectID", "$applyNodeReplacement", "React", "DecoratorBlockNode", "ObjectID", "$applyNodeReplacement", "isGoogleDocCheckboxImg", "img", "parentElement", "tagName", "previousSibling", "getAttribute", "$convertUploadServerElement", "domNode", "hasAttribute", "id", "relationTo", "node", "$createUploadServerNode", "data", "fields", "value", "src", "startsWith", "UploadServerNode", "__data", "constructor", "format", "key", "clone", "__format", "__key", "getType", "importDOM", "conversion", "priority", "importJSON", "serializedNode", "version", "default", "toHexString", "importedData", "setFormat", "isInline", "decorate", "_jsx", "RawUploadComponent", "nodeKey", "getKey", "exportDOM", "element", "document", "createElement", "setAttribute", "String", "exportJSON", "getData", "type", "getLatest", "setData", "writable", "getWritable", "updateDOM", "RawUploadComponent", "lazy", "then", "module", "default", "UploadComponent", "$convertUploadElement", "domNode", "hasAttribute", "id", "getAttribute", "relationTo", "node", "$createUploadNode", "data", "fields", "value", "img", "src", "startsWith", "isGoogleDocCheckboxImg", "UploadNode", "UploadServerNode", "clone", "getType", "importDOM", "conversion", "priority", "importJSON", "serializedNode", "version", "ObjectID", "toHexString", "importedData", "setFormat", "format", "decorate", "_jsx", "__data", "nodeKey", "getKey", "exportJSON", "$applyNodeReplacement", "$isUploadNode"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createCommand as u}from"lexical";var d=u("INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND");import{jsx as h}from"react/jsx-runtime";import*as l from"react";import{DecoratorBlockNode as c}from"@lexical/react/LexicalDecoratorBlockNode.js";function p(r){let t=r.getAttribute("data-lexical-relationship-id"),e=r.getAttribute("data-lexical-relationship-relationTo");return t!=null&&e!=null?{node:o({relationTo:e,value:t})}:null}var n=class extends c{__data;constructor({data:t,format:e,key:a}){super(e,a),this.__data=t}static clone(t){return new this({data:t.__data,format:t.__format,key:t.__key})}static getType(){return"relationship"}static importDOM(){return{div:t=>!t.hasAttribute("data-lexical-relationship-relationTo")||!t.hasAttribute("data-lexical-relationship-id")?null:{conversion:p,priority:2}}}static importJSON(t){t.version===1&&t?.value?.id&&(t.value=t.value.id);let e={relationTo:t.relationTo,value:t.value},a=o(e);return a.setFormat(t.format),a}static isInline(){return!1}decorate(t,e){return null}exportDOM(){let t=document.createElement("div");t.setAttribute("data-lexical-relationship-id",String(this.__data?.value)),t.setAttribute("data-lexical-relationship-relationTo",this.__data?.relationTo);let e=document.createTextNode(this.getTextContent());return t.append(e),{element:t}}exportJSON(){return{...super.exportJSON(),...this.getData(),type:"relationship",version:2}}getData(){return this.getLatest().__data}getTextContent(){return`${this.__data?.relationTo} relation to ${this.__data?.value}`}setData(t){let e=this.getWritable();e.__data=t}};function o(r){return new n({data:r})}var _=l.lazy(()=>import("./RelationshipComponent-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{createCommand as u}from"lexical";var d=u("INSERT_RELATIONSHIP_WITH_DRAWER_COMMAND");import{jsx as h}from"react/jsx-runtime";import*as l from"react";import{DecoratorBlockNode as c}from"@lexical/react/LexicalDecoratorBlockNode.js";function p(r){let t=r.getAttribute("data-lexical-relationship-id"),e=r.getAttribute("data-lexical-relationship-relationTo");return t!=null&&e!=null?{node:o({relationTo:e,value:t})}:null}var n=class extends c{__data;constructor({data:t,format:e,key:a}){super(e,a),this.__data=t}static clone(t){return new this({data:t.__data,format:t.__format,key:t.__key})}static getType(){return"relationship"}static importDOM(){return{div:t=>!t.hasAttribute("data-lexical-relationship-relationTo")||!t.hasAttribute("data-lexical-relationship-id")?null:{conversion:p,priority:2}}}static importJSON(t){t.version===1&&t?.value?.id&&(t.value=t.value.id);let e={relationTo:t.relationTo,value:t.value},a=o(e);return a.setFormat(t.format),a}static isInline(){return!1}decorate(t,e){return null}exportDOM(){let t=document.createElement("div");t.setAttribute("data-lexical-relationship-id",String(this.__data?.value)),t.setAttribute("data-lexical-relationship-relationTo",this.__data?.relationTo);let e=document.createTextNode(this.getTextContent());return t.append(e),{element:t}}exportJSON(){return{...super.exportJSON(),...this.getData(),type:"relationship",version:2}}getData(){return this.getLatest().__data}getTextContent(){return`${this.__data?.relationTo} relation to ${this.__data?.value}`}setData(t){let e=this.getWritable();e.__data=t}};function o(r){return new n({data:r})}var _=l.lazy(()=>import("./RelationshipComponent-IMM4CFBE.js").then(r=>({default:r.RelationshipComponent})));function m(r){let t=r.getAttribute("data-lexical-relationship-id"),e=r.getAttribute("data-lexical-relationship-relationTo");return t!=null&&e!=null?{node:s({relationTo:e,value:t})}:null}var i=class extends n{static clone(t){return super.clone(t)}static getType(){return super.getType()}static importDOM(){return{div:t=>!t.hasAttribute("data-lexical-relationship-relationTo")||!t.hasAttribute("data-lexical-relationship-id")?null:{conversion:m,priority:2}}}static importJSON(t){t.version===1&&t?.value?.id&&(t.value=t.value.id);let e={relationTo:t.relationTo,value:t.value},a=s(e);return a.setFormat(t.format),a}decorate(t,e){return h(_,{className:e.theme.relationship??"LexicalEditorTheme__relationship",data:this.__data,format:this.__format,nodeKey:this.getKey()})}exportJSON(){return super.exportJSON()}};function s(r){return new i({data:r})}function R(r){return r instanceof i}export{d as a,i as b,s as c,R as d};
|
|
2
|
+
//# sourceMappingURL=chunk-O4IOO4EU.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var $=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function bt(i){return i instanceof HTMLElement}var v=class{_x;_y;constructor(t,e){this._x=t,this._y=e}calcDeltaXTo({x:t}){return this.x-t}calcDeltaYTo({y:t}){return this.y-t}calcDistanceTo(t){return Math.sqrt(Math.pow(this.calcDeltaXTo(t),2)+Math.pow(this.calcDeltaYTo(t),2))}calcHorizontalDistanceTo(t){return Math.abs(this.calcDeltaXTo(t))}calcVerticalDistance(t){return Math.abs(this.calcDeltaYTo(t))}equals({x:t,y:e}){return this.x===t&&this.y===e}get x(){return this._x}get y(){return this._y}};function W(i){return i instanceof v}import{c as pt}from"react/compiler-runtime";import{jsx as _t}from"react/jsx-runtime";import{useLexicalComposerContext as xt}from"@lexical/react/LexicalComposerContext.js";import{mergeRegister as wt}from"@lexical/utils";import{$getSelection as B,$isRangeSelection as Y,$isTextNode as Ot,COMMAND_PRIORITY_LOW as St,createCommand as yt}from"lexical";import{useEffect as q,useState as Ct}from"react";import*as P from"react";import{c as J}from"react/compiler-runtime";import{useLexicalComposerContext as X}from"@lexical/react/LexicalComposerContext.js";import{mergeRegister as H}from"@lexical/utils";import{$getSelection as Z,$isRangeSelection as tt,COMMAND_PRIORITY_LOW as I,createCommand as et,KEY_ARROW_DOWN_COMMAND as nt,KEY_ARROW_UP_COMMAND as ot,KEY_ENTER_COMMAND as it,KEY_ESCAPE_COMMAND as st,KEY_TAB_COMMAND as rt}from"lexical";import{useCallback as A,useEffect as E,useLayoutEffect as lt,useMemo as ct,useRef as at,useState as ut}from"react";var ft="slash-menu-popup",k=i=>{let t=document.getElementById("slash-menu");if(!t)return;let e=t.getBoundingClientRect();e.top+e.height>window.innerHeight&&t.scrollIntoView({block:"center"}),e.top<0&&t.scrollIntoView({block:"center"}),i.scrollIntoView({block:"nearest"})};function dt(i,t,e){let n=e;for(let o=n;o<=t.length;o++)i.substring(i.length-o)===t.substring(0,o)&&(n=o);return n}function mt(i){let t=Z();if(!tt(t)||!t.isCollapsed())return null;let e=t.anchor;if(e.type!=="text")return null;let n=e.getNode();if(!n.isSimpleText())return null;let o=e.offset,r=n.getTextContent().slice(0,o),a=i.replaceableString.length,m=dt(r,i.matchingString,a),s=o-m;if(s<0)return null;let l;return s===0?[l]=n.splitText(o):[,l]=n.splitText(s,o),l}function ht(i,t){let e=getComputedStyle(i),n=e.position==="absolute",o=t?/(auto|scroll|hidden)/:/(auto|scroll)/;if(e.position==="fixed")return document.body;for(let r=i;r=r.parentElement;)if(e=getComputedStyle(r),!(n&&e.position==="static")&&o.test(e.overflow+e.overflowY+e.overflowX))return r;return document.body}function U(i,t){let e=i.getBoundingClientRect(),n=t.getBoundingClientRect();return e.top>n.top&&e.top<n.bottom}function gt(i,t,e,n){let o=J(7),[r]=X(),a,m;o[0]!==t||o[1]!==i||o[2]!==r||o[3]!==e||o[4]!==n?(a=()=>{if(t!=null&&i!=null){let s=r.getRootElement(),l=s!=null?ht(s,!1):document.body,g;g=!1;let c;c=U(t,l);let d=function(){g||(window.requestAnimationFrame(function(){e(),g=!1}),g=!0);let O=U(t,l);O!==c&&(c=O,n?.(O))},x=new ResizeObserver(e);return window.addEventListener("resize",e),document.addEventListener("scroll",d,{capture:!0,passive:!0}),x.observe(t),()=>{x.unobserve(t),window.removeEventListener("resize",e),document.removeEventListener("scroll",d,!0)}}},m=[t,r,n,e,i],o[0]=t,o[1]=i,o[2]=r,o[3]=e,o[4]=n,o[5]=a,o[6]=m):(a=o[5],m=o[6]),E(a,m)}var F=et("SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND");function K({anchorElementRef:i,close:t,editor:e,groups:n,menuRenderFn:o,onSelectItem:r,resolution:a,shouldSplitNodeWithQuery:m=!1}){let[s,l]=ut(null),g=a.match&&a.match.matchingString||"",c=A(u=>{let f=e.getRootElement();f!==null&&(f.setAttribute("aria-activedescendant",`${ft}__item-${u.key}`),l(u.key))},[e]),d=A(()=>{if(n!==null&&g!=null){let u=n.flatMap(f=>f.items);if(u.length){let f=u[0];c(f)}}},[n,c,g]);E(()=>{d()},[g,d]);let x=A(u=>{e.update(()=>{let f=a.match!=null&&m?mt(a.match):null;f&&f.remove()},{discrete:!0}),r(u,t,a.match?a.match.matchingString:"")},[e,m,a.match,r,t]);E(()=>()=>{let u=e.getRootElement();u!==null&&u.removeAttribute("aria-activedescendant")},[e]),lt(()=>{n===null?l(null):s===null&&d()},[n,s,c,d]),E(()=>H(e.registerCommand(F,({item:u})=>u.ref&&u.ref.current!=null?(k(u.ref.current),!0):!1,I)),[e,c]),E(()=>H(e.registerCommand(nt,u=>{let f=u;if(n!==null&&n.length&&s!==null){let p=n.flatMap(S=>S.items),h=p.findIndex(S=>S.key===s),w=h!==p.length-1?h+1:0,_=p[w];c(_),_.ref!=null&&_.ref.current&&e.dispatchCommand(F,{index:w,item:_}),f.preventDefault(),f.stopImmediatePropagation()}return!0},I),e.registerCommand(ot,u=>{let f=u;if(n!==null&&n.length&&s!==null){let p=n.flatMap(S=>S.items),h=p.findIndex(S=>S.key===s),w=h!==0?h-1:p.length-1,_=p[w];c(_),_.ref!=null&&_.ref.current&&k(_.ref.current),f.preventDefault(),f.stopImmediatePropagation()}return!0},I),e.registerCommand(st,u=>{let f=u;return f.preventDefault(),f.stopImmediatePropagation(),t(),!0},I),e.registerCommand(rt,u=>{let f=u;if(n===null||s===null)return!1;let h=n.flatMap(w=>w.items).find(w=>w.key===s);return h?(f.preventDefault(),f.stopImmediatePropagation(),x(h),!0):!1},I),e.registerCommand(it,u=>{if(n===null||s===null)return!1;let p=n.flatMap(h=>h.items).find(h=>h.key===s);return p?(u!==null&&(u.preventDefault(),u.stopImmediatePropagation()),x(p),!0):!1},I)),[x,t,e,n,s,c]);let O=ct(()=>({groups:n,selectedItemKey:s,selectItemAndCleanUp:x,setSelectedItemKey:l}),[x,s,n]);return o(i,O,a.match?a.match.matchingString:"")}function V(i,t,e,n){let[o]=X(),r=at($?document.createElement("div"):null),a=A(()=>{if(r.current===null||parent===void 0)return;let s=o.getRootElement(),l=r.current,g=32,c=l.firstChild;if(s!==null&&t!==null){let{height:d,width:x}=t.getRect(),{left:O,top:u}=t.getRect(),f=u;if(u-=i.getBoundingClientRect().top+window.scrollY,O-=i.getBoundingClientRect().left+window.scrollX,l.style.left=`${O+window.scrollX}px`,l.style.height=`${d}px`,l.style.width=`${x}px`,c!==null){let p=c.getBoundingClientRect(),h=p.height,w=p.width,_=s.getBoundingClientRect();O+w>_.right&&(l.style.left=`${_.right-w+window.scrollX}px`);let S=f+h+g>window.innerHeight,y=f<0;S&&!y?l.style.top=`${u+g-h+window.scrollY-(d+24)}px`:l.style.top=`${u+window.scrollY+g}px`}l.isConnected||(n!=null&&(l.className=n),l.setAttribute("aria-label","Slash menu"),l.setAttribute("id","slash-menu"),l.setAttribute("role","listbox"),l.style.display="block",l.style.position="absolute",i.append(l)),r.current=l,s.setAttribute("aria-controls","slash-menu")}},[o,t,n,i]);E(()=>{let s=o.getRootElement();if(t!==null)return a(),()=>{s!==null&&s.removeAttribute("aria-controls");let l=r.current;l!==null&&l.isConnected&&l.remove()}},[o,a,t]);let m=A(s=>{t!==null&&(s||e(null))},[t,e]);return gt(t,r.current,a,m),r}var qt=`\\.,\\+\\*\\?\\$\\@\\|#{}\\(\\)\\^\\-\\[\\]\\\\/!%'"~=<>_:;`;function Rt(i){let t=i.anchor;if(t.type!=="text")return null;let e=t.getNode();if(!e.isSimpleText())return null;let n=t.offset;return e.getTextContent().slice(0,n)}function z(i,t,e){let n=e.getSelection();if(n===null||!n.isCollapsed)return!1;let o=n.anchorNode,r=i,a=n.anchorOffset;if(o==null||a==null)return!1;try{t.setStart(o,r),t.setEnd(o,a>1?a:1)}catch{return!1}return!0}function Tt(i){let t;return i.getEditorState().read(()=>{let e=B();Y(e)&&(t=Rt(e))}),t}function Q(i,t){return t!==0?!1:i.getEditorState().read(()=>{let e=B();if(Y(e)){let r=e.anchor.getNode().getPreviousSibling();return Ot(r)&&r.isTextEntity()}return!1})}function j(i){P.startTransition?P.startTransition(i):i()}var Mt=yt("ENABLE_SLASH_MENU_COMMAND");function zt(i){let t=pt(31),{anchorClassName:e,anchorElem:n,groups:o,menuRenderFn:r,onClose:a,onOpen:m,onQueryChange:s,onSelectItem:l,triggerFn:g}=i,[c]=xt(),[d,x]=Ct(null),O=V(n,d,x,e),u;t[0]!==a||t[1]!==d?(u=()=>{x(null),a!=null&&d!==null&&a()},t[0]=a,t[1]=d,t[2]=u):u=t[2];let f=u,p;t[3]!==m||t[4]!==d?(p=C=>{x(C),m!=null&&d===null&&m(C)},t[3]=m,t[4]=d,t[5]=p):p=t[5];let h=p,w,_;t[6]!==c||t[7]!==h?(w=()=>wt(c.registerCommand(Mt,C=>{let{node:D}=C;return c.getEditorState().read(()=>{let R={leadOffset:0,matchingString:"",replaceableString:""};if(!Q(c,R.leadOffset)&&D!==null){let T=c._window??window,N=T.document.createRange();z(R.leadOffset,N,T)!==null&&j(()=>h({getRect:()=>N.getBoundingClientRect(),match:R}));return}}),!0},St)),_=[c,h],t[6]=c,t[7]=h,t[8]=w,t[9]=_):(w=t[8],_=t[9]),q(w,_);let S;t[10]!==c||t[11]!==f||t[12]!==g||t[13]!==s||t[14]!==h?(S=()=>{let C=()=>{c.getEditorState().read(()=>{let R=c._window??window,T=R.document.createRange(),N=B(),L=Tt(c);if(!Y(N)||!N.isCollapsed()||L===void 0||T===null){f();return}let M=g({editor:c,query:L});if(s(M?M.matchingString:null),M!==null&&!Q(c,M.leadOffset)&&z(M.leadOffset,T,R)!==null){j(()=>h({getRect:()=>T.getBoundingClientRect(),match:M}));return}f()})},D=c.registerUpdateListener(C);return()=>{D()}},t[10]=c,t[11]=f,t[12]=g,t[13]=s,t[14]=h,t[15]=S):S=t[15];let y;t[16]!==c||t[17]!==g||t[18]!==s||t[19]!==d||t[20]!==f||t[21]!==h?(y=[c,g,s,d,f,h],t[16]=c,t[17]=g,t[18]=s,t[19]=d,t[20]=f,t[21]=h,t[22]=y):y=t[22],q(S,y);let b;return t[23]!==O||t[24]!==d||t[25]!==c||t[26]!==f||t[27]!==o||t[28]!==r||t[29]!==l?(b=O.current===null||d===null||c===null?null:_t(K,{anchorElementRef:O,close:f,editor:c,groups:o,menuRenderFn:r,onSelectItem:l,resolution:d,shouldSplitNodeWithQuery:!0}),t[23]=O,t[24]=d,t[25]=c,t[26]=f,t[27]=o,t[28]=r,t[29]=l,t[30]=b):b=t[30],b}var G=class i{_bottom;_left;_right;_top;constructor(t,e,n,o){let[r,a]=e<=o?[e,o]:[o,e],[m,s]=t<=n?[t,n]:[n,t];this._top=r,this._right=s,this._left=m,this._bottom=a}static fromDOM(t){let{height:e,left:n,top:o,width:r}=t.getBoundingClientRect();return i.fromLWTH(n,r,o,e)}static fromDOMRect(t){let{height:e,left:n,top:o,width:r}=t;return i.fromLWTH(n,r,o,e)}static fromLTRB(t,e,n,o){return new i(t,e,n,o)}static fromLWTH(t,e,n,o){return new i(t,n,t+e,n+o)}static fromPoints(t,e){let{x:n,y:o}=t,{x:r,y:a}=e;return i.fromLTRB(n,o,r,a)}contains(t){if(W(t)){let{x:a,y:m}=t,s=m<this._top,l=m>this._bottom,g=a<this._left,c=a>this._right;return{reason:{isOnBottomSide:l,isOnLeftSide:g,isOnRightSide:c,isOnTopSide:s},result:!s&&!l&&!g&&!c}}let{bottom:e,left:n,right:o,top:r}=t;return r>=this._top&&r<=this._bottom&&e>=this._top&&e<=this._bottom&&n>=this._left&&n<=this._right&&o>=this._left&&o<=this._right}distanceFromPoint(t){let e=this.contains(t);if(e.result)return{distance:0,isOnBottomSide:e.reason.isOnBottomSide,isOnLeftSide:e.reason.isOnLeftSide,isOnRightSide:e.reason.isOnRightSide,isOnTopSide:e.reason.isOnTopSide};let n=0,o=0;return t.x<this._left?n=this._left-t.x:t.x>this._right&&(n=t.x-this._right),t.y<this._top?o=this._top-t.y:t.y>this._bottom&&(o=t.y-this._bottom),{distance:Math.sqrt(n*n+o*o),isOnBottomSide:t.y>this._bottom,isOnLeftSide:t.x<this._left,isOnRightSide:t.x>this._right,isOnTopSide:t.y<this._top}}equals({bottom:t,left:e,right:n,top:o}){return o===this._top&&t===this._bottom&&e===this._left&&n===this._right}generateNewRect({bottom:t=this.bottom,left:e=this.left,right:n=this.right,top:o=this.top}){return new i(e,o,n,t)}intersectsWith(t){let{height:e,left:n,top:o,width:r}=t,{height:a,left:m,top:s,width:l}=this,g=n+r>=m+l?n+r:m+l,c=o+e>=s+a?o+e:s+a,d=n<=m?n:m,x=o<=s?o:s;return g-d<=r+l&&c-x<=e+a}get bottom(){return this._bottom}get height(){return Math.abs(this._bottom-this._top)}get left(){return this._left}get right(){return this._right}get top(){return this._top}get width(){return Math.abs(this._left-this._right)}};function Jt({editorConfig:i}){return i.features.nodes.map(t=>"node"in t?t.node:t)}export{$ as a,bt as b,v as c,W as d,qt as e,Mt as f,zt as g,G as h,Jt as i};
|
|
2
|
+
//# sourceMappingURL=chunk-OOBB5GCO.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/lexical/utils/canUseDOM.ts", "../../../src/lexical/utils/guard.ts", "../../../src/lexical/utils/point.ts", "../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.tsx", "../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.tsx", "../../../src/lexical/utils/rect.ts", "../../../src/lexical/nodes/index.ts"],
|
|
4
|
+
"sourcesContent": ["'use client'\nexport const CAN_USE_DOM: boolean =\n typeof window !== 'undefined' &&\n typeof window.document !== 'undefined' &&\n typeof window.document.createElement !== 'undefined'\n", "'use client'\nexport function isHTMLElement(x: unknown): x is HTMLElement {\n return x instanceof HTMLElement\n}\n", "'use client'\nexport class Point {\n private readonly _x: number\n\n private readonly _y: number\n\n constructor(x: number, y: number) {\n this._x = x\n this._y = y\n }\n\n public calcDeltaXTo({ x }: Point): number {\n return this.x - x\n }\n\n public calcDeltaYTo({ y }: Point): number {\n return this.y - y\n }\n\n public calcDistanceTo(point: Point): number {\n return Math.sqrt(Math.pow(this.calcDeltaXTo(point), 2) + Math.pow(this.calcDeltaYTo(point), 2))\n }\n\n public calcHorizontalDistanceTo(point: Point): number {\n return Math.abs(this.calcDeltaXTo(point))\n }\n\n public calcVerticalDistance(point: Point): number {\n return Math.abs(this.calcDeltaYTo(point))\n }\n\n public equals({ x, y }: Point): boolean {\n return this.x === x && this.y === y\n }\n\n get x(): number {\n return this._x\n }\n\n get y(): number {\n return this._y\n }\n}\n\nexport function isPoint(x: unknown): x is Point {\n return x instanceof Point\n}\n", "'use client'\nimport type {\n LexicalCommand,\n LexicalEditor,\n ParagraphNode,\n RangeSelection,\n TextNode,\n} from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n $isTextNode,\n COMMAND_PRIORITY_LOW,\n createCommand,\n} from 'lexical'\nimport { type JSX, useCallback, useEffect, useState } from 'react'\nimport * as React from 'react'\n\nimport type { MenuTextMatch, TriggerFn } from '../useMenuTriggerMatch.js'\nimport type { MenuRenderFn, MenuResolution } from './LexicalMenu.js'\nimport type { SlashMenuGroupInternal, SlashMenuItem } from './types.js'\n\nimport { LexicalMenu, useMenuAnchorRef } from './LexicalMenu.js'\n\nexport const PUNCTUATION = '\\\\.,\\\\+\\\\*\\\\?\\\\$\\\\@\\\\|#{}\\\\(\\\\)\\\\^\\\\-\\\\[\\\\]\\\\\\\\/!%\\'\"~=<>_:;'\n\nfunction getTextUpToAnchor(selection: RangeSelection): null | string {\n const anchor = selection.anchor\n if (anchor.type !== 'text') {\n return null\n }\n const anchorNode = anchor.getNode()\n if (!anchorNode.isSimpleText()) {\n return null\n }\n const anchorOffset = anchor.offset\n return anchorNode.getTextContent().slice(0, anchorOffset)\n}\n\nfunction tryToPositionRange(leadOffset: number, range: Range, editorWindow: Window): boolean {\n const domSelection = editorWindow.getSelection()\n if (domSelection === null || !domSelection.isCollapsed) {\n return false\n }\n const anchorNode = domSelection.anchorNode\n const startOffset = leadOffset\n const endOffset = domSelection.anchorOffset\n\n if (anchorNode == null || endOffset == null) {\n return false\n }\n\n try {\n range.setStart(anchorNode, startOffset)\n // if endOffset is 0, positioning the range for when you click the plus button to open the slash menu will fial\n range.setEnd(anchorNode, endOffset > 1 ? endOffset : 1)\n } catch (error) {\n return false\n }\n\n return true\n}\n\nfunction getQueryTextForSearch(editor: LexicalEditor): string | undefined {\n let text\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n if (!$isRangeSelection(selection)) {\n return\n }\n text = getTextUpToAnchor(selection)\n })\n return text\n}\n\nfunction isSelectionOnEntityBoundary(editor: LexicalEditor, offset: number): boolean {\n if (offset !== 0) {\n return false\n }\n return editor.getEditorState().read(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n const anchor = selection.anchor\n const anchorNode = anchor.getNode()\n const prevSibling = anchorNode.getPreviousSibling()\n return $isTextNode(prevSibling) && prevSibling.isTextEntity()\n }\n return false\n })\n}\n\nfunction startTransition(callback: () => void) {\n if (React.startTransition) {\n React.startTransition(callback)\n } else {\n callback()\n }\n}\n\nexport { useDynamicPositioning } from './LexicalMenu.js'\n\nexport type TypeaheadMenuPluginProps = {\n anchorClassName?: string\n anchorElem: HTMLElement\n groups: Array<SlashMenuGroupInternal>\n menuRenderFn: MenuRenderFn\n onClose?: () => void\n onOpen?: (resolution: MenuResolution) => void\n onQueryChange: (matchingString: null | string) => void\n onSelectItem: (item: SlashMenuItem, closeMenu: () => void, matchingString: string) => void\n triggerFn: TriggerFn\n}\n\nexport const ENABLE_SLASH_MENU_COMMAND: LexicalCommand<{\n node: ParagraphNode\n}> = createCommand('ENABLE_SLASH_MENU_COMMAND')\n\nexport function LexicalTypeaheadMenuPlugin({\n anchorClassName,\n anchorElem,\n groups,\n menuRenderFn,\n onClose,\n onOpen,\n onQueryChange,\n onSelectItem,\n triggerFn,\n}: TypeaheadMenuPluginProps): JSX.Element | null {\n const [editor] = useLexicalComposerContext()\n const [resolution, setResolution] = useState<MenuResolution | null>(null)\n const anchorElementRef = useMenuAnchorRef(anchorElem, resolution, setResolution, anchorClassName)\n\n const closeTypeahead = useCallback(() => {\n setResolution(null)\n if (onClose != null && resolution !== null) {\n onClose()\n }\n }, [onClose, resolution])\n\n const openTypeahead = useCallback(\n (res: MenuResolution) => {\n setResolution(res)\n if (onOpen != null && resolution === null) {\n onOpen(res)\n }\n },\n [onOpen, resolution],\n )\n\n // This is mainly used for the AddBlockHandlePlugin, so that the slash menu can be opened from there\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n ENABLE_SLASH_MENU_COMMAND,\n ({ node }) => {\n editor.getEditorState().read(() => {\n const match: MenuTextMatch = {\n leadOffset: 0,\n matchingString: '',\n replaceableString: '',\n }\n if (!isSelectionOnEntityBoundary(editor, match.leadOffset)) {\n if (node !== null) {\n const editorWindow = editor._window ?? window\n const range = editorWindow.document.createRange()\n\n const isRangePositioned = tryToPositionRange(match.leadOffset, range, editorWindow)\n if (isRangePositioned !== null) {\n startTransition(() =>\n openTypeahead({\n getRect: () => {\n return range.getBoundingClientRect()\n },\n match,\n }),\n )\n }\n\n return\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, openTypeahead])\n\n useEffect(() => {\n const updateListener = () => {\n editor.getEditorState().read(() => {\n const editorWindow = editor._window ?? window\n const range = editorWindow.document.createRange()\n const selection = $getSelection()\n const text = getQueryTextForSearch(editor)\n\n if (\n !$isRangeSelection(selection) ||\n !selection.isCollapsed() ||\n text === undefined ||\n range === null\n ) {\n closeTypeahead()\n return\n }\n\n const match = triggerFn({ editor, query: text })\n onQueryChange(match ? match.matchingString : null)\n\n if (match !== null && !isSelectionOnEntityBoundary(editor, match.leadOffset)) {\n const isRangePositioned = tryToPositionRange(match.leadOffset, range, editorWindow)\n if (isRangePositioned !== null) {\n startTransition(() =>\n openTypeahead({\n getRect: () => {\n return range.getBoundingClientRect()\n },\n match,\n }),\n )\n return\n }\n }\n closeTypeahead()\n })\n }\n\n const removeUpdateListener = editor.registerUpdateListener(updateListener)\n\n return () => {\n removeUpdateListener()\n }\n }, [editor, triggerFn, onQueryChange, resolution, closeTypeahead, openTypeahead])\n\n return anchorElementRef.current === null || resolution === null || editor === null ? null : (\n <LexicalMenu\n anchorElementRef={anchorElementRef}\n close={closeTypeahead}\n editor={editor}\n groups={groups}\n menuRenderFn={menuRenderFn}\n onSelectItem={onSelectItem}\n resolution={resolution}\n shouldSplitNodeWithQuery\n />\n )\n}\n\nexport type { MenuRenderFn, MenuResolution, MenuTextMatch, TriggerFn }\n", "'use client'\nimport type { LexicalCommand, LexicalEditor, TextNode } from 'lexical'\nimport type { JSX, ReactPortal, RefObject } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_LOW,\n createCommand,\n KEY_ARROW_DOWN_COMMAND,\n KEY_ARROW_UP_COMMAND,\n KEY_ENTER_COMMAND,\n KEY_ESCAPE_COMMAND,\n KEY_TAB_COMMAND,\n} from 'lexical'\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\n\nimport type { MenuTextMatch } from '../useMenuTriggerMatch.js'\nimport type { SlashMenuGroupInternal, SlashMenuItem, SlashMenuItemInternal } from './types.js'\n\nimport { CAN_USE_DOM } from '../../../utils/canUseDOM.js'\n\nexport type MenuResolution = {\n getRect: () => DOMRect\n match?: MenuTextMatch\n}\n\nconst baseClass = 'slash-menu-popup'\n\nexport type MenuRenderFn = (\n anchorElementRef: RefObject<HTMLElement | null>,\n itemProps: {\n groups: Array<SlashMenuGroupInternal>\n selectedItemKey: null | string\n selectItemAndCleanUp: (selectedItem: SlashMenuItem) => void\n setSelectedItemKey: (itemKey: string) => void\n },\n matchingString: null | string,\n) => JSX.Element | null | ReactPortal\n\nconst scrollIntoViewIfNeeded = (target: HTMLElement) => {\n const typeaheadContainerNode = document.getElementById('slash-menu')\n if (!typeaheadContainerNode) {\n return\n }\n\n const typeaheadRect = typeaheadContainerNode.getBoundingClientRect()\n\n if (typeaheadRect.top + typeaheadRect.height > window.innerHeight) {\n typeaheadContainerNode.scrollIntoView({\n block: 'center',\n })\n }\n\n if (typeaheadRect.top < 0) {\n typeaheadContainerNode.scrollIntoView({\n block: 'center',\n })\n }\n\n target.scrollIntoView({ block: 'nearest' })\n}\n\n/**\n * Walk backwards along user input and forward through entity title to try\n * and replace more of the user's text with entity.\n */\nfunction getFullMatchOffset(documentText: string, entryText: string, offset: number) {\n let triggerOffset = offset\n for (let i = triggerOffset; i <= entryText.length; i++) {\n if (documentText.substring(documentText.length - i) === entryText.substring(0, i)) {\n triggerOffset = i\n }\n }\n return triggerOffset\n}\n\n/**\n * Split Lexical TextNode and return a new TextNode only containing matched text.\n * Common use cases include: removing the node, replacing with a new node.\n */\nfunction $splitNodeContainingQuery(match: MenuTextMatch): null | TextNode {\n const selection = $getSelection()\n if (!$isRangeSelection(selection) || !selection.isCollapsed()) {\n return null\n }\n const anchor = selection.anchor\n if (anchor.type !== 'text') {\n return null\n }\n const anchorNode = anchor.getNode()\n if (!anchorNode.isSimpleText()) {\n return null\n }\n const selectionOffset = anchor.offset\n const textContent = anchorNode.getTextContent().slice(0, selectionOffset)\n const characterOffset = match.replaceableString.length\n const queryOffset = getFullMatchOffset(textContent, match.matchingString, characterOffset)\n const startOffset = selectionOffset - queryOffset\n if (startOffset < 0) {\n return null\n }\n let newNode\n if (startOffset === 0) {\n ;[newNode] = anchorNode.splitText(selectionOffset)\n } else {\n ;[, newNode] = anchorNode.splitText(startOffset, selectionOffset)\n }\n\n return newNode\n}\n\n// Got from https://stackoverflow.com/a/42543908/2013580\nexport function getScrollParent(\n element: HTMLElement,\n includeHidden: boolean,\n): HTMLBodyElement | HTMLElement {\n let style = getComputedStyle(element)\n const excludeStaticParent = style.position === 'absolute'\n const overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/\n if (style.position === 'fixed') {\n return document.body\n }\n for (let parent: HTMLElement | null = element; (parent = parent.parentElement); ) {\n style = getComputedStyle(parent)\n if (excludeStaticParent && style.position === 'static') {\n continue\n }\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) {\n return parent\n }\n }\n return document.body\n}\n\nfunction isTriggerVisibleInNearestScrollContainer(\n targetElement: HTMLElement,\n containerElement: HTMLElement,\n): boolean {\n const tRect = targetElement.getBoundingClientRect()\n const cRect = containerElement.getBoundingClientRect()\n return tRect.top > cRect.top && tRect.top < cRect.bottom\n}\n\n// Reposition the menu on scroll, window resize, and element resize.\nexport function useDynamicPositioning(\n resolution: MenuResolution | null,\n targetElement: HTMLElement | null,\n onReposition: () => void,\n onVisibilityChange?: (isInView: boolean) => void,\n) {\n const [editor] = useLexicalComposerContext()\n useEffect(() => {\n if (targetElement != null && resolution != null) {\n const rootElement = editor.getRootElement()\n const rootScrollParent =\n rootElement != null ? getScrollParent(rootElement, false) : document.body\n let ticking = false\n let previousIsInView = isTriggerVisibleInNearestScrollContainer(\n targetElement,\n rootScrollParent,\n )\n const handleScroll = function () {\n if (!ticking) {\n window.requestAnimationFrame(function () {\n onReposition()\n ticking = false\n })\n ticking = true\n }\n const isInView = isTriggerVisibleInNearestScrollContainer(targetElement, rootScrollParent)\n if (isInView !== previousIsInView) {\n previousIsInView = isInView\n if (onVisibilityChange != null) {\n onVisibilityChange(isInView)\n }\n }\n }\n const resizeObserver = new ResizeObserver(onReposition)\n window.addEventListener('resize', onReposition)\n document.addEventListener('scroll', handleScroll, {\n capture: true,\n passive: true,\n })\n resizeObserver.observe(targetElement)\n return () => {\n resizeObserver.unobserve(targetElement)\n window.removeEventListener('resize', onReposition)\n document.removeEventListener('scroll', handleScroll, true)\n }\n }\n }, [targetElement, editor, onVisibilityChange, onReposition, resolution])\n}\n\nexport const SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND: LexicalCommand<{\n index: number\n item: SlashMenuItemInternal\n}> = createCommand('SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND')\n\nexport function LexicalMenu({\n anchorElementRef,\n close,\n editor,\n // groups filtering is already handled in SlashMenu/index.tsx. Thus, groups always contains the matching items.\n groups,\n menuRenderFn,\n onSelectItem,\n resolution,\n shouldSplitNodeWithQuery = false,\n}: {\n anchorElementRef: RefObject<HTMLElement | null>\n close: () => void\n editor: LexicalEditor\n groups: Array<SlashMenuGroupInternal>\n menuRenderFn: MenuRenderFn\n onSelectItem: (item: SlashMenuItem, closeMenu: () => void, matchingString: string) => void\n resolution: MenuResolution\n shouldSplitNodeWithQuery?: boolean\n}): JSX.Element | null {\n const [selectedItemKey, setSelectedItemKey] = useState<null | string>(null)\n\n const matchingString = (resolution.match && resolution.match.matchingString) || ''\n\n const updateSelectedItem = useCallback(\n (item: SlashMenuItem) => {\n const rootElem = editor.getRootElement()\n if (rootElem !== null) {\n rootElem.setAttribute('aria-activedescendant', `${baseClass}__item-${item.key}`)\n setSelectedItemKey(item.key)\n }\n },\n [editor],\n )\n\n const setSelectedItemKeyToFirstMatchingItem = useCallback(() => {\n // set selected item to the first of the matching ones\n if (groups !== null && matchingString != null) {\n // groups filtering is already handled in SlashMenu/index.tsx. Thus, groups always contains the matching items.\n const allItems = groups.flatMap((group) => group.items)\n\n if (allItems.length) {\n const firstMatchingItem = allItems[0]\n updateSelectedItem(firstMatchingItem)\n }\n }\n }, [groups, updateSelectedItem, matchingString])\n\n useEffect(() => {\n setSelectedItemKeyToFirstMatchingItem()\n }, [matchingString, setSelectedItemKeyToFirstMatchingItem])\n\n const selectItemAndCleanUp = useCallback(\n (selectedItem: SlashMenuItem) => {\n editor.update(\n () => {\n const textNodeContainingQuery =\n resolution.match != null && shouldSplitNodeWithQuery\n ? $splitNodeContainingQuery(resolution.match)\n : null\n\n if (textNodeContainingQuery) {\n textNodeContainingQuery.remove()\n }\n },\n { discrete: true },\n )\n onSelectItem(selectedItem, close, resolution.match ? resolution.match.matchingString : '')\n },\n [editor, shouldSplitNodeWithQuery, resolution.match, onSelectItem, close],\n )\n\n useEffect(() => {\n return () => {\n const rootElem = editor.getRootElement()\n if (rootElem !== null) {\n rootElem.removeAttribute('aria-activedescendant')\n }\n }\n }, [editor])\n\n useLayoutEffect(() => {\n if (groups === null) {\n setSelectedItemKey(null)\n } else if (selectedItemKey === null) {\n setSelectedItemKeyToFirstMatchingItem()\n }\n }, [groups, selectedItemKey, updateSelectedItem, setSelectedItemKeyToFirstMatchingItem])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND,\n ({ item }) => {\n if (item.ref && item.ref.current != null) {\n scrollIntoViewIfNeeded(item.ref.current)\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, updateSelectedItem])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<KeyboardEvent>(\n KEY_ARROW_DOWN_COMMAND,\n (payload) => {\n const event = payload\n if (groups !== null && groups.length && selectedItemKey !== null) {\n const allItems = groups.flatMap((group) => group.items)\n const selectedIndex = allItems.findIndex((item) => item.key === selectedItemKey)\n\n const newSelectedIndex = selectedIndex !== allItems.length - 1 ? selectedIndex + 1 : 0\n\n const newSelectedItem = allItems[newSelectedIndex]\n\n updateSelectedItem(newSelectedItem)\n if (newSelectedItem.ref != null && newSelectedItem.ref.current) {\n editor.dispatchCommand(SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND, {\n index: newSelectedIndex,\n item: newSelectedItem,\n })\n }\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_ARROW_UP_COMMAND,\n (payload) => {\n const event = payload\n if (groups !== null && groups.length && selectedItemKey !== null) {\n const allItems = groups.flatMap((group) => group.items)\n const selectedIndex = allItems.findIndex((item) => item.key === selectedItemKey)\n\n const newSelectedIndex = selectedIndex !== 0 ? selectedIndex - 1 : allItems.length - 1\n\n const newSelectedItem = allItems[newSelectedIndex]\n\n updateSelectedItem(newSelectedItem)\n if (newSelectedItem.ref != null && newSelectedItem.ref.current) {\n scrollIntoViewIfNeeded(newSelectedItem.ref.current)\n }\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_ESCAPE_COMMAND,\n (payload) => {\n const event = payload\n event.preventDefault()\n event.stopImmediatePropagation()\n close()\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_TAB_COMMAND,\n (payload) => {\n const event = payload\n\n if (groups === null || selectedItemKey === null) {\n return false\n }\n const allItems = groups.flatMap((group) => group.items)\n const selectedItem = allItems.find((item) => item.key === selectedItemKey)\n if (!selectedItem) {\n return false\n }\n\n event.preventDefault()\n event.stopImmediatePropagation()\n selectItemAndCleanUp(selectedItem)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ENTER_COMMAND,\n (event: KeyboardEvent | null) => {\n if (groups === null || selectedItemKey === null) {\n return false\n }\n const allItems = groups.flatMap((group) => group.items)\n const selectedItem = allItems.find((item) => item.key === selectedItemKey)\n if (!selectedItem) {\n return false\n }\n\n if (event !== null) {\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n selectItemAndCleanUp(selectedItem)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [selectItemAndCleanUp, close, editor, groups, selectedItemKey, updateSelectedItem])\n\n const listItemProps = useMemo(\n () => ({\n groups,\n selectedItemKey,\n selectItemAndCleanUp,\n setSelectedItemKey,\n }),\n [selectItemAndCleanUp, selectedItemKey, groups],\n )\n\n return menuRenderFn(\n anchorElementRef,\n listItemProps,\n resolution.match ? resolution.match.matchingString : '',\n )\n}\n\nexport function useMenuAnchorRef(\n anchorElem: HTMLElement,\n resolution: MenuResolution | null,\n setResolution: (r: MenuResolution | null) => void,\n className?: string,\n): RefObject<HTMLElement | null> {\n const [editor] = useLexicalComposerContext()\n const anchorElementRef = useRef<HTMLElement | null>(\n CAN_USE_DOM ? document.createElement('div') : null,\n )\n const positionMenu = useCallback(() => {\n if (anchorElementRef.current === null || parent === undefined) {\n return\n }\n const rootElement = editor.getRootElement()\n const containerDiv = anchorElementRef.current\n\n const VERTICAL_OFFSET = 32\n\n const menuEle = containerDiv.firstChild as Element\n if (rootElement !== null && resolution !== null) {\n const { height, width } = resolution.getRect()\n let { left, top } = resolution.getRect()\n\n const rawTop = top\n top -= anchorElem.getBoundingClientRect().top + window.scrollY\n left -= anchorElem.getBoundingClientRect().left + window.scrollX\n containerDiv.style.left = `${left + window.scrollX}px`\n containerDiv.style.height = `${height}px`\n containerDiv.style.width = `${width}px`\n if (menuEle !== null) {\n const menuRect = menuEle.getBoundingClientRect()\n const menuHeight = menuRect.height\n const menuWidth = menuRect.width\n\n const rootElementRect = rootElement.getBoundingClientRect()\n\n if (left + menuWidth > rootElementRect.right) {\n containerDiv.style.left = `${rootElementRect.right - menuWidth + window.scrollX}px`\n }\n\n const wouldGoOffBottomOfScreen = rawTop + menuHeight + VERTICAL_OFFSET > window.innerHeight\n //const wouldGoOffBottomOfContainer = top + menuHeight > rootElementRect.bottom\n const wouldGoOffTopOfScreen = rawTop < 0\n\n // Position slash menu above the cursor instead of below (default) if it would otherwise go off the bottom of the screen.\n if (wouldGoOffBottomOfScreen && !wouldGoOffTopOfScreen) {\n const margin = 24\n containerDiv.style.top = `${\n top + VERTICAL_OFFSET - menuHeight + window.scrollY - (height + margin)\n }px`\n } else {\n containerDiv.style.top = `${top + window.scrollY + VERTICAL_OFFSET}px`\n }\n }\n\n if (!containerDiv.isConnected) {\n if (className != null) {\n containerDiv.className = className\n }\n containerDiv.setAttribute('aria-label', 'Slash menu')\n containerDiv.setAttribute('id', 'slash-menu')\n containerDiv.setAttribute('role', 'listbox')\n containerDiv.style.display = 'block'\n containerDiv.style.position = 'absolute'\n anchorElem.append(containerDiv)\n }\n anchorElementRef.current = containerDiv\n rootElement.setAttribute('aria-controls', 'slash-menu')\n }\n }, [editor, resolution, className, anchorElem])\n\n useEffect(() => {\n const rootElement = editor.getRootElement()\n if (resolution !== null) {\n positionMenu()\n return () => {\n if (rootElement !== null) {\n rootElement.removeAttribute('aria-controls')\n }\n\n const containerDiv = anchorElementRef.current\n if (containerDiv !== null && containerDiv.isConnected) {\n containerDiv.remove()\n }\n }\n }\n }, [editor, positionMenu, resolution])\n\n const onVisibilityChange = useCallback(\n (isInView: boolean) => {\n if (resolution !== null) {\n if (!isInView) {\n setResolution(null)\n }\n }\n },\n [resolution, setResolution],\n )\n\n useDynamicPositioning(resolution, anchorElementRef.current, positionMenu, onVisibilityChange)\n\n return anchorElementRef\n}\n", "'use client'\nimport { isPoint, type Point } from './point.js'\n\ninterface ContainsPointReturn {\n reason: {\n isOnBottomSide: boolean\n isOnLeftSide: boolean\n isOnRightSide: boolean\n isOnTopSide: boolean\n }\n result: boolean\n}\n\nexport class Rect {\n private readonly _bottom: number\n\n private readonly _left: number\n\n private readonly _right: number\n\n private readonly _top: number\n\n constructor(left: number, top: number, right: number, bottom: number) {\n const [physicTop, physicBottom] = top <= bottom ? [top, bottom] : [bottom, top]\n\n const [physicLeft, physicRight] = left <= right ? [left, right] : [right, left]\n\n this._top = physicTop\n this._right = physicRight\n this._left = physicLeft\n this._bottom = physicBottom\n }\n\n static fromDOM(dom: HTMLElement): Rect {\n const { height, left, top, width } = dom.getBoundingClientRect()\n return Rect.fromLWTH(left, width, top, height)\n }\n\n static fromDOMRect(domRect: DOMRect): Rect {\n const { height, left, top, width } = domRect\n return Rect.fromLWTH(left, width, top, height)\n }\n\n static fromLTRB(left: number, top: number, right: number, bottom: number): Rect {\n return new Rect(left, top, right, bottom)\n }\n\n static fromLWTH(left: number, width: number, top: number, height: number): Rect {\n return new Rect(left, top, left + width, top + height)\n }\n\n static fromPoints(startPoint: Point, endPoint: Point): Rect {\n const { x: left, y: top } = startPoint\n const { x: right, y: bottom } = endPoint\n return Rect.fromLTRB(left, top, right, bottom)\n }\n\n public contains({ x, y }: Point): ContainsPointReturn\n\n public contains({ bottom, left, right, top }: Rect): boolean\n\n public contains(target: Point | Rect): boolean | ContainsPointReturn {\n if (isPoint(target)) {\n const { x, y } = target\n\n const isOnTopSide = y < this._top\n const isOnBottomSide = y > this._bottom\n const isOnLeftSide = x < this._left\n const isOnRightSide = x > this._right\n\n const result = !isOnTopSide && !isOnBottomSide && !isOnLeftSide && !isOnRightSide\n\n return {\n reason: {\n isOnBottomSide,\n isOnLeftSide,\n isOnRightSide,\n isOnTopSide,\n },\n result,\n }\n }\n const { bottom, left, right, top } = target\n\n return (\n top >= this._top &&\n top <= this._bottom &&\n bottom >= this._top &&\n bottom <= this._bottom &&\n left >= this._left &&\n left <= this._right &&\n right >= this._left &&\n right <= this._right\n )\n }\n\n public distanceFromPoint(point: Point): {\n distance: number\n isOnBottomSide: boolean\n isOnLeftSide: boolean\n isOnRightSide: boolean\n isOnTopSide: boolean\n } {\n const containsResult = this.contains(point)\n if (containsResult.result) {\n return {\n distance: 0,\n isOnBottomSide: containsResult.reason.isOnBottomSide,\n isOnLeftSide: containsResult.reason.isOnLeftSide,\n isOnRightSide: containsResult.reason.isOnRightSide,\n isOnTopSide: containsResult.reason.isOnTopSide,\n }\n }\n\n let dx = 0 // Horizontal distance to the closest edge\n let dy = 0 // Vertical distance to the closest edge\n\n // If the point is to the left of the rectangle\n if (point.x < this._left) {\n dx = this._left - point.x\n }\n // If the point is to the right of the rectangle\n else if (point.x > this._right) {\n dx = point.x - this._right\n }\n\n // If the point is above the rectangle\n if (point.y < this._top) {\n dy = this._top - point.y\n }\n // If the point is below the rectangle\n else if (point.y > this._bottom) {\n dy = point.y - this._bottom\n }\n\n // Use the Pythagorean theorem to calculate the distance\n return {\n distance: Math.sqrt(dx * dx + dy * dy),\n isOnBottomSide: point.y > this._bottom,\n isOnLeftSide: point.x < this._left,\n isOnRightSide: point.x > this._right,\n isOnTopSide: point.y < this._top,\n }\n }\n\n public equals({ bottom, left, right, top }: Rect): boolean {\n return (\n top === this._top && bottom === this._bottom && left === this._left && right === this._right\n )\n }\n\n public generateNewRect({\n bottom = this.bottom,\n left = this.left,\n right = this.right,\n top = this.top,\n }): Rect {\n return new Rect(left, top, right, bottom)\n }\n\n public intersectsWith(rect: Rect): boolean {\n const { height: h1, left: x1, top: y1, width: w1 } = rect\n const { height: h2, left: x2, top: y2, width: w2 } = this\n const maxX = x1 + w1 >= x2 + w2 ? x1 + w1 : x2 + w2\n const maxY = y1 + h1 >= y2 + h2 ? y1 + h1 : y2 + h2\n const minX = x1 <= x2 ? x1 : x2\n const minY = y1 <= y2 ? y1 : y2\n return maxX - minX <= w1 + w2 && maxY - minY <= h1 + h2\n }\n\n get bottom(): number {\n return this._bottom\n }\n\n get height(): number {\n return Math.abs(this._bottom - this._top)\n }\n\n get left(): number {\n return this._left\n }\n\n get right(): number {\n return this._right\n }\n\n get top(): number {\n return this._top\n }\n\n get width(): number {\n return Math.abs(this._left - this._right)\n }\n}\n", "import type { Klass, LexicalNode, LexicalNodeReplacement } from 'lexical'\n\nimport type { SanitizedClientEditorConfig, SanitizedServerEditorConfig } from '../config/types.js'\n\nexport function getEnabledNodes({\n editorConfig,\n}: {\n editorConfig: SanitizedClientEditorConfig | SanitizedServerEditorConfig\n}): Array<Klass<LexicalNode> | LexicalNodeReplacement> {\n return editorConfig.features.nodes.map((node) => {\n if ('node' in node) {\n return node.node\n }\n return node\n })\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["CAN_USE_DOM", "window", "document", "createElement", "isHTMLElement", "x", "HTMLElement", "Point", "_x", "_y", "constructor", "x", "y", "calcDeltaXTo", "calcDeltaYTo", "calcDistanceTo", "point", "Math", "sqrt", "pow", "calcHorizontalDistanceTo", "abs", "calcVerticalDistance", "equals", "isPoint", "c", "_c", "useLexicalComposerContext", "mergeRegister", "$getSelection", "$isRangeSelection", "$isTextNode", "COMMAND_PRIORITY_LOW", "createCommand", "useEffect", "useState", "React", "c", "_c", "useLexicalComposerContext", "mergeRegister", "$getSelection", "$isRangeSelection", "COMMAND_PRIORITY_LOW", "createCommand", "KEY_ARROW_DOWN_COMMAND", "KEY_ARROW_UP_COMMAND", "KEY_ENTER_COMMAND", "KEY_ESCAPE_COMMAND", "KEY_TAB_COMMAND", "useCallback", "useEffect", "useLayoutEffect", "useMemo", "useRef", "useState", "baseClass", "scrollIntoViewIfNeeded", "target", "typeaheadContainerNode", "document", "getElementById", "typeaheadRect", "getBoundingClientRect", "top", "height", "window", "innerHeight", "scrollIntoView", "block", "getFullMatchOffset", "documentText", "entryText", "offset", "triggerOffset", "i", "length", "substring", "$splitNodeContainingQuery", "match", "selection", "$getSelection", "$isRangeSelection", "isCollapsed", "anchor", "type", "anchorNode", "getNode", "isSimpleText", "selectionOffset", "textContent", "getTextContent", "slice", "characterOffset", "replaceableString", "queryOffset", "matchingString", "startOffset", "newNode", "splitText", "getScrollParent", "element", "includeHidden", "style", "getComputedStyle", "excludeStaticParent", "position", "overflowRegex", "body", "parent1", "parentElement", "test", "overflow", "overflowY", "overflowX", "isTriggerVisibleInNearestScrollContainer", "targetElement", "containerElement", "tRect", "cRect", "bottom", "useDynamicPositioning", "resolution", "onReposition", "onVisibilityChange", "$", "_c", "editor", "useLexicalComposerContext", "t0", "t1", "rootElement", "getRootElement", "rootScrollParent", "ticking", "previousIsInView", "handleScroll", "requestAnimationFrame", "isInView", "resizeObserver", "ResizeObserver", "addEventListener", "capture", "passive", "observe", "unobserve", "removeEventListener", "useEffect", "SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND", "createCommand", "LexicalMenu", "anchorElementRef", "close", "groups", "menuRenderFn", "onSelectItem", "shouldSplitNodeWithQuery", "selectedItemKey", "setSelectedItemKey", "useState", "updateSelectedItem", "useCallback", "item", "rootElem", "setAttribute", "key", "setSelectedItemKeyToFirstMatchingItem", "allItems", "flatMap", "group", "items", "firstMatchingItem", "selectItemAndCleanUp", "selectedItem", "update", "textNodeContainingQuery", "remove", "discrete", "removeAttribute", "useLayoutEffect", "mergeRegister", "registerCommand", "ref", "current", "COMMAND_PRIORITY_LOW", "KEY_ARROW_DOWN_COMMAND", "payload", "event", "selectedIndex", "findIndex", "newSelectedIndex", "newSelectedItem", "dispatchCommand", "index", "preventDefault", "stopImmediatePropagation", "KEY_ARROW_UP_COMMAND", "KEY_ESCAPE_COMMAND", "KEY_TAB_COMMAND", "find", "KEY_ENTER_COMMAND", "listItemProps", "useMemo", "useMenuAnchorRef", "anchorElem", "setResolution", "className", "useRef", "CAN_USE_DOM", "createElement", "positionMenu", "parent", "undefined", "containerDiv", "VERTICAL_OFFSET", "menuEle", "firstChild", "width", "getRect", "left", "rawTop", "scrollY", "scrollX", "menuRect", "menuHeight", "menuWidth", "rootElementRect", "right", "wouldGoOffBottomOfScreen", "wouldGoOffTopOfScreen", "margin", "isConnected", "display", "append", "PUNCTUATION", "getTextUpToAnchor", "selection", "anchor", "type", "anchorNode", "getNode", "isSimpleText", "anchorOffset", "offset", "getTextContent", "slice", "tryToPositionRange", "leadOffset", "range", "editorWindow", "domSelection", "getSelection", "isCollapsed", "startOffset", "endOffset", "setStart", "setEnd", "getQueryTextForSearch", "editor", "text", "getEditorState", "read", "$getSelection", "$isRangeSelection", "isSelectionOnEntityBoundary", "prevSibling", "getPreviousSibling", "$isTextNode", "isTextEntity", "startTransition", "callback", "ENABLE_SLASH_MENU_COMMAND", "createCommand", "LexicalTypeaheadMenuPlugin", "t0", "$", "_c", "anchorClassName", "anchorElem", "groups", "menuRenderFn", "onClose", "onOpen", "onQueryChange", "onSelectItem", "triggerFn", "useLexicalComposerContext", "resolution", "setResolution", "useState", "anchorElementRef", "useMenuAnchorRef", "t1", "closeTypeahead", "t2", "res", "openTypeahead", "t3", "t4", "mergeRegister", "registerCommand", "t5", "node", "match", "matchingString", "replaceableString", "_window", "window", "document", "createRange", "getRect", "getBoundingClientRect", "COMMAND_PRIORITY_LOW", "useEffect", "updateListener", "editorWindow_0", "range_0", "undefined", "match_0", "query", "removeUpdateListener", "registerUpdateListener", "t6", "t7", "current", "_jsx", "LexicalMenu", "close", "shouldSplitNodeWithQuery", "Rect", "_bottom", "_left", "_right", "_top", "constructor", "left", "top", "right", "bottom", "physicTop", "physicBottom", "physicLeft", "physicRight", "fromDOM", "dom", "height", "width", "getBoundingClientRect", "fromLWTH", "fromDOMRect", "domRect", "fromLTRB", "fromPoints", "startPoint", "endPoint", "x", "y", "contains", "target", "isPoint", "isOnTopSide", "isOnBottomSide", "isOnLeftSide", "isOnRightSide", "reason", "result", "distanceFromPoint", "point", "containsResult", "distance", "dx", "dy", "Math", "sqrt", "equals", "generateNewRect", "intersectsWith", "rect", "h1", "x1", "y1", "w1", "h2", "x2", "y2", "w2", "maxX", "maxY", "minX", "minY", "abs", "getEnabledNodes", "editorConfig", "features", "nodes", "map", "node"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as w}from"react/jsx-runtime";import{useLexicalComposerContext as x}from"@lexical/react/LexicalComposerContext.js";import"react";import{createContext as C,useContext as M,useMemo as b,useRef as E,useState as m}from"react";function v(){return Math.random().toString(36).substring(2,12)+Math.random().toString(36).substring(2,12)}var g=C({editorConfig:null,fieldProps:null,uuid:null}),y=({children:o,editorConfig:s,editorContainerRef:c,fieldProps:d,parentContext:n})=>{let[a]=x(),[f]=m(v()),t=E(new Map),[l,h]=m(null),u=E(new Set),p=b(()=>({blurEditor:r=>{u.current.clear()},childrenEditors:t,editor:a,editorConfig:s,editorContainerRef:c,fieldProps:d,focusedEditor:l,focusEditor:r=>{let e=r.uuid;u.current.has(e)||(u.current.add(e),h(r),n?.uuid&&n.focusEditor(r),t.current.forEach(i=>{i.focusEditor(r)}),u.current.clear())},parentEditor:n,registerChild:(r,e)=>{if(!t.current.has(r)){let i=new Map(t.current);i.set(r,e),t.current=i}},unregisterChild:r=>{if(t.current.has(r)){let e=new Map(t.current);e.delete(r),t.current=e}},uuid:f}),[a,t,s,c,d,l,n,f]);return w(g.Provider,{value:p,children:o})},F=()=>{let o=M(g);if(o===void 0)throw new Error("useEditorConfigContext must be used within an EditorConfigProvider");return o};export{y as a,F as b};
|
|
2
|
+
//# sourceMappingURL=chunk-PDAZFJVO.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/lexical/config/client/EditorConfigProvider.tsx"],
|
|
4
|
+
"sourcesContent": ["'use client'\n\nimport type { LexicalEditor } from 'lexical'\nimport type { MarkRequired } from 'ts-essentials'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport * as React from 'react'\nimport { createContext, useContext, useMemo, useRef, useState } from 'react'\n\nimport type { LexicalRichTextFieldProps } from '../../../types.js'\nimport type { SanitizedClientEditorConfig } from '../types.js'\n\n// Should always produce a 20 character pseudo-random string\nfunction generateQuickGuid(): string {\n return Math.random().toString(36).substring(2, 12) + Math.random().toString(36).substring(2, 12)\n}\n\nexport interface EditorConfigContextType {\n // Editor focus handling\n blurEditor: (editorContext: EditorConfigContextType) => void\n childrenEditors: React.RefObject<Map<string, EditorConfigContextType>>\n editor: LexicalEditor\n editorConfig: SanitizedClientEditorConfig\n editorContainerRef: React.RefObject<HTMLDivElement>\n\n fieldProps: MarkRequired<\n LexicalRichTextFieldProps,\n 'indexPath' | 'parentPath' | 'parentSchemaPath' | 'path' | 'schemaPath'\n >\n focusedEditor: EditorConfigContextType | null\n // Editor focus handling\n focusEditor: (editorContext: EditorConfigContextType) => void\n parentEditor: EditorConfigContextType\n registerChild: (uuid: string, editorContext: EditorConfigContextType) => void\n unregisterChild?: (uuid: string) => void\n uuid: string\n}\n\n// @ts-expect-error: TODO: Fix this\nconst Context: React.Context<EditorConfigContextType> = createContext({\n editorConfig: null,\n fieldProps: null,\n uuid: null,\n})\n\nexport const EditorConfigProvider = ({\n children,\n editorConfig,\n editorContainerRef,\n fieldProps,\n parentContext,\n}: {\n children: React.ReactNode\n editorConfig: SanitizedClientEditorConfig\n editorContainerRef: React.RefObject<HTMLDivElement | null>\n\n fieldProps: LexicalRichTextFieldProps\n parentContext?: EditorConfigContextType\n}): React.ReactNode => {\n const [editor] = useLexicalComposerContext()\n // State to store the UUID\n const [uuid] = useState(generateQuickGuid())\n\n const childrenEditors = useRef<Map<string, EditorConfigContextType>>(new Map())\n const [focusedEditor, setFocusedEditor] = useState<EditorConfigContextType | null>(null)\n const focusHistory = useRef<Set<string>>(new Set())\n\n const editorContext = useMemo(\n () =>\n ({\n blurEditor: (editorContext: EditorConfigContextType) => {\n //setFocusedEditor(null) // Clear focused editor\n focusHistory.current.clear() // Reset focus history when focus is lost\n },\n childrenEditors,\n editor,\n editorConfig,\n editorContainerRef,\n fieldProps,\n focusedEditor,\n focusEditor: (editorContext: EditorConfigContextType) => {\n const editorUUID = editorContext.uuid\n\n // Avoid recursion by checking if this editor is already focused in this cycle\n if (focusHistory.current.has(editorUUID)) {\n return\n }\n\n // Add this editor to the history to prevent future recursions in this cycle\n focusHistory.current.add(editorUUID)\n setFocusedEditor(editorContext)\n\n // Propagate focus event to parent and children, ensuring they do not refocus this editor\n if (parentContext?.uuid) {\n parentContext.focusEditor(editorContext)\n }\n childrenEditors.current.forEach((childEditor) => {\n childEditor.focusEditor(editorContext)\n })\n\n focusHistory.current.clear()\n },\n parentEditor: parentContext,\n registerChild: (childUUID, childEditorContext) => {\n if (!childrenEditors.current.has(childUUID)) {\n const newMap = new Map(childrenEditors.current)\n newMap.set(childUUID, childEditorContext)\n childrenEditors.current = newMap\n }\n },\n unregisterChild: (childUUID) => {\n if (childrenEditors.current.has(childUUID)) {\n const newMap = new Map(childrenEditors.current)\n newMap.delete(childUUID)\n childrenEditors.current = newMap\n }\n },\n\n uuid,\n }) as EditorConfigContextType,\n [\n editor,\n childrenEditors,\n editorConfig,\n editorContainerRef,\n fieldProps,\n focusedEditor,\n parentContext,\n uuid,\n ],\n )\n\n return <Context.Provider value={editorContext}>{children}</Context.Provider>\n}\n\nexport const useEditorConfigContext = (): EditorConfigContextType => {\n const context = useContext(Context)\n if (context === undefined) {\n throw new Error('useEditorConfigContext must be used within an EditorConfigProvider')\n }\n return context\n}\n"],
|
|
5
|
+
"mappings": "wCAKA,OAASA,6BAAAA,MAAiC,2CAC1C,MAAuB,QACvB,OAASC,iBAAAA,EAAeC,cAAAA,EAAYC,WAAAA,EAASC,UAAAA,EAAQC,YAAAA,MAAgB,QAMrE,SAASC,GAAA,CACP,OAAOC,KAAKC,OAAM,EAAGC,SAAS,EAAA,EAAIC,UAAU,EAAG,EAAA,EAAMH,KAAKC,OAAM,EAAGC,SAAS,EAAA,EAAIC,UAAU,EAAG,EAAA,CAC/F,CAwBA,IAAMC,EAAkDV,EAAc,CACpEW,aAAc,KACdC,WAAY,KACZC,KAAM,IACR,CAAA,EAEaC,EAAuBA,CAAC,CACnCC,SAAAA,EACAJ,aAAAA,EACAK,mBAAAA,EACAJ,WAAAA,EACAK,cAAAA,CAAa,IAQd,CACC,GAAM,CAACC,CAAA,EAAUnB,EAAA,EAEX,CAACc,CAAA,EAAQT,EAASC,EAAA,CAAA,EAElBc,EAAkBhB,EAA6C,IAAIiB,GAAA,EACnE,CAACC,EAAeC,CAAA,EAAoBlB,EAAyC,IAAA,EAC7EmB,EAAepB,EAAoB,IAAIqB,GAAA,EAEvCC,EAAgBvB,EACpB,KACG,CACCwB,WAAaD,GAAA,CAEXF,EAAaI,QAAQC,MAAK,CAC5B,EACAT,gBAAAA,EACAD,OAAAA,EACAP,aAAAA,EACAK,mBAAAA,EACAJ,WAAAA,EACAS,cAAAA,EACAQ,YAAcJ,GAAA,CACZ,IAAMK,EAAaL,EAAcZ,KAG7BU,EAAaI,QAAQI,IAAID,CAAA,IAK7BP,EAAaI,QAAQK,IAAIF,CAAA,EACzBR,EAAiBG,CAAA,EAGbR,GAAeJ,MACjBI,EAAcY,YAAYJ,CAAA,EAE5BN,EAAgBQ,QAAQM,QAASC,GAAA,CAC/BA,EAAYL,YAAYJ,CAAA,CAC1B,CAAA,EAEAF,EAAaI,QAAQC,MAAK,EAC5B,EACAO,aAAclB,EACdmB,cAAeA,CAACC,EAAWC,IAAA,CACzB,GAAI,CAACnB,EAAgBQ,QAAQI,IAAIM,CAAA,EAAY,CAC3C,IAAME,EAAS,IAAInB,IAAID,EAAgBQ,OAAO,EAC9CY,EAAOC,IAAIH,EAAWC,CAAA,EACtBnB,EAAgBQ,QAAUY,CAC5B,CACF,EACAE,gBAAkBJ,GAAA,CAChB,GAAIlB,EAAgBQ,QAAQI,IAAIM,CAAA,EAAY,CAC1C,IAAME,EAAS,IAAInB,IAAID,EAAgBQ,OAAO,EAC9CY,EAAOG,OAAOL,CAAA,EACdlB,EAAgBQ,QAAUY,CAC5B,CACF,EAEA1B,KAAAA,CACF,GACF,CACEK,EACAC,EACAR,EACAK,EACAJ,EACAS,EACAJ,EACAJ,CAAA,CACD,EAGH,OAAO8B,EAACjC,EAAQkC,SAAQ,CAACC,MAAOpB,WAAgBV,GAClD,EAEa+B,EAAyBA,IAAA,CACpC,IAAAC,EAAgB9C,EAAAS,CAAW,EAAA,GACvBqC,IAAAC,OAAY,MAAA,IAAAC,MACE,oEAAA,EAAA,OAEXF,CAAA",
|
|
6
|
+
"names": ["useLexicalComposerContext", "createContext", "useContext", "useMemo", "useRef", "useState", "generateQuickGuid", "Math", "random", "toString", "substring", "Context", "editorConfig", "fieldProps", "uuid", "EditorConfigProvider", "children", "editorContainerRef", "parentContext", "editor", "childrenEditors", "Map", "focusedEditor", "setFocusedEditor", "focusHistory", "Set", "editorContext", "blurEditor", "current", "clear", "focusEditor", "editorUUID", "has", "add", "forEach", "childEditor", "parentEditor", "registerChild", "childUUID", "childEditorContext", "newMap", "set", "unregisterChild", "delete", "_jsx", "Provider", "value", "useEditorConfigContext", "context", "undefined", "Error"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createCommand as i}from"lexical";var O=i("INSERT_BLOCK_COMMAND"),x=i("INSERT_INLINE_BLOCK_COMMAND"),I=i("OPEN_INLINE_BLOCK_DRAWER_COMMAND");import{jsx as p}from"react/jsx-runtime";import u from"bson-objectid";import m from"react";import c from"bson-objectid";import{DecoratorNode as l}from"lexical";import{deepCopyObjectSimple as d}from"payload/shared";var r=class extends l{__fields;constructor({fields:e,key:n}){super(n),this.__fields=e}static clone(e){return new this({fields:e.__fields,key:e.__key})}static getType(){return"inlineBlock"}static importDOM(){return{}}static importJSON(e){return a(e.fields)}static isInline(){return!1}canIndent(){return!0}createDOM(){let e=document.createElement("span");return e.classList.add("inline-block-container"),e}decorate(e,n){return null}exportDOM(){let e=document.createElement("span");e.classList.add("inline-block-container");let n=document.createTextNode(this.getTextContent());return e.append(n),{element:e}}exportJSON(){return{type:"inlineBlock",fields:this.getFields(),version:1}}getFields(){return this.getLatest().__fields}getTextContent(){return"Block Field"}isInline(){return!0}setFields(e){let n=d(e),s=this.getWritable();s.__fields=n}updateDOM(){return!1}};function a(t){return new r({fields:{...t,id:t?.id||new c.default().toHexString()}})}var f=m.lazy(()=>import("./componentInline-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{createCommand as i}from"lexical";var O=i("INSERT_BLOCK_COMMAND"),x=i("INSERT_INLINE_BLOCK_COMMAND"),I=i("OPEN_INLINE_BLOCK_DRAWER_COMMAND");import{jsx as p}from"react/jsx-runtime";import u from"bson-objectid";import m from"react";import c from"bson-objectid";import{DecoratorNode as l}from"lexical";import{deepCopyObjectSimple as d}from"payload/shared";var r=class extends l{__fields;constructor({fields:e,key:n}){super(n),this.__fields=e}static clone(e){return new this({fields:e.__fields,key:e.__key})}static getType(){return"inlineBlock"}static importDOM(){return{}}static importJSON(e){return a(e.fields)}static isInline(){return!1}canIndent(){return!0}createDOM(){let e=document.createElement("span");return e.classList.add("inline-block-container"),e}decorate(e,n){return null}exportDOM(){let e=document.createElement("span");e.classList.add("inline-block-container");let n=document.createTextNode(this.getTextContent());return e.append(n),{element:e}}exportJSON(){return{type:"inlineBlock",fields:this.getFields(),version:1}}getFields(){return this.getLatest().__fields}getTextContent(){return"Block Field"}isInline(){return!0}setFields(e){let n=d(e),s=this.getWritable();s.__fields=n}updateDOM(){return!1}};function a(t){return new r({fields:{...t,id:t?.id||new c.default().toHexString()}})}var f=m.lazy(()=>import("./componentInline-N5LJ2LY2.js").then(t=>({default:t.InlineBlockComponent}))),o=class extends r{static clone(e){return super.clone(e)}static getType(){return super.getType()}static importJSON(e){return _(e.fields)}decorate(e,n){return p(f,{formData:this.getFields(),nodeKey:this.getKey()})}exportJSON(){return super.exportJSON()}};function _(t){return new o({fields:{...t,id:t?.id||new u.default().toHexString()}})}function y(t){return t instanceof o}export{O as a,x as b,I as c,o as d,_ as e,y as f};
|
|
2
|
+
//# sourceMappingURL=chunk-ZOYGBIAN.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";import{c as M}from"./chunk-352SHIZR.js";import{b as w}from"./chunk-PDAZFJVO.js";import{jsx as k,jsxs as de}from"react/jsx-runtime";import{Collapsible as me,Form as ue,Pill as fe,SectionTitle as pe,ShimmerEffect as be,useDocumentInfo as U,useFormSubmitted as he,useServerFunctions as ke,useTranslation as ye}from"@payloadcms/ui";import{abortAndIgnore as D}from"@payloadcms/ui/shared";import{useCallback as _e,useEffect as W,useMemo as Ce,useRef as ge,useState as Se}from"react";import{getTranslation as ve}from"@payloadcms/translations";import{v4 as Pe}from"uuid";import{jsx as C,jsxs as R}from"react/jsx-runtime";import{useLexicalComposerContext as X}from"@lexical/react/LexicalComposerContext.js";import{getTranslation as Y}from"@payloadcms/translations";import{Button as Z,Collapsible as ee,ErrorPill as oe,Pill as te,RenderFields as le,SectionTitle as se,useDocumentInfo as re,useFormSubmitted as ne,useTranslation as ie}from"@payloadcms/ui";import{dequal as ae}from"dequal/lite";import{$getNodeByKey as q}from"lexical";import j,{useCallback as I,useEffect as ce}from"react";import{c as z}from"react/compiler-runtime";import{useAllFormFields as G}from"@payloadcms/ui";import{reduceFieldsToValues as J}from"payload/shared";import{useEffect as Q}from"react";function V({fields:l}){for(let e in l){let o=l[e];Array.isArray(o.rows)&&"value"in o&&(o.disableFormData=!0)}return l}var K=l=>{let e=z(8),{onChange:o}=l,[i]=G(),u,s;e[0]!==i?(s=V({fields:i}),u=J(s,!0),e[0]=i,e[1]=u,e[2]=s):(u=e[1],s=e[2]);let a=u,_,p;return e[3]!==o||e[4]!==s||e[5]!==a?(_=()=>{o&&o({fullFieldsWithValues:s,newFormData:a})},p=[a,o,s],e[3]=o,e[4]=s,e[5]=a,e[6]=_,e[7]=p):(_=e[6],p=e[7]),Q(_,p),null};function O(l){for(let e in l){let o=l[e];Array.isArray(o)&&!o?.length?delete l[e]:o&&typeof o=="object"?O(o):o==null&&delete l[e]}}var H=l=>{let{baseClass:e,clientBlock:o,field:i,formSchema:u,Label:s,nodeKey:a,path:_,schemaPath:p}=l,{formData:t}=l,{fieldProps:{permissions:$}}=w(),{i18n:g}=ie(),[f]=X(),{docPermissions:P,getDocPreferences:b,setDocFieldPreferences:S}=re(),[N,h]=j.useState();ce(()=>{b().then(m=>{let c=m?.fields[i.name]?.collapsed;h(c?c.includes(t.id):!1)})},[i.name,t.id,b]);let x=ne(),[B,L]=j.useState(0),r=x&&B>0,A=[`${e}__row`,r?`${e}__row--has-errors`:`${e}__row--no-errors`].filter(Boolean).join(" "),F=I(({fullFieldsWithValues:m,newFormData:n})=>{if(n.id=t.id,n.blockType=t.blockType,O(n),O(t),ae(t,n)||setTimeout(()=>{f.update(()=>{let c=q(a);c&&M(c)&&(t=n,c.setFields(n))})},0),x){let c=0;for(let d of Object.values(m))d?.valid===!1&&c++;L(c)}},[f,a,x,t]),T=I(m=>{b().then(n=>{let d=n?.fields[i.name]?.collapsed,v=d&&d?.length?d:[];m?v.includes(t.id)||v.push(t.id):v.includes(t.id)&&v.splice(v.indexOf(t.id),1),S(i.name,{collapsed:v,hello:"hi"})})},[b,i.name,S,t.id]),E=I(()=>{f.update(()=>{q(a)?.remove()})},[f,a]);return typeof N!="boolean"?null:R(j.Fragment,{children:[C(ee,{className:A,collapsibleStyle:r?"error":"default",header:s||R("div",{className:`${e}__block-header`,children:[R("div",{children:[C(te,{className:`${e}__block-pill ${e}__block-pill-${t?.blockType}`,pillStyle:"white",children:typeof o?.labels?.singular=="string"?Y(o?.labels.singular,g):o.slug}),C(se,{path:"blockName",readOnly:i?.admin?.readOnly||!1}),r&&C(oe,{count:B,i18n:g,withMessage:!0})]}),f.isEditable()&&C(Z,{buttonStyle:"icon-label",className:`${e}__removeButton`,disabled:i?.admin?.readOnly,icon:"x",onClick:m=>{m.preventDefault(),E()},round:!0,tooltip:"Remove Block"})]}),isCollapsed:N,onToggle:m=>{T(m),h(m)},children:C(le,{fields:u,forceRender:!0,parentIndexPath:"",parentPath:"",parentSchemaPath:"",permissions:$})},0),C(K,{onChange:F})]})};var y="lexical-block",Ye=l=>{let{formData:e,nodeKey:o}=l,i=he(),{id:u,collectionSlug:s,globalSlug:a}=U(),{fieldProps:{featureClientSchemaMap:_,field:p,path:t,schemaPath:$}}=w(),g=ge(new AbortController),{docPermissions:f,getDocPreferences:P}=U(),{getFormState:b}=ke(),[S,N]=Se(!1),h=`${$}.lexical_internal_feature.blocks.lexical_blocks.${e.blockType}.fields`,x=`${$}.lexical_internal_feature.blocks.lexical_blocks.${e.blockType}`,r=_.blocks[x][0].blocks[0],{i18n:A}=ye();W(()=>{let n=new AbortController;return e&&(async()=>{let{state:d}=await b({id:u,collectionSlug:s,data:e,docPermissions:f,docPreferences:await P(),globalSlug:a,operation:"update",renderAllFields:!0,schemaPath:h,signal:n.signal});d&&(d.blockName={initialValue:"",passesCondition:!0,valid:!0,value:e.blockName},N(d))})(),()=>{D(n)}},[b,h,u,s,a,P,f]);let F=_e(async({formState:n})=>{D(g.current);let c=new AbortController;g.current=c;let{state:d}=await b({id:u,collectionSlug:s,docPermissions:f,docPreferences:await P(),formState:n,globalSlug:a,operation:"update",schemaPath:h,signal:c.signal});return d?(d.blockName={initialValue:"",passesCondition:!0,valid:!0,value:e.blockName},d):n},[b,u,s,f,P,a,h,e.blockName]);W(()=>()=>{D(g.current)},[]);let T=[`${y}__row`,`${y}__row--no-errors`].filter(Boolean).join(" "),E=r?.admin?.components?.Label,m=Ce(()=>r&&S!==!1?k(ue,{beforeSubmit:[F],fields:r.fields,initialState:S,onChange:[F],submitted:i,uuid:Pe(),children:k(H,{baseClass:y,clientBlock:r,field:p,formData:e,formSchema:r.fields,nodeKey:o,path:`${t}.lexical_internal_feature.blocks.${e.blockType}`,schemaPath:h})}):k(me,{className:T,collapsibleStyle:"default",header:r?.admin?.components?.Label?E:k("div",{className:`${y}__block-header`,children:de("div",{children:[k(fe,{className:`${y}__block-pill ${y}__block-pill-${e?.blockType}`,pillStyle:"white",children:r&&typeof r.labels?.singular=="string"?ve(r.labels.singular,A):r?.slug}),k(pe,{path:"blockName",readOnly:p?.admin?.readOnly||!1})]})}),children:k(be,{height:"35vh"})},0),[r,S,F,i,p,o,t,h,T,A]);return k("div",{className:y+" "+y+"-"+e.blockType,children:m})};export{Ye as BlockComponent};
|
|
2
|
+
//# sourceMappingURL=component-EHTN2BHZ.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/features/blocks/client/component/index.tsx", "../../../src/features/blocks/client/component/BlockContent.tsx", "../../../src/features/blocks/client/component/FormSavePlugin.tsx", "../../../src/features/blocks/client/component/removeEmptyArrayValues.ts"],
|
|
4
|
+
"sourcesContent": ["'use client'\n\nimport {\n Collapsible,\n Form,\n Pill,\n SectionTitle,\n ShimmerEffect,\n useDocumentInfo,\n useFormSubmitted,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nconst baseClass = 'lexical-block'\nimport { getTranslation } from '@payloadcms/translations'\nimport { type BlocksFieldClient, type FormState } from 'payload'\nimport { v4 as uuid } from 'uuid'\n\nimport type { BlockFields } from '../../server/nodes/BlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { BlockContent } from './BlockContent.js'\nimport './index.scss'\n\ntype Props = {\n readonly children?: React.ReactNode\n readonly formData: BlockFields\n readonly nodeKey: string\n}\n\nexport const BlockComponent: React.FC<Props> = (props) => {\n const { formData, nodeKey } = props\n const submitted = useFormSubmitted()\n const { id, collectionSlug, globalSlug } = useDocumentInfo()\n const {\n fieldProps: { featureClientSchemaMap, field: parentLexicalRichTextField, path, schemaPath },\n } = useEditorConfigContext()\n const onChangeAbortControllerRef = useRef(new AbortController())\n const { docPermissions, getDocPreferences } = useDocumentInfo()\n\n const { getFormState } = useServerFunctions()\n\n const [initialState, setInitialState] = useState<false | FormState | undefined>(false)\n\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${formData.blockType}.fields`\n\n const componentMapRenderedBlockPath = `${schemaPath}.lexical_internal_feature.blocks.lexical_blocks.${formData.blockType}`\n\n const clientSchemaMap = featureClientSchemaMap['blocks']\n\n const blocksField: BlocksFieldClient = clientSchemaMap[\n componentMapRenderedBlockPath\n ][0] as BlocksFieldClient\n\n const clientBlock = blocksField.blocks[0]\n\n const { i18n } = useTranslation()\n\n // Field Schema\n useEffect(() => {\n const abortController = new AbortController()\n\n const awaitInitialState = async () => {\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: formData,\n docPermissions,\n docPreferences: await getDocPreferences(),\n globalSlug,\n operation: 'update',\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: abortController.signal,\n })\n\n if (state) {\n state.blockName = {\n initialValue: '',\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n }\n\n setInitialState(state)\n }\n }\n\n if (formData) {\n void awaitInitialState()\n }\n\n return () => {\n abortAndIgnore(abortController)\n }\n }, [\n getFormState,\n schemaFieldsPath,\n id,\n collectionSlug,\n globalSlug,\n getDocPreferences,\n docPermissions,\n // DO NOT ADD FORMDATA HERE! Adding formData will kick you out of sub block editors while writing.\n ])\n\n const onChange = useCallback(\n async ({ formState: prevFormState }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state: newFormState } = await getFormState({\n id,\n collectionSlug,\n docPermissions,\n docPreferences: await getDocPreferences(),\n formState: prevFormState,\n globalSlug,\n operation: 'update',\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!newFormState) {\n return prevFormState\n }\n\n newFormState.blockName = {\n initialValue: '',\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n }\n\n return newFormState\n },\n\n [\n getFormState,\n id,\n collectionSlug,\n docPermissions,\n getDocPreferences,\n globalSlug,\n schemaFieldsPath,\n formData.blockName,\n ],\n )\n\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n const classNames = [`${baseClass}__row`, `${baseClass}__row--no-errors`].filter(Boolean).join(' ')\n\n const Label = clientBlock?.admin?.components?.Label\n\n // Memoized Form JSX\n const formContent = useMemo(() => {\n return clientBlock && initialState !== false ? (\n <Form\n beforeSubmit={[onChange]}\n fields={clientBlock.fields}\n initialState={initialState}\n onChange={[onChange]}\n submitted={submitted}\n uuid={uuid()}\n >\n <BlockContent\n baseClass={baseClass}\n clientBlock={clientBlock}\n field={parentLexicalRichTextField}\n formData={formData}\n formSchema={clientBlock.fields}\n nodeKey={nodeKey}\n path={`${path}.lexical_internal_feature.blocks.${formData.blockType}`}\n schemaPath={schemaFieldsPath}\n />\n </Form>\n ) : (\n <Collapsible\n className={classNames}\n collapsibleStyle=\"default\"\n header={\n clientBlock?.admin?.components?.Label ? (\n Label\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 {clientBlock && typeof clientBlock.labels?.singular === 'string'\n ? getTranslation(clientBlock.labels.singular, i18n)\n : clientBlock?.slug}\n </Pill>\n <SectionTitle\n path=\"blockName\"\n readOnly={parentLexicalRichTextField?.admin?.readOnly || false}\n />\n </div>\n </div>\n )\n }\n key={0}\n >\n <ShimmerEffect height=\"35vh\" />\n </Collapsible>\n )\n }, [\n clientBlock,\n initialState,\n onChange,\n submitted,\n parentLexicalRichTextField,\n nodeKey,\n path,\n schemaFieldsPath,\n classNames,\n i18n,\n // DO NOT ADD FORMDATA HERE! Adding formData will kick you out of sub block editors while writing.\n ])\n\n return <div className={baseClass + ' ' + baseClass + '-' + formData.blockType}>{formContent}</div>\n}\n", "'use client'\nimport type { ClientBlock, ClientField, CollapsedPreferences, 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'\nimport { $getNodeByKey } from 'lexical'\nimport React, { useCallback, useEffect } from 'react'\n\nimport type { LexicalRichTextFieldProps } from '../../../../types.js'\nimport type { BlockFields } from '../../server/nodes/BlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { $isBlockNode } from '../nodes/BlocksNode.js'\nimport { FormSavePlugin } from './FormSavePlugin.js'\n\ntype Props = {\n baseClass: string\n clientBlock: ClientBlock\n field: LexicalRichTextFieldProps['field']\n formData: BlockFields\n formSchema: ClientField[]\n Label?: React.ReactNode\n nodeKey: string\n path: string\n schemaPath: string\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.\nfunction 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\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 { baseClass, clientBlock, field, formSchema, Label, nodeKey, path, schemaPath } = props\n let { formData } = props\n const {\n fieldProps: { permissions },\n } = useEditorConfigContext()\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 { docPermissions, getDocPreferences, setDocFieldPreferences } = useDocumentInfo()\n\n const [isCollapsed, setIsCollapsed] = React.useState<boolean>()\n\n useEffect(() => {\n void getDocPreferences().then((currentDocPreferences) => {\n const currentFieldPreferences = currentDocPreferences?.fields[field.name]\n const collapsedArray = currentFieldPreferences?.collapsed\n setIsCollapsed(collapsedArray ? collapsedArray.includes(formData.id) : false)\n })\n }, [field.name, formData.id, getDocPreferences])\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: BlockFields\n }) => {\n newFormData.id = formData.id\n newFormData.blockType = formData.blockType\n\n removeUndefinedAndNullAndEmptyArraysRecursively(newFormData)\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 = $getNodeByKey(nodeKey)\n if (node && $isBlockNode(node)) {\n formData = newFormData\n node.setFields(newFormData)\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 if (typeof isCollapsed !== 'boolean') {\n return null\n }\n\n return (\n <React.Fragment>\n <Collapsible\n className={classNames}\n collapsibleStyle={fieldHasErrors ? 'error' : 'default'}\n header={\n Label || (\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 clientBlock?.labels?.singular === 'string'\n ? getTranslation(clientBlock?.labels.singular, i18n)\n : clientBlock.slug}\n </Pill>\n <SectionTitle path=\"blockName\" readOnly={field?.admin?.readOnly || false} />\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?.admin?.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 fields={formSchema}\n forceRender={true}\n parentIndexPath=\"\"\n parentPath={''}\n parentSchemaPath=\"\"\n permissions={permissions} // TODO: Pass field permissions\n />\n </Collapsible>\n\n <FormSavePlugin onChange={onFormChange} />\n </React.Fragment>\n )\n}\n", "'use client'\nimport type { Data, FormState } from 'payload'\nimport type React from 'react'\n\nimport { useAllFormFields } from '@payloadcms/ui'\nimport { reduceFieldsToValues } from 'payload/shared'\nimport { useEffect } from 'react'\n\nimport { removeEmptyArrayValues } from './removeEmptyArrayValues.js'\n\ntype Props = {\n onChange?: ({\n fullFieldsWithValues,\n newFormData,\n }: {\n fullFieldsWithValues: FormState\n newFormData: Data\n }) => void\n}\n\nexport const FormSavePlugin: React.FC<Props> = (props) => {\n const { onChange } = props\n\n const [_fields] = useAllFormFields()\n\n const fields = removeEmptyArrayValues({ fields: _fields })\n\n // Pass in fields, and indicate if you'd like to \"unflatten\" field data.\n // The result below will reflect the data stored in the form at the given time\n const newFormData = reduceFieldsToValues(fields, true)\n\n useEffect(() => {\n if (onChange) {\n onChange({ fullFieldsWithValues: fields, newFormData })\n }\n }, [newFormData, onChange, fields])\n\n return null\n}\n", "'use client'\nimport type { FormState } from 'payload'\n\n/**\n * By default, if an array field is empty, it will be included in the form state with a value of 0.\n * We do not need this behavior here, By setting `disableFormData` to true, we can prevent the field from being included in the form state\n * like that.\n * @param fields form state\n */\nexport function removeEmptyArrayValues({ fields }: { fields: FormState }): FormState {\n for (const key in fields) {\n const field = fields[key]\n if (Array.isArray(field.rows) && 'value' in field) {\n field.disableFormData = true\n }\n }\n return fields\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Collapsible", "Form", "Pill", "SectionTitle", "ShimmerEffect", "useDocumentInfo", "useFormSubmitted", "useServerFunctions", "useTranslation", "abortAndIgnore", "useCallback", "useEffect", "useMemo", "useRef", "useState", "getTranslation", "v4", "uuid", "useLexicalComposerContext", "getTranslation", "Button", "Collapsible", "ErrorPill", "Pill", "RenderFields", "SectionTitle", "useDocumentInfo", "useFormSubmitted", "useTranslation", "dequal", "$getNodeByKey", "React", "useCallback", "useEffect", "c", "_c", "useAllFormFields", "reduceFieldsToValues", "useEffect", "removeEmptyArrayValues", "fields", "key", "field", "Array", "isArray", "rows", "disableFormData", "FormSavePlugin", "props", "$", "_c", "onChange", "_fields", "useAllFormFields", "t0", "fields", "removeEmptyArrayValues", "reduceFieldsToValues", "newFormData", "t1", "t2", "fullFieldsWithValues", "useEffect", "removeUndefinedAndNullAndEmptyArraysRecursively", "obj", "key", "value", "Array", "isArray", "length", "BlockContent", "props", "baseClass", "clientBlock", "field", "formSchema", "Label", "nodeKey", "path", "schemaPath", "formData", "fieldProps", "permissions", "useEditorConfigContext", "i18n", "useTranslation", "editor", "useLexicalComposerContext", "docPermissions", "getDocPreferences", "setDocFieldPreferences", "useDocumentInfo", "isCollapsed", "setIsCollapsed", "React", "useState", "useEffect", "then", "currentDocPreferences", "collapsedArray", "fields", "name", "collapsed", "includes", "id", "hasSubmitted", "useFormSubmitted", "errorCount", "setErrorCount", "fieldHasErrors", "classNames", "filter", "Boolean", "join", "onFormChange", "useCallback", "fullFieldsWithValues", "newFormData", "blockType", "dequal", "setTimeout", "update", "node", "$getNodeByKey", "$isBlockNode", "setFields", "rowErrorCount", "formField", "Object", "values", "valid", "onCollapsedChange", "changedCollapsed", "newCollapsed", "push", "splice", "indexOf", "hello", "removeBlock", "remove", "_jsxs", "Fragment", "_jsx", "Collapsible", "className", "collapsibleStyle", "header", "Pill", "pillStyle", "labels", "singular", "getTranslation", "slug", "SectionTitle", "readOnly", "admin", "ErrorPill", "count", "withMessage", "isEditable", "Button", "buttonStyle", "disabled", "icon", "onClick", "e", "preventDefault", "round", "tooltip", "onToggle", "incomingCollapsedState", "RenderFields", "forceRender", "parentIndexPath", "parentPath", "parentSchemaPath", "FormSavePlugin", "onChange", "baseClass", "BlockComponent", "props", "formData", "nodeKey", "submitted", "useFormSubmitted", "id", "collectionSlug", "globalSlug", "useDocumentInfo", "fieldProps", "featureClientSchemaMap", "field", "parentLexicalRichTextField", "path", "schemaPath", "useEditorConfigContext", "onChangeAbortControllerRef", "useRef", "AbortController", "docPermissions", "getDocPreferences", "getFormState", "useServerFunctions", "initialState", "setInitialState", "useState", "schemaFieldsPath", "blockType", "componentMapRenderedBlockPath", "clientBlock", "blocks", "i18n", "useTranslation", "useEffect", "abortController", "state", "data", "docPreferences", "operation", "renderAllFields", "signal", "blockName", "initialValue", "passesCondition", "valid", "value", "abortAndIgnore", "onChange", "useCallback", "formState", "prevFormState", "current", "controller", "newFormState", "classNames", "filter", "Boolean", "join", "Label", "admin", "components", "formContent", "useMemo", "_jsx", "Form", "beforeSubmit", "fields", "uuid", "BlockContent", "formSchema", "Collapsible", "className", "collapsibleStyle", "header", "_jsxs", "Pill", "pillStyle", "labels", "singular", "getTranslation", "slug", "SectionTitle", "readOnly", "ShimmerEffect", "height"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";import{a as y,b as M,c as A,d as T,g as O}from"./chunk-75T7MDBH.js";import{a as U}from"./chunk-5PBXL4HT.js";import{b}from"./chunk-PDAZFJVO.js";import{jsx as e,jsxs as c}from"react/jsx-runtime";import{useLexicalComposerContext as ae}from"@lexical/react/LexicalComposerContext.js";import{useLexicalNodeSelection as le}from"@lexical/react/useLexicalNodeSelection.js";import{mergeRegister as re}from"@lexical/utils";import{getTranslation as F}from"@payloadcms/translations";import{Button as C,File as se,formatDrawerSlug as ie,useConfig as ne,useEditDepth as ce,usePayloadAPI as de,useTranslation as ue}from"@payloadcms/ui";import{$getNodeByKey as I,$getSelection as me,$isNodeSelection as pe,CLICK_COMMAND as fe,COMMAND_PRIORITY_LOW as w,KEY_BACKSPACE_COMMAND as ge,KEY_DELETE_COMMAND as he}from"lexical";import{useCallback as f,useEffect as _e,useId as De,useReducer as be,useRef as Ce,useState as we}from"react";var o="lexical-upload",K={depth:0},Ne=d=>{let{data:{fields:j,relationTo:N,value:n},nodeKey:l}=d;if(typeof n=="object")throw new Error("Upload value should be a string or number. The Lexical Upload component should not receive the populated value object.");let{config:{collections:B,routes:{api:k},serverURL:W}}=ne(),g=Ce(null),{uuid:Y}=b(),z=ce(),[a]=ae(),[r,h,x]=le(l),{editorConfig:H,fieldProps:{readOnly:_,schemaPath:q}}=b(),{i18n:S,t:u}=ue(),[$,G]=be(t=>t+1,0),[s]=we(()=>B.find(t=>t.slug===N)),J=De(),v=ie({slug:"lexical-upload-drawer-"+Y+J,depth:z}),{toggleDrawer:Q}=M(v,!0),{closeDocumentDrawer:E,DocumentDrawer:V,DocumentDrawerToggler:X}=U({id:n,collectionSlug:s.slug}),[{data:m},{setParams:R}]=de(`${W}${k}/${s.slug}/${n}`,{initialParams:K}),L=m?.thumbnailURL||m?.url,Z=f(()=>{a.update(()=>{I(l)?.remove()})},[a,l]),ee=f(t=>{R({...K,cacheBust:$}),G(),E()},[R,$,E]),D=f(t=>{let p=me();return r&&pe(p)&&(t.preventDefault(),a.update(()=>{p.getNodes().forEach(i=>{O(i)&&i.remove()})})),!1},[a,r]);_e(()=>re(a.registerCommand(fe,t=>t.target===g.current||g.current?.contains(t.target)?(t.shiftKey?h(!r):r||(x(),h(!0)),!0):!1,w),a.registerCommand(he,D,w),a.registerCommand(ge,D,w)),[x,a,r,l,D,h]);let P=H?.resolvedFeatureMap?.get("upload")?.sanitizedClientFeatureProps.collections?.[s.slug]?.hasExtraFields,te=f((t,p)=>{a.update(()=>{let i=I(l);if(i){let oe={...i.getData(),fields:p};i.setData(oe)}})},[a,l]);return c("div",{className:[o,r&&`${o}--selected`].filter(Boolean).join(" "),contentEditable:!1,ref:g,children:[c("div",{className:`${o}__card`,children:[c("div",{className:`${o}__topRow`,children:[e("div",{className:`${o}__thumbnail`,children:L?e("img",{alt:m?.filename,"data-lexical-upload-id":n,"data-lexical-upload-relation-to":N,src:L}):e(se,{})}),c("div",{className:`${o}__topRowRightPanel`,children:[e("div",{className:`${o}__collectionLabel`,children:F(s.labels.singular,S)}),a.isEditable()&&c("div",{className:`${o}__actions`,children:[P?e(C,{buttonStyle:"icon-label",className:`${o}__upload-drawer-toggler`,disabled:_,el:"button",icon:"edit",onClick:()=>{Q()},round:!0,tooltip:u("fields:editRelationship")}):null,e(C,{buttonStyle:"icon-label",className:`${o}__swap-drawer-toggler`,disabled:_,el:"button",icon:"swap",onClick:()=>{a.dispatchCommand(T,{replace:{nodeKey:l}})},round:!0,tooltip:u("fields:swapUpload")}),e(C,{buttonStyle:"icon-label",className:`${o}__removeButton`,disabled:_,icon:"x",onClick:t=>{t.preventDefault(),Z()},round:!0,tooltip:u("fields:removeUpload")})]})]})]}),e("div",{className:`${o}__bottomRow`,children:e(X,{className:`${o}__doc-drawer-toggler`,children:e("strong",{children:m?.filename})})})]}),n?e(V,{onSave:ee}):null,P?e(y,{data:j,drawerSlug:v,drawerTitle:u("general:editLabel",{label:F(s.labels.singular,S)}),featureKey:"upload",handleDrawerSubmit:te,schemaPath:q,schemaPathSuffix:s.slug}):null]})},Ke=d=>e(A,{...d,uploads:!0,children:e(Ne,{...d})});export{Ke as UploadComponent};
|
|
2
|
+
//# sourceMappingURL=component-YE2TDR5O.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/features/upload/client/component/index.tsx"],
|
|
4
|
+
"sourcesContent": ["'use client'\nimport type { ClientCollectionConfig, Data } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection.js'\nimport { mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n File,\n formatDrawerSlug,\n useConfig,\n useEditDepth,\n usePayloadAPI,\n useTranslation,\n} 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'\nimport React, { useCallback, useEffect, useId, useReducer, useRef, useState } from 'react'\n\nimport type { BaseClientFeatureProps } from '../../../typesClient.js'\nimport type { UploadData } from '../../server/nodes/UploadNode.js'\nimport type { UploadFeaturePropsClient } from '../feature.client.js'\nimport type { UploadNode } from '../nodes/UploadNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { FieldsDrawer } from '../../../../utilities/fieldsDrawer/Drawer.js'\nimport { useLexicalDocumentDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDocumentDrawer.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { EnabledRelationshipsCondition } from '../../../relationship/client/utils/EnabledRelationshipsCondition.js'\nimport { INSERT_UPLOAD_WITH_DRAWER_COMMAND } from '../drawer/commands.js'\nimport { $isUploadNode } from '../nodes/UploadNode.js'\nimport './index.scss'\n\nconst baseClass = 'lexical-upload'\n\nconst initialParams = {\n depth: 0,\n}\n\nexport type ElementProps = {\n data: UploadData\n nodeKey: string\n}\n\nconst Component: React.FC<ElementProps> = (props) => {\n const {\n data: { fields, relationTo, value },\n nodeKey,\n } = props\n\n if (typeof value === 'object') {\n throw new Error(\n 'Upload value should be a string or number. The Lexical Upload component should not receive the populated value object.',\n )\n }\n\n const {\n config: {\n collections,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const uploadRef = useRef<HTMLDivElement | null>(null)\n const { uuid } = useEditorConfigContext()\n const editDepth = useEditDepth()\n const [editor] = useLexicalComposerContext()\n const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey)\n\n const {\n editorConfig,\n fieldProps: { readOnly, schemaPath },\n } = useEditorConfigContext()\n\n const { i18n, t } = useTranslation()\n const [cacheBust, dispatchCacheBust] = useReducer((state) => state + 1, 0)\n const [relatedCollection] = useState<ClientCollectionConfig>(\n () => collections.find((coll) => coll.slug === relationTo)!,\n )\n\n const componentID = useId()\n\n const extraFieldsDrawerSlug = formatDrawerSlug({\n slug: `lexical-upload-drawer-` + uuid + componentID, // There can be multiple upload components, each with their own drawer, in one single editor => separate them by componentID\n depth: editDepth,\n })\n\n // Need to use hook to initialize useEffect that restores cursor position\n const { toggleDrawer } = useLexicalDrawer(extraFieldsDrawerSlug, true)\n\n const { closeDocumentDrawer, DocumentDrawer, DocumentDrawerToggler } = useLexicalDocumentDrawer({\n id: value,\n collectionSlug: relatedCollection.slug,\n })\n\n // Get the referenced document\n const [{ data }, { setParams }] = usePayloadAPI(\n `${serverURL}${api}/${relatedCollection.slug}/${value}`,\n { initialParams },\n )\n\n const thumbnailSRC = data?.thumbnailURL || data?.url\n\n const removeUpload = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const updateUpload = useCallback(\n (data: Data) => {\n setParams({\n ...initialParams,\n cacheBust, // do this to get the usePayloadAPI to re-fetch the data even though the URL string hasn't changed\n })\n\n dispatchCacheBust()\n closeDocumentDrawer()\n },\n [setParams, cacheBust, closeDocumentDrawer],\n )\n\n const $onDelete = useCallback(\n (event: KeyboardEvent) => {\n const deleteSelection = $getSelection()\n if (isSelected && $isNodeSelection(deleteSelection)) {\n event.preventDefault()\n editor.update(() => {\n deleteSelection.getNodes().forEach((node) => {\n if ($isUploadNode(node)) {\n node.remove()\n }\n })\n })\n }\n return false\n },\n [editor, isSelected],\n )\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<MouseEvent>(\n CLICK_COMMAND,\n (event: MouseEvent) => {\n // Check if uploadRef.target or anything WITHIN uploadRef.target was clicked\n if (\n event.target === uploadRef.current ||\n uploadRef.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 COMMAND_PRIORITY_LOW,\n ),\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])\n\n const hasExtraFields = (\n editorConfig?.resolvedFeatureMap?.get('upload')\n ?.sanitizedClientFeatureProps as BaseClientFeatureProps<UploadFeaturePropsClient>\n ).collections?.[relatedCollection.slug]?.hasExtraFields\n\n const onExtraFieldsDrawerSubmit = useCallback(\n (_, data) => {\n // Update lexical node (with key nodeKey) with new data\n editor.update(() => {\n const uploadNode: null | UploadNode = $getNodeByKey(nodeKey)\n if (uploadNode) {\n const newData: UploadData = {\n ...uploadNode.getData(),\n fields: data,\n }\n uploadNode.setData(newData)\n }\n })\n },\n [editor, nodeKey],\n )\n\n return (\n <div\n className={[baseClass, isSelected && `${baseClass}--selected`].filter(Boolean).join(' ')}\n contentEditable={false}\n ref={uploadRef}\n >\n <div className={`${baseClass}__card`}>\n <div className={`${baseClass}__topRow`}>\n {/* TODO: migrate to use @payloadcms/ui/elements/Thumbnail component */}\n <div className={`${baseClass}__thumbnail`}>\n {thumbnailSRC ? (\n <img\n alt={data?.filename}\n data-lexical-upload-id={value}\n data-lexical-upload-relation-to={relationTo}\n src={thumbnailSRC}\n />\n ) : (\n <File />\n )}\n </div>\n <div className={`${baseClass}__topRowRightPanel`}>\n <div className={`${baseClass}__collectionLabel`}>\n {getTranslation(relatedCollection.labels.singular, i18n)}\n </div>\n {editor.isEditable() && (\n <div className={`${baseClass}__actions`}>\n {hasExtraFields ? (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__upload-drawer-toggler`}\n disabled={readOnly}\n el=\"button\"\n icon=\"edit\"\n onClick={() => {\n toggleDrawer()\n }}\n round\n tooltip={t('fields:editRelationship')}\n />\n ) : null}\n\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__swap-drawer-toggler`}\n disabled={readOnly}\n el=\"button\"\n icon=\"swap\"\n onClick={() => {\n editor.dispatchCommand(INSERT_UPLOAD_WITH_DRAWER_COMMAND, {\n replace: { nodeKey },\n })\n }}\n round\n tooltip={t('fields:swapUpload')}\n />\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeUpload()\n }}\n round\n tooltip={t('fields:removeUpload')}\n />\n </div>\n )}\n </div>\n </div>\n <div className={`${baseClass}__bottomRow`}>\n <DocumentDrawerToggler className={`${baseClass}__doc-drawer-toggler`}>\n <strong>{data?.filename}</strong>\n </DocumentDrawerToggler>\n </div>\n </div>\n {value ? <DocumentDrawer onSave={updateUpload} /> : null}\n {hasExtraFields ? (\n <FieldsDrawer\n data={fields}\n drawerSlug={extraFieldsDrawerSlug}\n drawerTitle={t('general:editLabel', {\n label: getTranslation(relatedCollection.labels.singular, i18n),\n })}\n featureKey=\"upload\"\n handleDrawerSubmit={onExtraFieldsDrawerSubmit}\n schemaPath={schemaPath}\n schemaPathSuffix={relatedCollection.slug}\n />\n ) : null}\n </div>\n )\n}\n\nexport const UploadComponent = (props: ElementProps): React.ReactNode => {\n return (\n <EnabledRelationshipsCondition {...props} uploads>\n <Component {...props} />\n </EnabledRelationshipsCondition>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["useLexicalComposerContext", "useLexicalNodeSelection", "mergeRegister", "getTranslation", "Button", "File", "formatDrawerSlug", "useConfig", "useEditDepth", "usePayloadAPI", "useTranslation", "$getNodeByKey", "$getSelection", "$isNodeSelection", "CLICK_COMMAND", "COMMAND_PRIORITY_LOW", "KEY_BACKSPACE_COMMAND", "KEY_DELETE_COMMAND", "useCallback", "useEffect", "useId", "useReducer", "useRef", "useState", "baseClass", "initialParams", "depth", "Component", "props", "data", "fields", "relationTo", "value", "nodeKey", "Error", "config", "collections", "routes", "api", "serverURL", "useConfig", "uploadRef", "useRef", "uuid", "useEditorConfigContext", "editDepth", "useEditDepth", "editor", "useLexicalComposerContext", "isSelected", "setSelected", "clearSelection", "useLexicalNodeSelection", "editorConfig", "fieldProps", "readOnly", "schemaPath", "i18n", "t", "useTranslation", "cacheBust", "dispatchCacheBust", "useReducer", "state", "relatedCollection", "useState", "find", "coll", "slug", "componentID", "useId", "extraFieldsDrawerSlug", "formatDrawerSlug", "toggleDrawer", "useLexicalDrawer", "closeDocumentDrawer", "DocumentDrawer", "DocumentDrawerToggler", "useLexicalDocumentDrawer", "id", "collectionSlug", "setParams", "usePayloadAPI", "thumbnailSRC", "thumbnailURL", "url", "removeUpload", "useCallback", "update", "$getNodeByKey", "remove", "updateUpload", "$onDelete", "event", "deleteSelection", "$getSelection", "$isNodeSelection", "preventDefault", "getNodes", "forEach", "node", "$isUploadNode", "useEffect", "mergeRegister", "registerCommand", "CLICK_COMMAND", "target", "current", "contains", "shiftKey", "COMMAND_PRIORITY_LOW", "KEY_DELETE_COMMAND", "KEY_BACKSPACE_COMMAND", "hasExtraFields", "resolvedFeatureMap", "get", "sanitizedClientFeatureProps", "onExtraFieldsDrawerSubmit", "_", "uploadNode", "newData", "getData", "setData", "_jsxs", "className", "filter", "Boolean", "join", "contentEditable", "ref", "_jsx", "alt", "filename", "src", "File", "getTranslation", "labels", "singular", "isEditable", "Button", "buttonStyle", "disabled", "el", "icon", "onClick", "round", "tooltip", "dispatchCommand", "INSERT_UPLOAD_WITH_DRAWER_COMMAND", "replace", "e", "onSave", "FieldsDrawer", "drawerSlug", "drawerTitle", "label", "featureKey", "handleDrawerSubmit", "schemaPathSuffix", "UploadComponent", "EnabledRelationshipsCondition", "uploads"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";import{c as x,f as M}from"./chunk-ZOYGBIAN.js";import{b as E}from"./chunk-PDAZFJVO.js";import{jsx as u,jsxs as S}from"react/jsx-runtime";import{useCallback as f,useEffect as R,useRef as A}from"react";import{useLexicalComposerContext as I}from"@lexical/react/LexicalComposerContext";import{useLexicalNodeSelection as K}from"@lexical/react/useLexicalNodeSelection";import{mergeRegister as P}from"@lexical/utils";import{getTranslation as h}from"@payloadcms/translations";import{Button as v,useTranslation as T}from"@payloadcms/ui";import{$getNodeByKey as j,$getSelection as Y,$isNodeSelection as z,CLICK_COMMAND as F,COMMAND_PRIORITY_LOW as p,KEY_BACKSPACE_COMMAND as W,KEY_DELETE_COMMAND as q}from"lexical";var l="inline-block",ie=D=>{let{formData:r,nodeKey:n}=D,[e]=I(),{i18n:b,t:C}=T(),{fieldProps:{featureClientSchemaMap:$,readOnly:k,schemaPath:y}}=E(),a=A(null),[o,c,m]=K(n),O=`${y}.lexical_internal_feature.blocks.lexical_inline_blocks.${r.blockType}`,i=$.blocks[O][0].blocks[0],L=f(()=>{e.update(()=>{j(n)?.remove()})},[e,n]),d=f(s=>{let t=Y();return o&&z(t)&&(s.preventDefault(),e.update(()=>{t.getNodes().forEach(B=>{M(B)&&B.remove()})})),!1},[e,o]),_=f(s=>{let t=s;return t.target===a.current||a.current?.contains(t.target)?(t.shiftKey?c(!o):o||(m(),c(!0)),!0):!1},[o,c,m]);R(()=>P(e.registerCommand(F,_,p),e.registerCommand(q,d,p),e.registerCommand(W,d,p)),[m,e,o,n,d,c,_]);let N=i?.labels?.singular?h(i.labels.singular,b):i?.slug,g=i?.admin?.components?.Label;return S("div",{className:[l,l+"-"+r.blockType,o&&`${l}--selected`].filter(Boolean).join(" "),ref:a,children:[g||u("div",{children:h(i.labels.singular,b)}),e.isEditable()&&S("div",{className:`${l}__actions`,children:[u(v,{buttonStyle:"icon-label",className:`${l}__editButton`,disabled:k,el:"div",icon:"edit",onClick:()=>{e.dispatchCommand(x,{fields:r,nodeKey:n})},round:!0,size:"small",tooltip:C("lexical:blocks:inlineBlocks:edit",{label:N})}),u(v,{buttonStyle:"icon-label",className:`${l}__removeButton`,disabled:k,icon:"x",onClick:s=>{s.preventDefault(),L()},round:!0,size:"small",tooltip:C("lexical:blocks:inlineBlocks:remove",{label:N})})]})]})};export{ie as InlineBlockComponent};
|
|
2
|
+
//# sourceMappingURL=componentInline-N5LJ2LY2.js.map
|