@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 +4 -4
- package/GrapesjsCanvas.js.map +1 -1
- package/package.json +1 -1
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"
|
|
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$
|
|
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])
|
|
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
|
package/GrapesjsCanvas.js.map
CHANGED
|
@@ -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":"wLAAA,uDACA,MAAO,CAAAA,KAAK,EAAIC,SAAS,CAAEC,MAAM,CAAEC,QAAQ,KAAQ,OAAO,CAC1D;AACA,MAAO,CAAAC,QAAQ,KAA6B,UAAU,CACtD,MAAO,kCAAkC,CACzC,MAAO,CAAAC,QAAQ,KAAM,mBAAmB,CACxC;AACA,OAASC,eAAe,KAAQ,gBAAgB,CAEhD,OAASC,eAAe,KAAQ,aAAa,CAC7C,OAASC,WAAW,KAAQ,WAAW,CACvC,OAASC,mBAAmB,KAAQ,eAAe,CACnD,OAASC,aAAa,KAAQ,uBAAuB,CACrD,MAAO,CAAAC,UAAU,KAAM,uBAAuB,CAC9C,OAASC,iCAAiC,KAAQ,0BAA0B,CAC5E,OAASC,YAAY,KAAQ,gBAAgB,CAAC,OAAAC,GAAA,IAAAC,IAAA,CAAAC,IAAA,IAAAC,KAAA,yBAkB9C,QAAS,CAAAC,sBAAsBA,CAACC,MAAc,CAAEC,SAAkB,CAAE,CAClE,QAAS,CAAAC,wBAAwBA,CAACC,IAAe,CAAE,CACjDA,IAAI,CAACC,GAAG,CAAC,CACPC,QAAQ,CAAE,CAACJ,SAAS,CACpBK,SAAS,CAAE,CAACL,SAAS,CACrBM,SAAS,CAAE,CAACN,SAAS,EAAIE,IAAI,CAACK,OAAO,CAAC,CAAC,GAAK,gBAAgB,CAC5DC,UAAU,CAAE,CAACR,SAAS,CACtBS,SAAS,CAAE,CAACT,SAAS,CACrBU,aAAa,CAAE,CAACV,SAAS,CACzBW,QAAQ,CAAE,KAAK,CACfC,SAAS,CAAE,KAAK,CAChBC,SAAS,CAAE,CAACb,SAAS,CACrBc,QAAQ,CAAE,KACZ,CAAC,CAAC,CAEF,GAAI,CAACd,SAAS,CAAE,CACdE,IAAI,CAACC,GAAG,CAAC,SAAS,CAAE,CAClB,CAAEY,UAAU,CAAE,CAAE,QAAO,cAAe,CAAC,CAAEC,OAAO,CAAE,UAAW,CAAC,CAC9D,CAAED,UAAU,CAAE,CAAE,QAAO,aAAc,CAAC,CAAEC,OAAO,CAAE,YAAa,CAAC,CAChE,CACH,CAEAd,IAAI,CAACe,UAAU,CAAC,CAAC,CAACC,OAAO,CAACjB,wBAAwB,CACpD,CAEA,GAAID,SAAS,CAAE,CACbD,MAAM,CAACoB,UAAU,CAAC,cAAc,CAClC,CAAC,IAAM,CACLpB,MAAM,CAACqB,WAAW,CAAC,cAAc,CACnC,CAEA,GAAM,CAAAC,OAAO,CAAGtB,MAAM,CAACuB,UAAU,CAAC,CAAC,CACnCD,OAAO,QAAPA,OAAO,CAAEE,IAAI,CAAC,GAAG,CAAC,CAACL,OAAO,CAACjB,wBAAwB,CACrD,CAEA,QAAS,CAAAuB,aAAaA,CAACC,WAAkB,CAAU,CACjD,MAAO,CAAAA,WAAW,CACfC,GAAG,CAAC,SAACC,KAAK,CAAK,CACd,GAAM,CAAAC,SAAS,CAAGC,KAAK,CAACC,OAAO,CAACH,KAAK,CAACC,SAAS,CAAC,CAC5CD,KAAK,CAACC,SAAS,CAACG,IAAI,CAAC,IAAI,CAAC,CAC1BJ,KAAK,CAACC,SAAS,CACnB,GAAM,CAAAI,YAAY,CAAGC,MAAM,CAACC,OAAO,CAACP,KAAK,CAACQ,KAAK,CAAC,CAC7CT,GAAG,CAAC,SAAAU,IAAA,KAAE,CAAAC,IAAI,CAAAD,IAAA,IAAEE,KAAK,CAAAF,IAAA,UAAS,CAAAhD,WAAW,CAACiD,IAAI,CAAC,MAAKC,KAAK,KAAG,CAAC,CACzDP,IAAI,CAAC,GAAG,CAAC,CAEZ,MAAU,CAAAH,SAAS,OAAMI,YAAY,KACvC,CAAC,CAAC,CACDD,IAAI,CAAC,IAAI,CACd,CAEA,QAAS,CAAAQ,sBAAsBA,CAACC,MAAW,CAAO,CAChD,GAAQ,CAAAC,IAAI,CAAyBD,MAAM,CAAnCC,IAAI,CAAEC,KAAK,CAAkBF,MAAM,CAA7BE,KAAK,CAAEC,WAAW,CAAKH,MAAM,CAAtBG,WAAW,CAEhC,MAAO,CACLC,IAAI,CAAE,gBAAgB,CACtBC,aAAa,CAAE,YAAY,CAC3B/B,QAAQ,CAAE,KAAK,CACfH,QAAQ,CAAE,KAAK,CACfE,SAAS,CAAE,IAAI,CACfR,SAAS,CAAE,IAAI,CACfyC,cAAc,CAAE,CACdL,IAAI,CAAJA,IAAI,CACJM,aAAa,CAAEL,KAAK,CACpBM,WAAW,CAAEL,WACf,CACF,CACF,CAEA,QAAS,CAAAM,aAAaA,CAACC,IAAS,CAAO,CACrC,GAAIA,IAAI,CAACN,IAAI,GAAK,gBAAgB,EAAIM,IAAI,CAACL,aAAa,GAAK,SAAS,CAAE,KAAAM,oBAAA,CACtE,GAAM,CAAAC,OAAO,EAAAD,oBAAA,CAAGD,IAAI,CAACJ,cAAc,eAAnBK,oBAAA,CAAqBC,OAAO,CAE5C,GAAIvB,KAAK,CAACC,OAAO,CAACsB,OAAO,CAAC,EAAIA,OAAO,CAACC,MAAM,CAAG,CAAC,CAAE,CAChD,OAAAC,QAAA,IACKJ,IAAI,EACPN,IAAI,CAAE,KAAK,CACXW,OAAO,EAAG,iBAAiB,EAAAC,MAAA,CAAMN,IAAI,CAACK,OAAO,EAAI,EAAE,CAAE,CACrDV,aAAa,CAAEY,SAAS,CACxBX,cAAc,CAAEW,SAAS,CACzBxC,UAAU,CAAEmC,OAAO,CAAC1B,GAAG,CAAC,SAACc,MAAW,CAAEkB,CAAS,SAAAJ,QAAA,IAC1Cf,sBAAsB,CAACC,MAAM,CAAC,EACjCmB,EAAE,CAAKT,IAAI,CAACS,EAAE,kBAAiBD,CAAG,GAClC,CAAC,EAEP,CAEA,MAAO,CAAAR,IACT,CAEA,GAAIrB,KAAK,CAACC,OAAO,CAACoB,IAAI,CAACjC,UAAU,CAAC,CAAE,CAClC,OAAAqC,QAAA,IACKJ,IAAI,EACPjC,UAAU,CAAEiC,IAAI,CAACjC,UAAU,CAACS,GAAG,CAACuB,aAAa,CAAC,EAElD,CAEA,MAAO,CAAAC,IACT,CAEA,QAAS,CAAAU,cAAcA,CACrBC,kBAA6C,CAC7C5C,UAA0D,CAC1D6C,UAAmB,CACnB,CACA7C,UAAU,CAACC,OAAO,CAAC,SAAC6C,SAAS,CAAK,CAChC,GAAQ,CAAAC,WAAW,CAAiBD,SAAS,CAArCC,WAAW,CAAEC,UAAU,CAAKF,SAAS,CAAxBE,UAAU,CAE/B,GAAI,CAACA,UAAU,CAAE,CACf,MACF,CAEA,GAAM,CAAAC,QAAQ,CAAGL,kBAAkB,CAACG,WAAW,CAAC,CAEhD,GAAIE,QAAQ,CAAE,CACZA,QAAQ,CAAC/D,GAAG,CAAC,YAAY,CAAAmD,QAAA,IACpBY,QAAQ,CAACC,GAAG,CAAC,YAAY,CAAC,EAC7BC,wBAAwB,CAAEN,UAAU,EACrC,CACH,CACF,CAAC,CACH,CAEA,QAAS,CAAAO,sBAAsBA,CAACC,KAAgB,CAAElB,OAAc,CAAQ,CACtEkB,KAAK,CAACrD,UAAU,CAAC,EAAE,CAAC,CAEpBmC,OAAO,CAAClC,OAAO,CAAC,SAACsB,MAAW,CAAK,CAC/B8B,KAAK,CAACC,MAAM,CAAChC,sBAAsB,CAACC,MAAM,CAAC,CAC7C,CAAC,CAAC,CAEF8B,KAAK,CAACnE,GAAG,CAAC,MAAM,CAAE,KAAK,CAAC,CACxBmE,KAAK,CAACE,QAAQ,CAAC,iBAAiB,CAAC,CACjCF,KAAK,CAACnE,GAAG,CAAC,eAAe,CAAEsD,SAAS,CAAC,CACrCa,KAAK,CAACnE,GAAG,CAAC,gBAAgB,CAAE,CAAC,CAAC,CAChC,CAEA,QAAS,CAAAsE,cAAcA,CAAAC,KAAA,CAYC,IAXtB,CAAAC,IAAI,CAAAD,KAAA,CAAJC,IAAI,CAAAC,UAAA,CAAAF,KAAA,CACJG,IAAI,CAAJA,IAAI,CAAAD,UAAA,UAAG,SAAS,CAAAA,UAAA,CAChBE,SAAS,CAAAJ,KAAA,CAATI,SAAS,CACTC,kBAAkB,CAAAL,KAAA,CAAlBK,kBAAkB,CAAAC,qBAAA,CAAAN,KAAA,CAClBO,eAAe,CAAfA,eAAe,CAAAD,qBAAA,UAAG,UAAM,CACtB;AAAA,CACD,CAAAA,qBAAA,CAAAE,mBAAA,CAAAR,KAAA,CACDS,aAAa,CAAbA,aAAa,CAAAD,mBAAA,UAAG,UAAM,CACpB;AAAA,CACD,CAAAA,mBAAA,CACDE,WAAW,CAAAV,KAAA,CAAXU,WAAW,CAEX,GAAM,CAAAC,SAAS,CAAGvG,MAAM,CAAiB,IAAI,CAAC,CAC9C,GAAM,CAAAwG,YAAY,CAAGxG,MAAM,CAAiB,IAAI,CAAC,CACjD,GAAM,CAAAyG,cAAc,CAAGzG,MAAM,CAAgB,IAAI,CAAC,CAClD,GAAM,CAAA+E,kBAAkB,CAAG/E,MAAM,CAA4B,CAAC,CAAC,CAAC,CAChE,GAAM,CAAA0G,cAAc,CAAG1G,MAAM,CAACsG,WAAW,CAAC,CAC1C,GAAM,CAAAK,iBAAiB,CAAG3G,MAAM,CAAC,KAAK,CAAC,CACvC,GAAM,CAAA4G,WAAW,CAAG5G,MAAM,CAAS,EAAE,CAAC,CACtC,GAAM,CAAA6G,gBAAgB,CAAG7G,MAAM,CAAC,KAAK,CAAC,CACtC,IAAA8G,SAAA,CAAgC7G,QAAQ,CAAC,KAAK,CAAC,CAAxC8G,QAAQ,CAAAD,SAAA,IAAEE,WAAW,CAAAF,SAAA,IAE5B/G,SAAS,CAAC,UAAM,CACd2G,cAAc,CAACO,OAAO,CAAGX,WAC3B,CAAC,CAAE,CAACA,WAAW,CAAC,CAAC,CAEjB,GAAM,CAAAY,eAAe,CAAG9G,eAAe,CAAC,CACtC+G,OAAO,CAAE,QAAT,CAAAA,OAAOA,CAAA,QAAQ,CAAAX,YAAY,CAACS,OAAO,EACnCG,aAAa,CAAE,QAAf,CAAAA,aAAaA,CAAA,CAAQ,CACnB;AAAA,CACD,CACDC,YAAY,CAAE,QAAd,CAAAA,YAAYA,CAAA,CAAQ,CAClB;AACA,GAAId,SAAS,CAACU,OAAO,CAAE,CACrBV,SAAS,CAACU,OAAO,CAAC5D,KAAK,CAACiE,OAAO,CAAG,OACpC,CACAN,WAAW,CAAC,KAAK,CACnB,CACF,CAAC,CAAC,CAEF,GAAM,CAAAO,mBAAmB,CAAGvH,MAAM,CAAsB,IAAI,CAAC,CAE7D,GAAM,CAAAwH,gBAAgB,CAAG,QAAnB,CAAAA,gBAAgBA,CAAA,CAAS,CAC7B,GAAM,CAAAvG,MAAM,CAAGwF,cAAc,CAACQ,OAAO,CACrC,GAAIhG,MAAM,EAAIA,MAAM,CAACwG,aAAa,CAACC,aAAa,CAAC,CAAC,CAACC,MAAM,CAACpD,MAAM,CAAG,CAAC,CAAE,CACpE,GAAIgC,SAAS,CAACU,OAAO,CAAE,CACrBV,SAAS,CAACU,OAAO,CAAC5D,KAAK,CAACiE,OAAO,CAAG,MACpC,CACAN,WAAW,CAAC,IAAI,CAClB,CAAC,IAAM,CACLY,KAAK,CAAC,qCAAqC,CAC7C,CACF,CAAC,CAEDL,mBAAmB,CAACN,OAAO,CAAGO,gBAAgB,CAE9C,QAAS,CAAAK,mBAAmBA,CAC1BC,KAAyC,CACR,CACjC,GAAI,CAACA,KAAK,CAAE,CACV,MAAO,KACT,CAEA,GAAQ,CAAA5C,WAAW,CAAwC4C,KAAK,CAAxD5C,WAAW,CAAA6C,eAAA,CAAwCD,KAAK,CAA3CE,QAAQ,CAARA,QAAQ,CAAAD,eAAA,UAAG,CAAC,CAAC,CAAAA,eAAA,CAAAE,oBAAA,CAAyBH,KAAK,CAA5BI,aAAa,CAAbA,aAAa,CAAAD,oBAAA,UAAG,CAAC,CAAC,CAAAA,oBAAA,CAEtD,GAAM,CAAAzC,KAAK,CAAGT,kBAAkB,CAACkC,OAAO,CAAC/B,WAAW,CAAC,CAErD,GAAI,CAACM,KAAK,CAAE,CACV,MAAO,MACT,CAEA;AACA;AACA,GAAM,CAAA2C,aAAa,CAAA3D,QAAA,IAAQwD,QAAQ,CAAE,CAErC7E,MAAM,CAACiF,IAAI,CAACD,aAAa,CAAC,CAAC/F,OAAO,CAAC,SAACiG,GAAG,CAAK,CAC1C,GAAM,CAAA7E,KAAK,CAAG2E,aAAa,CAACE,GAAG,CAAC,CAEhC,GAAI7E,KAAK,EAAI,MAAO,CAAAA,KAAK,GAAK,QAAQ,EAAIA,KAAK,CAAC8E,IAAI,GAAK,oBAAoB,CAAE,CAC7EH,aAAa,CAACE,GAAG,CAAC,CAAG,IACvB,CACF,CAAC,CAAC,CAEF,GAAM,CAAAE,cAAc,CAAA/D,QAAA,IACf2D,aAAa,CACjB,CAED,GAAIA,aAAa,CAACK,UAAU,CAAE,CAC5BD,cAAc,CAACC,UAAU,CAAAhE,QAAA,IACnBgB,KAAK,CAACH,GAAG,CAAC,gBAAgB,CAAC,CAACmD,UAAU,EAAI,CAAC,CAAC,CAC7CL,aAAa,CAACK,UAAU,CAE/B,CAEA;AACA,GAAM,CAAAC,kBAAkB,CAAGjD,KAAK,CAACH,GAAG,CAAC,eAAe,CAAC,GAAK,SAAS,CACnE,GAAM,CAAAqD,mBAAmB,CACvBH,cAAc,CAACjE,OAAO,EACtBiE,cAAc,CAACjE,OAAO,GAAK,IAAI,EAC/BvB,KAAK,CAACC,OAAO,CAACuF,cAAc,CAACjE,OAAO,CAAC,EACrCiE,cAAc,CAACjE,OAAO,CAACC,MAAM,CAAG,CAAC,CAEnC,GAAIkE,kBAAkB,EAAIC,mBAAmB,CAAE,KAAAC,oBAAA,CAC7C,GAAM,CAAAC,iBAAiB,CACrBpD,KAAK,CAACrD,UAAU,CAAC,CAAC,CAACoC,MAAM,CAAG,CAAC,EAC7B,EAAAoE,oBAAA,CAAAnD,KAAK,CAACrD,UAAU,CAAC,CAAC,CAAC0G,EAAE,CAAC,CAAC,CAAC,eAAxBF,oBAAA,CAA0BtD,GAAG,CAAC,eAAe,CAAC,IAAK,YAAY,CAEjE,GAAI,CAACuD,iBAAiB,CAAE,CACtBrD,sBAAsB,CAACC,KAAK,CAAE+C,cAAc,CAACjE,OAAO,CAAC,CAErD,MAAO,KACT,CACF,CAEAkB,KAAK,CAACnE,GAAG,CAAC,gBAAgB,CAAAmD,QAAA,IACrBgB,KAAK,CAACH,GAAG,CAAC,gBAAgB,CAAC,CAC3BkD,cAAc,CAClB,CAAC,CAEF/C,KAAK,CAACnE,GAAG,CAAC,YAAY,CAAAmD,QAAA,IACjBgB,KAAK,CAACH,GAAG,CAAC,YAAY,CAAC,CACvB6C,aAAa,CACjB,CAAC,CAEF,MAAO,KACT,CAEAnI,SAAS,CAAC,UAAM,CACdoG,eAAe,CAAC0B,mBAAmB,CACrC,CAAC,CAAE,EAAE,CAAC,CAAC,QAEQ,CAAAiB,yBAAyBA,CAAAC,EAAA,SAAAC,0BAAA,CAAAC,KAAA,MAAAC,SAAA,WAAAF,2BAAA,EAAAA,0BAAA,CAAAG,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAAxC,SAAAC,SAAyCC,OAA4B,MAAAC,sBAAA,KAAAC,WAAA,CAAAC,WAAA,CAAAC,gBAAA,QAAAP,mBAAA,CAAAQ,IAAA,UAAAC,UAAAC,SAAA,iBAAAA,SAAA,CAAAC,IAAA,CAAAD,SAAA,CAAAE,IAAA,SAAAF,SAAA,CAAAE,IAAA,UAAAR,sBAAA,CACzC/C,cAAc,CAACQ,OAAO,eAAtBuC,sBAAA,CAAwBS,KAAK,CAAC,CAAC,QAAnDR,WAAW,CAAAK,SAAA,CAAAI,IAAA,CACjBpF,cAAc,CAACC,kBAAkB,CAACkC,OAAO,CAAEsC,OAAO,CAACY,kBAAkB,CAAE,IAAI,CAAC,CAACL,SAAA,CAAAC,IAAA,GAAAD,SAAA,CAAAE,IAAA,SAGjD,CAAA/D,kBAAkB,CAAAzB,QAAA,IACvC+E,OAAO,EACV1D,IAAI,CAAE4D,WAAW,EAClB,CAAC,QAHIC,WAAW,CAAAI,SAAA,CAAAI,IAAA,CAKXP,gBAAgB,CAAGD,WAAW,EAAI,CAAC,CAAC,CAE1CvG,MAAM,CAACC,OAAO,CAACuG,gBAAgB,CAAC,CAACvH,OAAO,CAAC,SAAAgI,KAAA,CAAkB,IAAhB,CAAA/B,GAAG,CAAA+B,KAAA,IAAE5G,KAAK,CAAA4G,KAAA,IACnD,GAAM,CAAA5E,KAAK,CAAGT,kBAAkB,CAACkC,OAAO,CAACoB,GAAG,CAAC,CAE7C,GAAI7C,KAAK,CAAE,CACTA,KAAK,CAACnE,GAAG,CAAC,YAAY,CAAAmD,QAAA,IACjBgB,KAAK,CAACH,GAAG,CAAC,YAAY,CAAC,EAC1BgF,KAAK,CAAE1F,SAAS,EACjB,CAAC,CAEFa,KAAK,CAACnE,GAAG,CAAC,gBAAgB,CAAAmD,QAAA,IACrBgB,KAAK,CAACH,GAAG,CAAC,gBAAgB,CAAC,CAC3B7B,KAAK,EACR6G,KAAK,CAAE1F,SAAS,CAChB2F,SAAS,CAAE3F,SAAS,EACrB,CACH,CACF,CAAC,CAAC,CAAC,OAAAmF,SAAA,CAAAS,MAAA,UAEIZ,gBAAgB,UAAAG,SAAA,CAAAC,IAAA,IAAAD,SAAA,CAAAU,EAAA,CAAAV,SAAA,aAEvBP,OAAO,CAACY,kBAAkB,CAAC/H,OAAO,CAAC,SAAC8C,WAAmB,CAAK,CAC1D,GAAM,CAAAM,KAAK,CAAGT,kBAAkB,CAACkC,OAAO,CAAC/B,WAAW,CAAC,CAErD,GAAIM,KAAK,CAAE,CACT,GAAM,CAAAiF,YAAY,CAChBX,SAAA,CAAAU,EAAA,WAAiB,CAAAE,KAAK,CAAGZ,SAAA,CAAAU,EAAA,CAAMG,OAAO,CAAG,yCAAyC,CAEpFnF,KAAK,CAACnE,GAAG,CAAC,YAAY,CAAAmD,QAAA,IACjBgB,KAAK,CAACH,GAAG,CAAC,YAAY,CAAC,EAC1BgF,KAAK,CAAEI,YAAY,EACpB,CAAC,CAEFjF,KAAK,CAACnE,GAAG,CAAC,gBAAgB,CAAAmD,QAAA,IACrBgB,KAAK,CAACH,GAAG,CAAC,gBAAgB,CAAC,EAC9BgF,KAAK,CAAEI,YAAY,CACnBH,SAAS,CAAE3F,SAAS,EACrB,CACH,CACF,CAAC,CAAC,CAAC,MAAAmF,SAAA,CAAAU,EAAA,SAAAV,SAAA,CAAAC,IAAA,IAIHjF,cAAc,CAACC,kBAAkB,CAACkC,OAAO,CAAEsC,OAAO,CAACY,kBAAkB,CAAE,KAAK,CAAC,CAAC,OAAAL,SAAA,CAAAc,MAAA,8BAAAd,SAAA,CAAAe,IAAA,KAAAvB,QAAA,sBAEjF,UAAAN,0BAAA,CAAAC,KAAA,MAAAC,SAAA,EAEDnJ,SAAS,CAAC,UAAM,KAAA+K,WAAA,CAAAC,oBAAA,CACd,GAAI,CAACxE,SAAS,CAACU,OAAO,CAAE,CACtB,MAAO,WAAM,CACX;AAAA,CAEJ,CAEA,GAAIR,cAAc,CAACQ,OAAO,CAAE,CAC1BR,cAAc,CAACQ,OAAO,CAAC+D,OAAO,CAAC,CAAC,CAChCvE,cAAc,CAACQ,OAAO,CAAG,IAAI,CAC7BJ,gBAAgB,CAACI,OAAO,CAAG,KAC7B,CAEA,GAAM,CAAAgE,WAAW,CAAGlF,IAAI,CAExB,GAAM,CAAA9E,MAAM,CAAGf,QAAQ,CAACgL,IAAI,CAAC,CAC3BC,SAAS,CAAE5E,SAAS,CAACU,OAAO,CAC5BmE,MAAM,CAAE,MAAM,CACdC,OAAO,CAAE,CACPlL,QAAQ,CACRO,iCAAiC,CAC/BuK,WAAW,CACXnC,yBAAyB,CACzB/D,kBAAkB,CAACkC,OAAO,CAC1BZ,aACF,CAAC,CACF,CACDiF,cAAc,CAAE,CAAExH,IAAI,CAAE,MAAO,CAAC,CAChCyH,cAAc,CAAE,CACdjH,OAAO,CAAE,CAAC,MAAM,CAAE,QAAQ,CAAE,WAAW,CAAE,eAAe,CAC1D,CAAC,CACDkH,MAAM,CAAE,CACNC,gBAAgB,CAAE,QAAlB,CAAAA,gBAAgBA,CAAGxG,SAAS,CAAK,CAC/B,GAAM,CAAAyG,OAAO,CAAGzG,SAAS,CAACI,GAAG,CAAC,SAAS,CAAC,CAExC,MAAO,CAAAqG,OAAO,GAAK,MAAM,CAAG,EAAE,CAAGA,OAAO,EAAI,EAC9C,CACF,CACF,CAAC,CAAC,CAEF7E,gBAAgB,CAACI,OAAO,CAAG,IAAI,CAE/B,GAAI,CAAA0E,iBAAiB,CAAG,CAAC,CAEzB,QAAS,CAAAC,iBAAiBA,CAAA,CAAG,KAAAC,cAAA,CAC3B,GAAM,CAAAC,SAAS,EAAAD,cAAA,CAAG5K,MAAM,CAAC8K,MAAM,SAAbF,cAAA,CAAeG,WAAW,cAA1BH,cAAA,CAAeG,WAAW,CAAG,CAAC,CAEhD,GAAIF,SAAS,EAAIA,SAAS,CAACG,IAAI,CAAE,CAC/B,GAAI,CAACH,SAAS,CAACG,IAAI,CAACC,aAAa,CAAC,wBAAwB,CAAC,CAAE,CAC3D,GAAM,CAAA7I,KAAK,CAAGyI,SAAS,CAACK,aAAa,CAAC,OAAO,CAAC,CAC9C,GAAM,CAAAC,OAAO,kBACT7L,mBAAmB,kBACnBC,aAAa,+TAUhB,CACD6C,KAAK,CAACgJ,SAAS,CAAGD,OAAO,CACzB/I,KAAK,CAACiJ,YAAY,CAAC,MAAM,CAAE,UAAU,CAAC,CACtCjJ,KAAK,CAACiJ,YAAY,CAAC,sBAAsB,CAAE,MAAM,CAAC,CAClDR,SAAS,CAACG,IAAI,CAACM,WAAW,CAAClJ,KAAK,CAClC,CACF,CAAC,IAAM,IAAIsI,iBAAiB,CAAG,EAAE,CAAE,CACjCA,iBAAiB,EAAI,CAAC,CACtBa,qBAAqB,CAACZ,iBAAiB,CACzC,CACF,CAEAY,qBAAqB,CAACZ,iBAAiB,CAAC,CAAC,QAE1B,CAAAa,UAAUA,CAAA,SAAAC,WAAA,CAAAzD,KAAA,MAAAC,SAAA,WAAAwD,YAAA,EAAAA,WAAA,CAAAvD,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAAzB,SAAAsD,SAAA,MAAAC,MAAA,CAAAC,OAAA,QAAAzD,mBAAA,CAAAQ,IAAA,UAAAkD,UAAAC,SAAA,iBAAAA,SAAA,CAAAhD,IAAA,CAAAgD,SAAA,CAAA/C,IAAA,cACMtD,cAAc,CAACO,OAAO,EAAIN,iBAAiB,CAACM,OAAO,GAAA8F,SAAA,CAAA/C,IAAA,gBAAA+C,SAAA,CAAAxC,MAAA,uBAInD,CAAC1D,gBAAgB,CAACI,OAAO,EAAI,CAACR,cAAc,CAACQ,OAAO,GAAA8F,SAAA,CAAA/C,IAAA,gBAAA+C,SAAA,CAAAxC,MAAA,kBAIpDqC,MAAM,CAAG,IAAI,CAAAG,SAAA,CAAAhD,IAAA,GAAAgD,SAAA,CAAA/C,IAAA,SAGA,CAAAvD,cAAc,CAACQ,OAAO,CAACgD,KAAK,CAAC,CAAC,QAA7C2C,MAAM,CAAAG,SAAA,CAAA7C,IAAA,CAAA6C,SAAA,CAAA/C,IAAA,kBAAA+C,SAAA,CAAAhD,IAAA,IAAAgD,SAAA,CAAAvC,EAAA,CAAAuC,SAAA,oBAAAA,SAAA,CAAAxC,MAAA,sBAKHqC,MAAM,EAAAG,SAAA,CAAA/C,IAAA,iBAAA+C,SAAA,CAAAxC,MAAA,mBAILsC,OAAO,CAAGG,IAAI,CAACC,SAAS,CAACL,MAAM,CAAC,CAEtC,GAAIC,OAAO,GAAKjG,WAAW,CAACK,OAAO,CAAE,CACnCZ,aAAa,CAAC,IAAI,CAAC,CACnBO,WAAW,CAACK,OAAO,CAAG4F,OACxB,CAAC,yBAAAE,SAAA,CAAAlC,IAAA,KAAA8B,QAAA,gBACF,UAAAD,WAAA,CAAAzD,KAAA,MAAAC,SAAA,EAED,GAAM,CAAAgE,mBAAmB,CAAI,UAAM,CACjC,GAAI,CAAAC,OAA8B,CAAG,IAAI,CAEzC,MAAO,WAAM,CACX,GAAIA,OAAO,CAAE,CACXC,YAAY,CAACD,OAAO,CACtB,CAEAA,OAAO,CAAGE,UAAU,CAACZ,UAAU,CAAE,GAAG,CACtC,CACF,CAAC,CAAE,CAAC,CAEJ,CACE,eAAe,CACf,kBAAkB,CAClB,0BAA0B,CAC1B,cAAc,CACd,oBAAoB,CACpB,YAAY,CACb,CAACrK,OAAO,CAAC,SAACkL,GAAG,CAAK,CACjBrM,MAAM,CAACsM,EAAE,CAACD,GAAG,CAAEJ,mBAAmB,CACpC,CAAC,CAAC,CAEFjM,MAAM,CAACsM,EAAE,CAAC,kBAAkB,CAAE,SAAC/H,KAAK,CAAEjC,IAAI,CAAK,CAC7C,GAAI,CAAC,YAAY,CAAE,gBAAgB,CAAE,SAAS,CAAC,CAACiK,QAAQ,CAACjK,IAAI,CAAC,CAAE,CAC9D2J,mBAAmB,CAAC,CACtB,CACF,CAAC,CAAC,CAEF;AACA;AACAjM,MAAM,CAACsM,EAAE,CAAC,MAAM,cAAApE,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAAE,SAAAoE,QAAA,MAAAC,SAAA,CAAAC,UAAA,CAAAtK,KAAA,CAAA+I,OAAA,QAAAhD,mBAAA,CAAAQ,IAAA,UAAAgE,SAAAC,QAAA,iBAAAA,QAAA,CAAA9D,IAAA,CAAA8D,QAAA,CAAA7D,IAAA,SACV0D,SAAS,CAAGzM,MAAM,CAAC8K,MAAM,CAACC,WAAW,CAAC,CAAC,CACvC2B,UAAU,CAAGD,SAAS,CAACzB,IAAI,CAEjC,GAAI,CAAC0B,UAAU,CAACzB,aAAa,CAAC,wBAAwB,CAAC,CAAE,CACjD7I,KAAK,CAAGqK,SAAS,CAACvB,aAAa,CAAC,OAAO,CAAC,CACxCC,OAAO,cACX7L,mBAAmB,cACnBC,aAAa,wRAWf6C,KAAK,CAACgJ,SAAS,CAAGD,OAAO,CACzB/I,KAAK,CAACiJ,YAAY,CAAC,MAAM,CAAE,UAAU,CAAC,CACtCjJ,KAAK,CAACiJ,YAAY,CAAC,sBAAsB,CAAE,MAAM,CAAC,CAClDqB,UAAU,CAACpB,WAAW,CAAClJ,KAAK,CAC9B,CAEAsD,iBAAiB,CAACM,OAAO,CAAG,IAAI,CAChCjG,sBAAsB,CAACC,MAAM,CAAE8E,IAAI,GAAK,SAAS,CAAC,CAAC8H,QAAA,CAAArD,EAAA,CAC7BwC,IAAI,CAAAa,QAAA,CAAA7D,IAAA,SAAiB,CAAA/I,MAAM,CAACgJ,KAAK,CAAC,CAAC,QAAA4D,QAAA,CAAAC,EAAA,CAAAD,QAAA,CAAA3D,IAAA,CAAzDtD,WAAW,CAACK,OAAO,CAAA4G,QAAA,CAAArD,EAAA,CAAQyC,SAAS,CAAAc,IAAA,CAAAF,QAAA,CAAArD,EAAA,CAAAqD,QAAA,CAAAC,EAAA,EACpCnH,iBAAiB,CAACM,OAAO,CAAG,KAAK,CAAC,yBAAA4G,QAAA,CAAAhD,IAAA,KAAA4C,OAAA,EACnC,GAAC,CAEFhH,cAAc,CAACQ,OAAO,CAAGhG,MAAM,CAE/B,GAAI+E,SAAS,CAAE,CACbA,SAAS,CAAC/E,MAAM,CAClB,CAEA;AACA,GAAM,CAAA+M,oBAAoB,CAAGC,QAAQ,CAAC9B,aAAa,CAAC,KAAK,CAAC,CAC1D6B,oBAAoB,CAACnJ,EAAE,CAAG,+BAA+B,CACzDmJ,oBAAoB,CAAC3K,KAAK,CAAC6K,OAAO,iKAQjC,CAED,GAAM,CAAAC,WAAW,CAAGF,QAAQ,CAAC9B,aAAa,CAAC,QAAQ,CAAC,CACpDgC,WAAW,CAAC9B,SAAS,kaAOpB,CACD8B,WAAW,CAACC,SAAS,CAAG,yBAAyB,CACjDD,WAAW,CAACvK,KAAK,CAAG,wBAAwB,CAC5CuK,WAAW,CAAC9K,KAAK,CAAC6K,OAAO,iZAcxB,CAEDC,WAAW,CAACE,gBAAgB,CAAC,YAAY,CAAE,UAAM,CAC/CF,WAAW,CAAC9K,KAAK,CAACiL,UAAU,CAAG,SACjC,CAAC,CAAC,CAEFH,WAAW,CAACE,gBAAgB,CAAC,YAAY,CAAE,UAAM,CAC/CF,WAAW,CAAC9K,KAAK,CAACiL,UAAU,CAAG,SACjC,CAAC,CAAC,CAEFH,WAAW,CAACE,gBAAgB,CAAC,OAAO,CAAE,UAAM,CAC1C,GAAI9G,mBAAmB,CAACN,OAAO,CAAE,CAC/BM,mBAAmB,CAACN,OAAO,CAAC,CAC9B,CACF,CAAC,CAAC,CAEF+G,oBAAoB,CAACzB,WAAW,CAAC4B,WAAW,CAAC,CAC7CF,QAAQ,CAACM,IAAI,CAAChC,WAAW,CAACyB,oBAAoB,CAAC,CAE/C3N,eAAe,CAAC+B,OAAO,CAAC,SAAAoM,KAAA,CAAuB,IAApB,CAAA1K,IAAI,CAAA0K,KAAA,CAAJ1K,IAAI,CAAE4H,OAAO,CAAA8C,KAAA,CAAP9C,OAAO,CACtC,GAAI,CAACzK,MAAM,CAACwG,aAAa,CAACgH,OAAO,CAAC3K,IAAI,CAAC,CAAE,CACvC7C,MAAM,CAACwG,aAAa,CAACiH,OAAO,CAAC5K,IAAI,CAAE,CACjC0B,KAAK,CAAE,CACLmJ,QAAQ,CAAE,CAAEjD,OAAO,CAAPA,OAAQ,CACtB,CAAC,CACDkD,IAAI,CAAE,CAAC,CACT,CAAC,CACH,CACF,CAAC,CAAC,CAEF,GAAI/I,IAAI,EAAI,EAAAiF,WAAA,CAAAjF,IAAI,CAACgJ,KAAK,eAAV/D,WAAA,CAAYvG,MAAM,EAAG,CAAC,EAAI,EAAAwG,oBAAA,CAAAlF,IAAI,CAACgJ,KAAK,CAAC,CAAC,CAAC,CAACC,MAAM,eAApB/D,oBAAA,CAAsBxG,MAAM,EAAG,CAAC,CAAE,CACtEoC,iBAAiB,CAACM,OAAO,CAAG,IAAI,CAChC,GAAM,CAAA8H,GAAG,CAAGlJ,IAAI,CAACgJ,KAAK,CAAC,CAAC,CAAC,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC7J,SAAS,CAC7C,GAAM,CAAA+J,SAAS,CAAG7K,aAAa,CAAC4K,GAAG,CAAC,CACpC9N,MAAM,CAACgO,aAAa,CAACD,SAAS,CAAC,CAE/B,GAAM,CAAAd,OAAO,CAAGxL,aAAa,CAACmD,IAAI,CAACqJ,MAAM,EAAI,EAAE,CAAC,CAChDjO,MAAM,CAACkO,QAAQ,CAACjB,OAAO,CAAC,CAExBjN,MAAM,CAACsM,EAAE,CAAC,MAAM,cAAApE,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAAE,SAAA+F,SAAA,SAAAhG,mBAAA,CAAAQ,IAAA,UAAAyF,UAAAC,SAAA,iBAAAA,SAAA,CAAAvF,IAAA,CAAAuF,SAAA,CAAAtF,IAAA,SAAAsF,SAAA,CAAA9E,EAAA,CACMwC,IAAI,CAAAsC,SAAA,CAAAtF,IAAA,SAAiB,CAAA/I,MAAM,CAACgJ,KAAK,CAAC,CAAC,QAAAqF,SAAA,CAAAxB,EAAA,CAAAwB,SAAA,CAAApF,IAAA,CAAzDtD,WAAW,CAACK,OAAO,CAAAqI,SAAA,CAAA9E,EAAA,CAAQyC,SAAS,CAAAc,IAAA,CAAAuB,SAAA,CAAA9E,EAAA,CAAA8E,SAAA,CAAAxB,EAAA,EACpCnH,iBAAiB,CAACM,OAAO,CAAG,KAAK,CAAC,wBAAAqI,SAAA,CAAAzE,IAAA,KAAAuE,QAAA,EACnC,GACH,CAEA,MAAO,SAAS,CAAAG,OAAOA,CAAA,CAAG,CACxB;AACA,GAAM,CAAAC,iBAAiB,CAAGvB,QAAQ,CAACwB,cAAc,CAAC,+BAA+B,CAAC,CAElF,GAAID,iBAAiB,CAAE,CACrBvB,QAAQ,CAACM,IAAI,CAACmB,WAAW,CAACF,iBAAiB,CAC7C,CAEAvO,MAAM,CAAC+J,OAAO,CAAC,CAAC,CAChBnE,gBAAgB,CAACI,OAAO,CAAG,KAC7B,CACF,CAAC,CAAE,CAACpB,IAAI,CAAEE,IAAI,CAAC,CAAC,CAEhB,GAAM,CAAA4J,aAAa,CAAG,QAAhB,CAAAA,aAAaA,CAAA,CAAS,KAAAC,qBAAA,CAC1B,MAAO,EAAAA,qBAAA,CAAAnJ,cAAc,CAACQ,OAAO,eAAtB2I,qBAAA,CAAwBC,OAAO,CAAC,CAAC,GAAI,EAC9C,CAAC,CAED,GAAM,CAAAC,YAAY,CAAG,QAAf,CAAAA,YAAYA,CAAA,CAAS,KAAAC,sBAAA,CACzB,MAAO,EAAAA,sBAAA,CAAAtJ,cAAc,CAACQ,OAAO,eAAtB8I,sBAAA,CAAwBC,MAAM,CAAC,CAAC,GAAI,EAC7C,CAAC,CAED,mBACEjP,KAAA,CAACjB,KAAK,CAACmQ,QAAQ,EAAAC,QAAA,eACbrP,IAAA,CAACF,YAAY,GAAE,CAAC,cAChBE,IAAA,QAAKsP,GAAG,CAAE5J,SAAU,CAAC1B,EAAE,CAAC,iBAAiB,CAAE,CAAC,CAC3CkC,QAAQ,eACPlG,IAAA,QAAKwC,KAAK,CAAE,CAAE+M,QAAQ,CAAE,QAAQ,CAAEhF,MAAM,CAAE,CAAC,CAAEiF,WAAW,CAAE,OAAQ,CAAE,CAAAH,QAAA,cAClErP,IAAA,CAACJ,UAAU,EACT0P,GAAG,CAAE3J,YAAa,CAClBU,eAAe,CAAEA,eAAgB,CACjCoJ,SAAS,CAAEX,aAAa,CAAC,CAAE,CAC3BY,QAAQ,CAAET,YAAY,CAAC,CAAE,CAC1B,CAAC,CACC,CACN,EACa,CAEpB,CAEA,cAAe,CAAAnK,cAAc","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":[]}
|