@peak-ai/canvas 1.6.4-rc.2 → 1.6.4
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 +3 -3
- package/GrapesjsCanvas.js.map +1 -1
- package/contexts/PageContext.d.ts +1 -1
- package/contexts/PageContext.js +1 -1
- package/contexts/PageContext.js.map +1 -1
- package/helpers/page-utils.d.ts +1 -0
- package/helpers/page-utils.js +1 -1
- package/helpers/page-utils.js.map +1 -1
- package/package.json +1 -1
- package/plugins/grapejs-plugin.d.ts +1 -1
- package/plugins/grapejs-plugin.js.map +1 -1
- package/plugins/helpers/button-form.js +1 -1
- package/plugins/helpers/button-form.js.map +1 -1
- package/plugins/helpers/data-table.d.ts +1 -1
- package/plugins/helpers/data-table.js +3 -3
- package/plugins/helpers/data-table.js.map +1 -1
- package/types/page.d.js.map +1 -1
package/GrapesjsCanvas.js
CHANGED
|
@@ -2,12 +2,12 @@ import _extends from"@babel/runtime/helpers/extends";import _asyncToGenerator fr
|
|
|
2
2
|
import grapesjs from"grapesjs";import"grapesjs/dist/css/grapes.min.css";import tailwind from"grapesjs-tailwind";import{TypesToRegister}from"./constants";import{toKebabCase}from"./helpers";import{tailwindCompiledCss}from"./helpers/css";import{datePickerCss}from"./helpers/date-picker";import{extractPageMetadata,getCurrentPage,mergeStyles,normalizeMultiPageJson}from"./helpers/page-utils";import{createGrapesjsShadcnGenericPlugin}from"./plugins/grapejs-plugin";import{StyledEditor}from"./index.styles";import{PageProvider,usePageContext}from"./contexts/PageContext";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";function isEditorCanvasReady(editor){try{var canvas=editor.Canvas;if(!canvas){return false}var canvasDoc=canvas.getDocument==null?void 0:canvas.getDocument();if(!canvasDoc){return false}var canvasBody=canvasDoc.body;if(!canvasBody){return false}return true}catch(_unused){return false}}function safeStoreEditor(_x){return _safeStoreEditor.apply(this,arguments)}function _safeStoreEditor(){_safeStoreEditor=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6(editor){var _editor$Pages,wrapper,pages;return _regeneratorRuntime.wrap(function _callee6$(_context6){while(1)switch(_context6.prev=_context6.next){case 0:_context6.prev=0;wrapper=editor.getWrapper();if(wrapper){_context6.next=4;break}return _context6.abrupt("return",null);case 4:pages=((_editor$Pages=editor.Pages)==null||_editor$Pages.getAll==null?void 0:_editor$Pages.getAll())||[];if(!(pages.length===0)){_context6.next=7;break}return _context6.abrupt("return",null);case 7:_context6.next=9;return editor.store();case 9:return _context6.abrupt("return",_context6.sent);case 12:_context6.prev=12;_context6.t0=_context6["catch"](0);// eslint-disable-next-line no-console
|
|
3
3
|
console.warn("Error during store operation:",_context6.t0);return _context6.abrupt("return",null);case 16:case"end":return _context6.stop()}},_callee6,null,[[0,12]])}));return _safeStoreEditor.apply(this,arguments)}function setComponentProperties(editor,isPreview,isStreaming){if(!editor){return}function setPropertiesRecursively(comp){if(!comp){return}var isMutable=!isPreview&&!isStreaming;comp.set({editable:isMutable,draggable:isMutable,droppable:isMutable&&comp.getName()!=="Shadcn-generic",selectable:isMutable,hoverable:isMutable,highlightable:isMutable,copyable:false,resizable:false,removable:isMutable,badgable:false});comp.set("attributes",_extends({},comp.get("attributes")||{},{isEditable:isMutable}));if(isMutable){comp.set("toolbar",[{attributes:{"class":"fa fa-arrows"},command:"tlb-move"},{attributes:{"class":"fa fa-trash"},command:"tlb-delete"}])}else{comp.set("toolbar",[])}comp.components().forEach(setPropertiesRecursively)}var wrapper=editor.getWrapper();var components=(wrapper==null?void 0:wrapper.find("*"))||[];components.forEach(setPropertiesRecursively);if(isEditorCanvasReady(editor)){if(isPreview){editor.runCommand("core:preview")}else{editor.stopCommand("core:preview")}}}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 resetStreamingComponent(comp){var attrs=comp.get("attributes")||{};var props=comp.get("componentProps")||{};var cleanedProps=_extends({},props);delete cleanedProps.bodyContent;delete cleanedProps.data;delete cleanedProps.rows;delete cleanedProps.series;delete cleanedProps.pagination;delete cleanedProps.error;delete cleanedProps.isMissing;comp.set({attributes:_extends({},attrs,{loading:true,error:undefined,isMissing:undefined}),componentProps:cleanedProps})}function GrapejsCanvasInternal(_ref2){var _pages$;var json=_ref2.json,_ref2$mode=_ref2.mode,mode=_ref2$mode===void 0?"preview":_ref2$mode,setEditor=_ref2.setEditor,performInteraction=_ref2.performInteraction,downloadTable=_ref2.downloadTable,_ref2$newDataNotifier=_ref2.newDataNotifier,newDataNotifier=_ref2$newDataNotifier===void 0?function(){// no op
|
|
4
4
|
}:_ref2$newDataNotifier,_ref2$setHasChanged=_ref2.setHasChanged,setHasChanged=_ref2$setHasChanged===void 0?function(){// no op
|
|
5
|
-
}:_ref2$setHasChanged,isStreaming=_ref2.isStreaming,_ref2$isModeChangeFro=_ref2.isModeChangeFromToggle,isModeChangeFromToggle=_ref2$isModeChangeFro===void 0?false:_ref2$isModeChangeFro,_ref2$isTemplateView=_ref2.isTemplateView,isTemplateView=_ref2$isTemplateView===void 0?false:_ref2$isTemplateView,externalCurrentPageId=_ref2.currentPageId,externalOnPageChange=_ref2.onPageChange,onRequestPageData=_ref2.onRequestPageData;var pageContext=usePageContext();var normalizedJson=normalizeMultiPageJson(json);var pages=normalizedJson.pages.map(extractPageMetadata);var effectiveCurrentPageId=externalCurrentPageId||(pageContext==null?void 0:pageContext.currentPageId)||((_pages$=pages[0])==null?void 0:_pages$.id)||"";var editorRef=useRef(null);var editorInstance=useRef(null);var renderedComponents=useRef({});var pageDataCache=useRef({});var currentPageIdRef=useRef(effectiveCurrentPageId);var isStreamingRef=useRef(isStreaming!=null?isStreaming:false);var modeRef=useRef(mode);var isSystemUpdateRef=useRef(false);var lastJsonRef=useRef("");var isEditorAliveRef=useRef(false);var onRequestPageDataRef=useRef(onRequestPageData);var
|
|
5
|
+
}:_ref2$setHasChanged,isStreaming=_ref2.isStreaming,_ref2$isModeChangeFro=_ref2.isModeChangeFromToggle,isModeChangeFromToggle=_ref2$isModeChangeFro===void 0?false:_ref2$isModeChangeFro,_ref2$isTemplateView=_ref2.isTemplateView,isTemplateView=_ref2$isTemplateView===void 0?false:_ref2$isTemplateView,externalCurrentPageId=_ref2.currentPageId,externalOnPageChange=_ref2.onPageChange,onRequestPageData=_ref2.onRequestPageData;var pageContext=usePageContext();var normalizedJson=normalizeMultiPageJson(json);var pages=normalizedJson.pages.map(extractPageMetadata);var effectiveCurrentPageId=externalCurrentPageId||(pageContext==null?void 0:pageContext.currentPageId)||((_pages$=pages[0])==null?void 0:_pages$.id)||"";var editorRef=useRef(null);var editorInstance=useRef(null);var renderedComponents=useRef({});var pageDataCache=useRef({});var currentPageIdRef=useRef(effectiveCurrentPageId);var isStreamingRef=useRef(isStreaming!=null?isStreaming:false);var modeRef=useRef(mode);var isSystemUpdateRef=useRef(false);var lastJsonRef=useRef("");var isEditorAliveRef=useRef(false);var onRequestPageDataRef=useRef(onRequestPageData);var _useState=useState(false),isTransitioning=_useState[0],setIsTransitioning=_useState[1];useEffect(function(){currentPageIdRef.current=effectiveCurrentPageId},[effectiveCurrentPageId]);useEffect(function(){isStreamingRef.current=isStreaming!=null?isStreaming:false},[isStreaming!=null?isStreaming:false]);useEffect(function(){modeRef.current=mode},[mode]);useEffect(function(){onRequestPageDataRef.current=onRequestPageData},[onRequestPageData]);function notificationHandler(props){if(!props){return true}var compId=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[compId];if(!model){var pageId=currentPageIdRef.current;if(pageId){if(!pageDataCache.current[pageId]){pageDataCache.current[pageId]={}}pageDataCache.current[pageId][compId]={newProps:newProps,newAttributes:newAttributes,timestamp:Date.now()}}return false}// Filter out complex placeholder objects by setting them to null
|
|
6
6
|
// This ensures placeholder values are properly cleared and don't cause stale data issues
|
|
7
7
|
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
|
|
8
|
-
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&&editorInstance.current&&isEditorAliveRef.current){expandActionsComponent(model,parsedNewProps.actions);return true}}model.set("componentProps",_extends({},model.get("componentProps"),parsedNewProps));var currentAttrs=model.get("attributes")||{};var hasRealValue=(parsedNewProps==null?void 0:parsedNewProps.bodyContent)!==undefined&&(parsedNewProps==null?void 0:parsedNewProps.bodyContent)!==null||(parsedNewProps==null?void 0:parsedNewProps.data)!==undefined&&(parsedNewProps==null?void 0:parsedNewProps.data)!==null||(parsedNewProps==null?void 0:parsedNewProps.rows)!==undefined&&(parsedNewProps==null?void 0:parsedNewProps.rows)!==null||(parsedNewProps==null?void 0:parsedNewProps.series)!==undefined&&(parsedNewProps==null?void 0:parsedNewProps.series)!==null;var shouldStopLoading=hasRealValue||(newAttributes==null?void 0:newAttributes.error)||(parsedNewProps==null?void 0:parsedNewProps.isMissing);model.set("attributes",_extends({},currentAttrs,newAttributes,shouldStopLoading?{loading:false}:{}));if(model.view){model.view.render()}return true}useEffect(function(){newDataNotifier(notificationHandler)},[]);function handleNavigateToPage(targetPageId
|
|
8
|
+
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&&editorInstance.current&&isEditorAliveRef.current){expandActionsComponent(model,parsedNewProps.actions);return true}}model.set("componentProps",_extends({},model.get("componentProps"),parsedNewProps));var currentAttrs=model.get("attributes")||{};var hasRealValue=(parsedNewProps==null?void 0:parsedNewProps.bodyContent)!==undefined&&(parsedNewProps==null?void 0:parsedNewProps.bodyContent)!==null||(parsedNewProps==null?void 0:parsedNewProps.data)!==undefined&&(parsedNewProps==null?void 0:parsedNewProps.data)!==null||(parsedNewProps==null?void 0:parsedNewProps.rows)!==undefined&&(parsedNewProps==null?void 0:parsedNewProps.rows)!==null||(parsedNewProps==null?void 0:parsedNewProps.series)!==undefined&&(parsedNewProps==null?void 0:parsedNewProps.series)!==null;var shouldStopLoading=hasRealValue||(newAttributes==null?void 0:newAttributes.error)||(parsedNewProps==null?void 0:parsedNewProps.isMissing);model.set("attributes",_extends({},currentAttrs,newAttributes,shouldStopLoading?{loading:false}:{}));if(model.view){model.view.render()}return true}useEffect(function(){newDataNotifier(notificationHandler)},[]);function handleNavigateToPage(targetPageId){if(externalOnPageChange){externalOnPageChange(targetPageId)}if(pageContext){pageContext.navigateToPage(targetPageId)}}function downloadTableWrapper(_x2){return _downloadTableWrapper.apply(this,arguments)}function _downloadTableWrapper(){_downloadTableWrapper=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(data){var updatedJson;return _regeneratorRuntime.wrap(function _callee4$(_context4){while(1)switch(_context4.prev=_context4.next){case 0:if(downloadTable){_context4.next=2;break}return _context4.abrupt("return");case 2:updatedJson=null;if(!editorInstance.current){_context4.next=7;break}_context4.next=6;return safeStoreEditor(editorInstance.current);case 6:updatedJson=_context4.sent;case 7:_context4.next=9;return downloadTable(_extends({},data,{json:updatedJson}));case 9:case"end":return _context4.stop()}},_callee4)}));return _downloadTableWrapper.apply(this,arguments)}function performInteractionWrapper(_x3){return _performInteractionWrapper.apply(this,arguments)}function _performInteractionWrapper(){_performInteractionWrapper=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(payload){var updatedJson,apiResponse,componentUpdates;return _regeneratorRuntime.wrap(function _callee5$(_context5){while(1)switch(_context5.prev=_context5.next){case 0:updatedJson=null;if(!editorInstance.current){_context5.next=5;break}_context5.next=4;return safeStoreEditor(editorInstance.current);case 4:updatedJson=_context5.sent;case 5:setInteracting(renderedComponents.current,payload.affectedComponents,true);_context5.prev=6;_context5.next=9;return performInteraction(_extends({},payload,{json:updatedJson}));case 9:apiResponse=_context5.sent;componentUpdates=apiResponse||{};Object.entries(componentUpdates).forEach(function(_ref8){var key=_ref8[0],value=_ref8[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 _context5.abrupt("return",componentUpdates);case 15:_context5.prev=15;_context5.t0=_context5["catch"](6);payload.affectedComponents.forEach(function(componentId){var model=renderedComponents.current[componentId];if(model){var errorMessage=_context5.t0 instanceof Error?_context5.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 _context5.t0;case 19:_context5.prev=19;setInteracting(renderedComponents.current,payload.affectedComponents,false);return _context5.finish(19);case 22:case"end":return _context5.stop()}},_callee5,null,[[6,15,19,22]])}));return _performInteractionWrapper.apply(this,arguments)}useEffect(function(){if(!editorRef.current){return function(){// no op
|
|
9
9
|
}}if(editorInstance.current){editorInstance.current.destroy();editorInstance.current=null;isEditorAliveRef.current=false}var currentMode=modeRef.current;var editor=grapesjs.init({container:editorRef.current,height:"100%",plugins:[tailwind,createGrapesjsShadcnGenericPlugin(modeRef,performInteractionWrapper,renderedComponents.current,setHasChanged,isTemplateView,isStreamingRef,handleNavigateToPage,downloadTableWrapper)],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 _callee2(){var stored,newJson;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:if(!(isStreamingRef.current||isSystemUpdateRef.current)){_context2.next=2;break}return _context2.abrupt("return");case 2:if(!(!isEditorAliveRef.current||!editorInstance.current)){_context2.next=4;break}return _context2.abrupt("return");case 4:stored=null;_context2.next=7;return safeStoreEditor(editorInstance.current);case 7:stored=_context2.sent;if(stored){_context2.next=10;break}return _context2.abrupt("return");case 10:newJson=JSON.stringify(stored);if(newJson!==lastJsonRef.current){setHasChanged(true);lastJsonRef.current=newJson}case 12:case"end":return _context2.stop()}},_callee2)}));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
|
|
10
10
|
// So, adding them from here!
|
|
11
11
|
editor.on("load",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(){var canvasDoc,canvasHead,style,fullCss,storeResult;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;_context.next=6;return safeStoreEditor(editor);case 6:storeResult=_context.sent;if(storeResult){lastJsonRef.current=JSON.stringify(storeResult)}isSystemUpdateRef.current=false;setComponentProperties(editor,currentMode==="preview",isStreamingRef.current);case 10:case"end":return _context.stop()}},_callee)})));editorInstance.current=editor;if(setEditor){setEditor(editor)}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:{}})}});return function cleanup(){editor.destroy();isEditorAliveRef.current=false}},[]);useEffect(function(){var _json$pages;if(json&&((_json$pages=json.pages)==null?void 0:_json$pages.length)>0){var _currentPage$frames,_editorInstance$curre3;if(!isEditorAliveRef.current||!editorInstance.current){return}var pageNormalizedJson=normalizeMultiPageJson(json);var currentPage=getCurrentPage(pageNormalizedJson.pages,effectiveCurrentPageId);if(!currentPage||!((_currentPage$frames=currentPage.frames)!=null&&_currentPage$frames.length)){return}isSystemUpdateRef.current=true;var raw=currentPage.frames[0].component;var processed=expandActions(raw);try{var _editorInstance$curre;(_editorInstance$curre=editorInstance.current)==null||_editorInstance$curre.setComponents(processed);setTimeout(function(){if(editorInstance.current&&isEditorAliveRef.current){var _editorInstance$curre2;var domComponents=(_editorInstance$curre2=editorInstance.current)==null?void 0:_editorInstance$curre2.DomComponents;if(domComponents){var _domComponents$getWra;var allComponents=domComponents==null||(_domComponents$getWra=domComponents.getWrapper())==null?void 0:_domComponents$getWra.findType("shadcn-generic");allComponents==null||allComponents.forEach(function(comp){if(comp.get("componentName")==="Tabs"){var _comp$view;(_comp$view=comp.view)==null||_comp$view.render()}})}}},100)}catch(error){// eslint-disable-next-line no-console
|
|
12
|
-
console.error("Error during component restoration:",error)}var globalStyles=pageNormalizedJson.styles||[];var pageStyles=currentPage.styles||[];var mergedStyles=mergeStyles(globalStyles,pageStyles);var cssText=convertStyles(mergedStyles);(_editorInstance$curre3=editorInstance.current)==null||_editorInstance$curre3.setStyle(cssText);if(onRequestPageDataRef.current){var
|
|
12
|
+
console.error("Error during component restoration:",error)}var globalStyles=pageNormalizedJson.styles||[];var pageStyles=currentPage.styles||[];var mergedStyles=mergeStyles(globalStyles,pageStyles);var cssText=convertStyles(mergedStyles);(_editorInstance$curre3=editorInstance.current)==null||_editorInstance$curre3.setStyle(cssText);if(onRequestPageDataRef.current){var isMultiPage=Boolean(currentPage.dataQueries);var pageId=isMultiPage?currentPage.id:"";var queries=currentPage.dataQueries||[];onRequestPageDataRef.current(pageId,queries)}if(editorInstance.current){setComponentProperties(editorInstance.current,mode==="preview",isStreaming);setTimeout(function(){if(editorInstance.current&&isEditorAliveRef.current&&mode==="preview"){setComponentProperties(editorInstance.current,true,isStreaming)}},50)}setTimeout(function(){if(currentPage&&pageDataCache.current[currentPage.id]){var cachedData=pageDataCache.current[currentPage.id];Object.entries(cachedData).forEach(function(_ref5){var componentId=_ref5[0],data=_ref5[1];var model=renderedComponents.current[componentId];if(model&&data){if(data.newProps){model.set("componentProps",_extends({},model.get("componentProps"),data.newProps))}var updatedAttributes=_extends({},model.get("attributes"),data.newAttributes||{});model.set("attributes",updatedAttributes);if(model.view){model.view.render()}}});delete pageDataCache.current[currentPage.id]}},150);var cacheCheckInterval=setInterval(function(){if(!currentPage||!pageDataCache.current[currentPage.id]){return}var cachedData=pageDataCache.current[currentPage.id];var appliedAny=false;Object.entries(cachedData).forEach(function(_ref6){var componentId=_ref6[0],data=_ref6[1];var model=renderedComponents.current[componentId];if(model&&data){if(data.newProps){model.set("componentProps",_extends({},model.get("componentProps"),data.newProps))}var updatedAttributes=_extends({},model.get("attributes"),data.newAttributes||{});model.set("attributes",updatedAttributes);if(model.view){model.view.render()}appliedAny=true}});if(appliedAny){Object.keys(cachedData).forEach(function(componentId){if(renderedComponents.current[componentId]){delete cachedData[componentId]}});if(Object.keys(cachedData).length===0){delete pageDataCache.current[currentPage.id]}}},100);setTimeout(function(){clearInterval(cacheCheckInterval)},5000);setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(){var storeResult;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:if(!(editorInstance.current&&isEditorAliveRef.current)){_context3.next=6;break}_context3.next=3;return safeStoreEditor(editorInstance.current);case 3:storeResult=_context3.sent;if(storeResult){lastJsonRef.current=JSON.stringify(storeResult)}isSystemUpdateRef.current=false;case 6:case"end":return _context3.stop()}},_callee3)})),100)}},[json,effectiveCurrentPageId]);useEffect(function(){var editor=editorInstance.current;if(!editor||!isEditorAliveRef.current){return}if(isModeChangeFromToggle){setIsTransitioning(true)}setComponentProperties(editorInstance.current,mode==="preview",isStreaming!=null?isStreaming:false);var wrapper=editor.getWrapper();var shadcnComponents=(wrapper==null?void 0:wrapper.find("[data-gjs-type=\"shadcn-generic\"]"))||[];shadcnComponents.forEach(function(comp){if(comp.view&&typeof comp.view.render==="function"){comp.view.render()}});if(isModeChangeFromToggle){requestAnimationFrame(function(){setIsTransitioning(false)})}},[mode,isStreaming!=null?isStreaming:false]);useEffect(function(){var editor=editorInstance.current;var currentIsStreaming=isStreaming!=null?isStreaming:false;var prevIsStreaming=isStreamingRef.current;if(editor&&isEditorAliveRef.current&¤tIsStreaming&&!prevIsStreaming){var wrapper=editor.getWrapper();var shadcnComponents=(wrapper==null?void 0:wrapper.findType("shadcn-generic"))||[];shadcnComponents.forEach(function(comp){resetStreamingComponent(comp)})}isStreamingRef.current=currentIsStreaming},[isStreaming]);return/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(StyledEditor,{}),/*#__PURE__*/_jsx("div",{ref:editorRef,id:"grapesjs-editor",style:{opacity:isTransitioning?0:1,transition:"opacity 0.15s ease-in-out"}})]})}function GrapejsCanvas(props){var _pages$2;var existingContext=usePageContext();if(existingContext){return/*#__PURE__*/_jsx(GrapejsCanvasInternal,_extends({},props))}var normalizedJson=normalizeMultiPageJson(props.json);var pages=normalizedJson.pages.map(extractPageMetadata);var initialPageId=props.currentPageId||((_pages$2=pages[0])==null?void 0:_pages$2.id)||"";return/*#__PURE__*/_jsx(PageProvider,{pages:pages,initialPageId:initialPageId,onPageChange:props.onPageChange,children:/*#__PURE__*/_jsx(GrapejsCanvasInternal,_extends({},props))})}export default GrapejsCanvas;
|
|
13
13
|
//# sourceMappingURL=GrapesjsCanvas.js.map
|
package/GrapesjsCanvas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GrapesjsCanvas.js","names":["React","useEffect","useRef","useState","grapesjs","tailwind","TypesToRegister","toKebabCase","tailwindCompiledCss","datePickerCss","extractPageMetadata","getCurrentPage","mergeStyles","normalizeMultiPageJson","createGrapesjsShadcnGenericPlugin","StyledEditor","PageProvider","usePageContext","jsx","_jsx","jsxs","_jsxs","isEditorCanvasReady","editor","canvas","Canvas","canvasDoc","getDocument","canvasBody","body","_unused","safeStoreEditor","_x","_safeStoreEditor","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee6","_editor$Pages","wrapper","pages","wrap","_callee6$","_context6","prev","next","getWrapper","abrupt","Pages","getAll","length","store","sent","t0","console","warn","stop","setComponentProperties","isPreview","isStreaming","setPropertiesRecursively","comp","isMutable","set","editable","draggable","droppable","getName","selectable","hoverable","highlightable","copyable","resizable","removable","badgable","_extends","get","isEditable","attributes","command","components","forEach","find","runCommand","stopCommand","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","classes","concat","undefined","i","id","setInteracting","renderedComponents","inProgress","component","componentId","showLoader","gjsModel","interactionApiInProgress","expandActionsComponent","model","append","addClass","resetStreamingComponent","attrs","props","cleanedProps","data","rows","series","pagination","error","isMissing","loading","GrapejsCanvasInternal","_ref2","_pages$","json","_ref2$mode","mode","setEditor","performInteraction","downloadTable","_ref2$newDataNotifier","newDataNotifier","_ref2$setHasChanged","setHasChanged","_ref2$isModeChangeFro","isModeChangeFromToggle","_ref2$isTemplateView","isTemplateView","externalCurrentPageId","currentPageId","externalOnPageChange","onPageChange","onRequestPageData","pageContext","normalizedJson","effectiveCurrentPageId","editorRef","editorInstance","pageDataCache","currentPageIdRef","isStreamingRef","modeRef","isSystemUpdateRef","lastJsonRef","isEditorAliveRef","onRequestPageDataRef","rowNavigationContextRef","_useState","isTransitioning","setIsTransitioning","current","notificationHandler","compId","_props$newProps","newProps","_props$newAttributes","newAttributes","pageId","timestamp","Date","now","filteredProps","keys","key","name","parsedNewProps","isActionsComponent","hasValidActionsData","_model$components$at","isAlreadyExpanded","at","currentAttrs","hasRealValue","shouldStopLoading","view","render","handleNavigateToPage","targetPageId","rowContext","navigateToPage","downloadTableWrapper","_x2","_downloadTableWrapper","_callee4","updatedJson","_callee4$","_context4","performInteractionWrapper","_x3","_performInteractionWrapper","_callee5","payload","apiResponse","componentUpdates","_callee5$","_context5","affectedComponents","_ref8","errorMessage","Error","message","finish","destroy","currentMode","init","container","height","plugins","storageManager","richTextEditor","customBadgeLabel","tagName","injectionAttempts","injectStylesEarly","_editor$Canvas","iframeDoc","head","querySelector","createElement","fullCss","innerHTML","setAttribute","appendChild","requestAnimationFrame","checkDirty","_checkDirty","_callee2","stored","newJson","_callee2$","_context2","JSON","stringify","debouncedCheckDirty","timeout","clearTimeout","setTimeout","evt","on","includes","_callee","canvasHead","storeResult","_callee$","_context","_ref4","DomComponents","getType","addType","defaults","cleanup","_json$pages","_currentPage$frames","_editorInstance$curre3","pageNormalizedJson","currentPage","frames","raw","processed","_editorInstance$curre","setComponents","_editorInstance$curre2","domComponents","_domComponents$getWra","allComponents","findType","_comp$view","globalStyles","styles","pageStyles","mergedStyles","cssText","setStyle","_rowNavigationContext","isMultiPage","Boolean","cachedData","_ref5","updatedAttributes","cacheCheckInterval","setInterval","appliedAny","_ref6","clearInterval","_callee3","_callee3$","_context3","shadcnComponents","currentIsStreaming","prevIsStreaming","Fragment","children","ref","opacity","transition","GrapejsCanvas","_pages$2","existingContext","initialPageId"],"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 { TypesToRegister } from './constants';\nimport { toKebabCase } from './helpers';\nimport { tailwindCompiledCss } from './helpers/css';\nimport { datePickerCss } from './helpers/date-picker';\nimport {\n extractPageMetadata,\n getCurrentPage,\n mergeStyles,\n normalizeMultiPageJson,\n} from './helpers/page-utils';\nimport { createGrapesjsShadcnGenericPlugin } from './plugins/grapejs-plugin';\nimport { StyledEditor } from './index.styles';\nimport type { PageAwareProps } from './types/page';\nimport { PageProvider, usePageContext } from './contexts/PageContext';\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 downloadTable?: (data: {\n tableId: string;\n title: string;\n limit: number;\n json: any;\n headerMapper?: Record<string, string>;\n }) => Promise<void>;\n newDataNotifier: (notifHandler: NotificationHandler) => void;\n setHasChanged: (hasChanged: boolean) => void;\n isStreaming: boolean;\n isModeChangeFromToggle?: boolean;\n isTemplateView?: boolean;\n} & PageAwareProps;\n\nfunction isEditorCanvasReady(editor: Editor): boolean {\n try {\n const canvas = editor.Canvas;\n\n if (!canvas) {\n return false;\n }\n\n const canvasDoc = canvas.getDocument?.();\n\n if (!canvasDoc) {\n return false;\n }\n\n const canvasBody = canvasDoc.body;\n\n if (!canvasBody) {\n return false;\n }\n\n return true;\n } catch {\n return false;\n }\n}\n\nasync function safeStoreEditor(editor: Editor): Promise<any | null> {\n try {\n const wrapper = editor.getWrapper();\n\n if (!wrapper) {\n return null;\n }\n\n const pages = editor.Pages?.getAll?.() || [];\n\n if (pages.length === 0) {\n return null;\n }\n\n return await editor.store();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn('Error during store operation:', error);\n\n return null;\n }\n}\n\nfunction setComponentProperties(editor: Editor, isPreview: boolean, isStreaming: boolean): void {\n if (!editor) {\n return;\n }\n\n function setPropertiesRecursively(comp: Component) {\n if (!comp) {\n return;\n }\n\n const isMutable = !isPreview && !isStreaming;\n\n comp.set({\n editable: isMutable,\n draggable: isMutable,\n droppable: isMutable && comp.getName() !== 'Shadcn-generic',\n selectable: isMutable,\n hoverable: isMutable,\n highlightable: isMutable,\n copyable: false,\n resizable: false,\n removable: isMutable,\n badgable: false,\n });\n\n comp.set('attributes', {\n ...(comp.get('attributes') || {}),\n isEditable: isMutable,\n });\n\n if (isMutable) {\n comp.set('toolbar', [\n { attributes: { class: 'fa fa-arrows' }, command: 'tlb-move' },\n { attributes: { class: 'fa fa-trash' }, command: 'tlb-delete' },\n ]);\n } else {\n comp.set('toolbar', []);\n }\n\n comp.components().forEach(setPropertiesRecursively);\n }\n\n const wrapper = editor.getWrapper();\n const components = wrapper?.find('*') || [];\n\n components.forEach(setPropertiesRecursively);\n\n if (isEditorCanvasReady(editor)) {\n if (isPreview) {\n editor.runCommand('core:preview');\n } else {\n editor.stopCommand('core:preview');\n }\n }\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 resetStreamingComponent(comp: Component): void {\n const attrs = comp.get('attributes') || {};\n const props = comp.get('componentProps') || {};\n\n const cleanedProps = { ...props };\n\n delete cleanedProps.bodyContent;\n delete cleanedProps.data;\n delete cleanedProps.rows;\n delete cleanedProps.series;\n delete cleanedProps.pagination;\n delete cleanedProps.error;\n delete cleanedProps.isMissing;\n\n comp.set({\n attributes: {\n ...attrs,\n loading: true,\n error: undefined,\n isMissing: undefined,\n },\n componentProps: cleanedProps,\n });\n}\n\nfunction GrapejsCanvasInternal({\n json,\n mode = 'preview',\n setEditor,\n performInteraction,\n downloadTable,\n newDataNotifier = () => {\n // no op\n },\n setHasChanged = () => {\n // no op\n },\n isStreaming,\n isModeChangeFromToggle = false,\n isTemplateView = false,\n currentPageId: externalCurrentPageId,\n onPageChange: externalOnPageChange, // eslint-disable-line @typescript-eslint/no-unused-vars\n onRequestPageData,\n}: GrapesjsCanvasProps) {\n const pageContext = usePageContext();\n\n const normalizedJson = normalizeMultiPageJson(json);\n const pages = normalizedJson.pages.map(extractPageMetadata);\n const effectiveCurrentPageId =\n externalCurrentPageId || pageContext?.currentPageId || pages[0]?.id || '';\n\n const editorRef = useRef<HTMLDivElement>(null);\n const editorInstance = useRef<Editor | null>(null);\n const renderedComponents = useRef<Record<string, Component>>({});\n const pageDataCache = useRef<Record<string, Record<string, any>>>({});\n const currentPageIdRef = useRef<string>(effectiveCurrentPageId);\n const isStreamingRef = useRef(isStreaming ?? false);\n const modeRef = useRef(mode);\n const isSystemUpdateRef = useRef(false);\n const lastJsonRef = useRef<string>('');\n const isEditorAliveRef = useRef(false);\n const onRequestPageDataRef = useRef(onRequestPageData);\n const rowNavigationContextRef = useRef<Record<string, any> | null>(null);\n const [isTransitioning, setIsTransitioning] = useState(false);\n\n useEffect(() => {\n currentPageIdRef.current = effectiveCurrentPageId;\n }, [effectiveCurrentPageId]);\n\n useEffect(() => {\n isStreamingRef.current = isStreaming ?? false;\n }, [isStreaming ?? false]);\n\n useEffect(() => {\n modeRef.current = mode;\n }, [mode]);\n\n useEffect(() => {\n onRequestPageDataRef.current = onRequestPageData;\n }, [onRequestPageData]);\n\n function notificationHandler(\n props: Parameters<NotificationHandler>[0],\n ): ReturnType<NotificationHandler> {\n if (!props) {\n return true;\n }\n\n const { componentId: compId, newProps = {}, newAttributes = {} } = props;\n\n const model = renderedComponents.current[compId];\n\n if (!model) {\n const pageId = currentPageIdRef.current;\n\n if (pageId) {\n if (!pageDataCache.current[pageId]) {\n pageDataCache.current[pageId] = {};\n }\n\n pageDataCache.current[pageId][compId] = {\n newProps,\n newAttributes,\n timestamp: Date.now(),\n };\n }\n\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 && editorInstance.current && isEditorAliveRef.current) {\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 const currentAttrs = model.get('attributes') || {};\n\n const hasRealValue =\n (parsedNewProps?.bodyContent !== undefined && parsedNewProps?.bodyContent !== null) ||\n (parsedNewProps?.data !== undefined && parsedNewProps?.data !== null) ||\n (parsedNewProps?.rows !== undefined && parsedNewProps?.rows !== null) ||\n (parsedNewProps?.series !== undefined && parsedNewProps?.series !== null);\n\n const shouldStopLoading = hasRealValue || newAttributes?.error || parsedNewProps?.isMissing;\n\n model.set('attributes', {\n ...currentAttrs,\n ...newAttributes,\n ...(shouldStopLoading ? { loading: false } : {}),\n });\n\n if (model.view) {\n model.view.render();\n }\n\n return true;\n }\n\n useEffect(() => {\n newDataNotifier(notificationHandler);\n }, []);\n\n function handleNavigateToPage(targetPageId: string, rowContext?: Record<string, any>) {\n rowNavigationContextRef.current = rowContext ?? null;\n\n if (externalOnPageChange) {\n externalOnPageChange(targetPageId, rowContext);\n }\n\n if (pageContext) {\n pageContext.navigateToPage(targetPageId, rowContext);\n }\n }\n\n async function downloadTableWrapper(data: {\n tableId: string;\n title: string;\n limit: number;\n headerMapper?: Record<string, string>;\n }) {\n if (!downloadTable) {\n return;\n }\n\n let updatedJson = null;\n\n if (editorInstance.current) {\n updatedJson = await safeStoreEditor(editorInstance.current);\n }\n\n await downloadTable({ ...data, json: updatedJson });\n }\n\n async function performInteractionWrapper(payload: Record<string, any>) {\n let updatedJson = null;\n\n if (editorInstance.current) {\n updatedJson = await safeStoreEditor(editorInstance.current);\n }\n\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 = modeRef.current;\n\n const editor = grapesjs.init({\n container: editorRef.current,\n height: '100%',\n plugins: [\n tailwind,\n createGrapesjsShadcnGenericPlugin(\n modeRef,\n performInteractionWrapper,\n renderedComponents.current,\n setHasChanged,\n isTemplateView,\n isStreamingRef,\n handleNavigateToPage,\n downloadTableWrapper,\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 stored = await safeStoreEditor(editorInstance.current);\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 const storeResult = await safeStoreEditor(editor);\n\n if (storeResult) {\n lastJsonRef.current = JSON.stringify(storeResult);\n }\n\n isSystemUpdateRef.current = false;\n\n setComponentProperties(editor, currentMode === 'preview', isStreamingRef.current);\n });\n\n editorInstance.current = editor;\n\n if (setEditor) {\n setEditor(editor);\n }\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 return function cleanup() {\n editor.destroy();\n isEditorAliveRef.current = false;\n };\n }, []);\n\n useEffect(() => {\n if (json && json.pages?.length > 0) {\n if (!isEditorAliveRef.current || !editorInstance.current) {\n return;\n }\n\n const pageNormalizedJson = normalizeMultiPageJson(json);\n\n const currentPage = getCurrentPage(pageNormalizedJson.pages, effectiveCurrentPageId);\n\n if (!currentPage || !currentPage.frames?.length) {\n return;\n }\n\n isSystemUpdateRef.current = true;\n const raw = currentPage.frames[0].component;\n const processed = expandActions(raw);\n\n try {\n editorInstance.current?.setComponents(processed);\n\n setTimeout(() => {\n if (editorInstance.current && isEditorAliveRef.current) {\n const domComponents = editorInstance.current?.DomComponents;\n\n if (domComponents) {\n const allComponents = domComponents?.getWrapper()?.findType('shadcn-generic');\n allComponents?.forEach((comp: any) => {\n if (comp.get('componentName') === 'Tabs') {\n comp.view?.render();\n }\n });\n }\n }\n }, 100);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error during component restoration:', error);\n }\n\n const globalStyles = pageNormalizedJson.styles || [];\n const pageStyles = currentPage.styles || [];\n const mergedStyles = mergeStyles(globalStyles, pageStyles);\n const cssText = convertStyles(mergedStyles);\n editorInstance.current?.setStyle(cssText);\n\n if (onRequestPageDataRef.current) {\n const isMultiPage = Boolean(pageNormalizedJson.isMultiPage);\n const pageId = isMultiPage ? currentPage.id : '';\n const rowContext = rowNavigationContextRef.current ?? undefined;\n\n onRequestPageDataRef.current(pageId, [], rowContext);\n rowNavigationContextRef.current = null;\n }\n\n if (editorInstance.current) {\n setComponentProperties(editorInstance.current, mode === 'preview', isStreaming);\n\n setTimeout(() => {\n if (editorInstance.current && isEditorAliveRef.current && mode === 'preview') {\n setComponentProperties(editorInstance.current, true, isStreaming);\n }\n }, 50);\n }\n\n setTimeout(() => {\n if (currentPage && pageDataCache.current[currentPage.id]) {\n const cachedData = pageDataCache.current[currentPage.id];\n\n Object.entries(cachedData).forEach(([componentId, data]) => {\n const model = renderedComponents.current[componentId];\n\n if (model && data) {\n if (data.newProps) {\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...data.newProps,\n });\n }\n\n const updatedAttributes = {\n ...model.get('attributes'),\n ...(data.newAttributes || {}),\n };\n\n model.set('attributes', updatedAttributes);\n\n if (model.view) {\n model.view.render();\n }\n }\n });\n\n delete pageDataCache.current[currentPage.id];\n }\n }, 150);\n\n const cacheCheckInterval = setInterval(() => {\n if (!currentPage || !pageDataCache.current[currentPage.id]) {\n return;\n }\n\n const cachedData = pageDataCache.current[currentPage.id];\n let appliedAny = false;\n\n Object.entries(cachedData).forEach(([componentId, data]) => {\n const model = renderedComponents.current[componentId];\n\n if (model && data) {\n if (data.newProps) {\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...data.newProps,\n });\n }\n\n const updatedAttributes = {\n ...model.get('attributes'),\n ...(data.newAttributes || {}),\n };\n\n model.set('attributes', updatedAttributes);\n\n if (model.view) {\n model.view.render();\n }\n\n appliedAny = true;\n }\n });\n\n if (appliedAny) {\n Object.keys(cachedData).forEach((componentId) => {\n if (renderedComponents.current[componentId]) {\n delete cachedData[componentId];\n }\n });\n\n if (Object.keys(cachedData).length === 0) {\n delete pageDataCache.current[currentPage.id];\n }\n }\n }, 100);\n\n setTimeout(() => {\n clearInterval(cacheCheckInterval);\n }, 5000);\n\n setTimeout(async () => {\n if (editorInstance.current && isEditorAliveRef.current) {\n const storeResult = await safeStoreEditor(editorInstance.current);\n\n if (storeResult) {\n lastJsonRef.current = JSON.stringify(storeResult);\n }\n\n isSystemUpdateRef.current = false;\n }\n }, 100);\n }\n }, [json, effectiveCurrentPageId]);\n\n useEffect(() => {\n const editor = editorInstance.current;\n\n if (!editor || !isEditorAliveRef.current) {\n return;\n }\n\n if (isModeChangeFromToggle) {\n setIsTransitioning(true);\n }\n\n setComponentProperties(\n editorInstance.current as Editor,\n mode === 'preview',\n isStreaming ?? false,\n );\n\n const wrapper = editor.getWrapper();\n const shadcnComponents = wrapper?.find('[data-gjs-type=\"shadcn-generic\"]') || [];\n\n shadcnComponents.forEach((comp: Component) => {\n if (comp.view && typeof comp.view.render === 'function') {\n comp.view.render();\n }\n });\n\n if (isModeChangeFromToggle) {\n requestAnimationFrame(() => {\n setIsTransitioning(false);\n });\n }\n }, [mode, isStreaming ?? false]);\n\n useEffect(() => {\n const editor = editorInstance.current;\n const currentIsStreaming = isStreaming ?? false;\n const prevIsStreaming = isStreamingRef.current;\n\n if (editor && isEditorAliveRef.current && currentIsStreaming && !prevIsStreaming) {\n const wrapper = editor.getWrapper();\n const shadcnComponents = wrapper?.findType('shadcn-generic') || [];\n\n shadcnComponents.forEach((comp: Component) => {\n resetStreamingComponent(comp);\n });\n }\n\n isStreamingRef.current = currentIsStreaming;\n }, [isStreaming]);\n\n return (\n <React.Fragment>\n <StyledEditor />\n <div\n ref={editorRef}\n id=\"grapesjs-editor\"\n style={{\n opacity: isTransitioning ? 0 : 1,\n transition: 'opacity 0.15s ease-in-out',\n }}\n />\n </React.Fragment>\n );\n}\n\nfunction GrapejsCanvas(props: GrapesjsCanvasProps) {\n const existingContext = usePageContext();\n\n if (existingContext) {\n return <GrapejsCanvasInternal {...props} />;\n }\n\n const normalizedJson = normalizeMultiPageJson(props.json);\n const pages = normalizedJson.pages.map(extractPageMetadata);\n const initialPageId = props.currentPageId || pages[0]?.id || '';\n\n return (\n <PageProvider pages={pages} initialPageId={initialPageId} onPageChange={props.onPageChange}>\n <GrapejsCanvasInternal {...props} />\n </PageProvider>\n );\n}\n\nexport default GrapejsCanvas;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"GrapesjsCanvas.js","names":["React","useEffect","useRef","useState","grapesjs","tailwind","TypesToRegister","toKebabCase","tailwindCompiledCss","datePickerCss","extractPageMetadata","getCurrentPage","mergeStyles","normalizeMultiPageJson","createGrapesjsShadcnGenericPlugin","StyledEditor","PageProvider","usePageContext","jsx","_jsx","jsxs","_jsxs","isEditorCanvasReady","editor","canvas","Canvas","canvasDoc","getDocument","canvasBody","body","_unused","safeStoreEditor","_x","_safeStoreEditor","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee6","_editor$Pages","wrapper","pages","wrap","_callee6$","_context6","prev","next","getWrapper","abrupt","Pages","getAll","length","store","sent","t0","console","warn","stop","setComponentProperties","isPreview","isStreaming","setPropertiesRecursively","comp","isMutable","set","editable","draggable","droppable","getName","selectable","hoverable","highlightable","copyable","resizable","removable","badgable","_extends","get","isEditable","attributes","command","components","forEach","find","runCommand","stopCommand","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","classes","concat","undefined","i","id","setInteracting","renderedComponents","inProgress","component","componentId","showLoader","gjsModel","interactionApiInProgress","expandActionsComponent","model","append","addClass","resetStreamingComponent","attrs","props","cleanedProps","data","rows","series","pagination","error","isMissing","loading","GrapejsCanvasInternal","_ref2","_pages$","json","_ref2$mode","mode","setEditor","performInteraction","downloadTable","_ref2$newDataNotifier","newDataNotifier","_ref2$setHasChanged","setHasChanged","_ref2$isModeChangeFro","isModeChangeFromToggle","_ref2$isTemplateView","isTemplateView","externalCurrentPageId","currentPageId","externalOnPageChange","onPageChange","onRequestPageData","pageContext","normalizedJson","effectiveCurrentPageId","editorRef","editorInstance","pageDataCache","currentPageIdRef","isStreamingRef","modeRef","isSystemUpdateRef","lastJsonRef","isEditorAliveRef","onRequestPageDataRef","_useState","isTransitioning","setIsTransitioning","current","notificationHandler","compId","_props$newProps","newProps","_props$newAttributes","newAttributes","pageId","timestamp","Date","now","filteredProps","keys","key","name","parsedNewProps","isActionsComponent","hasValidActionsData","_model$components$at","isAlreadyExpanded","at","currentAttrs","hasRealValue","shouldStopLoading","view","render","handleNavigateToPage","targetPageId","navigateToPage","downloadTableWrapper","_x2","_downloadTableWrapper","_callee4","updatedJson","_callee4$","_context4","performInteractionWrapper","_x3","_performInteractionWrapper","_callee5","payload","apiResponse","componentUpdates","_callee5$","_context5","affectedComponents","_ref8","errorMessage","Error","message","finish","destroy","currentMode","init","container","height","plugins","storageManager","richTextEditor","customBadgeLabel","tagName","injectionAttempts","injectStylesEarly","_editor$Canvas","iframeDoc","head","querySelector","createElement","fullCss","innerHTML","setAttribute","appendChild","requestAnimationFrame","checkDirty","_checkDirty","_callee2","stored","newJson","_callee2$","_context2","JSON","stringify","debouncedCheckDirty","timeout","clearTimeout","setTimeout","evt","on","includes","_callee","canvasHead","storeResult","_callee$","_context","_ref4","DomComponents","getType","addType","defaults","cleanup","_json$pages","_currentPage$frames","_editorInstance$curre3","pageNormalizedJson","currentPage","frames","raw","processed","_editorInstance$curre","setComponents","_editorInstance$curre2","domComponents","_domComponents$getWra","allComponents","findType","_comp$view","globalStyles","styles","pageStyles","mergedStyles","cssText","setStyle","isMultiPage","Boolean","dataQueries","queries","cachedData","_ref5","updatedAttributes","cacheCheckInterval","setInterval","appliedAny","_ref6","clearInterval","_callee3","_callee3$","_context3","shadcnComponents","currentIsStreaming","prevIsStreaming","Fragment","children","ref","opacity","transition","GrapejsCanvas","_pages$2","existingContext","initialPageId"],"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 { TypesToRegister } from './constants';\nimport { toKebabCase } from './helpers';\nimport { tailwindCompiledCss } from './helpers/css';\nimport { datePickerCss } from './helpers/date-picker';\nimport {\n extractPageMetadata,\n getCurrentPage,\n mergeStyles,\n normalizeMultiPageJson,\n} from './helpers/page-utils';\nimport { createGrapesjsShadcnGenericPlugin } from './plugins/grapejs-plugin';\nimport { StyledEditor } from './index.styles';\nimport type { PageAwareProps } from './types/page';\nimport { PageProvider, usePageContext } from './contexts/PageContext';\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 downloadTable?: (data: { tableId: string; title: string; limit: number; json: any; headerMapper?: Record<string, string> }) => Promise<void>;\n newDataNotifier: (notifHandler: NotificationHandler) => void;\n setHasChanged: (hasChanged: boolean) => void;\n isStreaming: boolean;\n isModeChangeFromToggle?: boolean;\n isTemplateView?: boolean;\n} & PageAwareProps;\n\nfunction isEditorCanvasReady(editor: Editor): boolean {\n try {\n const canvas = editor.Canvas;\n\n if (!canvas) {\n return false;\n }\n\n const canvasDoc = canvas.getDocument?.();\n\n if (!canvasDoc) {\n return false;\n }\n\n const canvasBody = canvasDoc.body;\n\n if (!canvasBody) {\n return false;\n }\n\n return true;\n } catch {\n return false;\n }\n}\n\nasync function safeStoreEditor(editor: Editor): Promise<any | null> {\n try {\n const wrapper = editor.getWrapper();\n\n if (!wrapper) {\n return null;\n }\n\n const pages = editor.Pages?.getAll?.() || [];\n\n if (pages.length === 0) {\n return null;\n }\n\n return await editor.store();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn('Error during store operation:', error);\n\n return null;\n }\n}\n\nfunction setComponentProperties(editor: Editor, isPreview: boolean, isStreaming: boolean): void {\n if (!editor) {\n return;\n }\n\n function setPropertiesRecursively(comp: Component) {\n if (!comp) {\n return;\n }\n\n const isMutable = !isPreview && !isStreaming;\n\n comp.set({\n editable: isMutable,\n draggable: isMutable,\n droppable: isMutable && comp.getName() !== 'Shadcn-generic',\n selectable: isMutable,\n hoverable: isMutable,\n highlightable: isMutable,\n copyable: false,\n resizable: false,\n removable: isMutable,\n badgable: false,\n });\n\n comp.set('attributes', {\n ...(comp.get('attributes') || {}),\n isEditable: isMutable,\n });\n\n if (isMutable) {\n comp.set('toolbar', [\n { attributes: { class: 'fa fa-arrows' }, command: 'tlb-move' },\n { attributes: { class: 'fa fa-trash' }, command: 'tlb-delete' },\n ]);\n } else {\n comp.set('toolbar', []);\n }\n\n comp.components().forEach(setPropertiesRecursively);\n }\n\n const wrapper = editor.getWrapper();\n const components = wrapper?.find('*') || [];\n\n components.forEach(setPropertiesRecursively);\n\n if (isEditorCanvasReady(editor)) {\n if (isPreview) {\n editor.runCommand('core:preview');\n } else {\n editor.stopCommand('core:preview');\n }\n }\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 resetStreamingComponent(comp: Component): void {\n const attrs = comp.get('attributes') || {};\n const props = comp.get('componentProps') || {};\n\n const cleanedProps = { ...props };\n\n delete cleanedProps.bodyContent;\n delete cleanedProps.data;\n delete cleanedProps.rows;\n delete cleanedProps.series;\n delete cleanedProps.pagination;\n delete cleanedProps.error;\n delete cleanedProps.isMissing;\n\n comp.set({\n attributes: {\n ...attrs,\n loading: true,\n error: undefined,\n isMissing: undefined,\n },\n componentProps: cleanedProps,\n });\n}\n\nfunction GrapejsCanvasInternal({\n json,\n mode = 'preview',\n setEditor,\n performInteraction,\n downloadTable,\n newDataNotifier = () => {\n // no op\n },\n setHasChanged = () => {\n // no op\n },\n isStreaming,\n isModeChangeFromToggle = false,\n isTemplateView = false,\n currentPageId: externalCurrentPageId,\n onPageChange: externalOnPageChange, // eslint-disable-line @typescript-eslint/no-unused-vars\n onRequestPageData,\n}: GrapesjsCanvasProps) {\n const pageContext = usePageContext();\n\n const normalizedJson = normalizeMultiPageJson(json);\n const pages = normalizedJson.pages.map(extractPageMetadata);\n const effectiveCurrentPageId =\n externalCurrentPageId || pageContext?.currentPageId || pages[0]?.id || '';\n\n const editorRef = useRef<HTMLDivElement>(null);\n const editorInstance = useRef<Editor | null>(null);\n const renderedComponents = useRef<Record<string, Component>>({});\n const pageDataCache = useRef<Record<string, Record<string, any>>>({});\n const currentPageIdRef = useRef<string>(effectiveCurrentPageId);\n const isStreamingRef = useRef(isStreaming ?? false);\n const modeRef = useRef(mode);\n const isSystemUpdateRef = useRef(false);\n const lastJsonRef = useRef<string>('');\n const isEditorAliveRef = useRef(false);\n const onRequestPageDataRef = useRef(onRequestPageData);\n const [isTransitioning, setIsTransitioning] = useState(false);\n\n useEffect(() => {\n currentPageIdRef.current = effectiveCurrentPageId;\n }, [effectiveCurrentPageId]);\n\n useEffect(() => {\n isStreamingRef.current = isStreaming ?? false;\n }, [isStreaming ?? false]);\n\n useEffect(() => {\n modeRef.current = mode;\n }, [mode]);\n\n useEffect(() => {\n onRequestPageDataRef.current = onRequestPageData;\n }, [onRequestPageData]);\n\n function notificationHandler(\n props: Parameters<NotificationHandler>[0],\n ): ReturnType<NotificationHandler> {\n if (!props) {\n return true;\n }\n\n const { componentId: compId, newProps = {}, newAttributes = {} } = props;\n\n const model = renderedComponents.current[compId];\n\n if (!model) {\n const pageId = currentPageIdRef.current;\n\n if (pageId) {\n if (!pageDataCache.current[pageId]) {\n pageDataCache.current[pageId] = {};\n }\n\n pageDataCache.current[pageId][compId] = {\n newProps,\n newAttributes,\n timestamp: Date.now(),\n };\n }\n\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 && editorInstance.current && isEditorAliveRef.current) {\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 const currentAttrs = model.get('attributes') || {};\n\n const hasRealValue =\n (parsedNewProps?.bodyContent !== undefined && parsedNewProps?.bodyContent !== null) ||\n (parsedNewProps?.data !== undefined && parsedNewProps?.data !== null) ||\n (parsedNewProps?.rows !== undefined && parsedNewProps?.rows !== null) ||\n (parsedNewProps?.series !== undefined && parsedNewProps?.series !== null);\n\n const shouldStopLoading = hasRealValue || newAttributes?.error || parsedNewProps?.isMissing;\n\n model.set('attributes', {\n ...currentAttrs,\n ...newAttributes,\n ...(shouldStopLoading ? { loading: false } : {}),\n });\n\n if (model.view) {\n model.view.render();\n }\n\n return true;\n }\n\n useEffect(() => {\n newDataNotifier(notificationHandler);\n }, []);\n\n function handleNavigateToPage(targetPageId: string) {\n if (externalOnPageChange) {\n externalOnPageChange(targetPageId);\n }\n\n if (pageContext) {\n pageContext.navigateToPage(targetPageId);\n }\n }\n\n async function downloadTableWrapper(data: { tableId: string; title: string; limit: number; headerMapper?: Record<string, string> }) {\n if (!downloadTable) return;\n let updatedJson = null;\n if (editorInstance.current) {\n updatedJson = await safeStoreEditor(editorInstance.current);\n }\n await downloadTable({ ...data, json: updatedJson });\n }\n\n async function performInteractionWrapper(payload: Record<string, any>) {\n let updatedJson = null;\n\n if (editorInstance.current) {\n updatedJson = await safeStoreEditor(editorInstance.current);\n }\n\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 = modeRef.current;\n\n const editor = grapesjs.init({\n container: editorRef.current,\n height: '100%',\n plugins: [\n tailwind,\n createGrapesjsShadcnGenericPlugin(\n modeRef,\n performInteractionWrapper,\n renderedComponents.current,\n setHasChanged,\n isTemplateView,\n isStreamingRef,\n handleNavigateToPage,\n downloadTableWrapper,\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 stored = await safeStoreEditor(editorInstance.current);\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 const storeResult = await safeStoreEditor(editor);\n\n if (storeResult) {\n lastJsonRef.current = JSON.stringify(storeResult);\n }\n\n isSystemUpdateRef.current = false;\n\n setComponentProperties(editor, currentMode === 'preview', isStreamingRef.current);\n });\n\n editorInstance.current = editor;\n\n if (setEditor) {\n setEditor(editor);\n }\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 return function cleanup() {\n editor.destroy();\n isEditorAliveRef.current = false;\n };\n }, []);\n\n useEffect(() => {\n if (json && json.pages?.length > 0) {\n if (!isEditorAliveRef.current || !editorInstance.current) {\n return;\n }\n\n const pageNormalizedJson = normalizeMultiPageJson(json);\n\n const currentPage = getCurrentPage(pageNormalizedJson.pages, effectiveCurrentPageId);\n\n if (!currentPage || !currentPage.frames?.length) {\n return;\n }\n\n isSystemUpdateRef.current = true;\n const raw = currentPage.frames[0].component;\n const processed = expandActions(raw);\n\n try {\n editorInstance.current?.setComponents(processed);\n\n setTimeout(() => {\n if (editorInstance.current && isEditorAliveRef.current) {\n const domComponents = editorInstance.current?.DomComponents;\n\n if (domComponents) {\n const allComponents = domComponents?.getWrapper()?.findType('shadcn-generic');\n allComponents?.forEach((comp: any) => {\n if (comp.get('componentName') === 'Tabs') {\n comp.view?.render();\n }\n });\n }\n }\n }, 100);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error during component restoration:', error);\n }\n\n const globalStyles = pageNormalizedJson.styles || [];\n const pageStyles = currentPage.styles || [];\n const mergedStyles = mergeStyles(globalStyles, pageStyles);\n const cssText = convertStyles(mergedStyles);\n editorInstance.current?.setStyle(cssText);\n\n if (onRequestPageDataRef.current) {\n const isMultiPage = Boolean(currentPage.dataQueries);\n const pageId = isMultiPage ? currentPage.id : '';\n const queries = currentPage.dataQueries || [];\n onRequestPageDataRef.current(pageId, queries);\n }\n\n if (editorInstance.current) {\n setComponentProperties(editorInstance.current, mode === 'preview', isStreaming);\n\n setTimeout(() => {\n if (editorInstance.current && isEditorAliveRef.current && mode === 'preview') {\n setComponentProperties(editorInstance.current, true, isStreaming);\n }\n }, 50);\n }\n\n setTimeout(() => {\n if (currentPage && pageDataCache.current[currentPage.id]) {\n const cachedData = pageDataCache.current[currentPage.id];\n\n Object.entries(cachedData).forEach(([componentId, data]) => {\n const model = renderedComponents.current[componentId];\n\n if (model && data) {\n if (data.newProps) {\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...data.newProps,\n });\n }\n\n const updatedAttributes = {\n ...model.get('attributes'),\n ...(data.newAttributes || {}),\n };\n\n model.set('attributes', updatedAttributes);\n\n if (model.view) {\n model.view.render();\n }\n }\n });\n\n delete pageDataCache.current[currentPage.id];\n }\n }, 150);\n\n const cacheCheckInterval = setInterval(() => {\n if (!currentPage || !pageDataCache.current[currentPage.id]) {\n return;\n }\n\n const cachedData = pageDataCache.current[currentPage.id];\n let appliedAny = false;\n\n Object.entries(cachedData).forEach(([componentId, data]) => {\n const model = renderedComponents.current[componentId];\n\n if (model && data) {\n if (data.newProps) {\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...data.newProps,\n });\n }\n\n const updatedAttributes = {\n ...model.get('attributes'),\n ...(data.newAttributes || {}),\n };\n\n model.set('attributes', updatedAttributes);\n\n if (model.view) {\n model.view.render();\n }\n\n appliedAny = true;\n }\n });\n\n if (appliedAny) {\n Object.keys(cachedData).forEach((componentId) => {\n if (renderedComponents.current[componentId]) {\n delete cachedData[componentId];\n }\n });\n\n if (Object.keys(cachedData).length === 0) {\n delete pageDataCache.current[currentPage.id];\n }\n }\n }, 100);\n\n setTimeout(() => {\n clearInterval(cacheCheckInterval);\n }, 5000);\n\n setTimeout(async () => {\n if (editorInstance.current && isEditorAliveRef.current) {\n const storeResult = await safeStoreEditor(editorInstance.current);\n\n if (storeResult) {\n lastJsonRef.current = JSON.stringify(storeResult);\n }\n\n isSystemUpdateRef.current = false;\n }\n }, 100);\n }\n }, [json, effectiveCurrentPageId]);\n\n useEffect(() => {\n const editor = editorInstance.current;\n\n if (!editor || !isEditorAliveRef.current) {\n return;\n }\n\n if (isModeChangeFromToggle) {\n setIsTransitioning(true);\n }\n\n setComponentProperties(\n editorInstance.current as Editor,\n mode === 'preview',\n isStreaming ?? false,\n );\n\n const wrapper = editor.getWrapper();\n const shadcnComponents = wrapper?.find('[data-gjs-type=\"shadcn-generic\"]') || [];\n\n shadcnComponents.forEach((comp: Component) => {\n if (comp.view && typeof comp.view.render === 'function') {\n comp.view.render();\n }\n });\n\n if (isModeChangeFromToggle) {\n requestAnimationFrame(() => {\n setIsTransitioning(false);\n });\n }\n }, [mode, isStreaming ?? false]);\n\n useEffect(() => {\n const editor = editorInstance.current;\n const currentIsStreaming = isStreaming ?? false;\n const prevIsStreaming = isStreamingRef.current;\n\n if (editor && isEditorAliveRef.current && currentIsStreaming && !prevIsStreaming) {\n const wrapper = editor.getWrapper();\n const shadcnComponents = wrapper?.findType('shadcn-generic') || [];\n\n shadcnComponents.forEach((comp: Component) => {\n resetStreamingComponent(comp);\n });\n }\n\n isStreamingRef.current = currentIsStreaming;\n }, [isStreaming]);\n\n return (\n <React.Fragment>\n <StyledEditor />\n <div\n ref={editorRef}\n id=\"grapesjs-editor\"\n style={{\n opacity: isTransitioning ? 0 : 1,\n transition: 'opacity 0.15s ease-in-out',\n }}\n />\n </React.Fragment>\n );\n}\n\nfunction GrapejsCanvas(props: GrapesjsCanvasProps) {\n const existingContext = usePageContext();\n\n if (existingContext) {\n return <GrapejsCanvasInternal {...props} />;\n }\n\n const normalizedJson = normalizeMultiPageJson(props.json);\n const pages = normalizedJson.pages.map(extractPageMetadata);\n const initialPageId = props.currentPageId || pages[0]?.id || '';\n\n return (\n <PageProvider pages={pages} initialPageId={initialPageId} onPageChange={props.onPageChange}>\n <GrapejsCanvasInternal {...props} />\n </PageProvider>\n );\n}\n\nexport default GrapejsCanvas;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -11,7 +11,7 @@ export declare function usePageContext(): PageContextType | null;
|
|
|
11
11
|
export declare function useRequiredPageContext(): PageContextType;
|
|
12
12
|
export declare function useCurrentPage(): PageMetadata | undefined;
|
|
13
13
|
export declare function usePageNavigation(): {
|
|
14
|
-
navigateToPage: (pageId: string
|
|
14
|
+
navigateToPage: (pageId: string) => void;
|
|
15
15
|
navigateToNextPage: () => void;
|
|
16
16
|
navigateToPreviousPage: () => void;
|
|
17
17
|
canNavigateNext: boolean;
|
package/contexts/PageContext.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */import React,{createContext,useCallback,useContext,useMemo,useState}from"react";import{jsx as _jsx}from"react/jsx-runtime";var PageContext=/*#__PURE__*/createContext(null);export function PageProvider(_ref){var children=_ref.children,pages=_ref.pages,initialPageId=_ref.initialPageId,onPageChange=_ref.onPageChange;var _useState=useState(initialPageId||(pages.length>0?pages[0].id:"")),currentPageId=_useState[0],setCurrentPageId=_useState[1];var _useState2=useState(false),isTransitioning=_useState2[0],setIsTransitioning=_useState2[1];var _useState3=useState({}),pageDataCache=_useState3[0],setPageDataCache=_useState3[1];var
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */import React,{createContext,useCallback,useContext,useMemo,useState}from"react";import{jsx as _jsx}from"react/jsx-runtime";var PageContext=/*#__PURE__*/createContext(null);export function PageProvider(_ref){var children=_ref.children,pages=_ref.pages,initialPageId=_ref.initialPageId,onPageChange=_ref.onPageChange;var _useState=useState(initialPageId||(pages.length>0?pages[0].id:"")),currentPageId=_useState[0],setCurrentPageId=_useState[1];var _useState2=useState(false),isTransitioning=_useState2[0],setIsTransitioning=_useState2[1];var _useState3=useState({}),pageDataCache=_useState3[0],setPageDataCache=_useState3[1];var navigateToPage=useCallback(function(pageId){var targetPage=pages.find(function(p){return p.id===pageId});if(!targetPage){return}if(pageId===currentPageId){return}setIsTransitioning(true);setCurrentPageId(pageId);if(onPageChange){onPageChange(pageId)}setTimeout(function(){setIsTransitioning(false)},300)},[currentPageId,pages,onPageChange]);var contextValue=useMemo(function(){return{currentPageId:currentPageId,pages:pages,navigateToPage:navigateToPage,isTransitioning:isTransitioning,pageDataCache:pageDataCache,setPageDataCache:setPageDataCache}},[currentPageId,pages,navigateToPage,isTransitioning,pageDataCache]);return/*#__PURE__*/_jsx(PageContext.Provider,{value:contextValue,children:children})}export function usePageContext(){return useContext(PageContext)}export function useRequiredPageContext(){var context=useContext(PageContext);if(!context){throw new Error("useRequiredPageContext must be used within a PageProvider")}return context}export function useCurrentPage(){var context=usePageContext();if(!context){return undefined}return context.pages.find(function(p){return p.id===context.currentPageId})}export function usePageNavigation(){var context=useRequiredPageContext();var navigateToNextPage=useCallback(function(){var currentIndex=context.pages.findIndex(function(p){return p.id===context.currentPageId});if(currentIndex<context.pages.length-1){context.navigateToPage(context.pages[currentIndex+1].id)}},[context]);var navigateToPreviousPage=useCallback(function(){var currentIndex=context.pages.findIndex(function(p){return p.id===context.currentPageId});if(currentIndex>0){context.navigateToPage(context.pages[currentIndex-1].id)}},[context]);var canNavigateNext=useMemo(function(){var currentIndex=context.pages.findIndex(function(p){return p.id===context.currentPageId});return currentIndex<context.pages.length-1},[context.pages,context.currentPageId]);var canNavigatePrevious=useMemo(function(){var currentIndex=context.pages.findIndex(function(p){return p.id===context.currentPageId});return currentIndex>0},[context.pages,context.currentPageId]);return{navigateToPage:context.navigateToPage,navigateToNextPage:navigateToNextPage,navigateToPreviousPage:navigateToPreviousPage,canNavigateNext:canNavigateNext,canNavigatePrevious:canNavigatePrevious,currentPageId:context.currentPageId,pages:context.pages}}
|
|
2
2
|
//# sourceMappingURL=PageContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageContext.js","names":["React","createContext","useCallback","useContext","useMemo","useState","jsx","_jsx","PageContext","PageProvider","_ref","children","pages","initialPageId","onPageChange","_useState","length","id","currentPageId","setCurrentPageId","_useState2","isTransitioning","setIsTransitioning","_useState3","pageDataCache","setPageDataCache","
|
|
1
|
+
{"version":3,"file":"PageContext.js","names":["React","createContext","useCallback","useContext","useMemo","useState","jsx","_jsx","PageContext","PageProvider","_ref","children","pages","initialPageId","onPageChange","_useState","length","id","currentPageId","setCurrentPageId","_useState2","isTransitioning","setIsTransitioning","_useState3","pageDataCache","setPageDataCache","navigateToPage","pageId","targetPage","find","p","setTimeout","contextValue","Provider","value","usePageContext","useRequiredPageContext","context","Error","useCurrentPage","undefined","usePageNavigation","navigateToNextPage","currentIndex","findIndex","navigateToPreviousPage","canNavigateNext","canNavigatePrevious"],"sources":["../../src/contexts/PageContext.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { createContext, useCallback, useContext, useMemo, useState } from 'react';\n\nimport type { PageContext as PageContextType, PageMetadata } from '../types/page';\n\nconst PageContext = createContext<PageContextType | null>(null);\n\ntype PageProviderProps = {\n children: React.ReactNode;\n initialPageId?: string;\n onPageChange?: (pageId: string) => void;\n pages: PageMetadata[];\n};\n\nexport function PageProvider({\n children,\n pages,\n initialPageId,\n onPageChange,\n}: PageProviderProps): React.JSX.Element {\n const [currentPageId, setCurrentPageId] = useState<string>(\n initialPageId || (pages.length > 0 ? pages[0].id : ''),\n );\n const [isTransitioning, setIsTransitioning] = useState(false);\n const [pageDataCache, setPageDataCache] = useState<Record<string, Record<string, any>>>({});\n\n const navigateToPage = useCallback(\n (pageId: string) => {\n const targetPage = pages.find((p) => p.id === pageId);\n\n if (!targetPage) {\n return;\n }\n\n if (pageId === currentPageId) {\n return;\n }\n\n setIsTransitioning(true);\n\n setCurrentPageId(pageId);\n\n if (onPageChange) {\n onPageChange(pageId);\n }\n\n setTimeout(() => {\n setIsTransitioning(false);\n }, 300);\n },\n [currentPageId, pages, onPageChange],\n );\n\n const contextValue = useMemo(\n () => ({\n currentPageId,\n pages,\n navigateToPage,\n isTransitioning,\n pageDataCache,\n setPageDataCache,\n }),\n [currentPageId, pages, navigateToPage, isTransitioning, pageDataCache],\n );\n\n return <PageContext.Provider value={contextValue}>{children}</PageContext.Provider>;\n}\n\nexport function usePageContext(): PageContextType | null {\n return useContext(PageContext);\n}\n\nexport function useRequiredPageContext(): PageContextType {\n const context = useContext(PageContext);\n\n if (!context) {\n throw new Error('useRequiredPageContext must be used within a PageProvider');\n }\n\n return context;\n}\n\nexport function useCurrentPage(): PageMetadata | undefined {\n const context = usePageContext();\n\n if (!context) {\n return undefined;\n }\n\n return context.pages.find((p) => p.id === context.currentPageId);\n}\n\nexport function usePageNavigation() {\n const context = useRequiredPageContext();\n\n const navigateToNextPage = useCallback(() => {\n const currentIndex = context.pages.findIndex((p) => p.id === context.currentPageId);\n\n if (currentIndex < context.pages.length - 1) {\n context.navigateToPage(context.pages[currentIndex + 1].id);\n }\n }, [context]);\n\n const navigateToPreviousPage = useCallback(() => {\n const currentIndex = context.pages.findIndex((p) => p.id === context.currentPageId);\n\n if (currentIndex > 0) {\n context.navigateToPage(context.pages[currentIndex - 1].id);\n }\n }, [context]);\n\n const canNavigateNext = useMemo(() => {\n const currentIndex = context.pages.findIndex((p) => p.id === context.currentPageId);\n\n return currentIndex < context.pages.length - 1;\n }, [context.pages, context.currentPageId]);\n\n const canNavigatePrevious = useMemo(() => {\n const currentIndex = context.pages.findIndex((p) => p.id === context.currentPageId);\n\n return currentIndex > 0;\n }, [context.pages, context.currentPageId]);\n\n return {\n navigateToPage: context.navigateToPage,\n navigateToNextPage,\n navigateToPreviousPage,\n canNavigateNext,\n canNavigatePrevious,\n currentPageId: context.currentPageId,\n pages: context.pages,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
package/helpers/page-utils.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { Page, PageStyle } from '../types/page';
|
|
|
2
2
|
export declare function mergeStyles(globalStyles: PageStyle[], pageStyles?: PageStyle[]): PageStyle[];
|
|
3
3
|
export declare function getCurrentPage(pages: Page[], currentPageId?: string): Page | null;
|
|
4
4
|
export declare function extractPageMetadata(page: Page): {
|
|
5
|
+
dataQueries?: string[];
|
|
5
6
|
id: string;
|
|
6
7
|
name: string;
|
|
7
8
|
order: number;
|
package/helpers/page-utils.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _extends from"@babel/runtime/helpers/extends";/* eslint-disable @typescript-eslint/no-explicit-any */export function mergeStyles(globalStyles,pageStyles){if(pageStyles===void 0){pageStyles=[]}if(!pageStyles||pageStyles.length===0){return globalStyles}var merged=[].concat(globalStyles);var selectorMap=new Map;globalStyles.forEach(function(styleObj,index){var key=styleObj.selectors.sort().join(",");selectorMap.set(key,index)});pageStyles.forEach(function(pageStyleObj){var key=pageStyleObj.selectors.sort().join(",");var existingIndex=selectorMap.get(key);if(existingIndex!==undefined){merged[existingIndex]=_extends({},merged[existingIndex],{style:_extends({},merged[existingIndex].style,pageStyleObj.style)})}else{merged.push(pageStyleObj)}});return merged}export function getCurrentPage(pages,currentPageId){if(!pages||pages.length===0){return null}if(!currentPageId){return pages[0]}return pages.find(function(p){return p.id===currentPageId})||pages[0]}export function extractPageMetadata(page){return{id:page.id||"page-"+(page.order||1),name:page.name||"Page "+(page.order||1),order:page.order||1}}export function validateMultiPageJson(json){var errors=[];if(!json){errors.push("JSON is null or undefined");return{errors:errors,valid:false}}if(!Array.isArray(json.pages)){errors.push("JSON must have a \"pages\" array");return{errors:errors,valid:false}}if(json.pages.length===0){errors.push("JSON must have at least one page");return{errors:errors,valid:false}}json.pages.forEach(function(page,index){if(!page.frames||!Array.isArray(page.frames)||page.frames.length===0){errors.push("Page at index "+index+" must have at least one frame")}});return{errors:errors,valid:errors.length===0}}export function normalizeMultiPageJson(json){if(!json||!json.pages||!Array.isArray(json.pages)){return json}var normalizedPages=json.pages.map(function(page,index){return _extends({},page,{id:page.id||"page-"+(index+1),name:page.name||"Page "+(index+1),order:page.order!==undefined?page.order:index+1})});return _extends({},json,{pages:normalizedPages})}
|
|
1
|
+
import _extends from"@babel/runtime/helpers/extends";/* eslint-disable @typescript-eslint/no-explicit-any */export function mergeStyles(globalStyles,pageStyles){if(pageStyles===void 0){pageStyles=[]}if(!pageStyles||pageStyles.length===0){return globalStyles}var merged=[].concat(globalStyles);var selectorMap=new Map;globalStyles.forEach(function(styleObj,index){var key=styleObj.selectors.sort().join(",");selectorMap.set(key,index)});pageStyles.forEach(function(pageStyleObj){var key=pageStyleObj.selectors.sort().join(",");var existingIndex=selectorMap.get(key);if(existingIndex!==undefined){merged[existingIndex]=_extends({},merged[existingIndex],{style:_extends({},merged[existingIndex].style,pageStyleObj.style)})}else{merged.push(pageStyleObj)}});return merged}export function getCurrentPage(pages,currentPageId){if(!pages||pages.length===0){return null}if(!currentPageId){return pages[0]}return pages.find(function(p){return p.id===currentPageId})||pages[0]}export function extractPageMetadata(page){return{dataQueries:page.dataQueries,id:page.id||"page-"+(page.order||1),name:page.name||"Page "+(page.order||1),order:page.order||1}}export function validateMultiPageJson(json){var errors=[];if(!json){errors.push("JSON is null or undefined");return{errors:errors,valid:false}}if(!Array.isArray(json.pages)){errors.push("JSON must have a \"pages\" array");return{errors:errors,valid:false}}if(json.pages.length===0){errors.push("JSON must have at least one page");return{errors:errors,valid:false}}json.pages.forEach(function(page,index){if(!page.frames||!Array.isArray(page.frames)||page.frames.length===0){errors.push("Page at index "+index+" must have at least one frame")}});return{errors:errors,valid:errors.length===0}}export function normalizeMultiPageJson(json){if(!json||!json.pages||!Array.isArray(json.pages)){return json}var normalizedPages=json.pages.map(function(page,index){return _extends({},page,{id:page.id||"page-"+(index+1),name:page.name||"Page "+(index+1),order:page.order!==undefined?page.order:index+1})});return _extends({},json,{pages:normalizedPages})}
|
|
2
2
|
//# sourceMappingURL=page-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-utils.js","names":["mergeStyles","globalStyles","pageStyles","length","merged","concat","selectorMap","Map","forEach","styleObj","index","key","selectors","sort","join","set","pageStyleObj","existingIndex","get","undefined","_extends","style","push","getCurrentPage","pages","currentPageId","find","p","id","extractPageMetadata","page","order","name","validateMultiPageJson","json","errors","valid","Array","isArray","frames","normalizeMultiPageJson","normalizedPages","map"],"sources":["../../src/helpers/page-utils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Page, PageStyle } from '../types/page';\n\nexport function mergeStyles(globalStyles: PageStyle[], pageStyles: PageStyle[] = []): PageStyle[] {\n if (!pageStyles || pageStyles.length === 0) {\n return globalStyles;\n }\n\n const merged = [...globalStyles];\n const selectorMap = new Map<string, number>();\n\n globalStyles.forEach((styleObj, index) => {\n const key = styleObj.selectors.sort().join(',');\n\n selectorMap.set(key, index);\n });\n\n pageStyles.forEach((pageStyleObj) => {\n const key = pageStyleObj.selectors.sort().join(',');\n const existingIndex = selectorMap.get(key);\n\n if (existingIndex !== undefined) {\n merged[existingIndex] = {\n ...merged[existingIndex],\n style: {\n ...merged[existingIndex].style,\n ...pageStyleObj.style,\n },\n };\n } else {\n merged.push(pageStyleObj);\n }\n });\n\n return merged;\n}\n\nexport function getCurrentPage(pages: Page[], currentPageId?: string): Page | null {\n if (!pages || pages.length === 0) {\n return null;\n }\n\n if (!currentPageId) {\n return pages[0];\n }\n\n return pages.find((p) => p.id === currentPageId) || pages[0];\n}\n\nexport function extractPageMetadata(page: Page): {\n id: string;\n name: string;\n order: number;\n} {\n return {\n id: page.id || `page-${page.order || 1}`,\n name: page.name || `Page ${page.order || 1}`,\n order: page.order || 1,\n };\n}\n\nexport function validateMultiPageJson(json: any): { errors: string[]; valid: boolean } {\n const errors: string[] = [];\n\n if (!json) {\n errors.push('JSON is null or undefined');\n\n return { errors, valid: false };\n }\n\n if (!Array.isArray(json.pages)) {\n errors.push('JSON must have a \"pages\" array');\n\n return { errors, valid: false };\n }\n\n if (json.pages.length === 0) {\n errors.push('JSON must have at least one page');\n\n return { errors, valid: false };\n }\n\n json.pages.forEach((page: any, index: number) => {\n if (!page.frames || !Array.isArray(page.frames) || page.frames.length === 0) {\n errors.push(`Page at index ${index} must have at least one frame`);\n }\n });\n\n return { errors, valid: errors.length === 0 };\n}\n\nexport function normalizeMultiPageJson(json: any): any {\n if (!json || !json.pages || !Array.isArray(json.pages)) {\n return json;\n }\n\n const normalizedPages = json.pages.map((page: any, index: number) => ({\n ...page,\n id: page.id || `page-${index + 1}`,\n name: page.name || `Page ${index + 1}`,\n order: page.order !== undefined ? page.order : index + 1,\n }));\n\n return {\n ...json,\n pages: normalizedPages,\n };\n}\n"],"mappings":"qDAAA,uDAGA,MAAO,SAAS,CAAAA,WAAWA,CAACC,YAAyB,CAAEC,UAAuB,CAAoB,IAA3CA,UAAuB,WAAvBA,UAAuB,CAAG,EAAE,CACjF,GAAI,CAACA,UAAU,EAAIA,UAAU,CAACC,MAAM,GAAK,CAAC,CAAE,CAC1C,MAAO,CAAAF,YACT,CAEA,GAAM,CAAAG,MAAM,IAAAC,MAAA,CAAOJ,YAAY,CAAC,CAChC,GAAM,CAAAK,WAAW,CAAG,GAAI,CAAAC,GAAqB,CAE7CN,YAAY,CAACO,OAAO,CAAC,SAACC,QAAQ,CAAEC,KAAK,CAAK,CACxC,GAAM,CAAAC,GAAG,CAAGF,QAAQ,CAACG,SAAS,CAACC,IAAI,CAAC,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC,CAE/CR,WAAW,CAACS,GAAG,CAACJ,GAAG,CAAED,KAAK,CAC5B,CAAC,CAAC,CAEFR,UAAU,CAACM,OAAO,CAAC,SAACQ,YAAY,CAAK,CACnC,GAAM,CAAAL,GAAG,CAAGK,YAAY,CAACJ,SAAS,CAACC,IAAI,CAAC,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC,CACnD,GAAM,CAAAG,aAAa,CAAGX,WAAW,CAACY,GAAG,CAACP,GAAG,CAAC,CAE1C,GAAIM,aAAa,GAAKE,SAAS,CAAE,CAC/Bf,MAAM,CAACa,aAAa,CAAC,CAAAG,QAAA,IAChBhB,MAAM,CAACa,aAAa,CAAC,EACxBI,KAAK,CAAAD,QAAA,IACAhB,MAAM,CAACa,aAAa,CAAC,CAACI,KAAK,CAC3BL,YAAY,CAACK,KAAK,CACtB,EAEL,CAAC,IAAM,CACLjB,MAAM,CAACkB,IAAI,CAACN,YAAY,CAC1B,CACF,CAAC,CAAC,CAEF,MAAO,CAAAZ,MACT,CAEA,MAAO,SAAS,CAAAmB,cAAcA,CAACC,KAAa,CAAEC,aAAsB,CAAe,CACjF,GAAI,CAACD,KAAK,EAAIA,KAAK,CAACrB,MAAM,GAAK,CAAC,CAAE,CAChC,MAAO,KACT,CAEA,GAAI,CAACsB,aAAa,CAAE,CAClB,MAAO,CAAAD,KAAK,CAAC,CAAC,CAChB,CAEA,MAAO,CAAAA,KAAK,CAACE,IAAI,CAAC,SAACC,CAAC,QAAK,CAAAA,CAAC,CAACC,EAAE,GAAKH,aAAa,EAAC,EAAID,KAAK,CAAC,CAAC,CAC7D,CAEA,MAAO,SAAS,CAAAK,mBAAmBA,CAACC,IAAU,
|
|
1
|
+
{"version":3,"file":"page-utils.js","names":["mergeStyles","globalStyles","pageStyles","length","merged","concat","selectorMap","Map","forEach","styleObj","index","key","selectors","sort","join","set","pageStyleObj","existingIndex","get","undefined","_extends","style","push","getCurrentPage","pages","currentPageId","find","p","id","extractPageMetadata","page","dataQueries","order","name","validateMultiPageJson","json","errors","valid","Array","isArray","frames","normalizeMultiPageJson","normalizedPages","map"],"sources":["../../src/helpers/page-utils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Page, PageStyle } from '../types/page';\n\nexport function mergeStyles(globalStyles: PageStyle[], pageStyles: PageStyle[] = []): PageStyle[] {\n if (!pageStyles || pageStyles.length === 0) {\n return globalStyles;\n }\n\n const merged = [...globalStyles];\n const selectorMap = new Map<string, number>();\n\n globalStyles.forEach((styleObj, index) => {\n const key = styleObj.selectors.sort().join(',');\n\n selectorMap.set(key, index);\n });\n\n pageStyles.forEach((pageStyleObj) => {\n const key = pageStyleObj.selectors.sort().join(',');\n const existingIndex = selectorMap.get(key);\n\n if (existingIndex !== undefined) {\n merged[existingIndex] = {\n ...merged[existingIndex],\n style: {\n ...merged[existingIndex].style,\n ...pageStyleObj.style,\n },\n };\n } else {\n merged.push(pageStyleObj);\n }\n });\n\n return merged;\n}\n\nexport function getCurrentPage(pages: Page[], currentPageId?: string): Page | null {\n if (!pages || pages.length === 0) {\n return null;\n }\n\n if (!currentPageId) {\n return pages[0];\n }\n\n return pages.find((p) => p.id === currentPageId) || pages[0];\n}\n\nexport function extractPageMetadata(page: Page): {\n dataQueries?: string[];\n id: string;\n name: string;\n order: number;\n} {\n return {\n dataQueries: page.dataQueries,\n id: page.id || `page-${page.order || 1}`,\n name: page.name || `Page ${page.order || 1}`,\n order: page.order || 1,\n };\n}\n\nexport function validateMultiPageJson(json: any): { errors: string[]; valid: boolean } {\n const errors: string[] = [];\n\n if (!json) {\n errors.push('JSON is null or undefined');\n\n return { errors, valid: false };\n }\n\n if (!Array.isArray(json.pages)) {\n errors.push('JSON must have a \"pages\" array');\n\n return { errors, valid: false };\n }\n\n if (json.pages.length === 0) {\n errors.push('JSON must have at least one page');\n\n return { errors, valid: false };\n }\n\n json.pages.forEach((page: any, index: number) => {\n if (!page.frames || !Array.isArray(page.frames) || page.frames.length === 0) {\n errors.push(`Page at index ${index} must have at least one frame`);\n }\n });\n\n return { errors, valid: errors.length === 0 };\n}\n\nexport function normalizeMultiPageJson(json: any): any {\n if (!json || !json.pages || !Array.isArray(json.pages)) {\n return json;\n }\n\n const normalizedPages = json.pages.map((page: any, index: number) => ({\n ...page,\n id: page.id || `page-${index + 1}`,\n name: page.name || `Page ${index + 1}`,\n order: page.order !== undefined ? page.order : index + 1,\n }));\n\n return {\n ...json,\n pages: normalizedPages,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Editor, Component } from 'grapesjs';
|
|
3
|
-
export declare function createGrapesjsShadcnGenericPlugin(modeRef: React.MutableRefObject<'editor' | 'preview'>, performInteraction: (payload: Record<string, any>) => void, renderedComponents: Record<string, Component> | undefined, setHasChanged: (hasChanged: boolean) => void, isTemplateView: boolean | undefined, isStreamingRef: React.MutableRefObject<boolean>, navigateToPage?: (pageId: string
|
|
3
|
+
export declare function createGrapesjsShadcnGenericPlugin(modeRef: React.MutableRefObject<'editor' | 'preview'>, performInteraction: (payload: Record<string, any>) => void, renderedComponents: Record<string, Component> | undefined, setHasChanged: (hasChanged: boolean) => void, isTemplateView: boolean | undefined, isStreamingRef: React.MutableRefObject<boolean>, navigateToPage?: (pageId: string) => void, downloadTable?: (data: {
|
|
4
4
|
tableId: string;
|
|
5
5
|
title: string;
|
|
6
6
|
limit: number;
|