@peak-ai/canvas 1.4.28-rc.2 → 1.4.28-rc.3

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/GrapesjsCanvas.js CHANGED
@@ -1,16 +1,16 @@
1
1
  import _asyncToGenerator from"@babel/runtime/helpers/asyncToGenerator";import _extends from"@babel/runtime/helpers/extends";import _regeneratorRuntime from"@babel/runtime/regenerator";/* eslint-disable @typescript-eslint/no-explicit-any */import React,{useEffect,useRef,useState}from"react";// eslint-disable-next-line import/no-named-as-default
2
- import grapesjs from"grapesjs";import"grapesjs/dist/css/grapes.min.css";import tailwind from"grapesjs-tailwind";// @ts-ignore - react-to-print types will be available after package installation
3
- import{useReactToPrint}from"react-to-print";import{TypesToRegister}from"./constants";import{toKebabCase}from"./helpers";import{tailwindCompiledCss}from"./helpers/css";import{datePickerCss}from"./helpers/date-picker";import PdfPreview from"./helpers/pdf-preview";import{createGrapesjsShadcnGenericPlugin}from"./plugins/grapejs-plugin";import{StyledEditor}from"./index.styles";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";function setComponentProperties(editor,isPreview){function setPropertiesRecursively(comp){comp.set({editable:!isPreview,draggable:!isPreview,droppable:!isPreview&&comp.getName()!=="Shadcn-generic",selectable:!isPreview,hoverable:!isPreview,highlightable:!isPreview,copyable:false,resizable:false,removable:!isPreview,badgable:false});if(!isPreview){comp.set("toolbar",[{attributes:{"class":"fa fa-arrows"},command:"tlb-move"},{attributes:{"class":"fa fa-trash"},command:"tlb-delete"}])}comp.components().forEach(setPropertiesRecursively)}if(isPreview){editor.runCommand("core:preview")}else{editor.stopCommand("core:preview")}var wrapper=editor.getWrapper();wrapper==null||wrapper.find("*").forEach(setPropertiesRecursively)}function convertStyles(stylesArray){return stylesArray.map(function(block){var selectors=Array.isArray(block.selectors)?block.selectors.join(", "):block.selectors;var declarations=Object.entries(block.style).map(function(_ref){var prop=_ref[0],value=_ref[1];return toKebabCase(prop)+": "+value+";"}).join(" ");return selectors+" { "+declarations+" }"}).join("\n")}function createActionCardConfig(action){var icon=action.icon,title=action.title,description=action.description;return{type:"shadcn-generic",componentName:"ActionCard",badgable:false,copyable:false,removable:true,draggable:true,componentProps:{icon:icon,headerContent:title,bodyContent:description}}}function expandActions(node){if(node.type==="shadcn-generic"&&node.componentName==="Actions"){var _node$componentProps;var actions=(_node$componentProps=node.componentProps)==null?void 0:_node$componentProps.actions;if(Array.isArray(actions)&&actions.length>0){return _extends({},node,{type:"div",classes:["dashboard-cards"].concat(node.classes||[]),componentName:undefined,componentProps:undefined,components:actions.map(function(action,i){return _extends({},createActionCardConfig(action),{id:node.id+"--action-card-"+i})})})}return node}if(Array.isArray(node.components)){return _extends({},node,{components:node.components.map(expandActions)})}return node}function setInteracting(renderedComponents,components,inProgress){components.forEach(function(component){var componentId=component.componentId,showLoader=component.showLoader;if(!showLoader){return}var gjsModel=renderedComponents[componentId];if(gjsModel){gjsModel.set("attributes",_extends({},gjsModel.get("attributes"),{interactionApiInProgress:inProgress}))}})}function expandActionsComponent(model,actions){model.components("");actions.forEach(function(action){model.append(createActionCardConfig(action))});model.set("type","div");model.addClass("dashboard-cards");model.set("componentName",undefined);model.set("componentProps",{})}function GrapesjsCanvas(_ref2){var json=_ref2.json,_ref2$mode=_ref2.mode,mode=_ref2$mode===void 0?"preview":_ref2$mode,setEditor=_ref2.setEditor,performInteraction=_ref2.performInteraction,_ref2$newDataNotifier=_ref2.newDataNotifier,newDataNotifier=_ref2$newDataNotifier===void 0?function(){// no op
2
+ import grapesjs from"grapesjs";import"grapesjs/dist/css/grapes.min.css";import tailwind from"grapesjs-tailwind";import{useReactToPrint}from"react-to-print";import{TypesToRegister}from"./constants";import{toKebabCase}from"./helpers";import{tailwindCompiledCss}from"./helpers/css";import{datePickerCss}from"./helpers/date-picker";import PdfPreview from"./helpers/pdf-preview";import{createGrapesjsShadcnGenericPlugin}from"./plugins/grapejs-plugin";import{StyledEditor}from"./index.styles";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";function setComponentProperties(editor,isPreview){function setPropertiesRecursively(comp){comp.set({editable:!isPreview,draggable:!isPreview,droppable:!isPreview&&comp.getName()!=="Shadcn-generic",selectable:!isPreview,hoverable:!isPreview,highlightable:!isPreview,copyable:false,resizable:false,removable:!isPreview,badgable:false});if(!isPreview){comp.set("toolbar",[{attributes:{"class":"fa fa-arrows"},command:"tlb-move"},{attributes:{"class":"fa fa-trash"},command:"tlb-delete"}])}comp.components().forEach(setPropertiesRecursively)}if(isPreview){editor.runCommand("core:preview")}else{editor.stopCommand("core:preview")}var wrapper=editor.getWrapper();wrapper==null||wrapper.find("*").forEach(setPropertiesRecursively)}function convertStyles(stylesArray){return stylesArray.map(function(block){var selectors=Array.isArray(block.selectors)?block.selectors.join(", "):block.selectors;var declarations=Object.entries(block.style).map(function(_ref){var prop=_ref[0],value=_ref[1];return toKebabCase(prop)+": "+value+";"}).join(" ");return selectors+" { "+declarations+" }"}).join("\n")}function createActionCardConfig(action){var icon=action.icon,title=action.title,description=action.description;return{type:"shadcn-generic",componentName:"ActionCard",badgable:false,copyable:false,removable:true,draggable:true,componentProps:{icon:icon,headerContent:title,bodyContent:description}}}function expandActions(node){if(node.type==="shadcn-generic"&&node.componentName==="Actions"){var _node$componentProps;var actions=(_node$componentProps=node.componentProps)==null?void 0:_node$componentProps.actions;if(Array.isArray(actions)&&actions.length>0){return _extends({},node,{type:"div",classes:["dashboard-cards"].concat(node.classes||[]),componentName:undefined,componentProps:undefined,components:actions.map(function(action,i){return _extends({},createActionCardConfig(action),{id:node.id+"--action-card-"+i})})})}return node}if(Array.isArray(node.components)){return _extends({},node,{components:node.components.map(expandActions)})}return node}function setInteracting(renderedComponents,components,inProgress){components.forEach(function(component){var componentId=component.componentId,showLoader=component.showLoader;if(!showLoader){return}var gjsModel=renderedComponents[componentId];if(gjsModel){gjsModel.set("attributes",_extends({},gjsModel.get("attributes"),{interactionApiInProgress:inProgress}))}})}function expandActionsComponent(model,actions){model.components("");actions.forEach(function(action){model.append(createActionCardConfig(action))});model.set("type","div");model.addClass("dashboard-cards");model.set("componentName",undefined);model.set("componentProps",{})}function GrapesjsCanvas(_ref2){var json=_ref2.json,_ref2$mode=_ref2.mode,mode=_ref2$mode===void 0?"preview":_ref2$mode,setEditor=_ref2.setEditor,performInteraction=_ref2.performInteraction,_ref2$newDataNotifier=_ref2.newDataNotifier,newDataNotifier=_ref2$newDataNotifier===void 0?function(){// no op
4
3
  }:_ref2$newDataNotifier,_ref2$setHasChanged=_ref2.setHasChanged,setHasChanged=_ref2$setHasChanged===void 0?function(){// no op
5
4
  }:_ref2$setHasChanged,isStreaming=_ref2.isStreaming;var editorRef=useRef(null);var componentRef=useRef(null);var editorInstance=useRef(null);var renderedComponents=useRef({});var isStreamingRef=useRef(isStreaming);var isSystemUpdateRef=useRef(false);var lastJsonRef=useRef("");var isEditorAliveRef=useRef(false);var _useState=useState(false),printPDF=_useState[0],setPrintPDF=_useState[1];useEffect(function(){isStreamingRef.current=isStreaming},[isStreaming]);var showPrintDialog=useReactToPrint({content:function content(){return componentRef.current},onBeforePrint:function onBeforePrint(){// Actions before the print
6
5
  },onAfterPrint:function onAfterPrint(){// Actions after the print
7
6
  if(editorRef.current){editorRef.current.style.display="block"}setPrintPDF(false)}});var handlePreviewPdfRef=useRef(null);var handlePreviewPdf=function handlePreviewPdf(){var editor=editorInstance.current;if(editor&&editor.DomComponents.getComponents().models.length>0){if(editorRef.current){editorRef.current.style.display="none"}setPrintPDF(true)}else{alert("Enter content to check PDF Preview!")}};handlePreviewPdfRef.current=handlePreviewPdf;function notificationHandler(props){if(!props){return true}var componentId=props.componentId,_props$newProps=props.newProps,newProps=_props$newProps===void 0?{}:_props$newProps,_props$newAttributes=props.newAttributes,newAttributes=_props$newAttributes===void 0?{}:_props$newAttributes;var model=renderedComponents.current[componentId];if(!model){return false}// Filter out complex placeholder objects by setting them to null
8
7
  // This ensures placeholder values are properly cleared and don't cause stale data issues
9
8
  var filteredProps=_extends({},newProps);Object.keys(filteredProps).forEach(function(key){var value=filteredProps[key];if(value&&typeof value==="object"&&value.name==="__peak_placeholder"){filteredProps[key]=null}});var parsedNewProps=_extends({},filteredProps);if(filteredProps.pagination){parsedNewProps.pagination=_extends({},model.get("componentProps").pagination||{},filteredProps.pagination)}// Handle Actions component: expand into ActionCards when data arrives via streaming
10
- var isActionsComponent=model.get("componentName")==="Actions";var hasValidActionsData=parsedNewProps.actions&&parsedNewProps.actions!==null&&Array.isArray(parsedNewProps.actions)&&parsedNewProps.actions.length>0;if(isActionsComponent&&hasValidActionsData){var _model$components$at;var isAlreadyExpanded=model.components().length>0&&((_model$components$at=model.components().at(0))==null?void 0:_model$components$at.get("componentName"))==="ActionCard";if(!isAlreadyExpanded){expandActionsComponent(model,parsedNewProps.actions);return true}}model.set("componentProps",_extends({},model.get("componentProps"),parsedNewProps));model.set("attributes",_extends({},model.get("attributes"),newAttributes));return true}useEffect(function(){newDataNotifier(notificationHandler)},[]);function performInteractionWrapper(_x){return _performInteractionWrapper.apply(this,arguments)}function _performInteractionWrapper(){_performInteractionWrapper=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(payload){var _editorInstance$curre3;var updatedJson,apiResponse,componentUpdates;return _regeneratorRuntime.wrap(function _callee4$(_context4){while(1)switch(_context4.prev=_context4.next){case 0:_context4.next=2;return(_editorInstance$curre3=editorInstance.current)==null?void 0:_editorInstance$curre3.store();case 2:updatedJson=_context4.sent;setInteracting(renderedComponents.current,payload.affectedComponents,true);_context4.prev=4;_context4.next=7;return performInteraction(_extends({},payload,{json:updatedJson}));case 7:apiResponse=_context4.sent;componentUpdates=apiResponse||{};Object.entries(componentUpdates).forEach(function(_ref6){var key=_ref6[0],value=_ref6[1];var model=renderedComponents.current[key];if(model){model.set("attributes",_extends({},model.get("attributes"),{error:undefined}));model.set("componentProps",_extends({},model.get("componentProps"),value,{error:undefined,isMissing:undefined}))}});return _context4.abrupt("return",componentUpdates);case 13:_context4.prev=13;_context4.t0=_context4["catch"](4);payload.affectedComponents.forEach(function(componentId){var model=renderedComponents.current[componentId];if(model){var errorMessage=_context4.t0 instanceof Error?_context4.t0.message:"Something went wrong. Please try again.";model.set("attributes",_extends({},model.get("attributes"),{error:errorMessage}));model.set("componentProps",_extends({},model.get("componentProps"),{error:errorMessage,isMissing:undefined}))}});throw _context4.t0;case 17:_context4.prev=17;setInteracting(renderedComponents.current,payload.affectedComponents,false);return _context4.finish(17);case 20:case"end":return _context4.stop()}},_callee4,null,[[4,13,17,20]])}));return _performInteractionWrapper.apply(this,arguments)}useEffect(function(){var _json$pages,_json$pages$0$frames;if(!editorRef.current){return function(){// no op
9
+ var isActionsComponent=model.get("componentName")==="Actions";var hasValidActionsData=parsedNewProps.actions&&parsedNewProps.actions!==null&&Array.isArray(parsedNewProps.actions)&&parsedNewProps.actions.length>0;if(isActionsComponent&&hasValidActionsData){var _model$components$at;var isAlreadyExpanded=model.components().length>0&&((_model$components$at=model.components().at(0))==null?void 0:_model$components$at.get("componentName"))==="ActionCard";if(!isAlreadyExpanded){expandActionsComponent(model,parsedNewProps.actions);return true}}model.set("componentProps",_extends({},model.get("componentProps"),parsedNewProps));model.set("attributes",_extends({},model.get("attributes"),newAttributes));return true}useEffect(function(){newDataNotifier(notificationHandler)},[]);function performInteractionWrapper(_x){return _performInteractionWrapper.apply(this,arguments)}function _performInteractionWrapper(){_performInteractionWrapper=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(payload){var _editorInstance$curre4;var updatedJson,apiResponse,componentUpdates;return _regeneratorRuntime.wrap(function _callee4$(_context4){while(1)switch(_context4.prev=_context4.next){case 0:_context4.next=2;return(_editorInstance$curre4=editorInstance.current)==null?void 0:_editorInstance$curre4.store();case 2:updatedJson=_context4.sent;setInteracting(renderedComponents.current,payload.affectedComponents,true);_context4.prev=4;_context4.next=7;return performInteraction(_extends({},payload,{json:updatedJson}));case 7:apiResponse=_context4.sent;componentUpdates=apiResponse||{};Object.entries(componentUpdates).forEach(function(_ref6){var key=_ref6[0],value=_ref6[1];var model=renderedComponents.current[key];if(model){model.set("attributes",_extends({},model.get("attributes"),{error:undefined}));model.set("componentProps",_extends({},model.get("componentProps"),value,{error:undefined,isMissing:undefined}))}});return _context4.abrupt("return",componentUpdates);case 13:_context4.prev=13;_context4.t0=_context4["catch"](4);payload.affectedComponents.forEach(function(componentId){var model=renderedComponents.current[componentId];if(model){var errorMessage=_context4.t0 instanceof Error?_context4.t0.message:"Something went wrong. Please try again.";model.set("attributes",_extends({},model.get("attributes"),{error:errorMessage}));model.set("componentProps",_extends({},model.get("componentProps"),{error:errorMessage,isMissing:undefined}))}});throw _context4.t0;case 17:_context4.prev=17;setInteracting(renderedComponents.current,payload.affectedComponents,false);return _context4.finish(17);case 20:case"end":return _context4.stop()}},_callee4,null,[[4,13,17,20]])}));return _performInteractionWrapper.apply(this,arguments)}useEffect(function(){var _json$pages,_json$pages$0$frames;if(!editorRef.current){return function(){// no op
11
10
  }}if(editorInstance.current){editorInstance.current.destroy();editorInstance.current=null;isEditorAliveRef.current=false}var currentMode=mode;var editor=grapesjs.init({container:editorRef.current,height:"100%",plugins:[tailwind,createGrapesjsShadcnGenericPlugin(currentMode,performInteractionWrapper,renderedComponents.current,setHasChanged)],storageManager:{type:"none"},richTextEditor:{actions:["bold","italic","underline","strikethrough"]},canvas:{customBadgeLabel:function customBadgeLabel(component){var tagName=component.get("tagName");return tagName==="body"?"":tagName||""}}});isEditorAliveRef.current=true;var injectionAttempts=0;function injectStylesEarly(){var _editor$Canvas;var iframeDoc=(_editor$Canvas=editor.Canvas)==null||_editor$Canvas.getDocument==null?void 0:_editor$Canvas.getDocument();if(iframeDoc&&iframeDoc.head){if(!iframeDoc.head.querySelector("[data-grapesjs-styles]")){var style=iframeDoc.createElement("style");var fullCss="\n "+tailwindCompiledCss+"\n "+datePickerCss+"\n ::-webkit-scrollbar {\n width: 0px;\n height: 0px;\n }\n html, body {\n overflow: auto !important;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n ";style.innerHTML=fullCss;style.setAttribute("type","text/css");style.setAttribute("data-grapesjs-styles","true");iframeDoc.head.appendChild(style)}}else if(injectionAttempts<50){injectionAttempts+=1;requestAnimationFrame(injectStylesEarly)}}requestAnimationFrame(injectStylesEarly);function checkDirty(){return _checkDirty.apply(this,arguments)}function _checkDirty(){_checkDirty=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(){var stored,newJson;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:if(!(isStreamingRef.current||isSystemUpdateRef.current)){_context3.next=2;break}return _context3.abrupt("return");case 2:if(!(!isEditorAliveRef.current||!editorInstance.current)){_context3.next=4;break}return _context3.abrupt("return");case 4:stored=null;_context3.prev=5;_context3.next=8;return editorInstance.current.store();case 8:stored=_context3.sent;_context3.next=14;break;case 11:_context3.prev=11;_context3.t0=_context3["catch"](5);return _context3.abrupt("return");case 14:if(stored){_context3.next=16;break}return _context3.abrupt("return");case 16:newJson=JSON.stringify(stored);if(newJson!==lastJsonRef.current){setHasChanged(true);lastJsonRef.current=newJson}case 18:case"end":return _context3.stop()}},_callee3,null,[[5,11]])}));return _checkDirty.apply(this,arguments)}var debouncedCheckDirty=function(){var timeout=null;return function(){if(timeout){clearTimeout(timeout)}timeout=setTimeout(checkDirty,200)}}();["component:add","component:remove","component:update:content","style:update","component:drag:end","rte:change"].forEach(function(evt){editor.on(evt,debouncedCheckDirty)});editor.on("component:update",function(model,prop){if(["attributes","componentProps","content"].includes(prop)){debouncedCheckDirty()}});// Tailwind CSS rules aren't fully added to our component
