@peak-ai/canvas 1.4.20-rc.8 → 1.4.20-rc.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/GrapesjsCanvas.js +2 -3
  2. package/GrapesjsCanvas.js.map +1 -1
  3. package/declaration.d.js +2 -0
  4. package/declaration.d.js.map +1 -0
  5. package/package.json +1 -1
  6. package/plugins/grapejs-plugin.js +3 -3
  7. package/plugins/grapejs-plugin.js.map +1 -1
  8. package/plugins/helpers/custom-modal.js +1 -1
  9. package/plugins/helpers/custom-modal.js.map +1 -1
  10. package/plugins/helpers/query-cache-context.d.ts +18 -0
  11. package/plugins/helpers/query-cache-context.js +2 -0
  12. package/plugins/helpers/query-cache-context.js.map +1 -0
  13. package/plugins/helpers/query-cache-singleton.d.ts +22 -0
  14. package/plugins/helpers/query-cache-singleton.js +3 -0
  15. package/plugins/helpers/query-cache-singleton.js.map +1 -0
  16. package/plugins/helpers/query-cache-utils.d.ts +48 -0
  17. package/plugins/helpers/query-cache-utils.js +3 -0
  18. package/plugins/helpers/query-cache-utils.js.map +1 -0
  19. package/plugins/helpers/query-details-modal.d.ts +7 -2
  20. package/plugins/helpers/query-details-modal.js +3 -3
  21. package/plugins/helpers/query-details-modal.js.map +1 -1
  22. package/plugins/helpers/query-heading-formatter.d.ts +1 -0
  23. package/plugins/helpers/query-heading-formatter.js +5 -0
  24. package/plugins/helpers/query-heading-formatter.js.map +1 -0
  25. package/plugins/helpers/query-loading-modal.d.ts +2 -1
  26. package/plugins/helpers/query-loading-modal.js +1 -1
  27. package/plugins/helpers/query-loading-modal.js.map +1 -1
  28. package/plugins/helpers/render-components.js +3 -3
  29. package/plugins/helpers/render-components.js.map +1 -1
  30. package/plugins/helpers/styled-info-button.d.ts +2 -1
  31. package/plugins/helpers/styled-info-button.js +4 -1
  32. package/plugins/helpers/styled-info-button.js.map +1 -1
  33. package/shadcn/components/icons/thinking.gif +0 -0
  34. package/shadcn/components/ui/error-wrapper.js +1 -1
  35. package/shadcn/components/ui/error-wrapper.js.map +1 -1
  36. package/types/images.d.js +2 -0
  37. package/types/images.d.js.map +1 -0
package/GrapesjsCanvas.js CHANGED
@@ -1,8 +1,7 @@
1
1
  import _asyncToGenerator from"@babel/runtime/helpers/asyncToGenerator";import _extends from"@babel/runtime/helpers/extends";import _regeneratorRuntime from"@babel/runtime/regenerator";/* eslint-disable @typescript-eslint/no-explicit-any */import React,{useEffect,useRef}from"react";// eslint-disable-next-line import/no-named-as-default
2
- import grapesjs from"grapesjs";import"grapesjs/dist/css/grapes.min.css";import tailwind from"grapesjs-tailwind";import{TypesToRegister}from"./constants";import{toKebabCase}from"./helpers";import{createGrapesjsShadcnGenericPlugin}from"./plugins/grapejs-plugin";import{StyledEditor}from"./index.styles";import{tailwindCompiledCss}from"./helpers/css";import{datePickerCss}from"./helpers/date-picker";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";function setComponentProperties(editor,isPreview){function setPropertiesRecursively(comp){comp.set({editable:!isPreview,draggable:!isPreview,droppable:!isPreview&&comp.getName()!=="Shadcn-generic",selectable:!isPreview,hoverable:!isPreview,highlightable:!isPreview,copyable:false,resizable:false,removable:!isPreview,badgable:false});if(!isPreview){comp.set("toolbar",[{attributes:{"class":"fa fa-arrows"},command:"tlb-move"},{attributes:{"class":"fa fa-trash"},command:"tlb-delete"}])}comp.components().forEach(setPropertiesRecursively)}if(isPreview){editor.runCommand("core:preview")}else{editor.stopCommand("core:preview")}var wrapper=editor.getWrapper();wrapper==null||wrapper.find("*").forEach(setPropertiesRecursively)}function convertStyles(stylesArray){return stylesArray.map(function(block){var selectors=Array.isArray(block.selectors)?block.selectors.join(", "):block.selectors;var declarations=Object.entries(block.style).map(function(_ref){var prop=_ref[0],value=_ref[1];return toKebabCase(prop)+": "+value+";"}).join(" ");return selectors+" { "+declarations+" }"}).join("\n")}function createActionCardConfig(action,index){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,i),{id:node.id+"--action-card-"+i})})})}return node}if(Array.isArray(node.components)){return _extends({},node,{components:node.components.map(expandActions)})}return node}function setInteracting(renderedComponents,components,inProgress){components.forEach(function(component){var componentId=component.componentId,showLoader=component.showLoader;if(!showLoader){return}var gjsModel=renderedComponents[componentId];if(gjsModel){gjsModel.set("attributes",_extends({},gjsModel.get("attributes"),{interactionApiInProgress:inProgress}))}})}function expandActionsComponent(model,actions){model.components("");actions.forEach(function(action){model.append(createActionCardConfig(action))});model.set("type","div");model.addClass("dashboard-cards");model.set("componentName",undefined);model.set("componentProps",{})}function GrapesjsCanvas(_ref2){var json=_ref2.json,_ref2$mode=_ref2.mode,mode=_ref2$mode===void 0?"preview":_ref2$mode,setEditor=_ref2.setEditor,performInteraction=_ref2.performInteraction,_ref2$newDataNotifier=_ref2.newDataNotifier,newDataNotifier=_ref2$newDataNotifier===void 0?function(){// no op
2
+ import grapesjs from"grapesjs";import"grapesjs/dist/css/grapes.min.css";import tailwind from"grapesjs-tailwind";import{TypesToRegister}from"./constants";import{toKebabCase}from"./helpers";import{createGrapesjsShadcnGenericPlugin}from"./plugins/grapejs-plugin";import{StyledEditor}from"./index.styles";import{tailwindCompiledCss}from"./helpers/css";import{datePickerCss}from"./helpers/date-picker";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";function setComponentProperties(editor,isPreview){function setPropertiesRecursively(comp){comp.set({editable:!isPreview,draggable:!isPreview,droppable:!isPreview&&comp.getName()!=="Shadcn-generic",selectable:!isPreview,hoverable:!isPreview,highlightable:!isPreview,copyable:false,resizable:false,removable:!isPreview,badgable:false});if(!isPreview){comp.set("toolbar",[{attributes:{"class":"fa fa-arrows"},command:"tlb-move"},{attributes:{"class":"fa fa-trash"},command:"tlb-delete"}])}comp.components().forEach(setPropertiesRecursively)}if(isPreview){editor.runCommand("core:preview")}else{editor.stopCommand("core:preview")}var wrapper=editor.getWrapper();wrapper==null||wrapper.find("*").forEach(setPropertiesRecursively)}function convertStyles(stylesArray){return stylesArray.map(function(block){var selectors=Array.isArray(block.selectors)?block.selectors.join(", "):block.selectors;var declarations=Object.entries(block.style).map(function(_ref){var prop=_ref[0],value=_ref[1];return toKebabCase(prop)+": "+value+";"}).join(" ");return selectors+" { "+declarations+" }"}).join("\n")}function expandActions(node){var _node$componentProps;if(node.type==="shadcn-generic"&&node.componentName==="Actions"&&Array.isArray((_node$componentProps=node.componentProps)==null?void 0:_node$componentProps.actions)){var actions=node.componentProps.actions;return _extends({},node,{type:"div",classes:["dashboard-cards"].concat(node.classes||[]),componentName:undefined,componentProps:undefined,components:actions.map(function(action,i){var icon=action.icon,title=action.title,description=action.description;return{id:node.id+"--action-card-"+i,type:"shadcn-generic",componentName:"ActionCard",badgable:false,copyable:false,componentProps:{icon:icon,headerContent:title,bodyContent:description}}})})}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 GrapesjsCanvas(_ref2){var json=_ref2.json,_ref2$mode=_ref2.mode,mode=_ref2$mode===void 0?"preview":_ref2$mode,setEditor=_ref2.setEditor,performInteraction=_ref2.performInteraction,_ref2$newDataNotifier=_ref2.newDataNotifier,newDataNotifier=_ref2$newDataNotifier===void 0?function(){// no op
3
3
  }:_ref2$newDataNotifier,setHasChanged=_ref2.setHasChanged,isStreaming=_ref2.isStreaming;var editorRef=useRef(null);var editorInstance=useRef(null);var renderedComponents=useRef({});var isStreamingRef=useRef(isStreaming);var isSystemUpdateRef=useRef(false);var lastJsonRef=useRef("");var isEditorAliveRef=useRef(false);useEffect(function(){isStreamingRef.current=isStreaming},[isStreaming]);function notificationHandler(props){if(!props){return true}var componentId=props.componentId,_props$newProps=props.newProps,newProps=_props$newProps===void 0?{}:_props$newProps,_props$newAttributes=props.newAttributes,newAttributes=_props$newAttributes===void 0?{}:_props$newAttributes;var model=renderedComponents.current[componentId];if(!model){return false}// Filter out complex placeholder objects that shouldn't be stored in the model, done intentionally to keep grapejs out of errors
4
- var filteredProps=_extends({},newProps);Object.keys(filteredProps).forEach(function(key){var value=filteredProps[key];if(value&&typeof value==="object"&&value.name==="__peak_placeholder"){delete filteredProps[key]}});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
5
- var isActionsComponent=model.get("componentName")==="Actions";var hasValidActionsData=parsedNewProps.actions&&parsedNewProps.actions!==null&&Array.isArray(parsedNewProps.actions)&&parsedNewProps.actions.length>0;if(isActionsComponent&&hasValidActionsData){var _model$components$at;var isAlreadyExpanded=model.components().length>0&&((_model$components$at=model.components().at(0))==null?void 0:_model$components$at.get("componentName"))==="ActionCard";if(!isAlreadyExpanded){expandActionsComponent(model,parsedNewProps.actions);return true}}model.set("componentProps",_extends({},model.get("componentProps"),parsedNewProps));model.set("attributes",_extends({},model.get("attributes"),newAttributes));return true}useEffect(function(){newDataNotifier(notificationHandler)},[]);function performInteractionWrapper(_x){return _performInteractionWrapper.apply(this,arguments)}function _performInteractionWrapper(){_performInteractionWrapper=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(payload){var _editorInstance$curre;var updatedJson,apiResponse,componentUpdates;return _regeneratorRuntime.wrap(function _callee4$(_context4){while(1)switch(_context4.prev=_context4.next){case 0:_context4.next=2;return(_editorInstance$curre=editorInstance.current)==null?void 0:_editorInstance$curre.store();case 2:updatedJson=_context4.sent;setInteracting(renderedComponents.current,payload.affectedComponents,true);_context4.prev=4;_context4.next=7;return performInteraction(_extends({},payload,{json:updatedJson}));case 7:apiResponse=_context4.sent;componentUpdates=apiResponse||{};Object.entries(componentUpdates).forEach(function(_ref6){var key=_ref6[0],value=_ref6[1];var model=renderedComponents.current[key];if(model){model.set("attributes",_extends({},model.get("attributes"),{error:undefined}));model.set("componentProps",_extends({},model.get("componentProps"),value,{error:undefined,isMissing:undefined}))}});return _context4.abrupt("return",componentUpdates);case 13:_context4.prev=13;_context4.t0=_context4["catch"](4);payload.affectedComponents.forEach(function(componentId){var model=renderedComponents.current[componentId];if(model){var errorMessage=_context4.t0 instanceof Error?_context4.t0.message:"Something went wrong. Please try again.";model.set("attributes",_extends({},model.get("attributes"),{error:errorMessage}));model.set("componentProps",_extends({},model.get("componentProps"),{error:errorMessage,isMissing:undefined}))}});throw _context4.t0;case 17:_context4.prev=17;setInteracting(renderedComponents.current,payload.affectedComponents,false);return _context4.finish(17);case 20:case"end":return _context4.stop()}},_callee4,null,[[4,13,17,20]])}));return _performInteractionWrapper.apply(this,arguments)}useEffect(function(){var _json$pages,_json$pages$0$frames;if(!editorRef.current){return function(){// no op
4
+ var filteredProps=_extends({},newProps);Object.keys(filteredProps).forEach(function(key){var value=filteredProps[key];if(value&&typeof value==="object"&&value.name==="__peak_placeholder"){delete filteredProps[key]}});var parsedNewProps=_extends({},filteredProps);if(filteredProps.pagination){parsedNewProps.pagination=_extends({},model.get("componentProps").pagination||{},filteredProps.pagination)}model.set("componentProps",_extends({},model.get("componentProps"),parsedNewProps));model.set("attributes",_extends({},model.get("attributes"),newAttributes));return true}useEffect(function(){newDataNotifier(notificationHandler)},[]);function performInteractionWrapper(_x){return _performInteractionWrapper.apply(this,arguments)}function _performInteractionWrapper(){_performInteractionWrapper=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(payload){var _editorInstance$curre;var updatedJson,apiResponse,componentUpdates;return _regeneratorRuntime.wrap(function _callee4$(_context4){while(1)switch(_context4.prev=_context4.next){case 0:_context4.next=2;return(_editorInstance$curre=editorInstance.current)==null?void 0:_editorInstance$curre.store();case 2:updatedJson=_context4.sent;setInteracting(renderedComponents.current,payload.affectedComponents,true);_context4.prev=4;_context4.next=7;return performInteraction(_extends({},payload,{json:updatedJson}));case 7:apiResponse=_context4.sent;componentUpdates=apiResponse||{};Object.entries(componentUpdates).forEach(function(_ref6){var key=_ref6[0],value=_ref6[1];var model=renderedComponents.current[key];if(model){model.set("attributes",_extends({},model.get("attributes"),{error:undefined}));model.set("componentProps",_extends({},model.get("componentProps"),value,{error:undefined,isMissing:undefined}))}});return _context4.abrupt("return",componentUpdates);case 13:_context4.prev=13;_context4.t0=_context4["catch"](4);payload.affectedComponents.forEach(function(componentId){var model=renderedComponents.current[componentId];if(model){var errorMessage=_context4.t0 instanceof Error?_context4.t0.message:"Something went wrong. Please try again.";model.set("attributes",_extends({},model.get("attributes"),{error:errorMessage}));model.set("componentProps",_extends({},model.get("componentProps"),{error:errorMessage,isMissing:undefined}))}});throw _context4.t0;case 17:_context4.prev=17;setInteracting(renderedComponents.current,payload.affectedComponents,false);return _context4.finish(17);case 20:case"end":return _context4.stop()}},_callee4,null,[[4,13,17,20]])}));return _performInteractionWrapper.apply(this,arguments)}useEffect(function(){var _json$pages,_json$pages$0$frames;if(!editorRef.current){return function(){// no op
6
5
  }}if(editorInstance.current){editorInstance.current.destroy();editorInstance.current=null;isEditorAliveRef.current=false}var currentMode=mode;var editor=grapesjs.init({container:editorRef.current,height:"100%",plugins:[tailwind,createGrapesjsShadcnGenericPlugin(currentMode,performInteractionWrapper,renderedComponents.current,setHasChanged)],storageManager:{type:"none"},richTextEditor:{actions:["bold","italic","underline","strikethrough"]},canvas:{customBadgeLabel:function customBadgeLabel(component){var tagName=component.get("tagName");return tagName==="body"?"":tagName||""}}});isEditorAliveRef.current=true;function checkDirty(){return _checkDirty.apply(this,arguments)}function _checkDirty(){_checkDirty=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(){var stored,newJson;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:if(!(isStreamingRef.current||isSystemUpdateRef.current)){_context3.next=2;break}return _context3.abrupt("return");case 2:if(!(!isEditorAliveRef.current||!editorInstance.current)){_context3.next=4;break}return _context3.abrupt("return");case 4:stored=null;_context3.prev=5;_context3.next=8;return editorInstance.current.store();case 8:stored=_context3.sent;_context3.next=14;break;case 11:_context3.prev=11;_context3.t0=_context3["catch"](5);return _context3.abrupt("return");case 14:if(stored){_context3.next=16;break}return _context3.abrupt("return");case 16:newJson=JSON.stringify(stored);if(newJson!==lastJsonRef.current){setHasChanged(true);lastJsonRef.current=newJson}case 18:case"end":return _context3.stop()}},_callee3,null,[[5,11]])}));return _checkDirty.apply(this,arguments)}var debouncedCheckDirty=function(){var timeout=null;return function(){if(timeout){clearTimeout(timeout)}timeout=setTimeout(checkDirty,200)}}();["component:add","component:remove","component:update:content","style:update","component:drag:end","rte:change"].forEach(function(evt){return 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
7
6
  // So, adding them from here!
8
7
  editor.on("load",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(){var canvasHead,style,fullCss;return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:canvasHead=editor.Canvas.getDocument().head;style=document.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\n ";style.innerHTML=fullCss;style.setAttribute("type","text/css");canvasHead.appendChild(style);isSystemUpdateRef.current=true;setComponentProperties(editor,mode==="preview");_context.t0=JSON;_context.next=11;return editor.store();case 11:_context.t1=_context.sent;lastJsonRef.current=_context.t0.stringify.call(_context.t0,_context.t1);isSystemUpdateRef.current=false;case 14: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:{}})}});if(json&&((_json$pages=json.pages)==null?void 0:_json$pages.length)>0&&((_json$pages$0$frames=json.pages[0].frames)==null?void 0:_json$pages$0$frames.length)>0){isSystemUpdateRef.current=true;var raw=json.pages[0].frames[0].component;var processed=expandActions(raw);editor.setComponents(processed);var cssText=convertStyles(json.styles||[]);editor.setStyle(cssText);editor.on("load",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(){return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:_context2.t0=JSON;_context2.next=3;return editor.store();case 3:_context2.t1=_context2.sent;lastJsonRef.current=_context2.t0.stringify.call(_context2.t0,_context2.t1);isSystemUpdateRef.current=false;case 6:case"end":return _context2.stop()}},_callee2)})))}return function cleanup(){editor.destroy();isEditorAliveRef.current=false}},[json,mode]);return/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(StyledEditor,{}),/*#__PURE__*/_jsx("div",{ref:editorRef,id:"grapesjs-editor"})]})}export default GrapesjsCanvas;
@@ -1 +1 @@
1
- {"version":3,"file":"GrapesjsCanvas.js","names":["React","useEffect","useRef","grapesjs","tailwind","TypesToRegister","toKebabCase","createGrapesjsShadcnGenericPlugin","StyledEditor","tailwindCompiledCss","datePickerCss","jsx","_jsx","jsxs","_jsxs","setComponentProperties","editor","isPreview","setPropertiesRecursively","comp","set","editable","draggable","droppable","getName","selectable","hoverable","highlightable","copyable","resizable","removable","badgable","attributes","command","components","forEach","runCommand","stopCommand","wrapper","getWrapper","find","convertStyles","stylesArray","map","block","selectors","Array","isArray","join","declarations","Object","entries","style","_ref","prop","value","createActionCardConfig","action","index","icon","title","description","type","componentName","componentProps","headerContent","bodyContent","expandActions","node","_node$componentProps","actions","length","_extends","classes","concat","undefined","i","id","setInteracting","renderedComponents","inProgress","component","componentId","showLoader","gjsModel","get","interactionApiInProgress","expandActionsComponent","model","append","addClass","GrapesjsCanvas","_ref2","json","_ref2$mode","mode","setEditor","performInteraction","_ref2$newDataNotifier","newDataNotifier","setHasChanged","isStreaming","editorRef","editorInstance","isStreamingRef","isSystemUpdateRef","lastJsonRef","isEditorAliveRef","current","notificationHandler","props","_props$newProps","newProps","_props$newAttributes","newAttributes","filteredProps","keys","key","name","parsedNewProps","pagination","isActionsComponent","hasValidActionsData","_model$components$at","isAlreadyExpanded","at","performInteractionWrapper","_x","_performInteractionWrapper","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee4","payload","_editorInstance$curre","updatedJson","apiResponse","componentUpdates","wrap","_callee4$","_context4","prev","next","store","sent","affectedComponents","_ref6","error","isMissing","abrupt","t0","errorMessage","Error","message","finish","stop","_json$pages","_json$pages$0$frames","destroy","currentMode","init","container","height","plugins","storageManager","richTextEditor","canvas","customBadgeLabel","tagName","checkDirty","_checkDirty","_callee3","stored","newJson","_callee3$","_context3","JSON","stringify","debouncedCheckDirty","timeout","clearTimeout","setTimeout","evt","on","includes","_callee","canvasHead","fullCss","_callee$","_context","Canvas","getDocument","head","document","createElement","innerHTML","setAttribute","appendChild","t1","call","_ref4","DomComponents","getType","addType","defaults","view","pages","frames","raw","processed","setComponents","cssText","styles","setStyle","_callee2","_callee2$","_context2","cleanup","Fragment","children","ref"],"sources":["../src/GrapesjsCanvas.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useEffect, useRef } 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';\nimport { TypesToRegister } from './constants';\nimport { toKebabCase } from './helpers';\nimport { createGrapesjsShadcnGenericPlugin } from './plugins/grapejs-plugin';\nimport { StyledEditor } from './index.styles';\nimport { tailwindCompiledCss } from './helpers/css';\nimport { datePickerCss } from './helpers/date-picker';\n\ntype NotificationHandler = (newData: {\n componentId: string;\n newProps: Record<string, any>;\n newAttributes: Record<string, any>;\n}) => boolean;\n\ntype GrapesjsCanvasProps = {\n json: any;\n mode?: 'editor' | 'preview';\n setEditor: (editor: Editor) => void;\n performInteraction: (payload: Record<string, any>) => Promise<Record<string, any> | undefined>;\n newDataNotifier: (notifHandler: NotificationHandler) => void;\n setHasChanged: (hasChanged: boolean) => void;\n isStreaming: boolean;\n};\n\nfunction setComponentProperties(editor: Editor, isPreview: boolean) {\n function setPropertiesRecursively(comp: Component) {\n comp.set({\n editable: !isPreview,\n draggable: !isPreview,\n droppable: !isPreview && comp.getName() !== 'Shadcn-generic',\n selectable: !isPreview,\n hoverable: !isPreview,\n highlightable: !isPreview,\n copyable: false,\n resizable: false,\n removable: !isPreview,\n badgable: false,\n });\n\n if (!isPreview) {\n comp.set('toolbar', [\n { attributes: { class: 'fa fa-arrows' }, command: 'tlb-move' },\n { attributes: { class: 'fa fa-trash' }, command: 'tlb-delete' },\n ]);\n }\n\n comp.components().forEach(setPropertiesRecursively);\n }\n\n if (isPreview) {\n editor.runCommand('core:preview');\n } else {\n editor.stopCommand('core:preview');\n }\n\n const wrapper = editor.getWrapper();\n wrapper?.find('*').forEach(setPropertiesRecursively);\n}\n\nfunction convertStyles(stylesArray: any[]): string {\n return stylesArray\n .map((block) => {\n const selectors = Array.isArray(block.selectors)\n ? block.selectors.join(', ')\n : block.selectors;\n const declarations = Object.entries(block.style)\n .map(([prop, value]) => `${toKebabCase(prop)}: ${value};`)\n .join(' ');\n\n return `${selectors} { ${declarations} }`;\n })\n .join('\\n');\n}\n\nfunction createActionCardConfig(action: any, index?: number): 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 (\n node.type === 'shadcn-generic' &&\n node.componentName === 'Actions'\n ) {\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, i),\n id: `${node.id}--action-card-${i}`,\n })),\n };\n }\n\n return node;\n }\n\n if (Array.isArray(node.components)) {\n return {\n ...node,\n components: node.components.map(expandActions),\n };\n }\n\n return node;\n}\n\nfunction setInteracting(\n renderedComponents: Record<string, Component>,\n components: { componentId: string; showLoader: boolean }[],\n inProgress: boolean,\n) {\n components.forEach((component) => {\n const { componentId, showLoader } = component;\n\n if (!showLoader) {\n return;\n }\n\n const gjsModel = renderedComponents[componentId];\n\n if (gjsModel) {\n gjsModel.set('attributes', {\n ...gjsModel.get('attributes'),\n interactionApiInProgress: inProgress,\n });\n }\n });\n}\n\nfunction expandActionsComponent(model: Component, actions: any[]): void {\n model.components('');\n \n actions.forEach((action: any) => {\n model.append(createActionCardConfig(action));\n });\n\n model.set('type', 'div');\n model.addClass('dashboard-cards');\n model.set('componentName', undefined);\n model.set('componentProps', {});\n}\n\nfunction GrapesjsCanvas({\n json,\n mode = 'preview',\n setEditor,\n performInteraction,\n newDataNotifier = () => {\n // no op\n },\n setHasChanged,\n isStreaming,\n}: GrapesjsCanvasProps) {\n const editorRef = useRef<HTMLDivElement>(null);\n const editorInstance = useRef<Editor | null>(null);\n const renderedComponents = useRef<Record<string, Component>>({});\n const isStreamingRef = useRef(isStreaming);\n const isSystemUpdateRef = useRef(false);\n const lastJsonRef = useRef<string>('');\n const isEditorAliveRef = useRef(false);\n\n useEffect(() => {\n isStreamingRef.current = isStreaming;\n }, [isStreaming]);\n\n function notificationHandler(\n props: Parameters<NotificationHandler>[0],\n ): ReturnType<NotificationHandler> {\n if (!props) {\n return true;\n }\n\n const { componentId, newProps = {}, newAttributes = {} } = props;\n\n const model = renderedComponents.current[componentId];\n\n if (!model) {\n return false;\n }\n\n // Filter out complex placeholder objects that shouldn't be stored in the model, done intentionally to keep grapejs out of errors\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 delete filteredProps[key];\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 = parsedNewProps.actions && \n parsedNewProps.actions !== null && \n Array.isArray(parsedNewProps.actions) && \n parsedNewProps.actions.length > 0;\n \n if (isActionsComponent && hasValidActionsData) {\n const isAlreadyExpanded = model.components().length > 0 && \n model.components().at(0)?.get('componentName') === 'ActionCard';\n\n if (!isAlreadyExpanded) {\n expandActionsComponent(model, parsedNewProps.actions);\n\n return true;\n }\n }\n\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...parsedNewProps,\n });\n\n model.set('attributes', {\n ...model.get('attributes'),\n ...newAttributes,\n });\n\n return true;\n }\n\n useEffect(() => {\n newDataNotifier(notificationHandler);\n }, []);\n\n async function performInteractionWrapper(payload: Record<string, any>) {\n const updatedJson = await editorInstance.current?.store();\n setInteracting(renderedComponents.current, payload.affectedComponents, true);\n\n try {\n const apiResponse = await performInteraction({\n ...payload,\n json: updatedJson,\n });\n\n const componentUpdates = apiResponse || {};\n\n Object.entries(componentUpdates).forEach(([key, value]) => {\n const model = renderedComponents.current[key];\n\n if (model) {\n model.set('attributes', {\n ...model.get('attributes'),\n error: undefined,\n });\n\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...value,\n error: undefined,\n isMissing: undefined,\n });\n }\n });\n\n return componentUpdates;\n } catch (error) {\n payload.affectedComponents.forEach((componentId: string) => {\n const model = renderedComponents.current[componentId];\n\n if (model) {\n const errorMessage =\n error instanceof Error ? error.message : 'Something went wrong. Please try again.';\n\n model.set('attributes', {\n ...model.get('attributes'),\n error: errorMessage,\n });\n\n model.set('componentProps', {\n ...model.get('componentProps'),\n error: errorMessage,\n isMissing: undefined,\n });\n }\n });\n\n throw error;\n } finally {\n setInteracting(renderedComponents.current, payload.affectedComponents, false);\n }\n }\n\n useEffect(() => {\n if (!editorRef.current) {\n return () => {\n // no op\n };\n }\n\n if (editorInstance.current) {\n editorInstance.current.destroy();\n editorInstance.current = null;\n isEditorAliveRef.current = false;\n }\n\n const currentMode = mode;\n\n const editor = grapesjs.init({\n container: editorRef.current,\n height: '100%',\n plugins: [\n tailwind,\n createGrapesjsShadcnGenericPlugin(\n currentMode,\n performInteractionWrapper,\n renderedComponents.current,\n setHasChanged,\n ),\n ],\n storageManager: { type: 'none' },\n richTextEditor: {\n actions: ['bold', 'italic', 'underline', 'strikethrough'],\n },\n canvas: {\n customBadgeLabel: (component) => {\n const tagName = component.get('tagName');\n\n return tagName === 'body' ? '' : tagName || '';\n },\n },\n });\n\n isEditorAliveRef.current = true;\n\n async function checkDirty() {\n if (isStreamingRef.current || isSystemUpdateRef.current) {\n return;\n }\n\n if (!isEditorAliveRef.current || !editorInstance.current) {\n return;\n }\n\n let stored = null;\n\n try {\n stored = await editorInstance.current.store();\n } catch (err) {\n return;\n }\n\n if (!stored) {\n return;\n }\n\n const newJson = JSON.stringify(stored);\n\n if (newJson !== lastJsonRef.current) {\n setHasChanged(true);\n lastJsonRef.current = newJson;\n }\n }\n\n const debouncedCheckDirty = (() => {\n let timeout: NodeJS.Timeout | null = null;\n\n return () => {\n if (timeout) {\n clearTimeout(timeout);\n }\n\n timeout = setTimeout(checkDirty, 200);\n };\n })();\n\n [\n 'component:add',\n 'component:remove',\n 'component:update:content',\n 'style:update',\n 'component:drag:end',\n 'rte:change',\n ].forEach((evt) => editor.on(evt, debouncedCheckDirty));\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 canvasHead = editor.Canvas.getDocument().head;\n const style = document.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 `;\n style.innerHTML = fullCss;\n style.setAttribute('type', 'text/css');\n canvasHead.appendChild(style);\n\n isSystemUpdateRef.current = true;\n setComponentProperties(editor, mode === 'preview');\n lastJsonRef.current = JSON.stringify(await editor.store());\n isSystemUpdateRef.current = false;\n });\n\n editorInstance.current = editor;\n\n if (setEditor) {\n setEditor(editor);\n }\n\n TypesToRegister.forEach(({ type, tagName }) => {\n if (!editor.DomComponents.getType(type)) {\n editor.DomComponents.addType(type, {\n model: {\n defaults: { tagName },\n },\n view: {},\n });\n }\n });\n\n if (json && json.pages?.length > 0 && json.pages[0].frames?.length > 0) {\n isSystemUpdateRef.current = true;\n const raw = json.pages[0].frames[0].component;\n const processed = expandActions(raw);\n editor.setComponents(processed);\n\n const cssText = convertStyles(json.styles || []);\n editor.setStyle(cssText);\n\n editor.on('load', async () => {\n lastJsonRef.current = JSON.stringify(await editor.store());\n isSystemUpdateRef.current = false;\n });\n }\n\n return function cleanup() {\n editor.destroy();\n isEditorAliveRef.current = false;\n };\n }, [json, mode]);\n\n return (\n <React.Fragment>\n <StyledEditor />\n <div ref={editorRef} id=\"grapesjs-editor\" />\n </React.Fragment>\n );\n}\n\nexport default GrapesjsCanvas;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"GrapesjsCanvas.js","names":["React","useEffect","useRef","grapesjs","tailwind","TypesToRegister","toKebabCase","createGrapesjsShadcnGenericPlugin","StyledEditor","tailwindCompiledCss","datePickerCss","jsx","_jsx","jsxs","_jsxs","setComponentProperties","editor","isPreview","setPropertiesRecursively","comp","set","editable","draggable","droppable","getName","selectable","hoverable","highlightable","copyable","resizable","removable","badgable","attributes","command","components","forEach","runCommand","stopCommand","wrapper","getWrapper","find","convertStyles","stylesArray","map","block","selectors","Array","isArray","join","declarations","Object","entries","style","_ref","prop","value","expandActions","node","_node$componentProps","type","componentName","componentProps","actions","_extends","classes","concat","undefined","action","i","icon","title","description","id","headerContent","bodyContent","setInteracting","renderedComponents","inProgress","component","componentId","showLoader","gjsModel","get","interactionApiInProgress","GrapesjsCanvas","_ref2","json","_ref2$mode","mode","setEditor","performInteraction","_ref2$newDataNotifier","newDataNotifier","setHasChanged","isStreaming","editorRef","editorInstance","isStreamingRef","isSystemUpdateRef","lastJsonRef","isEditorAliveRef","current","notificationHandler","props","_props$newProps","newProps","_props$newAttributes","newAttributes","model","filteredProps","keys","key","name","parsedNewProps","pagination","performInteractionWrapper","_x","_performInteractionWrapper","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee4","payload","_editorInstance$curre","updatedJson","apiResponse","componentUpdates","wrap","_callee4$","_context4","prev","next","store","sent","affectedComponents","_ref6","error","isMissing","abrupt","t0","errorMessage","Error","message","finish","stop","_json$pages","_json$pages$0$frames","destroy","currentMode","init","container","height","plugins","storageManager","richTextEditor","canvas","customBadgeLabel","tagName","checkDirty","_checkDirty","_callee3","stored","newJson","_callee3$","_context3","JSON","stringify","debouncedCheckDirty","timeout","clearTimeout","setTimeout","evt","on","includes","_callee","canvasHead","fullCss","_callee$","_context","Canvas","getDocument","head","document","createElement","innerHTML","setAttribute","appendChild","t1","call","_ref4","DomComponents","getType","addType","defaults","view","pages","length","frames","raw","processed","setComponents","cssText","styles","setStyle","_callee2","_callee2$","_context2","cleanup","Fragment","children","ref"],"sources":["../src/GrapesjsCanvas.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useEffect, useRef } 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';\nimport { TypesToRegister } from './constants';\nimport { toKebabCase } from './helpers';\nimport { createGrapesjsShadcnGenericPlugin } from './plugins/grapejs-plugin';\nimport { StyledEditor } from './index.styles';\nimport { tailwindCompiledCss } from './helpers/css';\nimport { datePickerCss } from './helpers/date-picker';\n\ntype NotificationHandler = (newData: {\n componentId: string;\n newProps: Record<string, any>;\n newAttributes: Record<string, any>;\n}) => boolean;\n\ntype GrapesjsCanvasProps = {\n json: any;\n mode?: 'editor' | 'preview';\n setEditor: (editor: Editor) => void;\n performInteraction: (payload: Record<string, any>) => Promise<Record<string, any> | undefined>;\n newDataNotifier: (notifHandler: NotificationHandler) => void;\n setHasChanged: (hasChanged: boolean) => void;\n isStreaming: boolean;\n};\n\nfunction setComponentProperties(editor: Editor, isPreview: boolean) {\n function setPropertiesRecursively(comp: Component) {\n comp.set({\n editable: !isPreview,\n draggable: !isPreview,\n droppable: !isPreview && comp.getName() !== 'Shadcn-generic',\n selectable: !isPreview,\n hoverable: !isPreview,\n highlightable: !isPreview,\n copyable: false,\n resizable: false,\n removable: !isPreview,\n badgable: false,\n });\n\n if (!isPreview) {\n comp.set('toolbar', [\n { attributes: { class: 'fa fa-arrows' }, command: 'tlb-move' },\n { attributes: { class: 'fa fa-trash' }, command: 'tlb-delete' },\n ]);\n }\n\n comp.components().forEach(setPropertiesRecursively);\n }\n\n if (isPreview) {\n editor.runCommand('core:preview');\n } else {\n editor.stopCommand('core:preview');\n }\n\n const wrapper = editor.getWrapper();\n wrapper?.find('*').forEach(setPropertiesRecursively);\n}\n\nfunction convertStyles(stylesArray: any[]): string {\n return stylesArray\n .map((block) => {\n const selectors = Array.isArray(block.selectors)\n ? block.selectors.join(', ')\n : block.selectors;\n const declarations = Object.entries(block.style)\n .map(([prop, value]) => `${toKebabCase(prop)}: ${value};`)\n .join(' ');\n\n return `${selectors} { ${declarations} }`;\n })\n .join('\\n');\n}\n\nfunction expandActions(node: any): any {\n if (\n node.type === 'shadcn-generic' &&\n node.componentName === 'Actions' &&\n Array.isArray(node.componentProps?.actions)\n ) {\n const { actions } = node.componentProps;\n\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 const { icon, title, description } = action;\n\n return {\n id: `${node.id}--action-card-${i}`,\n type: 'shadcn-generic',\n componentName: 'ActionCard',\n badgable: false,\n copyable: false,\n componentProps: {\n icon,\n headerContent: title,\n bodyContent: description,\n },\n };\n }),\n };\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 GrapesjsCanvas({\n json,\n mode = 'preview',\n setEditor,\n performInteraction,\n newDataNotifier = () => {\n // no op\n },\n setHasChanged,\n isStreaming,\n}: GrapesjsCanvasProps) {\n const editorRef = useRef<HTMLDivElement>(null);\n const editorInstance = useRef<Editor | null>(null);\n const renderedComponents = useRef<Record<string, Component>>({});\n const isStreamingRef = useRef(isStreaming);\n const isSystemUpdateRef = useRef(false);\n const lastJsonRef = useRef<string>('');\n const isEditorAliveRef = useRef(false);\n\n useEffect(() => {\n isStreamingRef.current = isStreaming;\n }, [isStreaming]);\n\n function notificationHandler(\n props: Parameters<NotificationHandler>[0],\n ): ReturnType<NotificationHandler> {\n if (!props) {\n return true;\n }\n\n const { componentId, newProps = {}, newAttributes = {} } = props;\n\n const model = renderedComponents.current[componentId];\n\n if (!model) {\n return false;\n }\n\n // Filter out complex placeholder objects that shouldn't be stored in the model, done intentionally to keep grapejs out of errors\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 delete filteredProps[key];\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 model.set('componentProps', {\n ...model.get('componentProps'),\n ...parsedNewProps,\n });\n\n model.set('attributes', {\n ...model.get('attributes'),\n ...newAttributes,\n });\n\n return true;\n }\n\n useEffect(() => {\n newDataNotifier(notificationHandler);\n }, []);\n\n async function performInteractionWrapper(payload: Record<string, any>) {\n const updatedJson = await editorInstance.current?.store();\n setInteracting(renderedComponents.current, payload.affectedComponents, true);\n\n try {\n const apiResponse = await performInteraction({\n ...payload,\n json: updatedJson,\n });\n\n const componentUpdates = apiResponse || {};\n\n Object.entries(componentUpdates).forEach(([key, value]) => {\n const model = renderedComponents.current[key];\n\n if (model) {\n model.set('attributes', {\n ...model.get('attributes'),\n error: undefined,\n });\n\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...value,\n error: undefined,\n isMissing: undefined,\n });\n }\n });\n\n return componentUpdates;\n } catch (error) {\n payload.affectedComponents.forEach((componentId: string) => {\n const model = renderedComponents.current[componentId];\n\n if (model) {\n const errorMessage =\n error instanceof Error ? error.message : 'Something went wrong. Please try again.';\n\n model.set('attributes', {\n ...model.get('attributes'),\n error: errorMessage,\n });\n\n model.set('componentProps', {\n ...model.get('componentProps'),\n error: errorMessage,\n isMissing: undefined,\n });\n }\n });\n\n throw error;\n } finally {\n setInteracting(renderedComponents.current, payload.affectedComponents, false);\n }\n }\n\n useEffect(() => {\n if (!editorRef.current) {\n return () => {\n // no op\n };\n }\n\n if (editorInstance.current) {\n editorInstance.current.destroy();\n editorInstance.current = null;\n isEditorAliveRef.current = false;\n }\n\n const currentMode = mode;\n\n const editor = grapesjs.init({\n container: editorRef.current,\n height: '100%',\n plugins: [\n tailwind,\n createGrapesjsShadcnGenericPlugin(\n currentMode,\n performInteractionWrapper,\n renderedComponents.current,\n setHasChanged,\n ),\n ],\n storageManager: { type: 'none' },\n richTextEditor: {\n actions: ['bold', 'italic', 'underline', 'strikethrough'],\n },\n canvas: {\n customBadgeLabel: (component) => {\n const tagName = component.get('tagName');\n\n return tagName === 'body' ? '' : tagName || '';\n },\n },\n });\n\n isEditorAliveRef.current = true;\n\n async function checkDirty() {\n if (isStreamingRef.current || isSystemUpdateRef.current) {\n return;\n }\n\n if (!isEditorAliveRef.current || !editorInstance.current) {\n return;\n }\n\n let stored = null;\n\n try {\n stored = await editorInstance.current.store();\n } catch (err) {\n return;\n }\n\n if (!stored) {\n return;\n }\n\n const newJson = JSON.stringify(stored);\n\n if (newJson !== lastJsonRef.current) {\n setHasChanged(true);\n lastJsonRef.current = newJson;\n }\n }\n\n const debouncedCheckDirty = (() => {\n let timeout: NodeJS.Timeout | null = null;\n\n return () => {\n if (timeout) {\n clearTimeout(timeout);\n }\n\n timeout = setTimeout(checkDirty, 200);\n };\n })();\n\n [\n 'component:add',\n 'component:remove',\n 'component:update:content',\n 'style:update',\n 'component:drag:end',\n 'rte:change',\n ].forEach((evt) => editor.on(evt, debouncedCheckDirty));\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 canvasHead = editor.Canvas.getDocument().head;\n const style = document.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 `;\n style.innerHTML = fullCss;\n style.setAttribute('type', 'text/css');\n canvasHead.appendChild(style);\n\n isSystemUpdateRef.current = true;\n setComponentProperties(editor, mode === 'preview');\n lastJsonRef.current = JSON.stringify(await editor.store());\n isSystemUpdateRef.current = false;\n });\n\n editorInstance.current = editor;\n\n if (setEditor) {\n setEditor(editor);\n }\n\n TypesToRegister.forEach(({ type, tagName }) => {\n if (!editor.DomComponents.getType(type)) {\n editor.DomComponents.addType(type, {\n model: {\n defaults: { tagName },\n },\n view: {},\n });\n }\n });\n\n if (json && json.pages?.length > 0 && json.pages[0].frames?.length > 0) {\n isSystemUpdateRef.current = true;\n const raw = json.pages[0].frames[0].component;\n const processed = expandActions(raw);\n editor.setComponents(processed);\n\n const cssText = convertStyles(json.styles || []);\n editor.setStyle(cssText);\n\n editor.on('load', async () => {\n lastJsonRef.current = JSON.stringify(await editor.store());\n isSystemUpdateRef.current = false;\n });\n }\n\n return function cleanup() {\n editor.destroy();\n isEditorAliveRef.current = false;\n };\n }, [json, mode]);\n\n return (\n <React.Fragment>\n <StyledEditor />\n <div ref={editorRef} id=\"grapesjs-editor\" />\n </React.Fragment>\n );\n}\n\nexport default GrapesjsCanvas;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=declaration.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declaration.d.js","names":[],"sources":["../src/declaration.d.ts"],"sourcesContent":["declare module '*.gif';"],"mappings":"","ignoreList":[]}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@peak-ai/canvas",
3
3
  "author": "squad-builder-experience",
4
4
  "license": "UNLICENSED",
5
- "version": "1.4.20-rc.8",
5
+ "version": "1.4.20-rc.9",
6
6
  "description": "",
7
7
  "dependencies": {
8
8
  "@emotion/react": "^11.11.4",
@@ -1,7 +1,7 @@
1
- import _extends from"@babel/runtime/helpers/extends";/* eslint-disable import/no-named-as-default-member *//* eslint-disable func-names *//* eslint-disable @typescript-eslint/no-explicit-any */import React from"react";import ReactDOM from"react-dom";import{getRenderers}from"./helpers/render-components";import{jsx as _jsx}from"react/jsx-runtime";export function createGrapesjsShadcnGenericPlugin(mode,performInteraction,renderedComponents,setHasChanged){if(renderedComponents===void 0){renderedComponents={}}return function grapesjsShadcnGenericPlugin(editor){editor.DomComponents.addType("shadcn-generic",{model:{defaults:{tagName:"div",droppable:false,componentName:"Card",componentProps:{},traits:[]}},view:{events:{"input [data-slot]":"handleSlotInput"},handleSlotInput:function handleSlotInput(e){var target=e.target;var slot=target.dataset.slot;var text=target.innerText;var props=this.model.get("componentProps")||{};if(!slot){return}if(slot.startsWith("table-header-")){var _props$data;var idx=parseInt(slot.split("-")[2],10);var dataKeys=Object.keys(((_props$data=props.data)==null?void 0:_props$data[0])||{});if(!props.headerMapper){props.headerMapper={}}var key=dataKeys[idx];if(key){props.headerMapper[key]=text}}else{props[slot]=text}this.model.set("componentProps",_extends({},props));if(!["search-input"].includes(slot)){setHasChanged(true)}},render:function render(){var _this=this;var compName=this.model.get("componentName");var compProps=this.model.get("componentProps");if(typeof compProps==="string"){try{compProps=JSON.parse(compProps)}catch(err){// eslint-disable-next-line no-console
2
- console.error("Invalid JSON in componentProps",err);compProps={}}}compProps.isEditable=mode==="editor";compProps.performInteraction=performInteraction;compProps.onChange=function(data){_this.model.set("componentProps",_extends({},_this.model.get("componentProps"),data))};var renderers=getRenderers();var Renderer=renderers[compName];if(Renderer){if(compName==="Tabs"){ReactDOM.render(/*#__PURE__*/_jsx(Renderer,_extends({},compProps,{gjsModel:this.model})),this.el);var children=this.model.components();var tabsContent=this.el.querySelectorAll(".tabs-content");var tabAttributes=this.model.get("attributes")||{};var hasTabsError=tabAttributes.error||compProps.error;var hasTabsMissing=tabAttributes.isMissing||compProps.isMissing;var isFallback=Array.from(tabsContent).some(function(el){return el.dataset.fallback==="true"});if(!isFallback&&tabsContent.length>0){// Helper function to sync child attributes
1
+ import _extends from"@babel/runtime/helpers/extends";/* eslint-disable import/no-named-as-default-member *//* eslint-disable func-names *//* eslint-disable @typescript-eslint/no-explicit-any */import ReactDOM from"react-dom";import{getRenderers}from"./helpers/render-components";import{QueryCacheProvider}from"./helpers/query-cache-context";import{jsx as _jsx}from"react/jsx-runtime";export function createGrapesjsShadcnGenericPlugin(mode,performInteraction,renderedComponents,setHasChanged){if(renderedComponents===void 0){renderedComponents={}}return function grapesjsShadcnGenericPlugin(editor){editor.DomComponents.addType("shadcn-generic",{model:{defaults:{tagName:"div",droppable:false,componentName:"Card",componentProps:{},traits:[]}},view:{events:{"input [data-slot]":"handleSlotInput"},handleSlotInput:function handleSlotInput(e){var target=e.target;var slot=target.dataset.slot;var text=target.innerText;var props=this.model.get("componentProps")||{};if(!slot){return}if(slot.startsWith("table-header-")){var _props$data;var idx=parseInt(slot.split("-")[2],10);var dataKeys=Object.keys(((_props$data=props.data)==null?void 0:_props$data[0])||{});if(!props.headerMapper){props.headerMapper={}}var key=dataKeys[idx];if(key){props.headerMapper[key]=text}}else{props[slot]=text}this.model.set("componentProps",_extends({},props));if(!["search-input"].includes(slot)){setHasChanged(true)}},render:function render(){var _this=this;var compName=this.model.get("componentName");var compProps=this.model.get("componentProps");if(typeof compProps==="string"){try{compProps=JSON.parse(compProps)}catch(err){// eslint-disable-next-line no-console
2
+ console.error("Invalid JSON in componentProps",err);compProps={}}}compProps.isEditable=mode==="editor";compProps.performInteraction=performInteraction;compProps.onChange=function(data){_this.model.set("componentProps",_extends({},_this.model.get("componentProps"),data))};var renderers=getRenderers();var Renderer=renderers[compName];if(Renderer){if(compName==="Tabs"){ReactDOM.render(/*#__PURE__*/_jsx(QueryCacheProvider,{maxCacheSize:100,maxCacheAge:5*60*1000,children:/*#__PURE__*/_jsx(Renderer,_extends({},compProps,{gjsModel:this.model}))}),this.el);var children=this.model.components();var tabsContent=this.el.querySelectorAll(".tabs-content");var tabAttributes=this.model.get("attributes")||{};var hasTabsError=tabAttributes.error||compProps.error;var hasTabsMissing=tabAttributes.isMissing||compProps.isMissing;var isFallback=Array.from(tabsContent).some(function(el){return el.dataset.fallback==="true"});if(!isFallback&&tabsContent.length>0){// Helper function to sync child attributes
3
3
  // eslint-disable-next-line no-inner-declarations
4
- var syncChildAttributes=function syncChildAttributes(childModel){var childAttributes=childModel.get("attributes")||{};var childProps=childModel.get("componentProps")||{};var hasError=hasTabsError||childAttributes.error||childProps.error;var hasMissing=hasTabsMissing||childAttributes.isMissing||childProps.isMissing;if(hasError||hasMissing){var newAttributes=_extends({},childAttributes,{loading:false,error:hasError,isMissing:hasMissing,inheritedFromParent:!!(hasTabsError||hasTabsMissing)});childModel.set("attributes",newAttributes,{silent:false})}};children.each(function(childModel,i){var childView=_this.createView(childModel);if(childView&&tabsContent[i]){childView.render();tabsContent[i].appendChild(childView.el);setTimeout(function(){syncChildAttributes(childModel)},100);childModel.on("change:attributes",function(){syncChildAttributes(childModel)})}})}}else{ReactDOM.render(/*#__PURE__*/_jsx(Renderer,_extends({},compProps,{gjsModel:this.model})),this.el)}}else{this.el.innerHTML="<div>Unsupported component: "+compName+"</div>"}renderedComponents[this.model.get("id")]=this.model;return this},createView:function createView(model){var _this$em$get$getType;var ComponentView=(_this$em$get$getType=this.em.get("DomComponents").getType(model.get("type")))==null?void 0:_this$em$get$getType.view;if(!ComponentView){// eslint-disable-next-line no-console
4
+ var syncChildAttributes=function syncChildAttributes(childModel){var childAttributes=childModel.get("attributes")||{};var childProps=childModel.get("componentProps")||{};var hasError=hasTabsError||childAttributes.error||childProps.error;var hasMissing=hasTabsMissing||childAttributes.isMissing||childProps.isMissing;if(hasError||hasMissing){var newAttributes=_extends({},childAttributes,{loading:false,error:hasError,isMissing:hasMissing,inheritedFromParent:!!(hasTabsError||hasTabsMissing)});childModel.set("attributes",newAttributes,{silent:false})}};children.each(function(childModel,i){var childView=_this.createView(childModel);if(childView&&tabsContent[i]){childView.render();tabsContent[i].appendChild(childView.el);setTimeout(function(){syncChildAttributes(childModel)},100);childModel.on("change:attributes",function(){syncChildAttributes(childModel)})}})}}else{ReactDOM.render(/*#__PURE__*/_jsx(QueryCacheProvider,{maxCacheSize:100,maxCacheAge:5*60*1000,children:/*#__PURE__*/_jsx(Renderer,_extends({},compProps,{gjsModel:this.model}))}),this.el)}}else{this.el.innerHTML="<div>Unsupported component: "+compName+"</div>"}renderedComponents[this.model.get("id")]=this.model;return this},createView:function createView(model){var _this$em$get$getType;var ComponentView=(_this$em$get$getType=this.em.get("DomComponents").getType(model.get("type")))==null?void 0:_this$em$get$getType.view;if(!ComponentView){// eslint-disable-next-line no-console
5
5
  console.warn("No view found for component type:",model.get("type"));return null}var view=new ComponentView({model:model,config:this.config,componentTypes:this.componentTypes});return view},remove:function remove(){// eslint-disable-next-line import/no-named-as-default-member
6
6
  ReactDOM.unmountComponentAtNode(this.el);return this}}})}}
7
7
  //# sourceMappingURL=grapejs-plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"grapejs-plugin.js","names":["React","ReactDOM","getRenderers","jsx","_jsx","createGrapesjsShadcnGenericPlugin","mode","performInteraction","renderedComponents","setHasChanged","grapesjsShadcnGenericPlugin","editor","DomComponents","addType","model","defaults","tagName","droppable","componentName","componentProps","traits","view","events","handleSlotInput","e","target","slot","dataset","text","innerText","props","get","startsWith","_props$data","idx","parseInt","split","dataKeys","Object","keys","data","headerMapper","key","set","_extends","includes","render","_this","compName","compProps","JSON","parse","err","console","error","isEditable","onChange","renderers","Renderer","gjsModel","el","children","components","tabsContent","querySelectorAll","tabAttributes","hasTabsError","hasTabsMissing","isMissing","isFallback","Array","from","some","fallback","length","syncChildAttributes","childModel","childAttributes","childProps","hasError","hasMissing","newAttributes","loading","inheritedFromParent","silent","each","i","childView","createView","appendChild","setTimeout","on","innerHTML","_this$em$get$getType","ComponentView","em","getType","warn","config","componentTypes","remove","unmountComponentAtNode"],"sources":["../../src/plugins/grapejs-plugin.tsx"],"sourcesContent":["/* eslint-disable import/no-named-as-default-member */\n/* eslint-disable func-names */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Editor, Component } from 'grapesjs';\nimport { getRenderers } from './helpers/render-components';\n\nexport function createGrapesjsShadcnGenericPlugin(\n mode: 'editor' | 'preview',\n performInteraction: (payload: Record<string, any>) => void,\n renderedComponents: Record<string, Component> = {},\n setHasChanged: (hasChanged: boolean) => void,\n) {\n return function grapesjsShadcnGenericPlugin(editor: Editor): void {\n editor.DomComponents.addType('shadcn-generic', {\n model: {\n defaults: {\n tagName: 'div',\n droppable: false,\n componentName: 'Card',\n componentProps: {},\n traits: [],\n },\n },\n view: {\n events: {\n 'input [data-slot]': 'handleSlotInput',\n } as any,\n handleSlotInput(e: Event) {\n const target = e.target as HTMLElement;\n const slot = target.dataset.slot;\n const text = target.innerText;\n\n const props = this.model.get('componentProps') || {};\n\n if (!slot) {\n return;\n }\n\n if (slot.startsWith('table-header-')) {\n const idx = parseInt(slot.split('-')[2], 10);\n const dataKeys = Object.keys(props.data?.[0] || {});\n\n if (!props.headerMapper) {\n props.headerMapper = {};\n }\n\n const key = dataKeys[idx];\n\n if (key) {\n props.headerMapper[key] = text;\n }\n } else {\n props[slot] = text;\n }\n\n this.model.set('componentProps', {\n ...props,\n });\n\n if (!['search-input'].includes(slot)) {\n setHasChanged(true);\n }\n },\n render: function () {\n const compName: string = this.model.get('componentName');\n let compProps: any = this.model.get('componentProps');\n\n if (typeof compProps === 'string') {\n try {\n compProps = JSON.parse(compProps);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Invalid JSON in componentProps', err);\n compProps = {};\n }\n }\n\n compProps.isEditable = mode === 'editor';\n compProps.performInteraction = performInteraction;\n\n compProps.onChange = (data: Record<string, any>) => {\n this.model.set('componentProps', {\n ...this.model.get('componentProps'),\n ...data,\n });\n };\n\n const renderers = getRenderers();\n const Renderer = renderers[compName];\n\n if (Renderer) {\n if (compName === 'Tabs') {\n ReactDOM.render(<Renderer {...compProps} gjsModel={this.model} />, this.el);\n\n const children = this.model.components();\n const tabsContent = this.el.querySelectorAll('.tabs-content');\n\n const tabAttributes = this.model.get('attributes') || {};\n const hasTabsError = tabAttributes.error || compProps.error;\n const hasTabsMissing = tabAttributes.isMissing || compProps.isMissing;\n const isFallback = Array.from(tabsContent).some(\n (el: Element) => (el as HTMLElement).dataset.fallback === 'true',\n );\n\n if (!isFallback && tabsContent.length > 0) {\n // Helper function to sync child attributes\n // eslint-disable-next-line no-inner-declarations\n function syncChildAttributes(childModel: any) {\n const childAttributes = childModel.get('attributes') || {};\n const childProps = childModel.get('componentProps') || {};\n\n const hasError = hasTabsError || childAttributes.error || childProps.error;\n const hasMissing =\n hasTabsMissing || childAttributes.isMissing || childProps.isMissing;\n\n if (hasError || hasMissing) {\n const newAttributes = {\n ...childAttributes,\n loading: false,\n error: hasError,\n isMissing: hasMissing,\n inheritedFromParent: !!(hasTabsError || hasTabsMissing),\n };\n\n childModel.set('attributes', newAttributes, { silent: false });\n }\n }\n\n children.each((childModel, i) => {\n const childView = this.createView(childModel);\n\n if (childView && tabsContent[i]) {\n childView.render();\n tabsContent[i].appendChild(childView.el);\n\n setTimeout(() => {\n syncChildAttributes(childModel);\n }, 100);\n\n childModel.on('change:attributes', () => {\n syncChildAttributes(childModel);\n });\n }\n });\n }\n } else {\n ReactDOM.render(<Renderer {...compProps} gjsModel={this.model} />, this.el);\n }\n } else {\n this.el.innerHTML = `<div>Unsupported component: ${compName}</div>`;\n }\n\n renderedComponents[this.model.get('id')] = this.model;\n\n return this;\n },\n createView(model: any) {\n const ComponentView = this.em.get('DomComponents').getType(model.get('type'))?.view;\n\n if (!ComponentView) {\n // eslint-disable-next-line no-console\n console.warn('No view found for component type:', model.get('type'));\n\n return null;\n }\n\n const view = new ComponentView({\n model,\n config: this.config,\n componentTypes: this.componentTypes,\n });\n\n return view;\n },\n remove: function () {\n // eslint-disable-next-line import/no-named-as-default-member\n ReactDOM.unmountComponentAtNode(this.el);\n\n return this;\n },\n },\n });\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"grapejs-plugin.js","names":["ReactDOM","getRenderers","QueryCacheProvider","jsx","_jsx","createGrapesjsShadcnGenericPlugin","mode","performInteraction","renderedComponents","setHasChanged","grapesjsShadcnGenericPlugin","editor","DomComponents","addType","model","defaults","tagName","droppable","componentName","componentProps","traits","view","events","handleSlotInput","e","target","slot","dataset","text","innerText","props","get","startsWith","_props$data","idx","parseInt","split","dataKeys","Object","keys","data","headerMapper","key","set","_extends","includes","render","_this","compName","compProps","JSON","parse","err","console","error","isEditable","onChange","renderers","Renderer","maxCacheSize","maxCacheAge","children","gjsModel","el","components","tabsContent","querySelectorAll","tabAttributes","hasTabsError","hasTabsMissing","isMissing","isFallback","Array","from","some","fallback","length","syncChildAttributes","childModel","childAttributes","childProps","hasError","hasMissing","newAttributes","loading","inheritedFromParent","silent","each","i","childView","createView","appendChild","setTimeout","on","innerHTML","_this$em$get$getType","ComponentView","em","getType","warn","config","componentTypes","remove","unmountComponentAtNode"],"sources":["../../src/plugins/grapejs-plugin.tsx"],"sourcesContent":["/* eslint-disable import/no-named-as-default-member */\n/* eslint-disable func-names */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport ReactDOM from 'react-dom';\nimport { Editor, Component } from 'grapesjs';\nimport { getRenderers } from './helpers/render-components';\nimport { QueryCacheProvider } from './helpers/query-cache-context';\n\nexport function createGrapesjsShadcnGenericPlugin(\n mode: 'editor' | 'preview',\n performInteraction: (payload: Record<string, any>) => void,\n renderedComponents: Record<string, Component> = {},\n setHasChanged: (hasChanged: boolean) => void,\n) {\n return function grapesjsShadcnGenericPlugin(editor: Editor): void {\n editor.DomComponents.addType('shadcn-generic', {\n model: {\n defaults: {\n tagName: 'div',\n droppable: false,\n componentName: 'Card',\n componentProps: {},\n traits: [],\n },\n },\n view: {\n events: {\n 'input [data-slot]': 'handleSlotInput',\n } as any,\n handleSlotInput(e: Event) {\n const target = e.target as HTMLElement;\n const slot = target.dataset.slot;\n const text = target.innerText;\n\n const props = this.model.get('componentProps') || {};\n\n if (!slot) {\n return;\n }\n\n if (slot.startsWith('table-header-')) {\n const idx = parseInt(slot.split('-')[2], 10);\n const dataKeys = Object.keys(props.data?.[0] || {});\n\n if (!props.headerMapper) {\n props.headerMapper = {};\n }\n\n const key = dataKeys[idx];\n\n if (key) {\n props.headerMapper[key] = text;\n }\n } else {\n props[slot] = text;\n }\n\n this.model.set('componentProps', {\n ...props,\n });\n\n if (!['search-input'].includes(slot)) {\n setHasChanged(true);\n }\n },\n render: function () {\n const compName: string = this.model.get('componentName');\n let compProps: any = this.model.get('componentProps');\n\n if (typeof compProps === 'string') {\n try {\n compProps = JSON.parse(compProps);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Invalid JSON in componentProps', err);\n compProps = {};\n }\n }\n\n compProps.isEditable = mode === 'editor';\n compProps.performInteraction = performInteraction;\n\n compProps.onChange = (data: Record<string, any>) => {\n this.model.set('componentProps', {\n ...this.model.get('componentProps'),\n ...data,\n });\n };\n\n const renderers = getRenderers();\n const Renderer = renderers[compName];\n\n if (Renderer) {\n if (compName === 'Tabs') {\n ReactDOM.render(\n <QueryCacheProvider maxCacheSize={100} maxCacheAge={5 * 60 * 1000}>\n <Renderer {...compProps} gjsModel={this.model} />\n </QueryCacheProvider>,\n this.el\n );\n\n const children = this.model.components();\n const tabsContent = this.el.querySelectorAll('.tabs-content');\n\n const tabAttributes = this.model.get('attributes') || {};\n const hasTabsError = tabAttributes.error || compProps.error;\n const hasTabsMissing = tabAttributes.isMissing || compProps.isMissing;\n const isFallback = Array.from(tabsContent).some(\n (el: Element) => (el as HTMLElement).dataset.fallback === 'true',\n );\n\n if (!isFallback && tabsContent.length > 0) {\n // Helper function to sync child attributes\n // eslint-disable-next-line no-inner-declarations\n function syncChildAttributes(childModel: any) {\n const childAttributes = childModel.get('attributes') || {};\n const childProps = childModel.get('componentProps') || {};\n\n const hasError = hasTabsError || childAttributes.error || childProps.error;\n const hasMissing =\n hasTabsMissing || childAttributes.isMissing || childProps.isMissing;\n\n if (hasError || hasMissing) {\n const newAttributes = {\n ...childAttributes,\n loading: false,\n error: hasError,\n isMissing: hasMissing,\n inheritedFromParent: !!(hasTabsError || hasTabsMissing),\n };\n\n childModel.set('attributes', newAttributes, { silent: false });\n }\n }\n\n children.each((childModel, i) => {\n const childView = this.createView(childModel);\n\n if (childView && tabsContent[i]) {\n childView.render();\n tabsContent[i].appendChild(childView.el);\n\n setTimeout(() => {\n syncChildAttributes(childModel);\n }, 100);\n\n childModel.on('change:attributes', () => {\n syncChildAttributes(childModel);\n });\n }\n });\n }\n } else {\n ReactDOM.render(\n <QueryCacheProvider maxCacheSize={100} maxCacheAge={5 * 60 * 1000}>\n <Renderer {...compProps} gjsModel={this.model} />\n </QueryCacheProvider>,\n this.el\n );\n }\n } else {\n this.el.innerHTML = `<div>Unsupported component: ${compName}</div>`;\n }\n\n renderedComponents[this.model.get('id')] = this.model;\n\n return this;\n },\n createView(model: any) {\n const ComponentView = this.em.get('DomComponents').getType(model.get('type'))?.view;\n\n if (!ComponentView) {\n // eslint-disable-next-line no-console\n console.warn('No view found for component type:', model.get('type'));\n\n return null;\n }\n\n const view = new ComponentView({\n model,\n config: this.config,\n componentTypes: this.componentTypes,\n });\n\n return view;\n },\n remove: function () {\n // eslint-disable-next-line import/no-named-as-default-member\n ReactDOM.unmountComponentAtNode(this.el);\n\n return this;\n },\n },\n });\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import React,{useEffect}from"react";import{X}from"lucide-react";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";export function CustomModal(_ref){var isOpen=_ref.isOpen,onClose=_ref.onClose,title=_ref.title,children=_ref.children,_ref$className=_ref.className,className=_ref$className===void 0?"":_ref$className,titleIcon=_ref.titleIcon;useEffect(function(){function handleEscapeKey(event){if(event.key==="Escape"&&isOpen){onClose()}}if(isOpen){document.addEventListener("keydown",handleEscapeKey);document.body.style.overflow="hidden"}return function(){document.removeEventListener("keydown",handleEscapeKey);document.body.style.overflow="unset"}},[isOpen,onClose]);function handleBackdropClick(event){if(event.target===event.currentTarget){onClose()}}if(!isOpen){return null}return/*#__PURE__*/_jsxs("div",{className:"fixed inset-0 z-[9999] flex items-center justify-center p-4 bg-black bg-opacity-30 "+className,onClick:handleBackdropClick,children:[/*#__PURE__*/_jsxs("div",{className:"relative w-full max-w-2xl max-h-[90vh] min-h-[45vh] bg-white rounded-lg shadow-xl overflow-hidden animate-modal-fade-in",onClick:function onClick(e){return e.stopPropagation()},children:[/*#__PURE__*/_jsxs("div",{className:"p-6 border-b border-gray-200 bg-gray-50 relative flex items-center justify-between",children:[/*#__PURE__*/_jsxs("h2",{className:"flex items-center text-lg font-semibold text-gray-900",children:[titleIcon&&/*#__PURE__*/_jsx("span",{className:"mr-2",children:titleIcon}),title]}),/*#__PURE__*/_jsx("button",{onClick:onClose,className:"transition-colors duration-200 hover:bg-gray-100 rounded p-1 flex items-center justify-center",type:"button","aria-label":"Close modal",style:{width:"24px",height:"24px"},children:/*#__PURE__*/_jsx(X,{size:12,className:"text-gray-600",style:{opacity:1,transform:"rotate(0deg)"}})})]}),/*#__PURE__*/_jsx("div",{className:"overflow-y-auto max-h-[calc(90vh-160px)]",children:children})]}),/*#__PURE__*/_jsx("style",{children:"\n .animate-modal-fade-in {\n animation: modalFadeIn 0.2s ease-out;\n }\n \n @keyframes modalFadeIn {\n from {\n opacity: 0;\n transform: scale(0.95) translateY(-10px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n }\n "})]})}export default CustomModal;
1
+ import React,{useEffect}from"react";import{X}from"lucide-react";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";export function CustomModal(_ref){var isOpen=_ref.isOpen,onClose=_ref.onClose,title=_ref.title,children=_ref.children,_ref$className=_ref.className,className=_ref$className===void 0?"":_ref$className,titleIcon=_ref.titleIcon;useEffect(function(){function handleEscapeKey(event){if(event.key==="Escape"&&isOpen){onClose()}}if(isOpen){var _iframe$contentWindow;document.addEventListener("keydown",handleEscapeKey);var iframe=document.querySelector(".gjs-frame");var iframeDocument=(iframe==null?void 0:iframe.contentDocument)||(iframe==null||(_iframe$contentWindow=iframe.contentWindow)==null?void 0:_iframe$contentWindow.document);if(iframeDocument){var _iframeDocument$docum;(_iframeDocument$docum=iframeDocument.documentElement)==null||_iframeDocument$docum.style.setProperty("overflow","hidden","important")}return function(){document.removeEventListener("keydown",handleEscapeKey);if(iframeDocument){var _iframeDocument$docum2;(_iframeDocument$docum2=iframeDocument.documentElement)==null||_iframeDocument$docum2.style.removeProperty("overflow")}}}return function(){document.removeEventListener("keydown",handleEscapeKey)}},[isOpen,onClose]);function handleBackdropClick(event){if(event.target===event.currentTarget){onClose()}}if(!isOpen){return null}return/*#__PURE__*/_jsxs("div",{className:"fixed inset-0 z-[9999] flex items-center justify-center p-4 bg-black bg-opacity-30 "+className,onClick:handleBackdropClick,children:[/*#__PURE__*/_jsxs("div",{className:"relative w-full max-w-2xl max-h-[90vh] min-h-[45vh] bg-white rounded-lg shadow-xl overflow-hidden animate-modal-fade-in",onClick:function onClick(e){return e.stopPropagation()},children:[/*#__PURE__*/_jsxs("div",{className:"p-6 border-b border-gray-200 bg-gray-50 relative flex items-center justify-between",children:[/*#__PURE__*/_jsxs("h2",{className:"flex items-center text-lg font-semibold text-gray-900",children:[titleIcon&&/*#__PURE__*/_jsx("span",{className:"mr-2",children:titleIcon}),title]}),/*#__PURE__*/_jsx("button",{onClick:onClose,className:"transition-colors duration-200 hover:bg-gray-100 rounded p-1 flex items-center justify-center",type:"button","aria-label":"Close modal",style:{width:"24px",height:"24px"},children:/*#__PURE__*/_jsx(X,{size:12,className:"text-gray-600",style:{opacity:1,transform:"rotate(0deg)"}})})]}),/*#__PURE__*/_jsx("div",{className:"overflow-y-auto max-h-[calc(90vh-160px)]",children:children})]}),/*#__PURE__*/_jsx("style",{children:"\n .animate-modal-fade-in {\n animation: modalFadeIn 0.2s ease-out;\n }\n \n @keyframes modalFadeIn {\n from {\n opacity: 0;\n transform: scale(0.95) translateY(-10px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n }\n "})]})}export default CustomModal;
2
2
  //# sourceMappingURL=custom-modal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"custom-modal.js","names":["React","useEffect","X","jsx","_jsx","jsxs","_jsxs","CustomModal","_ref","isOpen","onClose","title","children","_ref$className","className","titleIcon","handleEscapeKey","event","key","document","addEventListener","body","style","overflow","removeEventListener","handleBackdropClick","target","currentTarget","onClick","e","stopPropagation","type","width","height","size","opacity","transform"],"sources":["../../../src/plugins/helpers/custom-modal.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { X } from 'lucide-react';\n\ntype CustomModalProps = {\n isOpen: boolean;\n onClose: () => void;\n title: string;\n children: React.ReactNode;\n className?: string;\n titleIcon?: React.ReactNode;\n}\n\nexport function CustomModal({\n isOpen,\n onClose,\n title,\n children,\n className = '',\n titleIcon\n}: CustomModalProps) {\n\n useEffect(() => {\n function handleEscapeKey(event: KeyboardEvent) {\n if (event.key === 'Escape' && isOpen) {\n onClose();\n }\n }\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscapeKey);\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscapeKey);\n document.body.style.overflow = 'unset';\n };\n }, [isOpen, onClose]);\n\n function handleBackdropClick(event: React.MouseEvent<HTMLDivElement>) {\n if (event.target === event.currentTarget) {\n onClose();\n }\n }\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <div\n className={`fixed inset-0 z-[9999] flex items-center justify-center p-4 bg-black bg-opacity-30 ${className}`}\n onClick={handleBackdropClick}\n >\n <div\n className=\"relative w-full max-w-2xl max-h-[90vh] min-h-[45vh] bg-white rounded-lg shadow-xl overflow-hidden animate-modal-fade-in\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"p-6 border-b border-gray-200 bg-gray-50 relative flex items-center justify-between\">\n <h2 className=\"flex items-center text-lg font-semibold text-gray-900\">\n {titleIcon && <span className=\"mr-2\">{titleIcon}</span>}\n {title}\n </h2>\n\n <button\n onClick={onClose}\n className=\"transition-colors duration-200 hover:bg-gray-100 rounded p-1 flex items-center justify-center\"\n type=\"button\"\n aria-label=\"Close modal\"\n style={{\n width: '24px',\n height: '24px'\n }}\n >\n <X \n size={12}\n className=\"text-gray-600\"\n style={{ \n opacity: 1,\n transform: 'rotate(0deg)'\n }}\n />\n </button>\n </div>\n\n <div className=\"overflow-y-auto max-h-[calc(90vh-160px)]\">\n {children}\n </div>\n </div>\n\n <style>{`\n .animate-modal-fade-in {\n animation: modalFadeIn 0.2s ease-out;\n }\n \n @keyframes modalFadeIn {\n from {\n opacity: 0;\n transform: scale(0.95) translateY(-10px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n }\n `}</style>\n </div>\n );\n}\n\nexport default CustomModal;\n"],"mappings":"AAAA,MAAO,CAAAA,KAAK,EAAIC,SAAS,KAAQ,OAAO,CACxC,OAASC,CAAC,KAAQ,cAAc,CAAC,OAAAC,GAAA,IAAAC,IAAA,CAAAC,IAAA,IAAAC,KAAA,yBAWjC,MAAO,SAAS,CAAAC,WAAWA,CAAAC,IAAA,CAON,IANnB,CAAAC,MAAM,CAAAD,IAAA,CAANC,MAAM,CACNC,OAAO,CAAAF,IAAA,CAAPE,OAAO,CACPC,KAAK,CAAAH,IAAA,CAALG,KAAK,CACLC,QAAQ,CAAAJ,IAAA,CAARI,QAAQ,CAAAC,cAAA,CAAAL,IAAA,CACRM,SAAS,CAATA,SAAS,CAAAD,cAAA,UAAG,EAAE,CAAAA,cAAA,CACdE,SAAS,CAAAP,IAAA,CAATO,SAAS,CAGTd,SAAS,CAAC,UAAM,CACd,QAAS,CAAAe,eAAeA,CAACC,KAAoB,CAAE,CAC7C,GAAIA,KAAK,CAACC,GAAG,GAAK,QAAQ,EAAIT,MAAM,CAAE,CACpCC,OAAO,CAAC,CACV,CACF,CAEA,GAAID,MAAM,CAAE,CACVU,QAAQ,CAACC,gBAAgB,CAAC,SAAS,CAAEJ,eAAe,CAAC,CACrDG,QAAQ,CAACE,IAAI,CAACC,KAAK,CAACC,QAAQ,CAAG,QACjC,CAEA,MAAO,WAAM,CACXJ,QAAQ,CAACK,mBAAmB,CAAC,SAAS,CAAER,eAAe,CAAC,CACxDG,QAAQ,CAACE,IAAI,CAACC,KAAK,CAACC,QAAQ,CAAG,OACjC,CACF,CAAC,CAAE,CAACd,MAAM,CAAEC,OAAO,CAAC,CAAC,CAErB,QAAS,CAAAe,mBAAmBA,CAACR,KAAuC,CAAE,CACpE,GAAIA,KAAK,CAACS,MAAM,GAAKT,KAAK,CAACU,aAAa,CAAE,CACxCjB,OAAO,CAAC,CACV,CACF,CAEA,GAAI,CAACD,MAAM,CAAE,CACX,MAAO,KACT,CAEA,mBACEH,KAAA,QACEQ,SAAS,uFAAwFA,SAAY,CAC7Gc,OAAO,CAAEH,mBAAoB,CAAAb,QAAA,eAE7BN,KAAA,QACEQ,SAAS,CAAC,yHAAyH,CACnIc,OAAO,CAAE,QAAT,CAAAA,OAAOA,CAAGC,CAAC,QAAK,CAAAA,CAAC,CAACC,eAAe,CAAC,CAAC,CAAC,CAAAlB,QAAA,eAEpCN,KAAA,QAAKQ,SAAS,CAAC,oFAAoF,CAAAF,QAAA,eACjGN,KAAA,OAAIQ,SAAS,CAAC,uDAAuD,CAAAF,QAAA,EAClEG,SAAS,eAAIX,IAAA,SAAMU,SAAS,CAAC,MAAM,CAAAF,QAAA,CAAEG,SAAS,CAAO,CAAC,CACtDJ,KAAK,EACJ,CAAC,cAELP,IAAA,WACEwB,OAAO,CAAElB,OAAQ,CACjBI,SAAS,CAAC,+FAA+F,CACzGiB,IAAI,CAAC,QAAQ,CACb,aAAW,aAAa,CACxBT,KAAK,CAAE,CACLU,KAAK,CAAE,MAAM,CACbC,MAAM,CAAE,MACV,CAAE,CAAArB,QAAA,cAEFR,IAAA,CAACF,CAAC,EACAgC,IAAI,CAAE,EAAG,CACTpB,SAAS,CAAC,eAAe,CACzBQ,KAAK,CAAE,CACLa,OAAO,CAAE,CAAC,CACVC,SAAS,CAAE,cACb,CAAE,CACH,CAAC,CACI,CAAC,EACN,CAAC,cAENhC,IAAA,QAAKU,SAAS,CAAC,0CAA0C,CAAAF,QAAA,CACtDA,QAAQ,CACN,CAAC,EACH,CAAC,cAENR,IAAA,UAAAQ,QAAA,sXAeS,CAAC,EACP,CAET,CAEA,cAAe,CAAAL,WAAW","ignoreList":[]}
1
+ {"version":3,"file":"custom-modal.js","names":["React","useEffect","X","jsx","_jsx","jsxs","_jsxs","CustomModal","_ref","isOpen","onClose","title","children","_ref$className","className","titleIcon","handleEscapeKey","event","key","_iframe$contentWindow","document","addEventListener","iframe","querySelector","iframeDocument","contentDocument","contentWindow","_iframeDocument$docum","documentElement","style","setProperty","removeEventListener","_iframeDocument$docum2","removeProperty","handleBackdropClick","target","currentTarget","onClick","e","stopPropagation","type","width","height","size","opacity","transform"],"sources":["../../../src/plugins/helpers/custom-modal.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { X } from 'lucide-react';\n\ntype CustomModalProps = {\n isOpen: boolean;\n onClose: () => void;\n title: string;\n children: React.ReactNode;\n className?: string;\n titleIcon?: React.ReactNode;\n}\n\nexport function CustomModal({\n isOpen,\n onClose,\n title,\n children,\n className = '',\n titleIcon\n}: CustomModalProps) {\n\n useEffect(() => {\n function handleEscapeKey(event: KeyboardEvent) {\n if (event.key === 'Escape' && isOpen) {\n onClose();\n }\n }\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscapeKey);\n const iframe = document.querySelector('.gjs-frame') as HTMLIFrameElement;\n const iframeDocument = iframe?.contentDocument || iframe?.contentWindow?.document;\n \n if (iframeDocument) {\n iframeDocument.documentElement?.style.setProperty('overflow', 'hidden', 'important');\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscapeKey);\n \n if (iframeDocument) {\n iframeDocument.documentElement?.style.removeProperty('overflow');\n }\n };\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscapeKey);\n };\n }, [isOpen, onClose]);\n\n function handleBackdropClick(event: React.MouseEvent<HTMLDivElement>) {\n if (event.target === event.currentTarget) {\n onClose();\n }\n }\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <div\n className={`fixed inset-0 z-[9999] flex items-center justify-center p-4 bg-black bg-opacity-30 ${className}`}\n onClick={handleBackdropClick}\n >\n <div\n className=\"relative w-full max-w-2xl max-h-[90vh] min-h-[45vh] bg-white rounded-lg shadow-xl overflow-hidden animate-modal-fade-in\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"p-6 border-b border-gray-200 bg-gray-50 relative flex items-center justify-between\">\n <h2 className=\"flex items-center text-lg font-semibold text-gray-900\">\n {titleIcon && <span className=\"mr-2\">{titleIcon}</span>}\n {title}\n </h2>\n\n <button\n onClick={onClose}\n className=\"transition-colors duration-200 hover:bg-gray-100 rounded p-1 flex items-center justify-center\"\n type=\"button\"\n aria-label=\"Close modal\"\n style={{\n width: '24px',\n height: '24px'\n }}\n >\n <X \n size={12}\n className=\"text-gray-600\"\n style={{ \n opacity: 1,\n transform: 'rotate(0deg)'\n }}\n />\n </button>\n </div>\n\n <div className=\"overflow-y-auto max-h-[calc(90vh-160px)]\">\n {children}\n </div>\n </div>\n\n <style>{`\n .animate-modal-fade-in {\n animation: modalFadeIn 0.2s ease-out;\n }\n \n @keyframes modalFadeIn {\n from {\n opacity: 0;\n transform: scale(0.95) translateY(-10px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n }\n `}</style>\n </div>\n );\n}\n\nexport default CustomModal;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { QueryCacheEntry, InteractionType, InteractionState } from './query-cache-utils';
3
+ type QueryCacheContextValue = {
4
+ getCachedQuery: (componentId: string, interactionType: InteractionType, state: InteractionState) => QueryCacheEntry | null;
5
+ setCachedQuery: (componentId: string, interactionType: InteractionType, state: InteractionState, entry: QueryCacheEntry) => void;
6
+ invalidateComponent: (componentId: string) => void;
7
+ invalidateAll: () => void;
8
+ isCached: (componentId: string, interactionType: InteractionType, state: InteractionState) => boolean;
9
+ };
10
+ type QueryCacheProviderProps = {
11
+ children: React.ReactNode;
12
+ maxCacheSize?: number;
13
+ maxCacheAge?: number;
14
+ };
15
+ export declare function QueryCacheProvider({ children, maxCacheSize, maxCacheAge, }: QueryCacheProviderProps): import("react/jsx-runtime").JSX.Element;
16
+ export declare function useQueryCache(): QueryCacheContextValue;
17
+ export declare function useInvalidateCacheOnChange(componentId: string | undefined, dependencies: unknown[]): void;
18
+ export {};
@@ -0,0 +1,2 @@
1
+ import React,{createContext,useContext,useCallback,useRef,useMemo}from"react";import{getGlobalQueryCache,configureGlobalQueryCache}from"./query-cache-singleton";import{jsx as _jsx}from"react/jsx-runtime";var QueryCacheContext=/*#__PURE__*/createContext(null);export function QueryCacheProvider(_ref){var children=_ref.children,_ref$maxCacheSize=_ref.maxCacheSize,maxCacheSize=_ref$maxCacheSize===void 0?100:_ref$maxCacheSize,_ref$maxCacheAge=_ref.maxCacheAge,maxCacheAge=_ref$maxCacheAge===void 0?5*60*1000:_ref$maxCacheAge;var isConfigured=useRef(false);if(!isConfigured.current){configureGlobalQueryCache(maxCacheSize,maxCacheAge);isConfigured.current=true}var cacheManager=useRef(getGlobalQueryCache()).current;var getCachedQuery=useCallback(function(componentId,interactionType,state){return cacheManager.getCachedQuery(componentId,interactionType,state)},[cacheManager]);var setCachedQuery=useCallback(function(componentId,interactionType,state,entry){cacheManager.setCachedQuery(componentId,interactionType,state,entry)},[cacheManager]);var invalidateComponent=useCallback(function(componentId){cacheManager.invalidateComponent(componentId)},[cacheManager]);var invalidateAll=useCallback(function(){cacheManager.invalidateAll()},[cacheManager]);var isCached=useCallback(function(componentId,interactionType,state){return cacheManager.isCached(componentId,interactionType,state)},[cacheManager]);var value=useMemo(function(){return{getCachedQuery:getCachedQuery,setCachedQuery:setCachedQuery,invalidateComponent:invalidateComponent,invalidateAll:invalidateAll,isCached:isCached}},[getCachedQuery,setCachedQuery,invalidateComponent,invalidateAll,isCached]);return/*#__PURE__*/_jsx(QueryCacheContext.Provider,{value:value,children:children})}export function useQueryCache(){var context=useContext(QueryCacheContext);if(!context){throw new Error("useQueryCache must be used within a QueryCacheProvider")}return context}export function useInvalidateCacheOnChange(componentId,dependencies){var _useQueryCache=useQueryCache(),invalidateComponent=_useQueryCache.invalidateComponent;var prevDepsRef=useRef([]);React.useEffect(function(){if(prevDepsRef.current.length===0){prevDepsRef.current=dependencies;return}var hasChanged=dependencies.some(function(dep,index){return dep!==prevDepsRef.current[index]});if(hasChanged&&componentId){invalidateComponent(componentId)}prevDepsRef.current=dependencies},[componentId,invalidateComponent,dependencies])}
2
+ //# sourceMappingURL=query-cache-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-cache-context.js","names":["React","createContext","useContext","useCallback","useRef","useMemo","getGlobalQueryCache","configureGlobalQueryCache","jsx","_jsx","QueryCacheContext","QueryCacheProvider","_ref","children","_ref$maxCacheSize","maxCacheSize","_ref$maxCacheAge","maxCacheAge","isConfigured","current","cacheManager","getCachedQuery","componentId","interactionType","state","setCachedQuery","entry","invalidateComponent","invalidateAll","isCached","value","Provider","useQueryCache","context","Error","useInvalidateCacheOnChange","dependencies","_useQueryCache","prevDepsRef","useEffect","length","hasChanged","some","dep","index"],"sources":["../../../src/plugins/helpers/query-cache-context.tsx"],"sourcesContent":["import React, { createContext, useContext, useCallback, useRef, useMemo } from 'react';\nimport {\n QueryCacheEntry,\n InteractionType,\n InteractionState,\n} from './query-cache-utils';\nimport { getGlobalQueryCache, configureGlobalQueryCache } from './query-cache-singleton';\n\ntype QueryCacheContextValue = {\n getCachedQuery: (\n componentId: string,\n interactionType: InteractionType,\n state: InteractionState\n ) => QueryCacheEntry | null;\n \n setCachedQuery: (\n componentId: string,\n interactionType: InteractionType,\n state: InteractionState,\n entry: QueryCacheEntry\n ) => void;\n \n invalidateComponent: (componentId: string) => void;\n\n invalidateAll: () => void;\n\n isCached: (\n componentId: string,\n interactionType: InteractionType,\n state: InteractionState\n ) => boolean;\n};\n\nconst QueryCacheContext = createContext<QueryCacheContextValue | null>(null);\n\ntype QueryCacheProviderProps = {\n children: React.ReactNode;\n maxCacheSize?: number;\n maxCacheAge?: number;\n};\n\nexport function QueryCacheProvider({\n children,\n maxCacheSize = 100,\n maxCacheAge = 5 * 60 * 1000, // 5 minutes\n}: QueryCacheProviderProps) {\n const isConfigured = useRef(false);\n \n if (!isConfigured.current) {\n configureGlobalQueryCache(maxCacheSize, maxCacheAge);\n isConfigured.current = true;\n }\n\n const cacheManager = useRef(getGlobalQueryCache()).current;\n \n const getCachedQuery = useCallback(\n (\n componentId: string,\n interactionType: InteractionType,\n state: InteractionState\n ): QueryCacheEntry | null => {\n return cacheManager.getCachedQuery(componentId, interactionType, state);\n },\n [cacheManager]\n );\n \n const setCachedQuery = useCallback(\n (\n componentId: string,\n interactionType: InteractionType,\n state: InteractionState,\n entry: QueryCacheEntry\n ) => {\n cacheManager.setCachedQuery(componentId, interactionType, state, entry);\n },\n [cacheManager]\n );\n \n const invalidateComponent = useCallback(\n (componentId: string) => {\n cacheManager.invalidateComponent(componentId);\n },\n [cacheManager]\n );\n \n const invalidateAll = useCallback(() => {\n cacheManager.invalidateAll();\n }, [cacheManager]);\n \n const isCached = useCallback(\n (\n componentId: string,\n interactionType: InteractionType,\n state: InteractionState\n ): boolean => {\n return cacheManager.isCached(componentId, interactionType, state);\n },\n [cacheManager]\n );\n \n const value = useMemo(\n () => ({\n getCachedQuery,\n setCachedQuery,\n invalidateComponent,\n invalidateAll,\n isCached,\n }),\n [getCachedQuery, setCachedQuery, invalidateComponent, invalidateAll, isCached]\n );\n \n return (\n <QueryCacheContext.Provider value={value}>\n {children}\n </QueryCacheContext.Provider>\n );\n}\n\nexport function useQueryCache(): QueryCacheContextValue {\n const context = useContext(QueryCacheContext);\n \n if (!context) {\n throw new Error('useQueryCache must be used within a QueryCacheProvider');\n }\n \n return context;\n}\n\nexport function useInvalidateCacheOnChange(\n componentId: string | undefined,\n dependencies: unknown[]\n): void {\n const { invalidateComponent } = useQueryCache();\n const prevDepsRef = useRef<unknown[]>([]);\n \n React.useEffect(() => {\n if (prevDepsRef.current.length === 0) {\n prevDepsRef.current = dependencies;\n\n return;\n }\n \n const hasChanged = dependencies.some(\n (dep, index) => dep !== prevDepsRef.current[index]\n );\n \n if (hasChanged && componentId) {\n invalidateComponent(componentId);\n }\n \n prevDepsRef.current = dependencies;\n }, [componentId, invalidateComponent, dependencies]);\n}\n\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ import { QueryCacheEntry, InteractionType, InteractionState } from './query-cache-utils';
2
+ declare class QueryCacheManager {
3
+ private cache;
4
+ private maxCacheSize;
5
+ private maxCacheAge;
6
+ constructor(maxCacheSize?: number, maxCacheAge?: number);
7
+ getCachedQuery(componentId: string, interactionType: InteractionType, state: InteractionState): QueryCacheEntry | null;
8
+ setCachedQuery(componentId: string, interactionType: InteractionType, state: InteractionState, entry: QueryCacheEntry): void;
9
+ invalidateComponent(componentId: string): void;
10
+ invalidateAll(): void;
11
+ isCached(componentId: string, interactionType: InteractionType, state: InteractionState): boolean;
12
+ private cleanupCache;
13
+ getStats(): {
14
+ maxAge: number;
15
+ maxSize: number;
16
+ size: number;
17
+ };
18
+ }
19
+ export declare function getGlobalQueryCache(): QueryCacheManager;
20
+ export declare function resetGlobalQueryCache(): void;
21
+ export declare function configureGlobalQueryCache(maxCacheSize?: number, maxCacheAge?: number): void;
22
+ export {};
@@ -0,0 +1,3 @@
1
+ import _extends from"@babel/runtime/helpers/extends";function _createForOfIteratorHelperLoose(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(t)return(t=t.call(r)).next.bind(t);if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var o=0;return function(){return o>=r.length?{done:!0}:{done:!1,value:r[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}import{createCacheKey,getInvalidationPattern}from"./query-cache-utils";var QueryCacheManager=/*#__PURE__*/function(){// 5 minutes
2
+ function QueryCacheManager(maxCacheSize,maxCacheAge){if(maxCacheSize===void 0){maxCacheSize=100}if(maxCacheAge===void 0){maxCacheAge=5*60*1000}this.cache=new Map;this.maxCacheSize=100;this.maxCacheAge=5*60*1000;this.maxCacheSize=maxCacheSize;this.maxCacheAge=maxCacheAge}var _proto=QueryCacheManager.prototype;_proto.getCachedQuery=function getCachedQuery(componentId,interactionType,state){var key=createCacheKey(componentId,interactionType,state);var entry=this.cache.get(key);if(!entry){return null}var now=Date.now();if(now-entry.timestamp>this.maxCacheAge){this.cache["delete"](key);return null}return entry};_proto.setCachedQuery=function setCachedQuery(componentId,interactionType,state,entry){var key=createCacheKey(componentId,interactionType,state);this.cache.set(key,_extends({},entry,{timestamp:Date.now()}));if(this.cache.size>this.maxCacheSize){this.cleanupCache()}};_proto.invalidateComponent=function invalidateComponent(componentId){var pattern=getInvalidationPattern(componentId);for(var _iterator=_createForOfIteratorHelperLoose(this.cache.keys()),_step;!(_step=_iterator()).done;){var key=_step.value;if(pattern.test(key)){this.cache["delete"](key)}}};_proto.invalidateAll=function invalidateAll(){this.cache.clear()};_proto.isCached=function isCached(componentId,interactionType,state){return this.getCachedQuery(componentId,interactionType,state)!==null};_proto.cleanupCache=function cleanupCache(){var now=Date.now();for(var _iterator2=_createForOfIteratorHelperLoose(this.cache.entries()),_step2;!(_step2=_iterator2()).done;){var _step2$value=_step2.value,_key=_step2$value[0],entry=_step2$value[1];if(now-entry.timestamp>this.maxCacheAge){this.cache["delete"](_key)}}if(this.cache.size>this.maxCacheSize){var entries=Array.from(this.cache.entries());entries.sort(function(a,b){return a[1].timestamp-b[1].timestamp});var entriesToRemove=entries.slice(0,this.cache.size-this.maxCacheSize);for(var _iterator3=_createForOfIteratorHelperLoose(entriesToRemove),_step3;!(_step3=_iterator3()).done;){var _step3$value=_step3.value,key=_step3$value[0];this.cache["delete"](key)}}};_proto.getStats=function getStats(){return{maxAge:this.maxCacheAge,maxSize:this.maxCacheSize,size:this.cache.size}};return QueryCacheManager}();var globalCacheInstance=null;export function getGlobalQueryCache(){if(!globalCacheInstance){globalCacheInstance=new QueryCacheManager}return globalCacheInstance}export function resetGlobalQueryCache(){globalCacheInstance=null}export function configureGlobalQueryCache(maxCacheSize,maxCacheAge){if(maxCacheSize===void 0){maxCacheSize=100}if(maxCacheAge===void 0){maxCacheAge=5*60*1000}globalCacheInstance=new QueryCacheManager(maxCacheSize,maxCacheAge)}
3
+ //# sourceMappingURL=query-cache-singleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-cache-singleton.js","names":["createCacheKey","getInvalidationPattern","QueryCacheManager","maxCacheSize","maxCacheAge","cache","Map","_proto","prototype","getCachedQuery","componentId","interactionType","state","key","entry","get","now","Date","timestamp","setCachedQuery","set","_extends","size","cleanupCache","invalidateComponent","pattern","_iterator","_createForOfIteratorHelperLoose","keys","_step","done","value","test","invalidateAll","clear","isCached","_iterator2","entries","_step2","_step2$value","Array","from","sort","a","b","entriesToRemove","slice","_iterator3","_step3","_step3$value","getStats","maxAge","maxSize","globalCacheInstance","getGlobalQueryCache","resetGlobalQueryCache","configureGlobalQueryCache"],"sources":["../../../src/plugins/helpers/query-cache-singleton.ts"],"sourcesContent":["import {\n QueryCacheEntry,\n InteractionType,\n InteractionState,\n createCacheKey,\n getInvalidationPattern\n} from './query-cache-utils';\n\nclass QueryCacheManager {\n private cache: Map<string, QueryCacheEntry> = new Map();\n private maxCacheSize = 100;\n private maxCacheAge: number = 5 * 60 * 1000; // 5 minutes\n\n constructor(maxCacheSize = 100, maxCacheAge = 5 * 60 * 1000) {\n this.maxCacheSize = maxCacheSize;\n this.maxCacheAge = maxCacheAge;\n }\n\n getCachedQuery(\n componentId: string,\n interactionType: InteractionType,\n state: InteractionState\n ): QueryCacheEntry | null {\n const key = createCacheKey(componentId, interactionType, state);\n const entry = this.cache.get(key);\n \n if (!entry) {\n return null;\n }\n \n const now = Date.now();\n\n if (now - entry.timestamp > this.maxCacheAge) {\n this.cache.delete(key);\n\n return null;\n }\n \n return entry;\n }\n\n setCachedQuery(\n componentId: string,\n interactionType: InteractionType,\n state: InteractionState,\n entry: QueryCacheEntry\n ): void {\n const key = createCacheKey(componentId, interactionType, state);\n this.cache.set(key, {\n ...entry,\n timestamp: Date.now(),\n });\n \n if (this.cache.size > this.maxCacheSize) {\n this.cleanupCache();\n }\n }\n\n invalidateComponent(componentId: string): void {\n const pattern = getInvalidationPattern(componentId);\n \n for (const key of this.cache.keys()) {\n if (pattern.test(key)) {\n this.cache.delete(key);\n }\n }\n }\n\n invalidateAll(): void {\n this.cache.clear();\n }\n\n isCached(\n componentId: string,\n interactionType: InteractionType,\n state: InteractionState\n ): boolean {\n return this.getCachedQuery(componentId, interactionType, state) !== null;\n }\n\n private cleanupCache(): void {\n const now = Date.now();\n \n for (const [key, entry] of this.cache.entries()) {\n if (now - entry.timestamp > this.maxCacheAge) {\n this.cache.delete(key);\n }\n }\n \n if (this.cache.size > this.maxCacheSize) {\n const entries = Array.from(this.cache.entries());\n entries.sort((a, b) => a[1].timestamp - b[1].timestamp);\n \n const entriesToRemove = entries.slice(0, this.cache.size - this.maxCacheSize);\n\n for (const [key] of entriesToRemove) {\n this.cache.delete(key);\n }\n }\n }\n\n getStats(): { maxAge: number; maxSize: number; size: number } {\n return {\n maxAge: this.maxCacheAge,\n maxSize: this.maxCacheSize,\n size: this.cache.size,\n };\n }\n}\n\nlet globalCacheInstance: QueryCacheManager | null = null;\n\nexport function getGlobalQueryCache(): QueryCacheManager {\n if (!globalCacheInstance) {\n globalCacheInstance = new QueryCacheManager();\n }\n\n return globalCacheInstance;\n}\n\nexport function resetGlobalQueryCache(): void {\n globalCacheInstance = null;\n}\n\nexport function configureGlobalQueryCache(maxCacheSize = 100, maxCacheAge = 5 * 60 * 1000): void {\n globalCacheInstance = new QueryCacheManager(maxCacheSize, maxCacheAge);\n}\n\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,48 @@
1
+ export type InteractionType = 'semanticLayerQuery' | 'tableButton';
2
+ export type InteractionState = {
3
+ [key: string]: unknown;
4
+ bodyContent?: unknown;
5
+ chartData?: unknown;
6
+ chartDataFingerprint?: string;
7
+ chartDataLength?: number;
8
+ dataFingerprint?: string;
9
+ dataLength?: number;
10
+ error?: unknown;
11
+ filterValue?: unknown;
12
+ filters?: Record<string, unknown>;
13
+ footerContent?: unknown;
14
+ headerContent?: unknown;
15
+ isMissing?: unknown;
16
+ pageNumber?: number;
17
+ pageSize?: number;
18
+ searchQuery?: string;
19
+ searchValue?: string;
20
+ sortColumn?: string | null;
21
+ sortDirection?: 'asc' | 'desc' | null;
22
+ summaryText?: unknown;
23
+ };
24
+ export type QueryCacheEntry = {
25
+ queryHeadings: string[];
26
+ sqlQuery: string | string[];
27
+ tableButtonExplanations: Array<{
28
+ action: string;
29
+ buttonClassName?: string;
30
+ buttonStyle?: Record<string, unknown>;
31
+ explanation: string;
32
+ formFields?: Record<string, unknown>;
33
+ jsonBody?: unknown;
34
+ operationDescription?: string;
35
+ operationSummary?: string;
36
+ requestUrl?: string;
37
+ }>;
38
+ timestamp: number;
39
+ };
40
+ export type CacheKey = {
41
+ componentId: string;
42
+ interactionType: InteractionType;
43
+ state: InteractionState;
44
+ };
45
+ export declare function createCacheKey(componentId: string, interactionType: InteractionType, interactionState: InteractionState): string;
46
+ export declare function extractInteractionState(componentProps: Record<string, unknown>): InteractionState;
47
+ export declare function areStatesEqual(state1: InteractionState, state2: InteractionState): boolean;
48
+ export declare function getInvalidationPattern(componentId: string): RegExp;
@@ -0,0 +1,3 @@
1
+ function _createForOfIteratorHelperLoose(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(t)return(t=t.call(r)).next.bind(t);if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var o=0;return function(){return o>=r.length?{done:!0}:{done:!1,value:r[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}export function createCacheKey(componentId,interactionType,interactionState){var sortedState=sortObjectKeys(interactionState);var stateString=JSON.stringify(sortedState);return componentId+"::"+interactionType+"::"+stateString}function sortObjectKeys(obj){if(obj===null||obj===undefined){return obj}if(Array.isArray(obj)){return obj.map(function(item){return sortObjectKeys(item)})}if(typeof obj==="object"){var sorted={};var keys=Object.keys(obj).sort();for(var _iterator=_createForOfIteratorHelperLoose(keys),_step;!(_step=_iterator()).done;){var _key=_step.value;sorted[_key]=sortObjectKeys(obj[_key])}return sorted}return obj}export function extractInteractionState(componentProps){var state={};if("pagination"in componentProps&&typeof componentProps.pagination==="object"&&componentProps.pagination){var pagination=componentProps.pagination;if("pageNumber"in pagination&&typeof pagination.pageNumber==="number"){state.pageNumber=pagination.pageNumber}if("pageSize"in pagination&&typeof pagination.pageSize==="number"){state.pageSize=pagination.pageSize}}if("sortColumn"in componentProps){state.sortColumn=componentProps.sortColumn}if("sortDirection"in componentProps){state.sortDirection=componentProps.sortDirection}if("filters"in componentProps&&typeof componentProps.filters==="object"){state.filters=componentProps.filters}if("value"in componentProps){state.filterValue=componentProps.value}if("searchQuery"in componentProps&&typeof componentProps.searchQuery==="string"){state.searchQuery=componentProps.searchQuery}if("searchValue"in componentProps&&typeof componentProps.searchValue==="string"){state.searchValue=componentProps.searchValue}if("data"in componentProps){var data=componentProps.data;if(Array.isArray(data)&&data.length>0){state.dataLength=data.length;var firstRow=data[0];var lastRow=data[data.length-1];if(firstRow&&typeof firstRow==="object"){state.dataFingerprint=JSON.stringify({firstId:firstRow.id||Object.values(firstRow)[0],lastId:lastRow&&typeof lastRow==="object"?lastRow.id||Object.values(lastRow)[0]:null,length:data.length})}}else if(data&&typeof data==="object"&&data.name==="__peak_placeholder"){state.dataFingerprint="__peak_placeholder"}else{state.dataFingerprint="empty"}}if("bodyContent"in componentProps){state.bodyContent=componentProps.bodyContent}if("headerContent"in componentProps){state.headerContent=componentProps.headerContent}if("footerContent"in componentProps){state.footerContent=componentProps.footerContent}if("chartData"in componentProps){var chartData=componentProps.chartData;if(Array.isArray(chartData)){state.chartDataLength=chartData.length;state.chartDataFingerprint=JSON.stringify(chartData)}}if("summaryText"in componentProps){state.summaryText=componentProps.summaryText}if("error"in componentProps){state.error=componentProps.error}if("isMissing"in componentProps){state.isMissing=componentProps.isMissing}return state}export function areStatesEqual(state1,state2){return createCacheKey("test","semanticLayerQuery",state1)===createCacheKey("test","semanticLayerQuery",state2)}export function getInvalidationPattern(componentId){var escapedId=componentId.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");// eslint-disable-next-line security/detect-non-literal-regexp
2
+ return new RegExp("^"+escapedId+"::")}
3
+ //# sourceMappingURL=query-cache-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-cache-utils.js","names":["createCacheKey","componentId","interactionType","interactionState","sortedState","sortObjectKeys","stateString","JSON","stringify","obj","undefined","Array","isArray","map","item","sorted","keys","Object","sort","_iterator","_createForOfIteratorHelperLoose","_step","done","key","value","extractInteractionState","componentProps","state","pagination","pageNumber","pageSize","sortColumn","sortDirection","filters","filterValue","searchQuery","searchValue","data","length","dataLength","firstRow","lastRow","dataFingerprint","firstId","id","values","lastId","name","bodyContent","headerContent","footerContent","chartData","chartDataLength","chartDataFingerprint","summaryText","error","isMissing","areStatesEqual","state1","state2","getInvalidationPattern","escapedId","replace","RegExp"],"sources":["../../../src/plugins/helpers/query-cache-utils.ts"],"sourcesContent":["\nexport type InteractionType = 'semanticLayerQuery' | 'tableButton';\n\nexport type InteractionState = {\n [key: string]: unknown;\n bodyContent?: unknown;\n chartData?: unknown;\n chartDataFingerprint?: string;\n chartDataLength?: number;\n dataFingerprint?: string;\n dataLength?: number;\n error?: unknown;\n filterValue?: unknown;\n filters?: Record<string, unknown>;\n footerContent?: unknown;\n headerContent?: unknown;\n isMissing?: unknown;\n pageNumber?: number;\n pageSize?: number;\n searchQuery?: string;\n searchValue?: string;\n sortColumn?: string | null;\n sortDirection?: 'asc' | 'desc' | null;\n summaryText?: unknown;\n};\n\nexport type QueryCacheEntry = {\n queryHeadings: string[];\n sqlQuery: string | string[];\n tableButtonExplanations: Array<{\n action: string;\n buttonClassName?: string;\n buttonStyle?: Record<string, unknown>;\n explanation: string;\n formFields?: Record<string, unknown>;\n jsonBody?: unknown;\n operationDescription?: string;\n operationSummary?: string;\n requestUrl?: string;\n }>;\n timestamp: number;\n};\n\nexport type CacheKey = {\n componentId: string;\n interactionType: InteractionType;\n state: InteractionState;\n};\n\nexport function createCacheKey(\n componentId: string,\n interactionType: InteractionType,\n interactionState: InteractionState\n): string {\n const sortedState = sortObjectKeys(interactionState);\n \n const stateString = JSON.stringify(sortedState);\n \n return `${componentId}::${interactionType}::${stateString}`;\n}\n\nfunction sortObjectKeys(obj: unknown): unknown {\n if (obj === null || obj === undefined) {\n return obj;\n }\n \n if (Array.isArray(obj)) {\n return obj.map(item => sortObjectKeys(item));\n }\n \n if (typeof obj === 'object') {\n const sorted: Record<string, unknown> = {};\n const keys = Object.keys(obj as Record<string, unknown>).sort();\n \n for (const key of keys) {\n sorted[key] = sortObjectKeys((obj as Record<string, unknown>)[key]);\n }\n \n return sorted;\n }\n \n return obj;\n}\n\nexport function extractInteractionState(componentProps: Record<string, unknown>): InteractionState {\n const state: InteractionState = {};\n \n if ('pagination' in componentProps && typeof componentProps.pagination === 'object' && componentProps.pagination) {\n const pagination = componentProps.pagination as Record<string, unknown>;\n\n if ('pageNumber' in pagination && typeof pagination.pageNumber === 'number') {\n state.pageNumber = pagination.pageNumber;\n }\n\n if ('pageSize' in pagination && typeof pagination.pageSize === 'number') {\n state.pageSize = pagination.pageSize;\n }\n }\n \n if ('sortColumn' in componentProps) {\n state.sortColumn = componentProps.sortColumn as string | null;\n }\n \n if ('sortDirection' in componentProps) {\n state.sortDirection = componentProps.sortDirection as 'asc' | 'desc' | null;\n }\n \n if ('filters' in componentProps && typeof componentProps.filters === 'object') {\n state.filters = componentProps.filters as Record<string, unknown>;\n }\n \n if ('value' in componentProps) {\n state.filterValue = componentProps.value as unknown;\n }\n \n if ('searchQuery' in componentProps && typeof componentProps.searchQuery === 'string') {\n state.searchQuery = componentProps.searchQuery;\n }\n \n if ('searchValue' in componentProps && typeof componentProps.searchValue === 'string') {\n state.searchValue = componentProps.searchValue;\n }\n\n if ('data' in componentProps) {\n const data = componentProps.data;\n \n if (Array.isArray(data) && data.length > 0) {\n state.dataLength = data.length;\n const firstRow = data[0];\n const lastRow = data[data.length - 1];\n \n if (firstRow && typeof firstRow === 'object') {\n state.dataFingerprint = JSON.stringify({\n firstId: (firstRow as Record<string, unknown>).id || Object.values(firstRow)[0],\n lastId: lastRow && typeof lastRow === 'object' \n ? ((lastRow as Record<string, unknown>).id || Object.values(lastRow)[0])\n : null,\n length: data.length\n });\n }\n } else if (data && typeof data === 'object' && (data as Record<string, unknown>).name === '__peak_placeholder') {\n state.dataFingerprint = '__peak_placeholder';\n } else {\n state.dataFingerprint = 'empty';\n }\n }\n \n if ('bodyContent' in componentProps) {\n state.bodyContent = componentProps.bodyContent as unknown;\n }\n \n if ('headerContent' in componentProps) {\n state.headerContent = componentProps.headerContent as unknown;\n }\n \n if ('footerContent' in componentProps) {\n state.footerContent = componentProps.footerContent as unknown;\n }\n \n if ('chartData' in componentProps) {\n const chartData = componentProps.chartData;\n\n if (Array.isArray(chartData)) {\n state.chartDataLength = chartData.length;\n state.chartDataFingerprint = JSON.stringify(chartData);\n }\n }\n \n if ('summaryText' in componentProps) {\n state.summaryText = componentProps.summaryText as unknown;\n }\n \n if ('error' in componentProps) {\n state.error = componentProps.error as unknown;\n }\n \n if ('isMissing' in componentProps) {\n state.isMissing = componentProps.isMissing as unknown;\n }\n \n return state;\n}\n\nexport function areStatesEqual(state1: InteractionState, state2: InteractionState): boolean {\n return createCacheKey('test', 'semanticLayerQuery', state1) === \n createCacheKey('test', 'semanticLayerQuery', state2);\n}\n\nexport function getInvalidationPattern(componentId: string): RegExp {\n const escapedId = componentId.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n // eslint-disable-next-line security/detect-non-literal-regexp\n return new RegExp(`^${escapedId}::`);\n}\n\n"],"mappings":"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","ignoreList":[]}