12
11
  // So, adding them from here!
13
12
  editor.on("load",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(){var canvasDoc,canvasHead,style,fullCss;return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:canvasDoc=editor.Canvas.getDocument();canvasHead=canvasDoc.head;if(!canvasHead.querySelector("[data-grapesjs-styles]")){style=canvasDoc.createElement("style");fullCss="\n "+tailwindCompiledCss+"\n "+datePickerCss+"\n ::-webkit-scrollbar {\n width: 0px;\n height: 0px;\n }\n html, body {\n overflow: auto !important;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n ";style.innerHTML=fullCss;style.setAttribute("type","text/css");style.setAttribute("data-grapesjs-styles","true");canvasHead.appendChild(style)}isSystemUpdateRef.current=true;setComponentProperties(editor,mode==="preview");_context.t0=JSON;_context.next=8;return editor.store();case 8:_context.t1=_context.sent;lastJsonRef.current=_context.t0.stringify.call(_context.t0,_context.t1);isSystemUpdateRef.current=false;case 11:case"end":return _context.stop()}},_callee)})));editorInstance.current=editor;if(setEditor){setEditor(editor)}// Add PDF download button as a floating button
14
13
  var downloadBtnContainer=document.createElement("div");downloadBtnContainer.id="canvas-pdf-download-container";downloadBtnContainer.style.cssText="\n position: fixed;\n top: 10px;\n right: 10px;\n z-index: 10000;\n display: flex;\n align-items: center;\n gap: 8px;\n ";var downloadBtn=document.createElement("button");downloadBtn.innerHTML="\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path>\n <polyline points=\"7 10 12 15 17 10\"></polyline>\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line>\n </svg>\n <span>Download PDF</span>\n ";downloadBtn.className="canvas-pdf-download-btn";downloadBtn.title="Download canvas as PDF";downloadBtn.style.cssText="\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: #4f46e5;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n transition: background-color 0.2s;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n ";downloadBtn.addEventListener("mouseenter",function(){downloadBtn.style.background="#4338ca"});downloadBtn.addEventListener("mouseleave",function(){downloadBtn.style.background="#4f46e5"});downloadBtn.addEventListener("click",function(){if(handlePreviewPdfRef.current){handlePreviewPdfRef.current()}});downloadBtnContainer.appendChild(downloadBtn);document.body.appendChild(downloadBtnContainer);TypesToRegister.forEach(function(_ref4){var type=_ref4.type,tagName=_ref4.tagName;if(!editor.DomComponents.getType(type)){editor.DomComponents.addType(type,{model:{defaults:{tagName:tagName}},view:{}})}});if(json&&((_json$pages=json.pages)==null?void 0:_json$pages.length)>0&&((_json$pages$0$frames=json.pages[0].frames)==null?void 0:_json$pages$0$frames.length)>0){isSystemUpdateRef.current=true;var raw=json.pages[0].frames[0].component;var processed=expandActions(raw);editor.setComponents(processed);var cssText=convertStyles(json.styles||[]);editor.setStyle(cssText);editor.on("load",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(){return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:_context2.t0=JSON;_context2.next=3;return editor.store();case 3:_context2.t1=_context2.sent;lastJsonRef.current=_context2.t0.stringify.call(_context2.t0,_context2.t1);isSystemUpdateRef.current=false;case 6:case"end":return _context2.stop()}},_callee2)})))}return function cleanup(){// Remove download button on cleanup
15
- var downloadContainer=document.getElementById("canvas-pdf-download-container");if(downloadContainer){document.body.removeChild(downloadContainer)}editor.destroy();isEditorAliveRef.current=false}},[json,mode]);var getEditorHtml=function getEditorHtml(){var _editorInstance$curre;return((_editorInstance$curre=editorInstance.current)==null?void 0:_editorInstance$curre.getHtml())||""};var getEditorCss=function getEditorCss(){var _editorInstance$curre2;return((_editorInstance$curre2=editorInstance.current)==null?void 0:_editorInstance$curre2.getCss())||""};return/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(StyledEditor,{}),/*#__PURE__*/_jsx("div",{ref:editorRef,id:"grapesjs-editor"}),printPDF&&/*#__PURE__*/_jsx("div",{style:{overflow:"hidden",height:0,marginRight:"37.5%"},children:/*#__PURE__*/_jsx(PdfPreview,{ref:componentRef,showPrintDialog:showPrintDialog,printHTML:getEditorHtml(),printCSS:getEditorCss()})})]})}export default GrapesjsCanvas;
14
+ var downloadContainer=document.getElementById("canvas-pdf-download-container");if(downloadContainer){document.body.removeChild(downloadContainer)}editor.destroy();isEditorAliveRef.current=false}},[json,mode]);// eslint-disable-next-line func-style
15
+ var getEditorHtml=function getEditorHtml(){var _editorInstance$curre,_iframe$contentDocume;var iframe=(_editorInstance$curre=editorInstance.current)==null||(_editorInstance$curre=_editorInstance$curre.Canvas)==null?void 0:_editorInstance$curre.getFrameEl();return iframe?((_iframe$contentDocume=iframe.contentDocument)==null?void 0:_iframe$contentDocume.body.innerHTML)||"":""};function getEditorCss(){var _editorInstance$curre2,_editorInstance$curre3;var iframe=(_editorInstance$curre2=editorInstance.current)==null||(_editorInstance$curre2=_editorInstance$curre2.Canvas)==null?void 0:_editorInstance$curre2.getFrameEl();return iframe?((_editorInstance$curre3=editorInstance.current)==null?void 0:_editorInstance$curre3.getCss())||"":""}return/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(StyledEditor,{}),/*#__PURE__*/_jsx("div",{ref:editorRef,id:"grapesjs-editor"}),printPDF&&/*#__PURE__*/_jsx("div",{style:{overflow:"hidden",height:0,marginRight:"37.5%"},children:/*#__PURE__*/_jsx(PdfPreview,{ref:componentRef,showPrintDialog:showPrintDialog,printHTML:getEditorHtml(),printCSS:getEditorCss()})})]})}export default GrapesjsCanvas;
16
16
  //# sourceMappingURL=GrapesjsCanvas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GrapesjsCanvas.js","names":["React","useEffect","useRef","useState","grapesjs","tailwind","useReactToPrint","TypesToRegister","toKebabCase","tailwindCompiledCss","datePickerCss","PdfPreview","createGrapesjsShadcnGenericPlugin","StyledEditor","jsx","_jsx","jsxs","_jsxs","setComponentProperties","editor","isPreview","setPropertiesRecursively","comp","set","editable","draggable","droppable","getName","selectable","hoverable","highlightable","copyable","resizable","removable","badgable","attributes","command","components","forEach","runCommand","stopCommand","wrapper","getWrapper","find","convertStyles","stylesArray","map","block","selectors","Array","isArray","join","declarations","Object","entries","style","_ref","prop","value","createActionCardConfig","action","icon","title","description","type","componentName","componentProps","headerContent","bodyContent","expandActions","node","_node$componentProps","actions","length","_extends","classes","concat","undefined","i","id","setInteracting","renderedComponents","inProgress","component","componentId","showLoader","gjsModel","get","interactionApiInProgress","expandActionsComponent","model","append","addClass","GrapesjsCanvas","_ref2","json","_ref2$mode","mode","setEditor","performInteraction","_ref2$newDataNotifier","newDataNotifier","_ref2$setHasChanged","setHasChanged","isStreaming","editorRef","componentRef","editorInstance","isStreamingRef","isSystemUpdateRef","lastJsonRef","isEditorAliveRef","_useState","printPDF","setPrintPDF","current","showPrintDialog","content","onBeforePrint","onAfterPrint","display","handlePreviewPdfRef","handlePreviewPdf","DomComponents","getComponents","models","alert","notificationHandler","props","_props$newProps","newProps","_props$newAttributes","newAttributes","filteredProps","keys","key","name","parsedNewProps","pagination","isActionsComponent","hasValidActionsData","_model$components$at","isAlreadyExpanded","at","performInteractionWrapper","_x","_performInteractionWrapper","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee4","payload","_editorInstance$curre3","updatedJson","apiResponse","componentUpdates","wrap","_callee4$","_context4","prev","next","store","sent","affectedComponents","_ref6","error","isMissing","abrupt","t0","errorMessage","Error","message","finish","stop","_json$pages","_json$pages$0$frames","destroy","currentMode","init","container","height","plugins","storageManager","richTextEditor","canvas","customBadgeLabel","tagName","injectionAttempts","injectStylesEarly","_editor$Canvas","iframeDoc","Canvas","getDocument","head","querySelector","createElement","fullCss","innerHTML","setAttribute","appendChild","requestAnimationFrame","checkDirty","_checkDirty","_callee3","stored","newJson","_callee3$","_context3","JSON","stringify","debouncedCheckDirty","timeout","clearTimeout","setTimeout","evt","on","includes","_callee","canvasDoc","canvasHead","_callee$","_context","t1","call","downloadBtnContainer","document","cssText","downloadBtn","className","addEventListener","background","body","_ref4","getType","addType","defaults","view","pages","frames","raw","processed","setComponents","styles","setStyle","_callee2","_callee2$","_context2","cleanup","downloadContainer","getElementById","removeChild","getEditorHtml","_editorInstance$curre","getHtml","getEditorCss","_editorInstance$curre2","getCss","Fragment","children","ref","overflow","marginRight","printHTML","printCSS"],"sources":["../src/GrapesjsCanvas.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useEffect, useRef, useState } from 'react';\n// eslint-disable-next-line import/no-named-as-default\nimport grapesjs, { Component, Editor } from 'grapesjs';\nimport 'grapesjs/dist/css/grapes.min.css';\nimport tailwind from 'grapesjs-tailwind';\n// @ts-ignore - react-to-print types will be available after package installation\nimport { useReactToPrint } from 'react-to-print';\n\nimport { TypesToRegister } from './constants';\nimport { toKebabCase } from './helpers';\nimport { tailwindCompiledCss } from './helpers/css';\nimport { datePickerCss } from './helpers/date-picker';\nimport PdfPreview from './helpers/pdf-preview';\nimport { createGrapesjsShadcnGenericPlugin } from './plugins/grapejs-plugin';\nimport { StyledEditor } from './index.styles';\n\ntype NotificationHandler = (newData: {\n componentId: string;\n newProps: Record<string, any>;\n newAttributes: Record<string, any>;\n}) => boolean;\n\ntype GrapesjsCanvasProps = {\n json: any;\n mode?: 'editor' | 'preview';\n setEditor: (editor: Editor) => void;\n performInteraction: (payload: Record<string, any>) => Promise<Record<string, any> | undefined>;\n newDataNotifier: (notifHandler: NotificationHandler) => void;\n setHasChanged: (hasChanged: boolean) => void;\n isStreaming: boolean;\n};\n\nfunction setComponentProperties(editor: Editor, isPreview: boolean) {\n function setPropertiesRecursively(comp: Component) {\n comp.set({\n editable: !isPreview,\n draggable: !isPreview,\n droppable: !isPreview && comp.getName() !== 'Shadcn-generic',\n selectable: !isPreview,\n hoverable: !isPreview,\n highlightable: !isPreview,\n copyable: false,\n resizable: false,\n removable: !isPreview,\n badgable: false,\n });\n\n if (!isPreview) {\n comp.set('toolbar', [\n { attributes: { class: 'fa fa-arrows' }, command: 'tlb-move' },\n { attributes: { class: 'fa fa-trash' }, command: 'tlb-delete' },\n ]);\n }\n\n comp.components().forEach(setPropertiesRecursively);\n }\n\n if (isPreview) {\n editor.runCommand('core:preview');\n } else {\n editor.stopCommand('core:preview');\n }\n\n const wrapper = editor.getWrapper();\n wrapper?.find('*').forEach(setPropertiesRecursively);\n}\n\nfunction convertStyles(stylesArray: any[]): string {\n return stylesArray\n .map((block) => {\n const selectors = Array.isArray(block.selectors)\n ? block.selectors.join(', ')\n : block.selectors;\n const declarations = Object.entries(block.style)\n .map(([prop, value]) => `${toKebabCase(prop)}: ${value};`)\n .join(' ');\n\n return `${selectors} { ${declarations} }`;\n })\n .join('\\n');\n}\n\nfunction createActionCardConfig(action: any): any {\n const { icon, title, description } = action;\n\n return {\n type: 'shadcn-generic',\n componentName: 'ActionCard',\n badgable: false,\n copyable: false,\n removable: true,\n draggable: true,\n componentProps: {\n icon,\n headerContent: title,\n bodyContent: description,\n },\n };\n}\n\nfunction expandActions(node: any): any {\n if (node.type === 'shadcn-generic' && node.componentName === 'Actions') {\n const actions = node.componentProps?.actions;\n\n if (Array.isArray(actions) && actions.length > 0) {\n return {\n ...node,\n type: 'div',\n classes: ['dashboard-cards', ...(node.classes || [])],\n componentName: undefined,\n componentProps: undefined,\n components: actions.map((action: any, i: number) => ({\n ...createActionCardConfig(action),\n id: `${node.id}--action-card-${i}`,\n })),\n };\n }\n\n return node;\n }\n\n if (Array.isArray(node.components)) {\n return {\n ...node,\n components: node.components.map(expandActions),\n };\n }\n\n return node;\n}\n\nfunction setInteracting(\n renderedComponents: Record<string, Component>,\n components: { componentId: string; showLoader: boolean }[],\n inProgress: boolean,\n) {\n components.forEach((component) => {\n const { componentId, showLoader } = component;\n\n if (!showLoader) {\n return;\n }\n\n const gjsModel = renderedComponents[componentId];\n\n if (gjsModel) {\n gjsModel.set('attributes', {\n ...gjsModel.get('attributes'),\n interactionApiInProgress: inProgress,\n });\n }\n });\n}\n\nfunction expandActionsComponent(model: Component, actions: any[]): void {\n model.components('');\n\n actions.forEach((action: any) => {\n model.append(createActionCardConfig(action));\n });\n\n model.set('type', 'div');\n model.addClass('dashboard-cards');\n model.set('componentName', undefined);\n model.set('componentProps', {});\n}\n\nfunction GrapesjsCanvas({\n json,\n mode = 'preview',\n setEditor,\n performInteraction,\n newDataNotifier = () => {\n // no op\n },\n setHasChanged = () => {\n // no op\n },\n isStreaming,\n}: GrapesjsCanvasProps) {\n const editorRef = useRef<HTMLDivElement>(null);\n const componentRef = useRef<HTMLDivElement>(null);\n const editorInstance = useRef<Editor | null>(null);\n const renderedComponents = useRef<Record<string, Component>>({});\n const isStreamingRef = useRef(isStreaming);\n const isSystemUpdateRef = useRef(false);\n const lastJsonRef = useRef<string>('');\n const isEditorAliveRef = useRef(false);\n const [printPDF, setPrintPDF] = useState(false);\n\n useEffect(() => {\n isStreamingRef.current = isStreaming;\n }, [isStreaming]);\n\n const showPrintDialog = useReactToPrint({\n content: () => componentRef.current,\n onBeforePrint: () => {\n // Actions before the print\n },\n onAfterPrint: () => {\n // Actions after the print\n if (editorRef.current) {\n editorRef.current.style.display = 'block';\n }\n setPrintPDF(false);\n },\n });\n\n const handlePreviewPdfRef = useRef<(() => void) | null>(null);\n\n const handlePreviewPdf = () => {\n const editor = editorInstance.current;\n if (editor && editor.DomComponents.getComponents().models.length > 0) {\n if (editorRef.current) {\n editorRef.current.style.display = 'none';\n }\n setPrintPDF(true);\n } else {\n alert('Enter content to check PDF Preview!');\n }\n };\n\n handlePreviewPdfRef.current = handlePreviewPdf;\n\n function notificationHandler(\n props: Parameters<NotificationHandler>[0],\n ): ReturnType<NotificationHandler> {\n if (!props) {\n return true;\n }\n\n const { componentId, newProps = {}, newAttributes = {} } = props;\n\n const model = renderedComponents.current[componentId];\n\n if (!model) {\n return false;\n }\n\n // Filter out complex placeholder objects by setting them to null\n // This ensures placeholder values are properly cleared and don't cause stale data issues\n const filteredProps = { ...newProps };\n\n Object.keys(filteredProps).forEach((key) => {\n const value = filteredProps[key];\n\n if (value && typeof value === 'object' && value.name === '__peak_placeholder') {\n filteredProps[key] = null;\n }\n });\n\n const parsedNewProps = {\n ...filteredProps,\n };\n\n if (filteredProps.pagination) {\n parsedNewProps.pagination = {\n ...(model.get('componentProps').pagination || {}),\n ...filteredProps.pagination,\n };\n }\n\n // Handle Actions component: expand into ActionCards when data arrives via streaming\n const isActionsComponent = model.get('componentName') === 'Actions';\n const hasValidActionsData =\n parsedNewProps.actions &&\n parsedNewProps.actions !== null &&\n Array.isArray(parsedNewProps.actions) &&\n parsedNewProps.actions.length > 0;\n\n if (isActionsComponent && hasValidActionsData) {\n const isAlreadyExpanded =\n model.components().length > 0 &&\n model.components().at(0)?.get('componentName') === 'ActionCard';\n\n if (!isAlreadyExpanded) {\n expandActionsComponent(model, parsedNewProps.actions);\n\n return true;\n }\n }\n\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...parsedNewProps,\n });\n\n model.set('attributes', {\n ...model.get('attributes'),\n ...newAttributes,\n });\n\n return true;\n }\n\n useEffect(() => {\n newDataNotifier(notificationHandler);\n }, []);\n\n async function performInteractionWrapper(payload: Record<string, any>) {\n const updatedJson = await editorInstance.current?.store();\n setInteracting(renderedComponents.current, payload.affectedComponents, true);\n\n try {\n const apiResponse = await performInteraction({\n ...payload,\n json: updatedJson,\n });\n\n const componentUpdates = apiResponse || {};\n\n Object.entries(componentUpdates).forEach(([key, value]) => {\n const model = renderedComponents.current[key];\n\n if (model) {\n model.set('attributes', {\n ...model.get('attributes'),\n error: undefined,\n });\n\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...value,\n error: undefined,\n isMissing: undefined,\n });\n }\n });\n\n return componentUpdates;\n } catch (error) {\n payload.affectedComponents.forEach((componentId: string) => {\n const model = renderedComponents.current[componentId];\n\n if (model) {\n const errorMessage =\n error instanceof Error ? error.message : 'Something went wrong. Please try again.';\n\n model.set('attributes', {\n ...model.get('attributes'),\n error: errorMessage,\n });\n\n model.set('componentProps', {\n ...model.get('componentProps'),\n error: errorMessage,\n isMissing: undefined,\n });\n }\n });\n\n throw error;\n } finally {\n setInteracting(renderedComponents.current, payload.affectedComponents, false);\n }\n }\n\n useEffect(() => {\n if (!editorRef.current) {\n return () => {\n // no op\n };\n }\n\n if (editorInstance.current) {\n editorInstance.current.destroy();\n editorInstance.current = null;\n isEditorAliveRef.current = false;\n }\n\n const currentMode = mode;\n\n const editor = grapesjs.init({\n container: editorRef.current,\n height: '100%',\n plugins: [\n tailwind,\n createGrapesjsShadcnGenericPlugin(\n currentMode,\n performInteractionWrapper,\n renderedComponents.current,\n setHasChanged,\n ),\n ],\n storageManager: { type: 'none' },\n richTextEditor: {\n actions: ['bold', 'italic', 'underline', 'strikethrough'],\n },\n canvas: {\n customBadgeLabel: (component) => {\n const tagName = component.get('tagName');\n\n return tagName === 'body' ? '' : tagName || '';\n },\n },\n });\n\n isEditorAliveRef.current = true;\n\n let injectionAttempts = 0;\n\n function injectStylesEarly() {\n const iframeDoc = editor.Canvas?.getDocument?.();\n\n if (iframeDoc && iframeDoc.head) {\n if (!iframeDoc.head.querySelector('[data-grapesjs-styles]')) {\n const style = iframeDoc.createElement('style');\n const fullCss = `\n ${tailwindCompiledCss}\n ${datePickerCss}\n ::-webkit-scrollbar {\n width: 0px;\n height: 0px;\n }\n html, body {\n overflow: auto !important;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n `;\n style.innerHTML = fullCss;\n style.setAttribute('type', 'text/css');\n style.setAttribute('data-grapesjs-styles', 'true');\n iframeDoc.head.appendChild(style);\n }\n } else if (injectionAttempts < 50) {\n injectionAttempts += 1;\n requestAnimationFrame(injectStylesEarly);\n }\n }\n\n requestAnimationFrame(injectStylesEarly);\n\n async function checkDirty() {\n if (isStreamingRef.current || isSystemUpdateRef.current) {\n return;\n }\n\n if (!isEditorAliveRef.current || !editorInstance.current) {\n return;\n }\n\n let stored = null;\n\n try {\n stored = await editorInstance.current.store();\n } catch (err) {\n return;\n }\n\n if (!stored) {\n return;\n }\n\n const newJson = JSON.stringify(stored);\n\n if (newJson !== lastJsonRef.current) {\n setHasChanged(true);\n lastJsonRef.current = newJson;\n }\n }\n\n const debouncedCheckDirty = (() => {\n let timeout: NodeJS.Timeout | null = null;\n\n return () => {\n if (timeout) {\n clearTimeout(timeout);\n }\n\n timeout = setTimeout(checkDirty, 200);\n };\n })();\n\n [\n 'component:add',\n 'component:remove',\n 'component:update:content',\n 'style:update',\n 'component:drag:end',\n 'rte:change',\n ].forEach((evt) => {\n editor.on(evt, debouncedCheckDirty);\n });\n\n editor.on('component:update', (model, prop) => {\n if (['attributes', 'componentProps', 'content'].includes(prop)) {\n debouncedCheckDirty();\n }\n });\n\n // Tailwind CSS rules aren't fully added to our component\n // So, adding them from here!\n editor.on('load', async () => {\n const canvasDoc = editor.Canvas.getDocument();\n const canvasHead = canvasDoc.head;\n\n if (!canvasHead.querySelector('[data-grapesjs-styles]')) {\n const style = canvasDoc.createElement('style');\n const fullCss = `\n ${tailwindCompiledCss}\n ${datePickerCss}\n ::-webkit-scrollbar {\n width: 0px;\n height: 0px;\n }\n html, body {\n overflow: auto !important;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n `;\n style.innerHTML = fullCss;\n style.setAttribute('type', 'text/css');\n style.setAttribute('data-grapesjs-styles', 'true');\n canvasHead.appendChild(style);\n }\n\n isSystemUpdateRef.current = true;\n setComponentProperties(editor, mode === 'preview');\n lastJsonRef.current = JSON.stringify(await editor.store());\n isSystemUpdateRef.current = false;\n });\n\n editorInstance.current = editor;\n\n if (setEditor) {\n setEditor(editor);\n }\n\n // Add PDF download button as a floating button\n const downloadBtnContainer = document.createElement('div');\n downloadBtnContainer.id = 'canvas-pdf-download-container';\n downloadBtnContainer.style.cssText = `\n position: fixed;\n top: 10px;\n right: 10px;\n z-index: 10000;\n display: flex;\n align-items: center;\n gap: 8px;\n `;\n\n const downloadBtn = document.createElement('button');\n downloadBtn.innerHTML = `\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path>\n <polyline points=\"7 10 12 15 17 10\"></polyline>\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line>\n </svg>\n <span>Download PDF</span>\n `;\n downloadBtn.className = 'canvas-pdf-download-btn';\n downloadBtn.title = 'Download canvas as PDF';\n downloadBtn.style.cssText = `\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: #4f46e5;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n transition: background-color 0.2s;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n `;\n \n downloadBtn.addEventListener('mouseenter', () => {\n downloadBtn.style.background = '#4338ca';\n });\n \n downloadBtn.addEventListener('mouseleave', () => {\n downloadBtn.style.background = '#4f46e5';\n });\n\n downloadBtn.addEventListener('click', () => {\n if (handlePreviewPdfRef.current) {\n handlePreviewPdfRef.current();\n }\n });\n\n downloadBtnContainer.appendChild(downloadBtn);\n document.body.appendChild(downloadBtnContainer);\n\n TypesToRegister.forEach(({ type, tagName }) => {\n if (!editor.DomComponents.getType(type)) {\n editor.DomComponents.addType(type, {\n model: {\n defaults: { tagName },\n },\n view: {},\n });\n }\n });\n\n if (json && json.pages?.length > 0 && json.pages[0].frames?.length > 0) {\n isSystemUpdateRef.current = true;\n const raw = json.pages[0].frames[0].component;\n const processed = expandActions(raw);\n editor.setComponents(processed);\n\n const cssText = convertStyles(json.styles || []);\n editor.setStyle(cssText);\n\n editor.on('load', async () => {\n lastJsonRef.current = JSON.stringify(await editor.store());\n isSystemUpdateRef.current = false;\n });\n }\n\n return function cleanup() {\n // Remove download button on cleanup\n const downloadContainer = document.getElementById('canvas-pdf-download-container');\n\n if (downloadContainer) {\n document.body.removeChild(downloadContainer);\n }\n\n editor.destroy();\n isEditorAliveRef.current = false;\n };\n }, [json, mode]);\n\n const getEditorHtml = () => {\n return editorInstance.current?.getHtml() || '';\n };\n\n const getEditorCss = () => {\n return editorInstance.current?.getCss() || '';\n };\n\n return (\n <React.Fragment>\n <StyledEditor />\n <div ref={editorRef} id=\"grapesjs-editor\" />\n {printPDF && (\n <div style={{ overflow: 'hidden', height: 0, marginRight: '37.5%' }}>\n <PdfPreview\n ref={componentRef}\n showPrintDialog={showPrintDialog}\n printHTML={getEditorHtml()}\n printCSS={getEditorCss()}\n />\n </div>\n )}\n </React.Fragment>\n );\n}\n\nexport default GrapesjsCanvas;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"GrapesjsCanvas.js","names":["React","useEffect","useRef","useState","grapesjs","tailwind","useReactToPrint","TypesToRegister","toKebabCase","tailwindCompiledCss","datePickerCss","PdfPreview","createGrapesjsShadcnGenericPlugin","StyledEditor","jsx","_jsx","jsxs","_jsxs","setComponentProperties","editor","isPreview","setPropertiesRecursively","comp","set","editable","draggable","droppable","getName","selectable","hoverable","highlightable","copyable","resizable","removable","badgable","attributes","command","components","forEach","runCommand","stopCommand","wrapper","getWrapper","find","convertStyles","stylesArray","map","block","selectors","Array","isArray","join","declarations","Object","entries","style","_ref","prop","value","createActionCardConfig","action","icon","title","description","type","componentName","componentProps","headerContent","bodyContent","expandActions","node","_node$componentProps","actions","length","_extends","classes","concat","undefined","i","id","setInteracting","renderedComponents","inProgress","component","componentId","showLoader","gjsModel","get","interactionApiInProgress","expandActionsComponent","model","append","addClass","GrapesjsCanvas","_ref2","json","_ref2$mode","mode","setEditor","performInteraction","_ref2$newDataNotifier","newDataNotifier","_ref2$setHasChanged","setHasChanged","isStreaming","editorRef","componentRef","editorInstance","isStreamingRef","isSystemUpdateRef","lastJsonRef","isEditorAliveRef","_useState","printPDF","setPrintPDF","current","showPrintDialog","content","onBeforePrint","onAfterPrint","display","handlePreviewPdfRef","handlePreviewPdf","DomComponents","getComponents","models","alert","notificationHandler","props","_props$newProps","newProps","_props$newAttributes","newAttributes","filteredProps","keys","key","name","parsedNewProps","pagination","isActionsComponent","hasValidActionsData","_model$components$at","isAlreadyExpanded","at","performInteractionWrapper","_x","_performInteractionWrapper","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee4","payload","_editorInstance$curre4","updatedJson","apiResponse","componentUpdates","wrap","_callee4$","_context4","prev","next","store","sent","affectedComponents","_ref6","error","isMissing","abrupt","t0","errorMessage","Error","message","finish","stop","_json$pages","_json$pages$0$frames","destroy","currentMode","init","container","height","plugins","storageManager","richTextEditor","canvas","customBadgeLabel","tagName","injectionAttempts","injectStylesEarly","_editor$Canvas","iframeDoc","Canvas","getDocument","head","querySelector","createElement","fullCss","innerHTML","setAttribute","appendChild","requestAnimationFrame","checkDirty","_checkDirty","_callee3","stored","newJson","_callee3$","_context3","JSON","stringify","debouncedCheckDirty","timeout","clearTimeout","setTimeout","evt","on","includes","_callee","canvasDoc","canvasHead","_callee$","_context","t1","call","downloadBtnContainer","document","cssText","downloadBtn","className","addEventListener","background","body","_ref4","getType","addType","defaults","view","pages","frames","raw","processed","setComponents","styles","setStyle","_callee2","_callee2$","_context2","cleanup","downloadContainer","getElementById","removeChild","getEditorHtml","_editorInstance$curre","_iframe$contentDocume","iframe","getFrameEl","contentDocument","getEditorCss","_editorInstance$curre2","_editorInstance$curre3","getCss","Fragment","children","ref","overflow","marginRight","printHTML","printCSS"],"sources":["../src/GrapesjsCanvas.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useEffect, useRef, useState } from 'react';\n// eslint-disable-next-line import/no-named-as-default\nimport grapesjs, { Component, Editor } from 'grapesjs';\nimport 'grapesjs/dist/css/grapes.min.css';\nimport tailwind from 'grapesjs-tailwind';\n\nimport { useReactToPrint } from 'react-to-print';\n\nimport { TypesToRegister } from './constants';\nimport { toKebabCase } from './helpers';\nimport { tailwindCompiledCss } from './helpers/css';\nimport { datePickerCss } from './helpers/date-picker';\nimport PdfPreview from './helpers/pdf-preview';\nimport { createGrapesjsShadcnGenericPlugin } from './plugins/grapejs-plugin';\nimport { StyledEditor } from './index.styles';\n\ntype NotificationHandler = (newData: {\n componentId: string;\n newProps: Record<string, any>;\n newAttributes: Record<string, any>;\n}) => boolean;\n\ntype GrapesjsCanvasProps = {\n json: any;\n mode?: 'editor' | 'preview';\n setEditor: (editor: Editor) => void;\n performInteraction: (payload: Record<string, any>) => Promise<Record<string, any> | undefined>;\n newDataNotifier: (notifHandler: NotificationHandler) => void;\n setHasChanged: (hasChanged: boolean) => void;\n isStreaming: boolean;\n};\n\nfunction setComponentProperties(editor: Editor, isPreview: boolean) {\n function setPropertiesRecursively(comp: Component) {\n comp.set({\n editable: !isPreview,\n draggable: !isPreview,\n droppable: !isPreview && comp.getName() !== 'Shadcn-generic',\n selectable: !isPreview,\n hoverable: !isPreview,\n highlightable: !isPreview,\n copyable: false,\n resizable: false,\n removable: !isPreview,\n badgable: false,\n });\n\n if (!isPreview) {\n comp.set('toolbar', [\n { attributes: { class: 'fa fa-arrows' }, command: 'tlb-move' },\n { attributes: { class: 'fa fa-trash' }, command: 'tlb-delete' },\n ]);\n }\n\n comp.components().forEach(setPropertiesRecursively);\n }\n\n if (isPreview) {\n editor.runCommand('core:preview');\n } else {\n editor.stopCommand('core:preview');\n }\n\n const wrapper = editor.getWrapper();\n wrapper?.find('*').forEach(setPropertiesRecursively);\n}\n\nfunction convertStyles(stylesArray: any[]): string {\n return stylesArray\n .map((block) => {\n const selectors = Array.isArray(block.selectors)\n ? block.selectors.join(', ')\n : block.selectors;\n const declarations = Object.entries(block.style)\n .map(([prop, value]) => `${toKebabCase(prop)}: ${value};`)\n .join(' ');\n\n return `${selectors} { ${declarations} }`;\n })\n .join('\\n');\n}\n\nfunction createActionCardConfig(action: any): any {\n const { icon, title, description } = action;\n\n return {\n type: 'shadcn-generic',\n componentName: 'ActionCard',\n badgable: false,\n copyable: false,\n removable: true,\n draggable: true,\n componentProps: {\n icon,\n headerContent: title,\n bodyContent: description,\n },\n };\n}\n\nfunction expandActions(node: any): any {\n if (node.type === 'shadcn-generic' && node.componentName === 'Actions') {\n const actions = node.componentProps?.actions;\n\n if (Array.isArray(actions) && actions.length > 0) {\n return {\n ...node,\n type: 'div',\n classes: ['dashboard-cards', ...(node.classes || [])],\n componentName: undefined,\n componentProps: undefined,\n components: actions.map((action: any, i: number) => ({\n ...createActionCardConfig(action),\n id: `${node.id}--action-card-${i}`,\n })),\n };\n }\n\n return node;\n }\n\n if (Array.isArray(node.components)) {\n return {\n ...node,\n components: node.components.map(expandActions),\n };\n }\n\n return node;\n}\n\nfunction setInteracting(\n renderedComponents: Record<string, Component>,\n components: { componentId: string; showLoader: boolean }[],\n inProgress: boolean,\n) {\n components.forEach((component) => {\n const { componentId, showLoader } = component;\n\n if (!showLoader) {\n return;\n }\n\n const gjsModel = renderedComponents[componentId];\n\n if (gjsModel) {\n gjsModel.set('attributes', {\n ...gjsModel.get('attributes'),\n interactionApiInProgress: inProgress,\n });\n }\n });\n}\n\nfunction expandActionsComponent(model: Component, actions: any[]): void {\n model.components('');\n\n actions.forEach((action: any) => {\n model.append(createActionCardConfig(action));\n });\n\n model.set('type', 'div');\n model.addClass('dashboard-cards');\n model.set('componentName', undefined);\n model.set('componentProps', {});\n}\n\nfunction GrapesjsCanvas({\n json,\n mode = 'preview',\n setEditor,\n performInteraction,\n newDataNotifier = () => {\n // no op\n },\n setHasChanged = () => {\n // no op\n },\n isStreaming,\n}: GrapesjsCanvasProps) {\n const editorRef = useRef<HTMLDivElement>(null);\n const componentRef = useRef<HTMLDivElement>(null);\n const editorInstance = useRef<Editor | null>(null);\n const renderedComponents = useRef<Record<string, Component>>({});\n const isStreamingRef = useRef(isStreaming);\n const isSystemUpdateRef = useRef(false);\n const lastJsonRef = useRef<string>('');\n const isEditorAliveRef = useRef(false);\n const [printPDF, setPrintPDF] = useState(false);\n\n useEffect(() => {\n isStreamingRef.current = isStreaming;\n }, [isStreaming]);\n\n const showPrintDialog = useReactToPrint({\n content: () => componentRef.current,\n onBeforePrint: () => {\n // Actions before the print\n },\n onAfterPrint: () => {\n // Actions after the print\n if (editorRef.current) {\n editorRef.current.style.display = 'block';\n }\n\n setPrintPDF(false);\n },\n });\n\n const handlePreviewPdfRef = useRef<(() => void) | null>(null);\n\n const handlePreviewPdf = () => {\n const editor = editorInstance.current;\n\n if (editor && editor.DomComponents.getComponents().models.length > 0) {\n if (editorRef.current) {\n editorRef.current.style.display = 'none';\n }\n\n setPrintPDF(true);\n } else {\n alert('Enter content to check PDF Preview!');\n }\n };\n\n handlePreviewPdfRef.current = handlePreviewPdf;\n\n function notificationHandler(\n props: Parameters<NotificationHandler>[0],\n ): ReturnType<NotificationHandler> {\n if (!props) {\n return true;\n }\n\n const { componentId, newProps = {}, newAttributes = {} } = props;\n\n const model = renderedComponents.current[componentId];\n\n if (!model) {\n return false;\n }\n\n // Filter out complex placeholder objects by setting them to null\n // This ensures placeholder values are properly cleared and don't cause stale data issues\n const filteredProps = { ...newProps };\n\n Object.keys(filteredProps).forEach((key) => {\n const value = filteredProps[key];\n\n if (value && typeof value === 'object' && value.name === '__peak_placeholder') {\n filteredProps[key] = null;\n }\n });\n\n const parsedNewProps = {\n ...filteredProps,\n };\n\n if (filteredProps.pagination) {\n parsedNewProps.pagination = {\n ...(model.get('componentProps').pagination || {}),\n ...filteredProps.pagination,\n };\n }\n\n // Handle Actions component: expand into ActionCards when data arrives via streaming\n const isActionsComponent = model.get('componentName') === 'Actions';\n const hasValidActionsData =\n parsedNewProps.actions &&\n parsedNewProps.actions !== null &&\n Array.isArray(parsedNewProps.actions) &&\n parsedNewProps.actions.length > 0;\n\n if (isActionsComponent && hasValidActionsData) {\n const isAlreadyExpanded =\n model.components().length > 0 &&\n model.components().at(0)?.get('componentName') === 'ActionCard';\n\n if (!isAlreadyExpanded) {\n expandActionsComponent(model, parsedNewProps.actions);\n\n return true;\n }\n }\n\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...parsedNewProps,\n });\n\n model.set('attributes', {\n ...model.get('attributes'),\n ...newAttributes,\n });\n\n return true;\n }\n\n useEffect(() => {\n newDataNotifier(notificationHandler);\n }, []);\n\n async function performInteractionWrapper(payload: Record<string, any>) {\n const updatedJson = await editorInstance.current?.store();\n setInteracting(renderedComponents.current, payload.affectedComponents, true);\n\n try {\n const apiResponse = await performInteraction({\n ...payload,\n json: updatedJson,\n });\n\n const componentUpdates = apiResponse || {};\n\n Object.entries(componentUpdates).forEach(([key, value]) => {\n const model = renderedComponents.current[key];\n\n if (model) {\n model.set('attributes', {\n ...model.get('attributes'),\n error: undefined,\n });\n\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...value,\n error: undefined,\n isMissing: undefined,\n });\n }\n });\n\n return componentUpdates;\n } catch (error) {\n payload.affectedComponents.forEach((componentId: string) => {\n const model = renderedComponents.current[componentId];\n\n if (model) {\n const errorMessage =\n error instanceof Error ? error.message : 'Something went wrong. Please try again.';\n\n model.set('attributes', {\n ...model.get('attributes'),\n error: errorMessage,\n });\n\n model.set('componentProps', {\n ...model.get('componentProps'),\n error: errorMessage,\n isMissing: undefined,\n });\n }\n });\n\n throw error;\n } finally {\n setInteracting(renderedComponents.current, payload.affectedComponents, false);\n }\n }\n\n useEffect(() => {\n if (!editorRef.current) {\n return () => {\n // no op\n };\n }\n\n if (editorInstance.current) {\n editorInstance.current.destroy();\n editorInstance.current = null;\n isEditorAliveRef.current = false;\n }\n\n const currentMode = mode;\n\n const editor = grapesjs.init({\n container: editorRef.current,\n height: '100%',\n plugins: [\n tailwind,\n createGrapesjsShadcnGenericPlugin(\n currentMode,\n performInteractionWrapper,\n renderedComponents.current,\n setHasChanged,\n ),\n ],\n storageManager: { type: 'none' },\n richTextEditor: {\n actions: ['bold', 'italic', 'underline', 'strikethrough'],\n },\n canvas: {\n customBadgeLabel: (component) => {\n const tagName = component.get('tagName');\n\n return tagName === 'body' ? '' : tagName || '';\n },\n },\n });\n\n isEditorAliveRef.current = true;\n\n let injectionAttempts = 0;\n\n function injectStylesEarly() {\n const iframeDoc = editor.Canvas?.getDocument?.();\n\n if (iframeDoc && iframeDoc.head) {\n if (!iframeDoc.head.querySelector('[data-grapesjs-styles]')) {\n const style = iframeDoc.createElement('style');\n const fullCss = `\n ${tailwindCompiledCss}\n ${datePickerCss}\n ::-webkit-scrollbar {\n width: 0px;\n height: 0px;\n }\n html, body {\n overflow: auto !important;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n `;\n style.innerHTML = fullCss;\n style.setAttribute('type', 'text/css');\n style.setAttribute('data-grapesjs-styles', 'true');\n iframeDoc.head.appendChild(style);\n }\n } else if (injectionAttempts < 50) {\n injectionAttempts += 1;\n requestAnimationFrame(injectStylesEarly);\n }\n }\n\n requestAnimationFrame(injectStylesEarly);\n\n async function checkDirty() {\n if (isStreamingRef.current || isSystemUpdateRef.current) {\n return;\n }\n\n if (!isEditorAliveRef.current || !editorInstance.current) {\n return;\n }\n\n let stored = null;\n\n try {\n stored = await editorInstance.current.store();\n } catch (err) {\n return;\n }\n\n if (!stored) {\n return;\n }\n\n const newJson = JSON.stringify(stored);\n\n if (newJson !== lastJsonRef.current) {\n setHasChanged(true);\n lastJsonRef.current = newJson;\n }\n }\n\n const debouncedCheckDirty = (() => {\n let timeout: NodeJS.Timeout | null = null;\n\n return () => {\n if (timeout) {\n clearTimeout(timeout);\n }\n\n timeout = setTimeout(checkDirty, 200);\n };\n })();\n\n [\n 'component:add',\n 'component:remove',\n 'component:update:content',\n 'style:update',\n 'component:drag:end',\n 'rte:change',\n ].forEach((evt) => {\n editor.on(evt, debouncedCheckDirty);\n });\n\n editor.on('component:update', (model, prop) => {\n if (['attributes', 'componentProps', 'content'].includes(prop)) {\n debouncedCheckDirty();\n }\n });\n\n // Tailwind CSS rules aren't fully added to our component\n // So, adding them from here!\n editor.on('load', async () => {\n const canvasDoc = editor.Canvas.getDocument();\n const canvasHead = canvasDoc.head;\n\n if (!canvasHead.querySelector('[data-grapesjs-styles]')) {\n const style = canvasDoc.createElement('style');\n const fullCss = `\n ${tailwindCompiledCss}\n ${datePickerCss}\n ::-webkit-scrollbar {\n width: 0px;\n height: 0px;\n }\n html, body {\n overflow: auto !important;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n `;\n style.innerHTML = fullCss;\n style.setAttribute('type', 'text/css');\n style.setAttribute('data-grapesjs-styles', 'true');\n canvasHead.appendChild(style);\n }\n\n isSystemUpdateRef.current = true;\n setComponentProperties(editor, mode === 'preview');\n lastJsonRef.current = JSON.stringify(await editor.store());\n isSystemUpdateRef.current = false;\n });\n\n editorInstance.current = editor;\n\n if (setEditor) {\n setEditor(editor);\n }\n\n // Add PDF download button as a floating button\n const downloadBtnContainer = document.createElement('div');\n downloadBtnContainer.id = 'canvas-pdf-download-container';\n downloadBtnContainer.style.cssText = `\n position: fixed;\n top: 10px;\n right: 10px;\n z-index: 10000;\n display: flex;\n align-items: center;\n gap: 8px;\n `;\n\n const downloadBtn = document.createElement('button');\n downloadBtn.innerHTML = `\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path>\n <polyline points=\"7 10 12 15 17 10\"></polyline>\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line>\n </svg>\n <span>Download PDF</span>\n `;\n downloadBtn.className = 'canvas-pdf-download-btn';\n downloadBtn.title = 'Download canvas as PDF';\n downloadBtn.style.cssText = `\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: #4f46e5;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n transition: background-color 0.2s;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n `;\n \n downloadBtn.addEventListener('mouseenter', () => {\n downloadBtn.style.background = '#4338ca';\n });\n \n downloadBtn.addEventListener('mouseleave', () => {\n downloadBtn.style.background = '#4f46e5';\n });\n\n downloadBtn.addEventListener('click', () => {\n if (handlePreviewPdfRef.current) {\n handlePreviewPdfRef.current();\n }\n });\n\n downloadBtnContainer.appendChild(downloadBtn);\n document.body.appendChild(downloadBtnContainer);\n\n TypesToRegister.forEach(({ type, tagName }) => {\n if (!editor.DomComponents.getType(type)) {\n editor.DomComponents.addType(type, {\n model: {\n defaults: { tagName },\n },\n view: {},\n });\n }\n });\n\n if (json && json.pages?.length > 0 && json.pages[0].frames?.length > 0) {\n isSystemUpdateRef.current = true;\n const raw = json.pages[0].frames[0].component;\n const processed = expandActions(raw);\n editor.setComponents(processed);\n\n const cssText = convertStyles(json.styles || []);\n editor.setStyle(cssText);\n\n editor.on('load', async () => {\n lastJsonRef.current = JSON.stringify(await editor.store());\n isSystemUpdateRef.current = false;\n });\n }\n\n return function cleanup() {\n // Remove download button on cleanup\n const downloadContainer = document.getElementById('canvas-pdf-download-container');\n\n if (downloadContainer) {\n document.body.removeChild(downloadContainer);\n }\n\n editor.destroy();\n isEditorAliveRef.current = false;\n };\n }, [json, mode]);\n\n // eslint-disable-next-line func-style\n const getEditorHtml = () => {\n const iframe = editorInstance.current?.Canvas?.getFrameEl();\n\n return iframe ? iframe.contentDocument?.body.innerHTML || '': '' ;\n };\n\n function getEditorCss() {\n const iframe = editorInstance.current?.Canvas?.getFrameEl();\n\n return iframe ? editorInstance.current?.getCss() || '' : '';\n }\n\n return (\n <React.Fragment>\n <StyledEditor />\n <div ref={editorRef} id=\"grapesjs-editor\" />\n {printPDF && (\n <div style={{ overflow: 'hidden', height: 0, marginRight: '37.5%' }}>\n <PdfPreview\n ref={componentRef}\n showPrintDialog={showPrintDialog}\n printHTML={getEditorHtml()}\n printCSS={getEditorCss()}\n />\n </div>\n )}\n </React.Fragment>\n );\n}\n\nexport default GrapesjsCanvas;\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@peak-ai/canvas",
3
3
  "author": "squad-builder-experience",
4
4
  "license": "UNLICENSED",
5
- "version": "1.4.28-rc.2",
5
+ "version": "1.4.28-rc.3",
6
6
  "description": "",
7
7
  "dependencies": {
8
8
  "@emotion/react": "^11.11.4",