@peak-ai/canvas 1.6.9-rc.10 → 1.6.9-rc.2

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.
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { Editor } from 'grapesjs';
3
2
  import 'grapesjs/dist/css/grapes.min.css';
4
3
  import type { PageAwareProps } from './types/page';
@@ -7,25 +6,23 @@ type NotificationHandler = (newData: {
7
6
  newProps: Record<string, any>;
8
7
  newAttributes: Record<string, any>;
9
8
  }) => boolean;
10
- export interface GrapesjsCanvasHandle {
11
- performInteractionWithLoaders: (payload: Record<string, any>) => Promise<Record<string, any> | undefined>;
12
- }
13
- declare const GrapejsCanvas: React.ForwardRefExoticComponent<{
9
+ type GrapesjsCanvasProps = {
14
10
  json: any;
15
- mode?: "editor" | "preview" | undefined;
11
+ mode?: 'editor' | 'preview';
16
12
  setEditor: (editor: Editor) => void;
17
13
  performInteraction: (payload: Record<string, any>) => Promise<Record<string, any> | undefined>;
18
- downloadTable?: ((data: {
14
+ downloadTable?: (data: {
19
15
  tableId: string;
20
16
  title: string;
21
17
  limit: number;
22
18
  json: any;
23
19
  headerMapper?: Record<string, string>;
24
- }) => Promise<void>) | undefined;
20
+ }) => Promise<void>;
25
21
  newDataNotifier: (notifHandler: NotificationHandler) => void;
26
22
  setHasChanged: (hasChanged: boolean) => void;
27
23
  isStreaming: boolean;
28
- isModeChangeFromToggle?: boolean | undefined;
29
- isTemplateView?: boolean | undefined;
30
- } & PageAwareProps & React.RefAttributes<GrapesjsCanvasHandle>>;
24
+ isModeChangeFromToggle?: boolean;
25
+ isTemplateView?: boolean;
26
+ } & PageAwareProps;
27
+ declare function GrapejsCanvas(props: GrapesjsCanvasProps): import("react/jsx-runtime").JSX.Element;
31
28
  export default GrapejsCanvas;
package/GrapesjsCanvas.js CHANGED
@@ -1,13 +1,13 @@
1
- import _extends from"@babel/runtime/helpers/extends";import _asyncToGenerator from"@babel/runtime/helpers/asyncToGenerator";import _regeneratorRuntime from"@babel/runtime/regenerator";/* eslint-disable @typescript-eslint/no-explicit-any */import React,{forwardRef,useEffect,useImperativeHandle,useRef,useState}from"react";// eslint-disable-next-line import/no-named-as-default
1
+ import _extends from"@babel/runtime/helpers/extends";import _asyncToGenerator from"@babel/runtime/helpers/asyncToGenerator";import _regeneratorRuntime from"@babel/runtime/regenerator";/* eslint-disable @typescript-eslint/no-explicit-any */import React,{useEffect,useRef,useState}from"react";// eslint-disable-next-line import/no-named-as-default
2
2
  import grapesjs from"grapesjs";import"grapesjs/dist/css/grapes.min.css";import tailwind from"grapesjs-tailwind";import{TypesToRegister}from"./constants";import{toKebabCase}from"./helpers";import{tailwindCompiledCss}from"./helpers/css";import{datePickerCss}from"./helpers/date-picker";import{extractPageMetadata,getCurrentPage,mergeStyles,normalizeMultiPageJson}from"./helpers/page-utils";import{createGrapesjsShadcnGenericPlugin}from"./plugins/grapejs-plugin";import{StyledEditor}from"./index.styles";import{PageProvider,usePageContext}from"./contexts/PageContext";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";function isEditorCanvasReady(editor){try{var canvas=editor.Canvas;if(!canvas){return false}var canvasDoc=canvas.getDocument==null?void 0:canvas.getDocument();if(!canvasDoc){return false}var canvasBody=canvasDoc.body;if(!canvasBody){return false}return true}catch(_unused){return false}}function safeStoreEditor(_x){return _safeStoreEditor.apply(this,arguments)}function _safeStoreEditor(){_safeStoreEditor=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6(editor){var _editor$Pages,wrapper,pages;return _regeneratorRuntime.wrap(function _callee6$(_context6){while(1)switch(_context6.prev=_context6.next){case 0:_context6.prev=0;wrapper=editor.getWrapper();if(wrapper){_context6.next=4;break}return _context6.abrupt("return",null);case 4:pages=((_editor$Pages=editor.Pages)==null||_editor$Pages.getAll==null?void 0:_editor$Pages.getAll())||[];if(!(pages.length===0)){_context6.next=7;break}return _context6.abrupt("return",null);case 7:_context6.next=9;return editor.store();case 9:return _context6.abrupt("return",_context6.sent);case 12:_context6.prev=12;_context6.t0=_context6["catch"](0);// eslint-disable-next-line no-console
3
3
  console.warn("Error during store operation:",_context6.t0);return _context6.abrupt("return",null);case 16:case"end":return _context6.stop()}},_callee6,null,[[0,12]])}));return _safeStoreEditor.apply(this,arguments)}function setComponentProperties(editor,isPreview,isStreaming){if(!editor){return}function setPropertiesRecursively(comp){if(!comp){return}var isMutable=!isPreview&&!isStreaming;comp.set({editable:isMutable,draggable:isMutable,droppable:isMutable&&comp.getName()!=="Shadcn-generic",selectable:isMutable,hoverable:isMutable,highlightable:isMutable,copyable:false,resizable:false,removable:isMutable,badgable:false});comp.set("attributes",_extends({},comp.get("attributes")||{},{isEditable:isMutable}));if(isMutable){comp.set("toolbar",[{attributes:{"class":"fa fa-arrows"},command:"tlb-move"},{attributes:{"class":"fa fa-trash"},command:"tlb-delete"}])}else{comp.set("toolbar",[])}comp.components().forEach(setPropertiesRecursively)}var wrapper=editor.getWrapper();var components=(wrapper==null?void 0:wrapper.find("*"))||[];components.forEach(setPropertiesRecursively);if(isEditorCanvasReady(editor)){if(isPreview){editor.runCommand("core:preview")}else{editor.stopCommand("core:preview")}}}function convertStyles(stylesArray){return stylesArray.map(function(block){var selectors=Array.isArray(block.selectors)?block.selectors.join(", "):block.selectors;var declarations=Object.entries(block.style).map(function(_ref){var prop=_ref[0],value=_ref[1];return toKebabCase(prop)+": "+value+";"}).join(" ");return selectors+" { "+declarations+" }"}).join("\n")}function createActionCardConfig(action){var icon=action.icon,title=action.title,description=action.description;return{type:"shadcn-generic",componentName:"ActionCard",badgable:false,copyable:false,removable:true,draggable:true,componentProps:{icon:icon,headerContent:title,bodyContent:description}}}function expandActions(node){if(node.type==="shadcn-generic"&&node.componentName==="Actions"){var _node$componentProps;var actions=(_node$componentProps=node.componentProps)==null?void 0:_node$componentProps.actions;if(Array.isArray(actions)&&actions.length>0){return _extends({},node,{type:"div",classes:["dashboard-cards"].concat(node.classes||[]),componentName:undefined,componentProps:undefined,components:actions.map(function(action,i){return _extends({},createActionCardConfig(action),{id:node.id+"--action-card-"+i})})})}return node}if(Array.isArray(node.components)){return _extends({},node,{components:node.components.map(expandActions)})}return node}function setInteracting(renderedComponents,components,inProgress){components.forEach(function(component){var componentId=component.componentId,showLoader=component.showLoader;if(!showLoader){return}var gjsModel=renderedComponents[componentId];if(gjsModel){gjsModel.set("attributes",_extends({},gjsModel.get("attributes"),{interactionApiInProgress:inProgress}))}})}function expandActionsComponent(model,actions){model.components("");actions.forEach(function(action){model.append(createActionCardConfig(action))});model.set("type","div");model.addClass("dashboard-cards");model.set("componentName",undefined);model.set("componentProps",{})}function resetStreamingComponent(comp){var attrs=comp.get("attributes")||{};var props=comp.get("componentProps")||{};var cleanedProps=_extends({},props);delete cleanedProps.bodyContent;delete cleanedProps.data;delete cleanedProps.rows;delete cleanedProps.series;delete cleanedProps.pagination;delete cleanedProps.error;delete cleanedProps.isMissing;comp.set({attributes:_extends({},attrs,{loading:true,error:undefined,isMissing:undefined}),componentProps:cleanedProps})}function GrapejsCanvasInternal(_ref2){var _pages$;var json=_ref2.json,_ref2$mode=_ref2.mode,mode=_ref2$mode===void 0?"preview":_ref2$mode,setEditor=_ref2.setEditor,performInteraction=_ref2.performInteraction,downloadTable=_ref2.downloadTable,_ref2$newDataNotifier=_ref2.newDataNotifier,newDataNotifier=_ref2$newDataNotifier===void 0?function(){// no op
4
4
  }:_ref2$newDataNotifier,_ref2$setHasChanged=_ref2.setHasChanged,setHasChanged=_ref2$setHasChanged===void 0?function(){// no op
5
- }:_ref2$setHasChanged,isStreaming=_ref2.isStreaming,_ref2$isModeChangeFro=_ref2.isModeChangeFromToggle,isModeChangeFromToggle=_ref2$isModeChangeFro===void 0?false:_ref2$isModeChangeFro,_ref2$isTemplateView=_ref2.isTemplateView,isTemplateView=_ref2$isTemplateView===void 0?false:_ref2$isTemplateView,externalCurrentPageId=_ref2.currentPageId,externalOnPageChange=_ref2.onPageChange,onRequestPageData=_ref2.onRequestPageData,imperativeRef=_ref2.imperativeRef;var pageContext=usePageContext();var normalizedJson=normalizeMultiPageJson(json);var pages=normalizedJson.pages.map(extractPageMetadata);var effectiveCurrentPageId=externalCurrentPageId||(pageContext==null?void 0:pageContext.currentPageId)||((_pages$=pages[0])==null?void 0:_pages$.id)||"";var editorRef=useRef(null);var editorInstance=useRef(null);var renderedComponents=useRef({});var pageDataCache=useRef({});var currentPageIdRef=useRef(effectiveCurrentPageId);var isStreamingRef=useRef(isStreaming!=null?isStreaming:false);var modeRef=useRef(mode);var isSystemUpdateRef=useRef(false);var lastJsonRef=useRef("");var isEditorAliveRef=useRef(false);var onRequestPageDataRef=useRef(onRequestPageData);var rowNavigationContextRef=useRef(null);var _useState=useState(false),isTransitioning=_useState[0],setIsTransitioning=_useState[1];useEffect(function(){currentPageIdRef.current=effectiveCurrentPageId},[effectiveCurrentPageId]);useEffect(function(){isStreamingRef.current=isStreaming!=null?isStreaming:false},[isStreaming!=null?isStreaming:false]);useEffect(function(){modeRef.current=mode},[mode]);useEffect(function(){onRequestPageDataRef.current=onRequestPageData},[onRequestPageData]);function notificationHandler(props){if(!props){return true}var compId=props.componentId,_props$newProps=props.newProps,newProps=_props$newProps===void 0?{}:_props$newProps,_props$newAttributes=props.newAttributes,newAttributes=_props$newAttributes===void 0?{}:_props$newAttributes;var model=renderedComponents.current[compId];if(!model){var pageId=currentPageIdRef.current;if(pageId){if(!pageDataCache.current[pageId]){pageDataCache.current[pageId]={}}pageDataCache.current[pageId][compId]={newProps:newProps,newAttributes:newAttributes,timestamp:Date.now()}}return false}// Filter out complex placeholder objects by setting them to null
5
+ }:_ref2$setHasChanged,isStreaming=_ref2.isStreaming,_ref2$isModeChangeFro=_ref2.isModeChangeFromToggle,isModeChangeFromToggle=_ref2$isModeChangeFro===void 0?false:_ref2$isModeChangeFro,_ref2$isTemplateView=_ref2.isTemplateView,isTemplateView=_ref2$isTemplateView===void 0?false:_ref2$isTemplateView,externalCurrentPageId=_ref2.currentPageId,externalOnPageChange=_ref2.onPageChange,onRequestPageData=_ref2.onRequestPageData;var pageContext=usePageContext();var normalizedJson=normalizeMultiPageJson(json);var pages=normalizedJson.pages.map(extractPageMetadata);var effectiveCurrentPageId=externalCurrentPageId||(pageContext==null?void 0:pageContext.currentPageId)||((_pages$=pages[0])==null?void 0:_pages$.id)||"";var editorRef=useRef(null);var editorInstance=useRef(null);var renderedComponents=useRef({});var pageDataCache=useRef({});var currentPageIdRef=useRef(effectiveCurrentPageId);var isStreamingRef=useRef(isStreaming!=null?isStreaming:false);var modeRef=useRef(mode);var isSystemUpdateRef=useRef(false);var lastJsonRef=useRef("");var isEditorAliveRef=useRef(false);var onRequestPageDataRef=useRef(onRequestPageData);var rowNavigationContextRef=useRef(null);var _useState=useState(false),isTransitioning=_useState[0],setIsTransitioning=_useState[1];useEffect(function(){currentPageIdRef.current=effectiveCurrentPageId},[effectiveCurrentPageId]);useEffect(function(){isStreamingRef.current=isStreaming!=null?isStreaming:false},[isStreaming!=null?isStreaming:false]);useEffect(function(){modeRef.current=mode},[mode]);useEffect(function(){onRequestPageDataRef.current=onRequestPageData},[onRequestPageData]);function notificationHandler(props){var _model$get;if(!props){return true}var compId=props.componentId,_props$newProps=props.newProps,newProps=_props$newProps===void 0?{}:_props$newProps,_props$newAttributes=props.newAttributes,newAttributes=_props$newAttributes===void 0?{}:_props$newAttributes;var model=renderedComponents.current[compId];if(!model){var pageId=currentPageIdRef.current;if(pageId){if(!pageDataCache.current[pageId]){pageDataCache.current[pageId]={}}pageDataCache.current[pageId][compId]={newProps:newProps,newAttributes:newAttributes,timestamp:Date.now()}}return false}// Filter out complex placeholder objects by setting them to null
6
6
  // This ensures placeholder values are properly cleared and don't cause stale data issues
7
7
  var filteredProps=_extends({},newProps);Object.keys(filteredProps).forEach(function(key){var value=filteredProps[key];if(value&&typeof value==="object"&&value.name==="__peak_placeholder"){filteredProps[key]=null}});var parsedNewProps=_extends({},filteredProps);if(filteredProps.pagination){parsedNewProps.pagination=_extends({},model.get("componentProps").pagination||{},filteredProps.pagination)}// Handle Actions component: expand into ActionCards when data arrives via streaming
8
- var isActionsComponent=model.get("componentName")==="Actions";var hasValidActionsData=parsedNewProps.actions&&parsedNewProps.actions!==null&&Array.isArray(parsedNewProps.actions)&&parsedNewProps.actions.length>0;if(isActionsComponent&&hasValidActionsData){var _model$components$at;var isAlreadyExpanded=model.components().length>0&&((_model$components$at=model.components().at(0))==null?void 0:_model$components$at.get("componentName"))==="ActionCard";if(!isAlreadyExpanded&&editorInstance.current&&isEditorAliveRef.current){expandActionsComponent(model,parsedNewProps.actions);return true}}model.set("componentProps",_extends({},model.get("componentProps"),parsedNewProps));var currentAttrs=model.get("attributes")||{};var hasRealValue=(parsedNewProps==null?void 0:parsedNewProps.bodyContent)!==undefined&&(parsedNewProps==null?void 0:parsedNewProps.bodyContent)!==null||(parsedNewProps==null?void 0:parsedNewProps.data)!==undefined&&(parsedNewProps==null?void 0:parsedNewProps.data)!==null||(parsedNewProps==null?void 0:parsedNewProps.rows)!==undefined&&(parsedNewProps==null?void 0:parsedNewProps.rows)!==null||(parsedNewProps==null?void 0:parsedNewProps.series)!==undefined&&(parsedNewProps==null?void 0:parsedNewProps.series)!==null;var shouldStopLoading=hasRealValue||(newAttributes==null?void 0:newAttributes.error)||(parsedNewProps==null?void 0:parsedNewProps.isMissing);model.set("attributes",_extends({},currentAttrs,newAttributes,shouldStopLoading?{loading:false}:{}));if(model.view){model.view.render()}return true}useEffect(function(){newDataNotifier(notificationHandler)},[]);function handleNavigateToPage(targetPageId,rowContext){rowNavigationContextRef.current=rowContext!=null?rowContext:null;if(externalOnPageChange){externalOnPageChange(targetPageId,rowContext)}if(pageContext){pageContext.navigateToPage(targetPageId,rowContext)}}function downloadTableWrapper(_x2){return _downloadTableWrapper.apply(this,arguments)}function _downloadTableWrapper(){_downloadTableWrapper=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(data){var updatedJson;return _regeneratorRuntime.wrap(function _callee4$(_context4){while(1)switch(_context4.prev=_context4.next){case 0:if(downloadTable){_context4.next=2;break}return _context4.abrupt("return");case 2:updatedJson=null;if(!editorInstance.current){_context4.next=7;break}_context4.next=6;return safeStoreEditor(editorInstance.current);case 6:updatedJson=_context4.sent;case 7:_context4.next=9;return downloadTable(_extends({},data,{json:updatedJson}));case 9:case"end":return _context4.stop()}},_callee4)}));return _downloadTableWrapper.apply(this,arguments)}function performInteractionWrapper(_x3){return _performInteractionWrapper.apply(this,arguments)}function _performInteractionWrapper(){_performInteractionWrapper=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(payload){var updatedJson,apiResponse,componentUpdates;return _regeneratorRuntime.wrap(function _callee5$(_context5){while(1)switch(_context5.prev=_context5.next){case 0:updatedJson=null;if(!editorInstance.current){_context5.next=5;break}_context5.next=4;return safeStoreEditor(editorInstance.current);case 4:updatedJson=_context5.sent;case 5:setInteracting(renderedComponents.current,payload.affectedComponents,true);_context5.prev=6;_context5.next=9;return performInteraction(_extends({},payload,{json:updatedJson}));case 9:apiResponse=_context5.sent;componentUpdates=apiResponse||{};Object.entries(componentUpdates).forEach(function(_ref8){var key=_ref8[0],value=_ref8[1];var model=renderedComponents.current[key];if(model){model.set("attributes",_extends({},model.get("attributes"),{error:undefined}));model.set("componentProps",_extends({},model.get("componentProps"),value,{error:undefined,isMissing:undefined}))}});return _context5.abrupt("return",componentUpdates);case 15:_context5.prev=15;_context5.t0=_context5["catch"](6);payload.affectedComponents.forEach(function(componentId){var model=renderedComponents.current[componentId];if(model){var errorMessage=_context5.t0 instanceof Error?_context5.t0.message:"Something went wrong. Please try again.";model.set("attributes",_extends({},model.get("attributes"),{error:errorMessage}));model.set("componentProps",_extends({},model.get("componentProps"),{error:errorMessage,isMissing:undefined}))}});throw _context5.t0;case 19:_context5.prev=19;setInteracting(renderedComponents.current,payload.affectedComponents,false);return _context5.finish(19);case 22:case"end":return _context5.stop()}},_callee5,null,[[6,15,19,22]])}));return _performInteractionWrapper.apply(this,arguments)}useImperativeHandle(imperativeRef,function(){return{performInteractionWithLoaders:performInteractionWrapper}},[]);useEffect(function(){if(!editorRef.current){return function(){// no op
8
+ var isActionsComponent=model.get("componentName")==="Actions";var hasValidActionsData=parsedNewProps.actions&&parsedNewProps.actions!==null&&Array.isArray(parsedNewProps.actions)&&parsedNewProps.actions.length>0;if(isActionsComponent&&hasValidActionsData){var _model$components$at;var isAlreadyExpanded=model.components().length>0&&((_model$components$at=model.components().at(0))==null?void 0:_model$components$at.get("componentName"))==="ActionCard";if(!isAlreadyExpanded&&editorInstance.current&&isEditorAliveRef.current){expandActionsComponent(model,parsedNewProps.actions);return true}}model.set("componentProps",_extends({},model.get("componentProps"),parsedNewProps,{headerMapper:((_model$get=model.get("componentProps"))==null?void 0:_model$get.headerMapper)||parsedNewProps.headerMapper}));var currentAttrs=model.get("attributes")||{};var hasRealValue=(parsedNewProps==null?void 0:parsedNewProps.bodyContent)!==undefined&&(parsedNewProps==null?void 0:parsedNewProps.bodyContent)!==null||(parsedNewProps==null?void 0:parsedNewProps.data)!==undefined&&(parsedNewProps==null?void 0:parsedNewProps.data)!==null||(parsedNewProps==null?void 0:parsedNewProps.rows)!==undefined&&(parsedNewProps==null?void 0:parsedNewProps.rows)!==null||(parsedNewProps==null?void 0:parsedNewProps.series)!==undefined&&(parsedNewProps==null?void 0:parsedNewProps.series)!==null;var shouldStopLoading=hasRealValue||(newAttributes==null?void 0:newAttributes.error)||(parsedNewProps==null?void 0:parsedNewProps.isMissing);model.set("attributes",_extends({},currentAttrs,newAttributes,shouldStopLoading?{loading:false}:{}));if(model.view){model.view.render()}return true}useEffect(function(){newDataNotifier(notificationHandler)},[]);function handleNavigateToPage(targetPageId,rowContext){rowNavigationContextRef.current=rowContext!=null?rowContext:null;if(externalOnPageChange){externalOnPageChange(targetPageId,rowContext)}if(pageContext){pageContext.navigateToPage(targetPageId,rowContext)}}function downloadTableWrapper(_x2){return _downloadTableWrapper.apply(this,arguments)}function _downloadTableWrapper(){_downloadTableWrapper=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(data){var updatedJson;return _regeneratorRuntime.wrap(function _callee4$(_context4){while(1)switch(_context4.prev=_context4.next){case 0:if(downloadTable){_context4.next=2;break}return _context4.abrupt("return");case 2:updatedJson=null;if(!editorInstance.current){_context4.next=7;break}_context4.next=6;return safeStoreEditor(editorInstance.current);case 6:updatedJson=_context4.sent;case 7:_context4.next=9;return downloadTable(_extends({},data,{json:updatedJson}));case 9:case"end":return _context4.stop()}},_callee4)}));return _downloadTableWrapper.apply(this,arguments)}function performInteractionWrapper(_x3){return _performInteractionWrapper.apply(this,arguments)}function _performInteractionWrapper(){_performInteractionWrapper=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(payload){var updatedJson,apiResponse,componentUpdates;return _regeneratorRuntime.wrap(function _callee5$(_context5){while(1)switch(_context5.prev=_context5.next){case 0:updatedJson=null;if(!editorInstance.current){_context5.next=5;break}_context5.next=4;return safeStoreEditor(editorInstance.current);case 4:updatedJson=_context5.sent;case 5:setInteracting(renderedComponents.current,payload.affectedComponents,true);_context5.prev=6;_context5.next=9;return performInteraction(_extends({},payload,{json:updatedJson}));case 9:apiResponse=_context5.sent;componentUpdates=apiResponse||{};Object.entries(componentUpdates).forEach(function(_ref8){var key=_ref8[0],value=_ref8[1];var model=renderedComponents.current[key];if(model){model.set("attributes",_extends({},model.get("attributes"),{error:undefined}));model.set("componentProps",_extends({},model.get("componentProps"),value,{error:undefined,isMissing:undefined}))}});return _context5.abrupt("return",componentUpdates);case 15:_context5.prev=15;_context5.t0=_context5["catch"](6);payload.affectedComponents.forEach(function(componentId){var model=renderedComponents.current[componentId];if(model){var errorMessage=_context5.t0 instanceof Error?_context5.t0.message:"Something went wrong. Please try again.";model.set("attributes",_extends({},model.get("attributes"),{error:errorMessage}));model.set("componentProps",_extends({},model.get("componentProps"),{error:errorMessage,isMissing:undefined}))}});throw _context5.t0;case 19:_context5.prev=19;setInteracting(renderedComponents.current,payload.affectedComponents,false);return _context5.finish(19);case 22:case"end":return _context5.stop()}},_callee5,null,[[6,15,19,22]])}));return _performInteractionWrapper.apply(this,arguments)}useEffect(function(){if(!editorRef.current){return function(){// no op
9
9
  }}if(editorInstance.current){editorInstance.current.destroy();editorInstance.current=null;isEditorAliveRef.current=false}var currentMode=modeRef.current;var editor=grapesjs.init({container:editorRef.current,height:"100%",plugins:[tailwind,createGrapesjsShadcnGenericPlugin(modeRef,performInteractionWrapper,renderedComponents.current,setHasChanged,isTemplateView,isStreamingRef,handleNavigateToPage,downloadTableWrapper)],storageManager:{type:"none"},richTextEditor:{actions:["bold","italic","underline","strikethrough"]},canvas:{customBadgeLabel:function customBadgeLabel(component){var tagName=component.get("tagName");return tagName==="body"?"":tagName||""}}});isEditorAliveRef.current=true;var injectionAttempts=0;function injectStylesEarly(){var _editor$Canvas;var iframeDoc=(_editor$Canvas=editor.Canvas)==null||_editor$Canvas.getDocument==null?void 0:_editor$Canvas.getDocument();if(iframeDoc&&iframeDoc.head){if(!iframeDoc.head.querySelector("[data-grapesjs-styles]")){var style=iframeDoc.createElement("style");var fullCss="\n "+tailwindCompiledCss+"\n "+datePickerCss+"\n ::-webkit-scrollbar {\n width: 0px;\n height: 0px;\n }\n html, body {\n overflow: auto !important;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n ";style.innerHTML=fullCss;style.setAttribute("type","text/css");style.setAttribute("data-grapesjs-styles","true");iframeDoc.head.appendChild(style)}}else if(injectionAttempts<50){injectionAttempts+=1;requestAnimationFrame(injectStylesEarly)}}requestAnimationFrame(injectStylesEarly);function checkDirty(){return _checkDirty.apply(this,arguments)}function _checkDirty(){_checkDirty=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(){var stored,newJson;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:if(!(isStreamingRef.current||isSystemUpdateRef.current)){_context2.next=2;break}return _context2.abrupt("return");case 2:if(!(!isEditorAliveRef.current||!editorInstance.current)){_context2.next=4;break}return _context2.abrupt("return");case 4:stored=null;_context2.next=7;return safeStoreEditor(editorInstance.current);case 7:stored=_context2.sent;if(stored){_context2.next=10;break}return _context2.abrupt("return");case 10:newJson=JSON.stringify(stored);if(newJson!==lastJsonRef.current){setHasChanged(true);lastJsonRef.current=newJson}case 12:case"end":return _context2.stop()}},_callee2)}));return _checkDirty.apply(this,arguments)}var debouncedCheckDirty=function(){var timeout=null;return function(){if(timeout){clearTimeout(timeout)}timeout=setTimeout(checkDirty,200)}}();["component:add","component:remove","component:update:content","style:update","component:drag:end","rte:change"].forEach(function(evt){editor.on(evt,debouncedCheckDirty)});editor.on("component:update",function(model,prop){if(["attributes","componentProps","content"].includes(prop)){debouncedCheckDirty()}});// Tailwind CSS rules aren't fully added to our component
10
10
  // So, adding them from here!
11
11
  editor.on("load",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(){var canvasDoc,canvasHead,style,fullCss,storeResult;return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:canvasDoc=editor.Canvas.getDocument();canvasHead=canvasDoc.head;if(!canvasHead.querySelector("[data-grapesjs-styles]")){style=canvasDoc.createElement("style");fullCss="\n "+tailwindCompiledCss+"\n "+datePickerCss+"\n ::-webkit-scrollbar {\n width: 0px;\n height: 0px;\n }\n html, body {\n overflow: auto !important;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n ";style.innerHTML=fullCss;style.setAttribute("type","text/css");style.setAttribute("data-grapesjs-styles","true");canvasHead.appendChild(style)}isSystemUpdateRef.current=true;_context.next=6;return safeStoreEditor(editor);case 6:storeResult=_context.sent;if(storeResult){lastJsonRef.current=JSON.stringify(storeResult)}isSystemUpdateRef.current=false;setComponentProperties(editor,currentMode==="preview",isStreamingRef.current);case 10:case"end":return _context.stop()}},_callee)})));editorInstance.current=editor;if(setEditor){setEditor(editor)}TypesToRegister.forEach(function(_ref4){var type=_ref4.type,tagName=_ref4.tagName;if(!editor.DomComponents.getType(type)){editor.DomComponents.addType(type,{model:{defaults:{tagName:tagName}},view:{}})}});return function cleanup(){editor.destroy();isEditorAliveRef.current=false}},[]);useEffect(function(){var _json$pages;if(json&&((_json$pages=json.pages)==null?void 0:_json$pages.length)>0){var _currentPage$frames,_editorInstance$curre3;if(!isEditorAliveRef.current||!editorInstance.current){return}var pageNormalizedJson=normalizeMultiPageJson(json);var currentPage=getCurrentPage(pageNormalizedJson.pages,effectiveCurrentPageId);if(!currentPage||!((_currentPage$frames=currentPage.frames)!=null&&_currentPage$frames.length)){return}isSystemUpdateRef.current=true;var raw=currentPage.frames[0].component;var processed=expandActions(raw);try{var _editorInstance$curre;(_editorInstance$curre=editorInstance.current)==null||_editorInstance$curre.setComponents(processed);setTimeout(function(){if(editorInstance.current&&isEditorAliveRef.current){var _editorInstance$curre2;var domComponents=(_editorInstance$curre2=editorInstance.current)==null?void 0:_editorInstance$curre2.DomComponents;if(domComponents){var _domComponents$getWra;var allComponents=domComponents==null||(_domComponents$getWra=domComponents.getWrapper())==null?void 0:_domComponents$getWra.findType("shadcn-generic");allComponents==null||allComponents.forEach(function(comp){if(comp.get("componentName")==="Tabs"){var _comp$view;(_comp$view=comp.view)==null||_comp$view.render()}})}}},100)}catch(error){// eslint-disable-next-line no-console
12
- console.error("Error during component restoration:",error)}var globalStyles=pageNormalizedJson.styles||[];var pageStyles=currentPage.styles||[];var mergedStyles=mergeStyles(globalStyles,pageStyles);var cssText=convertStyles(mergedStyles);(_editorInstance$curre3=editorInstance.current)==null||_editorInstance$curre3.setStyle(cssText);if(onRequestPageDataRef.current){var _rowNavigationContext;var isMultiPage=Boolean(pageNormalizedJson.isMultiPage);var pageId=isMultiPage?currentPage.id:"";var rowContext=(_rowNavigationContext=rowNavigationContextRef.current)!=null?_rowNavigationContext:undefined;onRequestPageDataRef.current(pageId,[],rowContext);rowNavigationContextRef.current=null}if(editorInstance.current){setComponentProperties(editorInstance.current,mode==="preview",isStreaming);setTimeout(function(){if(editorInstance.current&&isEditorAliveRef.current&&mode==="preview"){setComponentProperties(editorInstance.current,true,isStreaming)}},50)}setTimeout(function(){if(currentPage&&pageDataCache.current[currentPage.id]){var cachedData=pageDataCache.current[currentPage.id];Object.entries(cachedData).forEach(function(_ref5){var componentId=_ref5[0],data=_ref5[1];var model=renderedComponents.current[componentId];if(model&&data){if(data.newProps){model.set("componentProps",_extends({},model.get("componentProps"),data.newProps))}var updatedAttributes=_extends({},model.get("attributes"),data.newAttributes||{});model.set("attributes",updatedAttributes);if(model.view){model.view.render()}}});delete pageDataCache.current[currentPage.id]}},150);var cacheCheckInterval=setInterval(function(){if(!currentPage||!pageDataCache.current[currentPage.id]){return}var cachedData=pageDataCache.current[currentPage.id];var appliedAny=false;Object.entries(cachedData).forEach(function(_ref6){var componentId=_ref6[0],data=_ref6[1];var model=renderedComponents.current[componentId];if(model&&data){if(data.newProps){model.set("componentProps",_extends({},model.get("componentProps"),data.newProps))}var updatedAttributes=_extends({},model.get("attributes"),data.newAttributes||{});model.set("attributes",updatedAttributes);if(model.view){model.view.render()}appliedAny=true}});if(appliedAny){Object.keys(cachedData).forEach(function(componentId){if(renderedComponents.current[componentId]){delete cachedData[componentId]}});if(Object.keys(cachedData).length===0){delete pageDataCache.current[currentPage.id]}}},100);setTimeout(function(){clearInterval(cacheCheckInterval)},5000);setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(){var storeResult;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:if(!(editorInstance.current&&isEditorAliveRef.current)){_context3.next=6;break}_context3.next=3;return safeStoreEditor(editorInstance.current);case 3:storeResult=_context3.sent;if(storeResult){lastJsonRef.current=JSON.stringify(storeResult)}isSystemUpdateRef.current=false;case 6:case"end":return _context3.stop()}},_callee3)})),100)}},[json,effectiveCurrentPageId]);useEffect(function(){var editor=editorInstance.current;if(!editor||!isEditorAliveRef.current){return}if(isModeChangeFromToggle){setIsTransitioning(true)}setComponentProperties(editorInstance.current,mode==="preview",isStreaming!=null?isStreaming:false);var wrapper=editor.getWrapper();var shadcnComponents=(wrapper==null?void 0:wrapper.find("[data-gjs-type=\"shadcn-generic\"]"))||[];shadcnComponents.forEach(function(comp){if(comp.view&&typeof comp.view.render==="function"){comp.view.render()}});if(isModeChangeFromToggle){requestAnimationFrame(function(){setIsTransitioning(false)})}},[mode,isStreaming!=null?isStreaming:false]);useEffect(function(){var editor=editorInstance.current;var currentIsStreaming=isStreaming!=null?isStreaming:false;var prevIsStreaming=isStreamingRef.current;if(editor&&isEditorAliveRef.current&&currentIsStreaming&&!prevIsStreaming){var wrapper=editor.getWrapper();var shadcnComponents=(wrapper==null?void 0:wrapper.findType("shadcn-generic"))||[];shadcnComponents.forEach(function(comp){resetStreamingComponent(comp)})}isStreamingRef.current=currentIsStreaming},[isStreaming]);return/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(StyledEditor,{}),/*#__PURE__*/_jsx("div",{ref:editorRef,id:"grapesjs-editor",style:{opacity:isTransitioning?0:1,transition:"opacity 0.15s ease-in-out"}})]})}var GrapejsCanvas=/*#__PURE__*/forwardRef(function(props,ref){var _pages$2;var existingContext=usePageContext();if(existingContext){return/*#__PURE__*/_jsx(GrapejsCanvasInternal,_extends({},props,{imperativeRef:ref}))}var normalizedJson=normalizeMultiPageJson(props.json);var pages=normalizedJson.pages.map(extractPageMetadata);var initialPageId=props.currentPageId||((_pages$2=pages[0])==null?void 0:_pages$2.id)||"";return/*#__PURE__*/_jsx(PageProvider,{pages:pages,initialPageId:initialPageId,onPageChange:props.onPageChange,children:/*#__PURE__*/_jsx(GrapejsCanvasInternal,_extends({},props,{imperativeRef:ref}))})});export default GrapejsCanvas;
12
+ console.error("Error during component restoration:",error)}var globalStyles=pageNormalizedJson.styles||[];var pageStyles=currentPage.styles||[];var mergedStyles=mergeStyles(globalStyles,pageStyles);var cssText=convertStyles(mergedStyles);(_editorInstance$curre3=editorInstance.current)==null||_editorInstance$curre3.setStyle(cssText);if(onRequestPageDataRef.current){var _rowNavigationContext;var isMultiPage=Boolean(pageNormalizedJson.isMultiPage);var pageId=isMultiPage?currentPage.id:"";var rowContext=(_rowNavigationContext=rowNavigationContextRef.current)!=null?_rowNavigationContext:undefined;onRequestPageDataRef.current(pageId,[],rowContext);rowNavigationContextRef.current=null}if(editorInstance.current){setComponentProperties(editorInstance.current,mode==="preview",isStreaming);setTimeout(function(){if(editorInstance.current&&isEditorAliveRef.current&&mode==="preview"){setComponentProperties(editorInstance.current,true,isStreaming)}},50)}setTimeout(function(){if(currentPage&&pageDataCache.current[currentPage.id]){var cachedData=pageDataCache.current[currentPage.id];Object.entries(cachedData).forEach(function(_ref5){var componentId=_ref5[0],data=_ref5[1];var model=renderedComponents.current[componentId];if(model&&data){if(data.newProps){model.set("componentProps",_extends({},model.get("componentProps"),data.newProps))}var updatedAttributes=_extends({},model.get("attributes"),data.newAttributes||{});model.set("attributes",updatedAttributes);if(model.view){model.view.render()}}});delete pageDataCache.current[currentPage.id]}},150);var cacheCheckInterval=setInterval(function(){if(!currentPage||!pageDataCache.current[currentPage.id]){return}var cachedData=pageDataCache.current[currentPage.id];var appliedAny=false;Object.entries(cachedData).forEach(function(_ref6){var componentId=_ref6[0],data=_ref6[1];var model=renderedComponents.current[componentId];if(model&&data){if(data.newProps){model.set("componentProps",_extends({},model.get("componentProps"),data.newProps))}var updatedAttributes=_extends({},model.get("attributes"),data.newAttributes||{});model.set("attributes",updatedAttributes);if(model.view){model.view.render()}appliedAny=true}});if(appliedAny){Object.keys(cachedData).forEach(function(componentId){if(renderedComponents.current[componentId]){delete cachedData[componentId]}});if(Object.keys(cachedData).length===0){delete pageDataCache.current[currentPage.id]}}},100);setTimeout(function(){clearInterval(cacheCheckInterval)},5000);setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(){var storeResult;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:if(!(editorInstance.current&&isEditorAliveRef.current)){_context3.next=6;break}_context3.next=3;return safeStoreEditor(editorInstance.current);case 3:storeResult=_context3.sent;if(storeResult){lastJsonRef.current=JSON.stringify(storeResult)}isSystemUpdateRef.current=false;case 6:case"end":return _context3.stop()}},_callee3)})),100)}},[json,effectiveCurrentPageId]);useEffect(function(){var editor=editorInstance.current;if(!editor||!isEditorAliveRef.current){return}if(isModeChangeFromToggle){setIsTransitioning(true)}setComponentProperties(editorInstance.current,mode==="preview",isStreaming!=null?isStreaming:false);var wrapper=editor.getWrapper();var shadcnComponents=(wrapper==null?void 0:wrapper.find("[data-gjs-type=\"shadcn-generic\"]"))||[];shadcnComponents.forEach(function(comp){if(comp.view&&typeof comp.view.render==="function"){comp.view.render()}});if(isModeChangeFromToggle){requestAnimationFrame(function(){setIsTransitioning(false)})}},[mode,isStreaming!=null?isStreaming:false]);useEffect(function(){var editor=editorInstance.current;var currentIsStreaming=isStreaming!=null?isStreaming:false;var prevIsStreaming=isStreamingRef.current;if(editor&&isEditorAliveRef.current&&currentIsStreaming&&!prevIsStreaming){var wrapper=editor.getWrapper();var shadcnComponents=(wrapper==null?void 0:wrapper.findType("shadcn-generic"))||[];shadcnComponents.forEach(function(comp){resetStreamingComponent(comp)})}isStreamingRef.current=currentIsStreaming},[isStreaming]);return/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(StyledEditor,{}),/*#__PURE__*/_jsx("div",{ref:editorRef,id:"grapesjs-editor",style:{opacity:isTransitioning?0:1,transition:"opacity 0.15s ease-in-out"}})]})}function GrapejsCanvas(props){var _pages$2;var existingContext=usePageContext();if(existingContext){return/*#__PURE__*/_jsx(GrapejsCanvasInternal,_extends({},props))}var normalizedJson=normalizeMultiPageJson(props.json);var pages=normalizedJson.pages.map(extractPageMetadata);var initialPageId=props.currentPageId||((_pages$2=pages[0])==null?void 0:_pages$2.id)||"";return/*#__PURE__*/_jsx(PageProvider,{pages:pages,initialPageId:initialPageId,onPageChange:props.onPageChange,children:/*#__PURE__*/_jsx(GrapejsCanvasInternal,_extends({},props))})}export default GrapejsCanvas;
13
13
  //# sourceMappingURL=GrapesjsCanvas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GrapesjsCanvas.js","names":["React","forwardRef","useEffect","useImperativeHandle","useRef","useState","grapesjs","tailwind","TypesToRegister","toKebabCase","tailwindCompiledCss","datePickerCss","extractPageMetadata","getCurrentPage","mergeStyles","normalizeMultiPageJson","createGrapesjsShadcnGenericPlugin","StyledEditor","PageProvider","usePageContext","jsx","_jsx","jsxs","_jsxs","isEditorCanvasReady","editor","canvas","Canvas","canvasDoc","getDocument","canvasBody","body","_unused","safeStoreEditor","_x","_safeStoreEditor","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee6","_editor$Pages","wrapper","pages","wrap","_callee6$","_context6","prev","next","getWrapper","abrupt","Pages","getAll","length","store","sent","t0","console","warn","stop","setComponentProperties","isPreview","isStreaming","setPropertiesRecursively","comp","isMutable","set","editable","draggable","droppable","getName","selectable","hoverable","highlightable","copyable","resizable","removable","badgable","_extends","get","isEditable","attributes","command","components","forEach","find","runCommand","stopCommand","convertStyles","stylesArray","map","block","selectors","Array","isArray","join","declarations","Object","entries","style","_ref","prop","value","createActionCardConfig","action","icon","title","description","type","componentName","componentProps","headerContent","bodyContent","expandActions","node","_node$componentProps","actions","classes","concat","undefined","i","id","setInteracting","renderedComponents","inProgress","component","componentId","showLoader","gjsModel","interactionApiInProgress","expandActionsComponent","model","append","addClass","resetStreamingComponent","attrs","props","cleanedProps","data","rows","series","pagination","error","isMissing","loading","GrapejsCanvasInternal","_ref2","_pages$","json","_ref2$mode","mode","setEditor","performInteraction","downloadTable","_ref2$newDataNotifier","newDataNotifier","_ref2$setHasChanged","setHasChanged","_ref2$isModeChangeFro","isModeChangeFromToggle","_ref2$isTemplateView","isTemplateView","externalCurrentPageId","currentPageId","externalOnPageChange","onPageChange","onRequestPageData","imperativeRef","pageContext","normalizedJson","effectiveCurrentPageId","editorRef","editorInstance","pageDataCache","currentPageIdRef","isStreamingRef","modeRef","isSystemUpdateRef","lastJsonRef","isEditorAliveRef","onRequestPageDataRef","rowNavigationContextRef","_useState","isTransitioning","setIsTransitioning","current","notificationHandler","compId","_props$newProps","newProps","_props$newAttributes","newAttributes","pageId","timestamp","Date","now","filteredProps","keys","key","name","parsedNewProps","isActionsComponent","hasValidActionsData","_model$components$at","isAlreadyExpanded","at","currentAttrs","hasRealValue","shouldStopLoading","view","render","handleNavigateToPage","targetPageId","rowContext","navigateToPage","downloadTableWrapper","_x2","_downloadTableWrapper","_callee4","updatedJson","_callee4$","_context4","performInteractionWrapper","_x3","_performInteractionWrapper","_callee5","payload","apiResponse","componentUpdates","_callee5$","_context5","affectedComponents","_ref8","errorMessage","Error","message","finish","performInteractionWithLoaders","destroy","currentMode","init","container","height","plugins","storageManager","richTextEditor","customBadgeLabel","tagName","injectionAttempts","injectStylesEarly","_editor$Canvas","iframeDoc","head","querySelector","createElement","fullCss","innerHTML","setAttribute","appendChild","requestAnimationFrame","checkDirty","_checkDirty","_callee2","stored","newJson","_callee2$","_context2","JSON","stringify","debouncedCheckDirty","timeout","clearTimeout","setTimeout","evt","on","includes","_callee","canvasHead","storeResult","_callee$","_context","_ref4","DomComponents","getType","addType","defaults","cleanup","_json$pages","_currentPage$frames","_editorInstance$curre3","pageNormalizedJson","currentPage","frames","raw","processed","_editorInstance$curre","setComponents","_editorInstance$curre2","domComponents","_domComponents$getWra","allComponents","findType","_comp$view","globalStyles","styles","pageStyles","mergedStyles","cssText","setStyle","_rowNavigationContext","isMultiPage","Boolean","cachedData","_ref5","updatedAttributes","cacheCheckInterval","setInterval","appliedAny","_ref6","clearInterval","_callee3","_callee3$","_context3","shadcnComponents","currentIsStreaming","prevIsStreaming","Fragment","children","ref","opacity","transition","GrapejsCanvas","_pages$2","existingContext","initialPageId"],"sources":["../src/GrapesjsCanvas.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';\n// eslint-disable-next-line import/no-named-as-default\nimport grapesjs, { Component, Editor } from 'grapesjs';\nimport 'grapesjs/dist/css/grapes.min.css';\nimport tailwind from 'grapesjs-tailwind';\n\nimport { TypesToRegister } from './constants';\nimport { toKebabCase } from './helpers';\nimport { tailwindCompiledCss } from './helpers/css';\nimport { datePickerCss } from './helpers/date-picker';\nimport {\n extractPageMetadata,\n getCurrentPage,\n mergeStyles,\n normalizeMultiPageJson,\n} from './helpers/page-utils';\nimport { createGrapesjsShadcnGenericPlugin } from './plugins/grapejs-plugin';\nimport { StyledEditor } from './index.styles';\nimport type { PageAwareProps } from './types/page';\nimport { PageProvider, usePageContext } from './contexts/PageContext';\n\ntype NotificationHandler = (newData: {\n componentId: string;\n newProps: Record<string, any>;\n newAttributes: Record<string, any>;\n}) => boolean;\n\ntype GrapesjsCanvasProps = {\n json: any;\n mode?: 'editor' | 'preview';\n setEditor: (editor: Editor) => void;\n performInteraction: (payload: Record<string, any>) => Promise<Record<string, any> | undefined>;\n downloadTable?: (data: {\n tableId: string;\n title: string;\n limit: number;\n json: any;\n headerMapper?: Record<string, string>;\n }) => Promise<void>;\n newDataNotifier: (notifHandler: NotificationHandler) => void;\n setHasChanged: (hasChanged: boolean) => void;\n isStreaming: boolean;\n isModeChangeFromToggle?: boolean;\n isTemplateView?: boolean;\n} & PageAwareProps;\n\nexport interface GrapesjsCanvasHandle {\n performInteractionWithLoaders: (payload: Record<string, any>) => Promise<Record<string, any> | undefined>;\n}\n\nfunction isEditorCanvasReady(editor: Editor): boolean {\n try {\n const canvas = editor.Canvas;\n\n if (!canvas) {\n return false;\n }\n\n const canvasDoc = canvas.getDocument?.();\n\n if (!canvasDoc) {\n return false;\n }\n\n const canvasBody = canvasDoc.body;\n\n if (!canvasBody) {\n return false;\n }\n\n return true;\n } catch {\n return false;\n }\n}\n\nasync function safeStoreEditor(editor: Editor): Promise<any | null> {\n try {\n const wrapper = editor.getWrapper();\n\n if (!wrapper) {\n return null;\n }\n\n const pages = editor.Pages?.getAll?.() || [];\n\n if (pages.length === 0) {\n return null;\n }\n\n return await editor.store();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn('Error during store operation:', error);\n\n return null;\n }\n}\n\nfunction setComponentProperties(editor: Editor, isPreview: boolean, isStreaming: boolean): void {\n if (!editor) {\n return;\n }\n\n function setPropertiesRecursively(comp: Component) {\n if (!comp) {\n return;\n }\n\n const isMutable = !isPreview && !isStreaming;\n\n comp.set({\n editable: isMutable,\n draggable: isMutable,\n droppable: isMutable && comp.getName() !== 'Shadcn-generic',\n selectable: isMutable,\n hoverable: isMutable,\n highlightable: isMutable,\n copyable: false,\n resizable: false,\n removable: isMutable,\n badgable: false,\n });\n\n comp.set('attributes', {\n ...(comp.get('attributes') || {}),\n isEditable: isMutable,\n });\n\n if (isMutable) {\n comp.set('toolbar', [\n { attributes: { class: 'fa fa-arrows' }, command: 'tlb-move' },\n { attributes: { class: 'fa fa-trash' }, command: 'tlb-delete' },\n ]);\n } else {\n comp.set('toolbar', []);\n }\n\n comp.components().forEach(setPropertiesRecursively);\n }\n\n const wrapper = editor.getWrapper();\n const components = wrapper?.find('*') || [];\n\n components.forEach(setPropertiesRecursively);\n\n if (isEditorCanvasReady(editor)) {\n if (isPreview) {\n editor.runCommand('core:preview');\n } else {\n editor.stopCommand('core:preview');\n }\n }\n}\n\nfunction convertStyles(stylesArray: any[]): string {\n return stylesArray\n .map((block) => {\n const selectors = Array.isArray(block.selectors)\n ? block.selectors.join(', ')\n : block.selectors;\n const declarations = Object.entries(block.style)\n .map(([prop, value]) => `${toKebabCase(prop)}: ${value};`)\n .join(' ');\n\n return `${selectors} { ${declarations} }`;\n })\n .join('\\n');\n}\n\nfunction createActionCardConfig(action: any): any {\n const { icon, title, description } = action;\n\n return {\n type: 'shadcn-generic',\n componentName: 'ActionCard',\n badgable: false,\n copyable: false,\n removable: true,\n draggable: true,\n componentProps: {\n icon,\n headerContent: title,\n bodyContent: description,\n },\n };\n}\n\nfunction expandActions(node: any): any {\n if (node.type === 'shadcn-generic' && node.componentName === 'Actions') {\n const actions = node.componentProps?.actions;\n\n if (Array.isArray(actions) && actions.length > 0) {\n return {\n ...node,\n type: 'div',\n classes: ['dashboard-cards', ...(node.classes || [])],\n componentName: undefined,\n componentProps: undefined,\n components: actions.map((action: any, i: number) => ({\n ...createActionCardConfig(action),\n id: `${node.id}--action-card-${i}`,\n })),\n };\n }\n\n return node;\n }\n\n if (Array.isArray(node.components)) {\n return {\n ...node,\n components: node.components.map(expandActions),\n };\n }\n\n return node;\n}\n\nfunction setInteracting(\n renderedComponents: Record<string, Component>,\n components: { componentId: string; showLoader: boolean }[],\n inProgress: boolean,\n) {\n components.forEach((component) => {\n const { componentId, showLoader } = component;\n\n if (!showLoader) {\n return;\n }\n\n const gjsModel = renderedComponents[componentId];\n\n if (gjsModel) {\n gjsModel.set('attributes', {\n ...gjsModel.get('attributes'),\n interactionApiInProgress: inProgress,\n });\n }\n });\n}\n\nfunction expandActionsComponent(model: Component, actions: any[]): void {\n model.components('');\n\n actions.forEach((action: any) => {\n model.append(createActionCardConfig(action));\n });\n\n model.set('type', 'div');\n model.addClass('dashboard-cards');\n model.set('componentName', undefined);\n model.set('componentProps', {});\n}\n\nfunction resetStreamingComponent(comp: Component): void {\n const attrs = comp.get('attributes') || {};\n const props = comp.get('componentProps') || {};\n\n const cleanedProps = { ...props };\n\n delete cleanedProps.bodyContent;\n delete cleanedProps.data;\n delete cleanedProps.rows;\n delete cleanedProps.series;\n delete cleanedProps.pagination;\n delete cleanedProps.error;\n delete cleanedProps.isMissing;\n\n comp.set({\n attributes: {\n ...attrs,\n loading: true,\n error: undefined,\n isMissing: undefined,\n },\n componentProps: cleanedProps,\n });\n}\n\nfunction GrapejsCanvasInternal({\n json,\n mode = 'preview',\n setEditor,\n performInteraction,\n downloadTable,\n newDataNotifier = () => {\n // no op\n },\n setHasChanged = () => {\n // no op\n },\n isStreaming,\n isModeChangeFromToggle = false,\n isTemplateView = false,\n currentPageId: externalCurrentPageId,\n onPageChange: externalOnPageChange, // eslint-disable-line @typescript-eslint/no-unused-vars\n onRequestPageData,\n imperativeRef,\n}: GrapesjsCanvasProps & { imperativeRef?: React.Ref<GrapesjsCanvasHandle> }) {\n const pageContext = usePageContext();\n\n const normalizedJson = normalizeMultiPageJson(json);\n const pages = normalizedJson.pages.map(extractPageMetadata);\n const effectiveCurrentPageId =\n externalCurrentPageId || pageContext?.currentPageId || pages[0]?.id || '';\n\n const editorRef = useRef<HTMLDivElement>(null);\n const editorInstance = useRef<Editor | null>(null);\n const renderedComponents = useRef<Record<string, Component>>({});\n const pageDataCache = useRef<Record<string, Record<string, any>>>({});\n const currentPageIdRef = useRef<string>(effectiveCurrentPageId);\n const isStreamingRef = useRef(isStreaming ?? false);\n const modeRef = useRef(mode);\n const isSystemUpdateRef = useRef(false);\n const lastJsonRef = useRef<string>('');\n const isEditorAliveRef = useRef(false);\n const onRequestPageDataRef = useRef(onRequestPageData);\n const rowNavigationContextRef = useRef<Record<string, any> | null>(null);\n const [isTransitioning, setIsTransitioning] = useState(false);\n\n useEffect(() => {\n currentPageIdRef.current = effectiveCurrentPageId;\n }, [effectiveCurrentPageId]);\n\n useEffect(() => {\n isStreamingRef.current = isStreaming ?? false;\n }, [isStreaming ?? false]);\n\n useEffect(() => {\n modeRef.current = mode;\n }, [mode]);\n\n useEffect(() => {\n onRequestPageDataRef.current = onRequestPageData;\n }, [onRequestPageData]);\n\n function notificationHandler(\n props: Parameters<NotificationHandler>[0],\n ): ReturnType<NotificationHandler> {\n if (!props) {\n return true;\n }\n\n const { componentId: compId, newProps = {}, newAttributes = {} } = props;\n\n const model = renderedComponents.current[compId];\n\n if (!model) {\n const pageId = currentPageIdRef.current;\n\n if (pageId) {\n if (!pageDataCache.current[pageId]) {\n pageDataCache.current[pageId] = {};\n }\n\n pageDataCache.current[pageId][compId] = {\n newProps,\n newAttributes,\n timestamp: Date.now(),\n };\n }\n\n return false;\n }\n\n // Filter out complex placeholder objects by setting them to null\n // This ensures placeholder values are properly cleared and don't cause stale data issues\n const filteredProps = { ...newProps };\n\n Object.keys(filteredProps).forEach((key) => {\n const value = filteredProps[key];\n\n if (value && typeof value === 'object' && value.name === '__peak_placeholder') {\n filteredProps[key] = null;\n }\n });\n\n const parsedNewProps = {\n ...filteredProps,\n };\n\n if (filteredProps.pagination) {\n parsedNewProps.pagination = {\n ...(model.get('componentProps').pagination || {}),\n ...filteredProps.pagination,\n };\n }\n\n // Handle Actions component: expand into ActionCards when data arrives via streaming\n const isActionsComponent = model.get('componentName') === 'Actions';\n const hasValidActionsData =\n parsedNewProps.actions &&\n parsedNewProps.actions !== null &&\n Array.isArray(parsedNewProps.actions) &&\n parsedNewProps.actions.length > 0;\n\n if (isActionsComponent && hasValidActionsData) {\n const isAlreadyExpanded =\n model.components().length > 0 &&\n model.components().at(0)?.get('componentName') === 'ActionCard';\n\n if (!isAlreadyExpanded && editorInstance.current && isEditorAliveRef.current) {\n expandActionsComponent(model, parsedNewProps.actions);\n\n return true;\n }\n }\n\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...parsedNewProps,\n // headerMapper: model.get('componentProps')?.headerMapper || parsedNewProps.headerMapper,\n });\n\n const currentAttrs = model.get('attributes') || {};\n\n const hasRealValue =\n (parsedNewProps?.bodyContent !== undefined && parsedNewProps?.bodyContent !== null) ||\n (parsedNewProps?.data !== undefined && parsedNewProps?.data !== null) ||\n (parsedNewProps?.rows !== undefined && parsedNewProps?.rows !== null) ||\n (parsedNewProps?.series !== undefined && parsedNewProps?.series !== null);\n\n const shouldStopLoading = hasRealValue || newAttributes?.error || parsedNewProps?.isMissing;\n\n model.set('attributes', {\n ...currentAttrs,\n ...newAttributes,\n ...(shouldStopLoading ? { loading: false } : {}),\n });\n\n if (model.view) {\n model.view.render();\n }\n\n return true;\n }\n\n useEffect(() => {\n newDataNotifier(notificationHandler);\n }, []);\n\n function handleNavigateToPage(targetPageId: string, rowContext?: Record<string, any>) {\n rowNavigationContextRef.current = rowContext ?? null;\n\n if (externalOnPageChange) {\n externalOnPageChange(targetPageId, rowContext);\n }\n\n if (pageContext) {\n pageContext.navigateToPage(targetPageId, rowContext);\n }\n }\n\n async function downloadTableWrapper(data: {\n tableId: string;\n title: string;\n limit: number;\n headerMapper?: Record<string, string>;\n }) {\n if (!downloadTable) {\n return;\n }\n\n let updatedJson = null;\n\n if (editorInstance.current) {\n updatedJson = await safeStoreEditor(editorInstance.current);\n }\n\n await downloadTable({ ...data, json: updatedJson });\n }\n\n async function performInteractionWrapper(payload: Record<string, any>) {\n let updatedJson = null;\n\n if (editorInstance.current) {\n updatedJson = await safeStoreEditor(editorInstance.current);\n }\n\n setInteracting(renderedComponents.current, payload.affectedComponents, true);\n\n try {\n const apiResponse = await performInteraction({\n ...payload,\n json: updatedJson,\n });\n\n const componentUpdates = apiResponse || {};\n\n Object.entries(componentUpdates).forEach(([key, value]) => {\n const model = renderedComponents.current[key];\n\n if (model) {\n model.set('attributes', {\n ...model.get('attributes'),\n error: undefined,\n });\n\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...value,\n error: undefined,\n isMissing: undefined,\n });\n }\n });\n\n return componentUpdates;\n } catch (error) {\n payload.affectedComponents.forEach((componentId: string) => {\n const model = renderedComponents.current[componentId];\n\n if (model) {\n const errorMessage =\n error instanceof Error ? error.message : 'Something went wrong. Please try again.';\n\n model.set('attributes', {\n ...model.get('attributes'),\n error: errorMessage,\n });\n\n model.set('componentProps', {\n ...model.get('componentProps'),\n error: errorMessage,\n isMissing: undefined,\n });\n }\n });\n\n throw error;\n } finally {\n setInteracting(renderedComponents.current, payload.affectedComponents, false);\n }\n }\n\n useImperativeHandle(imperativeRef, () => ({\n performInteractionWithLoaders: performInteractionWrapper,\n }), []);\n\n useEffect(() => {\n if (!editorRef.current) {\n return () => {\n // no op\n };\n }\n\n if (editorInstance.current) {\n editorInstance.current.destroy();\n editorInstance.current = null;\n isEditorAliveRef.current = false;\n }\n\n const currentMode = modeRef.current;\n\n const editor = grapesjs.init({\n container: editorRef.current,\n height: '100%',\n plugins: [\n tailwind,\n createGrapesjsShadcnGenericPlugin(\n modeRef,\n performInteractionWrapper,\n renderedComponents.current,\n setHasChanged,\n isTemplateView,\n isStreamingRef,\n handleNavigateToPage,\n downloadTableWrapper,\n ),\n ],\n storageManager: { type: 'none' },\n richTextEditor: {\n actions: ['bold', 'italic', 'underline', 'strikethrough'],\n },\n canvas: {\n customBadgeLabel: (component) => {\n const tagName = component.get('tagName');\n\n return tagName === 'body' ? '' : tagName || '';\n },\n },\n });\n\n isEditorAliveRef.current = true;\n\n let injectionAttempts = 0;\n\n function injectStylesEarly() {\n const iframeDoc = editor.Canvas?.getDocument?.();\n\n if (iframeDoc && iframeDoc.head) {\n if (!iframeDoc.head.querySelector('[data-grapesjs-styles]')) {\n const style = iframeDoc.createElement('style');\n const fullCss = `\n ${tailwindCompiledCss}\n ${datePickerCss}\n ::-webkit-scrollbar {\n width: 0px;\n height: 0px;\n }\n html, body {\n overflow: auto !important;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n `;\n style.innerHTML = fullCss;\n style.setAttribute('type', 'text/css');\n style.setAttribute('data-grapesjs-styles', 'true');\n iframeDoc.head.appendChild(style);\n }\n } else if (injectionAttempts < 50) {\n injectionAttempts += 1;\n requestAnimationFrame(injectStylesEarly);\n }\n }\n\n requestAnimationFrame(injectStylesEarly);\n\n async function checkDirty() {\n if (isStreamingRef.current || isSystemUpdateRef.current) {\n return;\n }\n\n if (!isEditorAliveRef.current || !editorInstance.current) {\n return;\n }\n\n let stored = null;\n\n stored = await safeStoreEditor(editorInstance.current);\n\n if (!stored) {\n return;\n }\n\n const newJson = JSON.stringify(stored);\n\n if (newJson !== lastJsonRef.current) {\n setHasChanged(true);\n lastJsonRef.current = newJson;\n }\n }\n\n const debouncedCheckDirty = (() => {\n let timeout: NodeJS.Timeout | null = null;\n\n return () => {\n if (timeout) {\n clearTimeout(timeout);\n }\n\n timeout = setTimeout(checkDirty, 200);\n };\n })();\n\n [\n 'component:add',\n 'component:remove',\n 'component:update:content',\n 'style:update',\n 'component:drag:end',\n 'rte:change',\n ].forEach((evt) => {\n editor.on(evt, debouncedCheckDirty);\n });\n\n editor.on('component:update', (model, prop) => {\n if (['attributes', 'componentProps', 'content'].includes(prop)) {\n debouncedCheckDirty();\n }\n });\n\n // Tailwind CSS rules aren't fully added to our component\n // So, adding them from here!\n editor.on('load', async () => {\n const canvasDoc = editor.Canvas.getDocument();\n const canvasHead = canvasDoc.head;\n\n if (!canvasHead.querySelector('[data-grapesjs-styles]')) {\n const style = canvasDoc.createElement('style');\n const fullCss = `\n ${tailwindCompiledCss}\n ${datePickerCss}\n ::-webkit-scrollbar {\n width: 0px;\n height: 0px;\n }\n html, body {\n overflow: auto !important;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n `;\n style.innerHTML = fullCss;\n style.setAttribute('type', 'text/css');\n style.setAttribute('data-grapesjs-styles', 'true');\n canvasHead.appendChild(style);\n }\n\n isSystemUpdateRef.current = true;\n const storeResult = await safeStoreEditor(editor);\n\n if (storeResult) {\n lastJsonRef.current = JSON.stringify(storeResult);\n }\n\n isSystemUpdateRef.current = false;\n\n setComponentProperties(editor, currentMode === 'preview', isStreamingRef.current);\n });\n\n editorInstance.current = editor;\n\n if (setEditor) {\n setEditor(editor);\n }\n\n TypesToRegister.forEach(({ type, tagName }) => {\n if (!editor.DomComponents.getType(type)) {\n editor.DomComponents.addType(type, {\n model: {\n defaults: { tagName },\n },\n view: {},\n });\n }\n });\n\n return function cleanup() {\n editor.destroy();\n isEditorAliveRef.current = false;\n };\n }, []);\n\n useEffect(() => {\n if (json && json.pages?.length > 0) {\n if (!isEditorAliveRef.current || !editorInstance.current) {\n return;\n }\n\n const pageNormalizedJson = normalizeMultiPageJson(json);\n\n const currentPage = getCurrentPage(pageNormalizedJson.pages, effectiveCurrentPageId);\n\n if (!currentPage || !currentPage.frames?.length) {\n return;\n }\n\n isSystemUpdateRef.current = true;\n const raw = currentPage.frames[0].component;\n const processed = expandActions(raw);\n\n try {\n editorInstance.current?.setComponents(processed);\n\n setTimeout(() => {\n if (editorInstance.current && isEditorAliveRef.current) {\n const domComponents = editorInstance.current?.DomComponents;\n\n if (domComponents) {\n const allComponents = domComponents?.getWrapper()?.findType('shadcn-generic');\n allComponents?.forEach((comp: any) => {\n if (comp.get('componentName') === 'Tabs') {\n comp.view?.render();\n }\n });\n }\n }\n }, 100);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error during component restoration:', error);\n }\n\n const globalStyles = pageNormalizedJson.styles || [];\n const pageStyles = currentPage.styles || [];\n const mergedStyles = mergeStyles(globalStyles, pageStyles);\n const cssText = convertStyles(mergedStyles);\n editorInstance.current?.setStyle(cssText);\n\n if (onRequestPageDataRef.current) {\n const isMultiPage = Boolean(pageNormalizedJson.isMultiPage);\n const pageId = isMultiPage ? currentPage.id : '';\n const rowContext = rowNavigationContextRef.current ?? undefined;\n\n onRequestPageDataRef.current(pageId, [], rowContext);\n rowNavigationContextRef.current = null;\n }\n\n if (editorInstance.current) {\n setComponentProperties(editorInstance.current, mode === 'preview', isStreaming);\n\n setTimeout(() => {\n if (editorInstance.current && isEditorAliveRef.current && mode === 'preview') {\n setComponentProperties(editorInstance.current, true, isStreaming);\n }\n }, 50);\n }\n\n setTimeout(() => {\n if (currentPage && pageDataCache.current[currentPage.id]) {\n const cachedData = pageDataCache.current[currentPage.id];\n\n Object.entries(cachedData).forEach(([componentId, data]) => {\n const model = renderedComponents.current[componentId];\n\n if (model && data) {\n if (data.newProps) {\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...data.newProps,\n });\n }\n\n const updatedAttributes = {\n ...model.get('attributes'),\n ...(data.newAttributes || {}),\n };\n\n model.set('attributes', updatedAttributes);\n\n if (model.view) {\n model.view.render();\n }\n }\n });\n\n delete pageDataCache.current[currentPage.id];\n }\n }, 150);\n\n const cacheCheckInterval = setInterval(() => {\n if (!currentPage || !pageDataCache.current[currentPage.id]) {\n return;\n }\n\n const cachedData = pageDataCache.current[currentPage.id];\n let appliedAny = false;\n\n Object.entries(cachedData).forEach(([componentId, data]) => {\n const model = renderedComponents.current[componentId];\n\n if (model && data) {\n if (data.newProps) {\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...data.newProps,\n });\n }\n\n const updatedAttributes = {\n ...model.get('attributes'),\n ...(data.newAttributes || {}),\n };\n\n model.set('attributes', updatedAttributes);\n\n if (model.view) {\n model.view.render();\n }\n\n appliedAny = true;\n }\n });\n\n if (appliedAny) {\n Object.keys(cachedData).forEach((componentId) => {\n if (renderedComponents.current[componentId]) {\n delete cachedData[componentId];\n }\n });\n\n if (Object.keys(cachedData).length === 0) {\n delete pageDataCache.current[currentPage.id];\n }\n }\n }, 100);\n\n setTimeout(() => {\n clearInterval(cacheCheckInterval);\n }, 5000);\n\n setTimeout(async () => {\n if (editorInstance.current && isEditorAliveRef.current) {\n const storeResult = await safeStoreEditor(editorInstance.current);\n\n if (storeResult) {\n lastJsonRef.current = JSON.stringify(storeResult);\n }\n\n isSystemUpdateRef.current = false;\n }\n }, 100);\n }\n }, [json, effectiveCurrentPageId]);\n\n useEffect(() => {\n const editor = editorInstance.current;\n\n if (!editor || !isEditorAliveRef.current) {\n return;\n }\n\n if (isModeChangeFromToggle) {\n setIsTransitioning(true);\n }\n\n setComponentProperties(\n editorInstance.current as Editor,\n mode === 'preview',\n isStreaming ?? false,\n );\n\n const wrapper = editor.getWrapper();\n const shadcnComponents = wrapper?.find('[data-gjs-type=\"shadcn-generic\"]') || [];\n\n shadcnComponents.forEach((comp: Component) => {\n if (comp.view && typeof comp.view.render === 'function') {\n comp.view.render();\n }\n });\n\n if (isModeChangeFromToggle) {\n requestAnimationFrame(() => {\n setIsTransitioning(false);\n });\n }\n }, [mode, isStreaming ?? false]);\n\n useEffect(() => {\n const editor = editorInstance.current;\n const currentIsStreaming = isStreaming ?? false;\n const prevIsStreaming = isStreamingRef.current;\n\n if (editor && isEditorAliveRef.current && currentIsStreaming && !prevIsStreaming) {\n const wrapper = editor.getWrapper();\n const shadcnComponents = wrapper?.findType('shadcn-generic') || [];\n\n shadcnComponents.forEach((comp: Component) => {\n resetStreamingComponent(comp);\n });\n }\n\n isStreamingRef.current = currentIsStreaming;\n }, [isStreaming]);\n\n return (\n <React.Fragment>\n <StyledEditor />\n <div\n ref={editorRef}\n id=\"grapesjs-editor\"\n style={{\n opacity: isTransitioning ? 0 : 1,\n transition: 'opacity 0.15s ease-in-out',\n }}\n />\n </React.Fragment>\n );\n}\n\nconst GrapejsCanvas = forwardRef<GrapesjsCanvasHandle, GrapesjsCanvasProps>(\n (props, ref) => {\n const existingContext = usePageContext();\n\n if (existingContext) {\n return <GrapejsCanvasInternal {...props} imperativeRef={ref} />;\n }\n\n const normalizedJson = normalizeMultiPageJson(props.json);\n const pages = normalizedJson.pages.map(extractPageMetadata);\n const initialPageId = props.currentPageId || pages[0]?.id || '';\n\n return (\n <PageProvider pages={pages} initialPageId={initialPageId} onPageChange={props.onPageChange}>\n <GrapejsCanvasInternal {...props} imperativeRef={ref} />\n </PageProvider>\n );\n }\n);\n\nexport default GrapejsCanvas;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"GrapesjsCanvas.js","names":["React","useEffect","useRef","useState","grapesjs","tailwind","TypesToRegister","toKebabCase","tailwindCompiledCss","datePickerCss","extractPageMetadata","getCurrentPage","mergeStyles","normalizeMultiPageJson","createGrapesjsShadcnGenericPlugin","StyledEditor","PageProvider","usePageContext","jsx","_jsx","jsxs","_jsxs","isEditorCanvasReady","editor","canvas","Canvas","canvasDoc","getDocument","canvasBody","body","_unused","safeStoreEditor","_x","_safeStoreEditor","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee6","_editor$Pages","wrapper","pages","wrap","_callee6$","_context6","prev","next","getWrapper","abrupt","Pages","getAll","length","store","sent","t0","console","warn","stop","setComponentProperties","isPreview","isStreaming","setPropertiesRecursively","comp","isMutable","set","editable","draggable","droppable","getName","selectable","hoverable","highlightable","copyable","resizable","removable","badgable","_extends","get","isEditable","attributes","command","components","forEach","find","runCommand","stopCommand","convertStyles","stylesArray","map","block","selectors","Array","isArray","join","declarations","Object","entries","style","_ref","prop","value","createActionCardConfig","action","icon","title","description","type","componentName","componentProps","headerContent","bodyContent","expandActions","node","_node$componentProps","actions","classes","concat","undefined","i","id","setInteracting","renderedComponents","inProgress","component","componentId","showLoader","gjsModel","interactionApiInProgress","expandActionsComponent","model","append","addClass","resetStreamingComponent","attrs","props","cleanedProps","data","rows","series","pagination","error","isMissing","loading","GrapejsCanvasInternal","_ref2","_pages$","json","_ref2$mode","mode","setEditor","performInteraction","downloadTable","_ref2$newDataNotifier","newDataNotifier","_ref2$setHasChanged","setHasChanged","_ref2$isModeChangeFro","isModeChangeFromToggle","_ref2$isTemplateView","isTemplateView","externalCurrentPageId","currentPageId","externalOnPageChange","onPageChange","onRequestPageData","pageContext","normalizedJson","effectiveCurrentPageId","editorRef","editorInstance","pageDataCache","currentPageIdRef","isStreamingRef","modeRef","isSystemUpdateRef","lastJsonRef","isEditorAliveRef","onRequestPageDataRef","rowNavigationContextRef","_useState","isTransitioning","setIsTransitioning","current","notificationHandler","_model$get","compId","_props$newProps","newProps","_props$newAttributes","newAttributes","pageId","timestamp","Date","now","filteredProps","keys","key","name","parsedNewProps","isActionsComponent","hasValidActionsData","_model$components$at","isAlreadyExpanded","at","headerMapper","currentAttrs","hasRealValue","shouldStopLoading","view","render","handleNavigateToPage","targetPageId","rowContext","navigateToPage","downloadTableWrapper","_x2","_downloadTableWrapper","_callee4","updatedJson","_callee4$","_context4","performInteractionWrapper","_x3","_performInteractionWrapper","_callee5","payload","apiResponse","componentUpdates","_callee5$","_context5","affectedComponents","_ref8","errorMessage","Error","message","finish","destroy","currentMode","init","container","height","plugins","storageManager","richTextEditor","customBadgeLabel","tagName","injectionAttempts","injectStylesEarly","_editor$Canvas","iframeDoc","head","querySelector","createElement","fullCss","innerHTML","setAttribute","appendChild","requestAnimationFrame","checkDirty","_checkDirty","_callee2","stored","newJson","_callee2$","_context2","JSON","stringify","debouncedCheckDirty","timeout","clearTimeout","setTimeout","evt","on","includes","_callee","canvasHead","storeResult","_callee$","_context","_ref4","DomComponents","getType","addType","defaults","cleanup","_json$pages","_currentPage$frames","_editorInstance$curre3","pageNormalizedJson","currentPage","frames","raw","processed","_editorInstance$curre","setComponents","_editorInstance$curre2","domComponents","_domComponents$getWra","allComponents","findType","_comp$view","globalStyles","styles","pageStyles","mergedStyles","cssText","setStyle","_rowNavigationContext","isMultiPage","Boolean","cachedData","_ref5","updatedAttributes","cacheCheckInterval","setInterval","appliedAny","_ref6","clearInterval","_callee3","_callee3$","_context3","shadcnComponents","currentIsStreaming","prevIsStreaming","Fragment","children","ref","opacity","transition","GrapejsCanvas","_pages$2","existingContext","initialPageId"],"sources":["../src/GrapesjsCanvas.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useEffect, useRef, useState } from 'react';\n// eslint-disable-next-line import/no-named-as-default\nimport grapesjs, { Component, Editor } from 'grapesjs';\nimport 'grapesjs/dist/css/grapes.min.css';\nimport tailwind from 'grapesjs-tailwind';\n\nimport { TypesToRegister } from './constants';\nimport { toKebabCase } from './helpers';\nimport { tailwindCompiledCss } from './helpers/css';\nimport { datePickerCss } from './helpers/date-picker';\nimport {\n extractPageMetadata,\n getCurrentPage,\n mergeStyles,\n normalizeMultiPageJson,\n} from './helpers/page-utils';\nimport { createGrapesjsShadcnGenericPlugin } from './plugins/grapejs-plugin';\nimport { StyledEditor } from './index.styles';\nimport type { PageAwareProps } from './types/page';\nimport { PageProvider, usePageContext } from './contexts/PageContext';\n\ntype NotificationHandler = (newData: {\n componentId: string;\n newProps: Record<string, any>;\n newAttributes: Record<string, any>;\n}) => boolean;\n\ntype GrapesjsCanvasProps = {\n json: any;\n mode?: 'editor' | 'preview';\n setEditor: (editor: Editor) => void;\n performInteraction: (payload: Record<string, any>) => Promise<Record<string, any> | undefined>;\n downloadTable?: (data: {\n tableId: string;\n title: string;\n limit: number;\n json: any;\n headerMapper?: Record<string, string>;\n }) => Promise<void>;\n newDataNotifier: (notifHandler: NotificationHandler) => void;\n setHasChanged: (hasChanged: boolean) => void;\n isStreaming: boolean;\n isModeChangeFromToggle?: boolean;\n isTemplateView?: boolean;\n} & PageAwareProps;\n\nfunction isEditorCanvasReady(editor: Editor): boolean {\n try {\n const canvas = editor.Canvas;\n\n if (!canvas) {\n return false;\n }\n\n const canvasDoc = canvas.getDocument?.();\n\n if (!canvasDoc) {\n return false;\n }\n\n const canvasBody = canvasDoc.body;\n\n if (!canvasBody) {\n return false;\n }\n\n return true;\n } catch {\n return false;\n }\n}\n\nasync function safeStoreEditor(editor: Editor): Promise<any | null> {\n try {\n const wrapper = editor.getWrapper();\n\n if (!wrapper) {\n return null;\n }\n\n const pages = editor.Pages?.getAll?.() || [];\n\n if (pages.length === 0) {\n return null;\n }\n\n return await editor.store();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn('Error during store operation:', error);\n\n return null;\n }\n}\n\nfunction setComponentProperties(editor: Editor, isPreview: boolean, isStreaming: boolean): void {\n if (!editor) {\n return;\n }\n\n function setPropertiesRecursively(comp: Component) {\n if (!comp) {\n return;\n }\n\n const isMutable = !isPreview && !isStreaming;\n\n comp.set({\n editable: isMutable,\n draggable: isMutable,\n droppable: isMutable && comp.getName() !== 'Shadcn-generic',\n selectable: isMutable,\n hoverable: isMutable,\n highlightable: isMutable,\n copyable: false,\n resizable: false,\n removable: isMutable,\n badgable: false,\n });\n\n comp.set('attributes', {\n ...(comp.get('attributes') || {}),\n isEditable: isMutable,\n });\n\n if (isMutable) {\n comp.set('toolbar', [\n { attributes: { class: 'fa fa-arrows' }, command: 'tlb-move' },\n { attributes: { class: 'fa fa-trash' }, command: 'tlb-delete' },\n ]);\n } else {\n comp.set('toolbar', []);\n }\n\n comp.components().forEach(setPropertiesRecursively);\n }\n\n const wrapper = editor.getWrapper();\n const components = wrapper?.find('*') || [];\n\n components.forEach(setPropertiesRecursively);\n\n if (isEditorCanvasReady(editor)) {\n if (isPreview) {\n editor.runCommand('core:preview');\n } else {\n editor.stopCommand('core:preview');\n }\n }\n}\n\nfunction convertStyles(stylesArray: any[]): string {\n return stylesArray\n .map((block) => {\n const selectors = Array.isArray(block.selectors)\n ? block.selectors.join(', ')\n : block.selectors;\n const declarations = Object.entries(block.style)\n .map(([prop, value]) => `${toKebabCase(prop)}: ${value};`)\n .join(' ');\n\n return `${selectors} { ${declarations} }`;\n })\n .join('\\n');\n}\n\nfunction createActionCardConfig(action: any): any {\n const { icon, title, description } = action;\n\n return {\n type: 'shadcn-generic',\n componentName: 'ActionCard',\n badgable: false,\n copyable: false,\n removable: true,\n draggable: true,\n componentProps: {\n icon,\n headerContent: title,\n bodyContent: description,\n },\n };\n}\n\nfunction expandActions(node: any): any {\n if (node.type === 'shadcn-generic' && node.componentName === 'Actions') {\n const actions = node.componentProps?.actions;\n\n if (Array.isArray(actions) && actions.length > 0) {\n return {\n ...node,\n type: 'div',\n classes: ['dashboard-cards', ...(node.classes || [])],\n componentName: undefined,\n componentProps: undefined,\n components: actions.map((action: any, i: number) => ({\n ...createActionCardConfig(action),\n id: `${node.id}--action-card-${i}`,\n })),\n };\n }\n\n return node;\n }\n\n if (Array.isArray(node.components)) {\n return {\n ...node,\n components: node.components.map(expandActions),\n };\n }\n\n return node;\n}\n\nfunction setInteracting(\n renderedComponents: Record<string, Component>,\n components: { componentId: string; showLoader: boolean }[],\n inProgress: boolean,\n) {\n components.forEach((component) => {\n const { componentId, showLoader } = component;\n\n if (!showLoader) {\n return;\n }\n\n const gjsModel = renderedComponents[componentId];\n\n if (gjsModel) {\n gjsModel.set('attributes', {\n ...gjsModel.get('attributes'),\n interactionApiInProgress: inProgress,\n });\n }\n });\n}\n\nfunction expandActionsComponent(model: Component, actions: any[]): void {\n model.components('');\n\n actions.forEach((action: any) => {\n model.append(createActionCardConfig(action));\n });\n\n model.set('type', 'div');\n model.addClass('dashboard-cards');\n model.set('componentName', undefined);\n model.set('componentProps', {});\n}\n\nfunction resetStreamingComponent(comp: Component): void {\n const attrs = comp.get('attributes') || {};\n const props = comp.get('componentProps') || {};\n\n const cleanedProps = { ...props };\n\n delete cleanedProps.bodyContent;\n delete cleanedProps.data;\n delete cleanedProps.rows;\n delete cleanedProps.series;\n delete cleanedProps.pagination;\n delete cleanedProps.error;\n delete cleanedProps.isMissing;\n\n comp.set({\n attributes: {\n ...attrs,\n loading: true,\n error: undefined,\n isMissing: undefined,\n },\n componentProps: cleanedProps,\n });\n}\n\nfunction GrapejsCanvasInternal({\n json,\n mode = 'preview',\n setEditor,\n performInteraction,\n downloadTable,\n newDataNotifier = () => {\n // no op\n },\n setHasChanged = () => {\n // no op\n },\n isStreaming,\n isModeChangeFromToggle = false,\n isTemplateView = false,\n currentPageId: externalCurrentPageId,\n onPageChange: externalOnPageChange, // eslint-disable-line @typescript-eslint/no-unused-vars\n onRequestPageData,\n}: GrapesjsCanvasProps) {\n const pageContext = usePageContext();\n\n const normalizedJson = normalizeMultiPageJson(json);\n const pages = normalizedJson.pages.map(extractPageMetadata);\n const effectiveCurrentPageId =\n externalCurrentPageId || pageContext?.currentPageId || pages[0]?.id || '';\n\n const editorRef = useRef<HTMLDivElement>(null);\n const editorInstance = useRef<Editor | null>(null);\n const renderedComponents = useRef<Record<string, Component>>({});\n const pageDataCache = useRef<Record<string, Record<string, any>>>({});\n const currentPageIdRef = useRef<string>(effectiveCurrentPageId);\n const isStreamingRef = useRef(isStreaming ?? false);\n const modeRef = useRef(mode);\n const isSystemUpdateRef = useRef(false);\n const lastJsonRef = useRef<string>('');\n const isEditorAliveRef = useRef(false);\n const onRequestPageDataRef = useRef(onRequestPageData);\n const rowNavigationContextRef = useRef<Record<string, any> | null>(null);\n const [isTransitioning, setIsTransitioning] = useState(false);\n\n useEffect(() => {\n currentPageIdRef.current = effectiveCurrentPageId;\n }, [effectiveCurrentPageId]);\n\n useEffect(() => {\n isStreamingRef.current = isStreaming ?? false;\n }, [isStreaming ?? false]);\n\n useEffect(() => {\n modeRef.current = mode;\n }, [mode]);\n\n useEffect(() => {\n onRequestPageDataRef.current = onRequestPageData;\n }, [onRequestPageData]);\n\n function notificationHandler(\n props: Parameters<NotificationHandler>[0],\n ): ReturnType<NotificationHandler> {\n if (!props) {\n return true;\n }\n\n const { componentId: compId, newProps = {}, newAttributes = {} } = props;\n\n const model = renderedComponents.current[compId];\n\n if (!model) {\n const pageId = currentPageIdRef.current;\n\n if (pageId) {\n if (!pageDataCache.current[pageId]) {\n pageDataCache.current[pageId] = {};\n }\n\n pageDataCache.current[pageId][compId] = {\n newProps,\n newAttributes,\n timestamp: Date.now(),\n };\n }\n\n return false;\n }\n\n // Filter out complex placeholder objects by setting them to null\n // This ensures placeholder values are properly cleared and don't cause stale data issues\n const filteredProps = { ...newProps };\n\n Object.keys(filteredProps).forEach((key) => {\n const value = filteredProps[key];\n\n if (value && typeof value === 'object' && value.name === '__peak_placeholder') {\n filteredProps[key] = null;\n }\n });\n\n const parsedNewProps = {\n ...filteredProps,\n };\n\n if (filteredProps.pagination) {\n parsedNewProps.pagination = {\n ...(model.get('componentProps').pagination || {}),\n ...filteredProps.pagination,\n };\n }\n\n // Handle Actions component: expand into ActionCards when data arrives via streaming\n const isActionsComponent = model.get('componentName') === 'Actions';\n const hasValidActionsData =\n parsedNewProps.actions &&\n parsedNewProps.actions !== null &&\n Array.isArray(parsedNewProps.actions) &&\n parsedNewProps.actions.length > 0;\n\n if (isActionsComponent && hasValidActionsData) {\n const isAlreadyExpanded =\n model.components().length > 0 &&\n model.components().at(0)?.get('componentName') === 'ActionCard';\n\n if (!isAlreadyExpanded && editorInstance.current && isEditorAliveRef.current) {\n expandActionsComponent(model, parsedNewProps.actions);\n\n return true;\n }\n }\n\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...parsedNewProps,\n headerMapper: model.get('componentProps')?.headerMapper || parsedNewProps.headerMapper,\n });\n\n const currentAttrs = model.get('attributes') || {};\n\n const hasRealValue =\n (parsedNewProps?.bodyContent !== undefined && parsedNewProps?.bodyContent !== null) ||\n (parsedNewProps?.data !== undefined && parsedNewProps?.data !== null) ||\n (parsedNewProps?.rows !== undefined && parsedNewProps?.rows !== null) ||\n (parsedNewProps?.series !== undefined && parsedNewProps?.series !== null);\n\n const shouldStopLoading = hasRealValue || newAttributes?.error || parsedNewProps?.isMissing;\n\n model.set('attributes', {\n ...currentAttrs,\n ...newAttributes,\n ...(shouldStopLoading ? { loading: false } : {}),\n });\n\n if (model.view) {\n model.view.render();\n }\n\n return true;\n }\n\n useEffect(() => {\n newDataNotifier(notificationHandler);\n }, []);\n\n function handleNavigateToPage(targetPageId: string, rowContext?: Record<string, any>) {\n rowNavigationContextRef.current = rowContext ?? null;\n\n if (externalOnPageChange) {\n externalOnPageChange(targetPageId, rowContext);\n }\n\n if (pageContext) {\n pageContext.navigateToPage(targetPageId, rowContext);\n }\n }\n\n async function downloadTableWrapper(data: {\n tableId: string;\n title: string;\n limit: number;\n headerMapper?: Record<string, string>;\n }) {\n if (!downloadTable) {\n return;\n }\n\n let updatedJson = null;\n\n if (editorInstance.current) {\n updatedJson = await safeStoreEditor(editorInstance.current);\n }\n\n await downloadTable({ ...data, json: updatedJson });\n }\n\n async function performInteractionWrapper(payload: Record<string, any>) {\n let updatedJson = null;\n\n if (editorInstance.current) {\n updatedJson = await safeStoreEditor(editorInstance.current);\n }\n\n setInteracting(renderedComponents.current, payload.affectedComponents, true);\n\n try {\n const apiResponse = await performInteraction({\n ...payload,\n json: updatedJson,\n });\n\n const componentUpdates = apiResponse || {};\n\n Object.entries(componentUpdates).forEach(([key, value]) => {\n const model = renderedComponents.current[key];\n\n if (model) {\n model.set('attributes', {\n ...model.get('attributes'),\n error: undefined,\n });\n\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...value,\n error: undefined,\n isMissing: undefined,\n });\n }\n });\n\n return componentUpdates;\n } catch (error) {\n payload.affectedComponents.forEach((componentId: string) => {\n const model = renderedComponents.current[componentId];\n\n if (model) {\n const errorMessage =\n error instanceof Error ? error.message : 'Something went wrong. Please try again.';\n\n model.set('attributes', {\n ...model.get('attributes'),\n error: errorMessage,\n });\n\n model.set('componentProps', {\n ...model.get('componentProps'),\n error: errorMessage,\n isMissing: undefined,\n });\n }\n });\n\n throw error;\n } finally {\n setInteracting(renderedComponents.current, payload.affectedComponents, false);\n }\n }\n\n useEffect(() => {\n if (!editorRef.current) {\n return () => {\n // no op\n };\n }\n\n if (editorInstance.current) {\n editorInstance.current.destroy();\n editorInstance.current = null;\n isEditorAliveRef.current = false;\n }\n\n const currentMode = modeRef.current;\n\n const editor = grapesjs.init({\n container: editorRef.current,\n height: '100%',\n plugins: [\n tailwind,\n createGrapesjsShadcnGenericPlugin(\n modeRef,\n performInteractionWrapper,\n renderedComponents.current,\n setHasChanged,\n isTemplateView,\n isStreamingRef,\n handleNavigateToPage,\n downloadTableWrapper,\n ),\n ],\n storageManager: { type: 'none' },\n richTextEditor: {\n actions: ['bold', 'italic', 'underline', 'strikethrough'],\n },\n canvas: {\n customBadgeLabel: (component) => {\n const tagName = component.get('tagName');\n\n return tagName === 'body' ? '' : tagName || '';\n },\n },\n });\n\n isEditorAliveRef.current = true;\n\n let injectionAttempts = 0;\n\n function injectStylesEarly() {\n const iframeDoc = editor.Canvas?.getDocument?.();\n\n if (iframeDoc && iframeDoc.head) {\n if (!iframeDoc.head.querySelector('[data-grapesjs-styles]')) {\n const style = iframeDoc.createElement('style');\n const fullCss = `\n ${tailwindCompiledCss}\n ${datePickerCss}\n ::-webkit-scrollbar {\n width: 0px;\n height: 0px;\n }\n html, body {\n overflow: auto !important;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n `;\n style.innerHTML = fullCss;\n style.setAttribute('type', 'text/css');\n style.setAttribute('data-grapesjs-styles', 'true');\n iframeDoc.head.appendChild(style);\n }\n } else if (injectionAttempts < 50) {\n injectionAttempts += 1;\n requestAnimationFrame(injectStylesEarly);\n }\n }\n\n requestAnimationFrame(injectStylesEarly);\n\n async function checkDirty() {\n if (isStreamingRef.current || isSystemUpdateRef.current) {\n return;\n }\n\n if (!isEditorAliveRef.current || !editorInstance.current) {\n return;\n }\n\n let stored = null;\n\n stored = await safeStoreEditor(editorInstance.current);\n\n if (!stored) {\n return;\n }\n\n const newJson = JSON.stringify(stored);\n\n if (newJson !== lastJsonRef.current) {\n setHasChanged(true);\n lastJsonRef.current = newJson;\n }\n }\n\n const debouncedCheckDirty = (() => {\n let timeout: NodeJS.Timeout | null = null;\n\n return () => {\n if (timeout) {\n clearTimeout(timeout);\n }\n\n timeout = setTimeout(checkDirty, 200);\n };\n })();\n\n [\n 'component:add',\n 'component:remove',\n 'component:update:content',\n 'style:update',\n 'component:drag:end',\n 'rte:change',\n ].forEach((evt) => {\n editor.on(evt, debouncedCheckDirty);\n });\n\n editor.on('component:update', (model, prop) => {\n if (['attributes', 'componentProps', 'content'].includes(prop)) {\n debouncedCheckDirty();\n }\n });\n\n // Tailwind CSS rules aren't fully added to our component\n // So, adding them from here!\n editor.on('load', async () => {\n const canvasDoc = editor.Canvas.getDocument();\n const canvasHead = canvasDoc.head;\n\n if (!canvasHead.querySelector('[data-grapesjs-styles]')) {\n const style = canvasDoc.createElement('style');\n const fullCss = `\n ${tailwindCompiledCss}\n ${datePickerCss}\n ::-webkit-scrollbar {\n width: 0px;\n height: 0px;\n }\n html, body {\n overflow: auto !important;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n `;\n style.innerHTML = fullCss;\n style.setAttribute('type', 'text/css');\n style.setAttribute('data-grapesjs-styles', 'true');\n canvasHead.appendChild(style);\n }\n\n isSystemUpdateRef.current = true;\n const storeResult = await safeStoreEditor(editor);\n\n if (storeResult) {\n lastJsonRef.current = JSON.stringify(storeResult);\n }\n\n isSystemUpdateRef.current = false;\n\n setComponentProperties(editor, currentMode === 'preview', isStreamingRef.current);\n });\n\n editorInstance.current = editor;\n\n if (setEditor) {\n setEditor(editor);\n }\n\n TypesToRegister.forEach(({ type, tagName }) => {\n if (!editor.DomComponents.getType(type)) {\n editor.DomComponents.addType(type, {\n model: {\n defaults: { tagName },\n },\n view: {},\n });\n }\n });\n\n return function cleanup() {\n editor.destroy();\n isEditorAliveRef.current = false;\n };\n }, []);\n\n useEffect(() => {\n if (json && json.pages?.length > 0) {\n if (!isEditorAliveRef.current || !editorInstance.current) {\n return;\n }\n\n const pageNormalizedJson = normalizeMultiPageJson(json);\n\n const currentPage = getCurrentPage(pageNormalizedJson.pages, effectiveCurrentPageId);\n\n if (!currentPage || !currentPage.frames?.length) {\n return;\n }\n\n isSystemUpdateRef.current = true;\n const raw = currentPage.frames[0].component;\n const processed = expandActions(raw);\n\n try {\n editorInstance.current?.setComponents(processed);\n\n setTimeout(() => {\n if (editorInstance.current && isEditorAliveRef.current) {\n const domComponents = editorInstance.current?.DomComponents;\n\n if (domComponents) {\n const allComponents = domComponents?.getWrapper()?.findType('shadcn-generic');\n allComponents?.forEach((comp: any) => {\n if (comp.get('componentName') === 'Tabs') {\n comp.view?.render();\n }\n });\n }\n }\n }, 100);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error during component restoration:', error);\n }\n\n const globalStyles = pageNormalizedJson.styles || [];\n const pageStyles = currentPage.styles || [];\n const mergedStyles = mergeStyles(globalStyles, pageStyles);\n const cssText = convertStyles(mergedStyles);\n editorInstance.current?.setStyle(cssText);\n\n if (onRequestPageDataRef.current) {\n const isMultiPage = Boolean(pageNormalizedJson.isMultiPage);\n const pageId = isMultiPage ? currentPage.id : '';\n const rowContext = rowNavigationContextRef.current ?? undefined;\n\n onRequestPageDataRef.current(pageId, [], rowContext);\n rowNavigationContextRef.current = null;\n }\n\n if (editorInstance.current) {\n setComponentProperties(editorInstance.current, mode === 'preview', isStreaming);\n\n setTimeout(() => {\n if (editorInstance.current && isEditorAliveRef.current && mode === 'preview') {\n setComponentProperties(editorInstance.current, true, isStreaming);\n }\n }, 50);\n }\n\n setTimeout(() => {\n if (currentPage && pageDataCache.current[currentPage.id]) {\n const cachedData = pageDataCache.current[currentPage.id];\n\n Object.entries(cachedData).forEach(([componentId, data]) => {\n const model = renderedComponents.current[componentId];\n\n if (model && data) {\n if (data.newProps) {\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...data.newProps,\n });\n }\n\n const updatedAttributes = {\n ...model.get('attributes'),\n ...(data.newAttributes || {}),\n };\n\n model.set('attributes', updatedAttributes);\n\n if (model.view) {\n model.view.render();\n }\n }\n });\n\n delete pageDataCache.current[currentPage.id];\n }\n }, 150);\n\n const cacheCheckInterval = setInterval(() => {\n if (!currentPage || !pageDataCache.current[currentPage.id]) {\n return;\n }\n\n const cachedData = pageDataCache.current[currentPage.id];\n let appliedAny = false;\n\n Object.entries(cachedData).forEach(([componentId, data]) => {\n const model = renderedComponents.current[componentId];\n\n if (model && data) {\n if (data.newProps) {\n model.set('componentProps', {\n ...model.get('componentProps'),\n ...data.newProps,\n });\n }\n\n const updatedAttributes = {\n ...model.get('attributes'),\n ...(data.newAttributes || {}),\n };\n\n model.set('attributes', updatedAttributes);\n\n if (model.view) {\n model.view.render();\n }\n\n appliedAny = true;\n }\n });\n\n if (appliedAny) {\n Object.keys(cachedData).forEach((componentId) => {\n if (renderedComponents.current[componentId]) {\n delete cachedData[componentId];\n }\n });\n\n if (Object.keys(cachedData).length === 0) {\n delete pageDataCache.current[currentPage.id];\n }\n }\n }, 100);\n\n setTimeout(() => {\n clearInterval(cacheCheckInterval);\n }, 5000);\n\n setTimeout(async () => {\n if (editorInstance.current && isEditorAliveRef.current) {\n const storeResult = await safeStoreEditor(editorInstance.current);\n\n if (storeResult) {\n lastJsonRef.current = JSON.stringify(storeResult);\n }\n\n isSystemUpdateRef.current = false;\n }\n }, 100);\n }\n }, [json, effectiveCurrentPageId]);\n\n useEffect(() => {\n const editor = editorInstance.current;\n\n if (!editor || !isEditorAliveRef.current) {\n return;\n }\n\n if (isModeChangeFromToggle) {\n setIsTransitioning(true);\n }\n\n setComponentProperties(\n editorInstance.current as Editor,\n mode === 'preview',\n isStreaming ?? false,\n );\n\n const wrapper = editor.getWrapper();\n const shadcnComponents = wrapper?.find('[data-gjs-type=\"shadcn-generic\"]') || [];\n\n shadcnComponents.forEach((comp: Component) => {\n if (comp.view && typeof comp.view.render === 'function') {\n comp.view.render();\n }\n });\n\n if (isModeChangeFromToggle) {\n requestAnimationFrame(() => {\n setIsTransitioning(false);\n });\n }\n }, [mode, isStreaming ?? false]);\n\n useEffect(() => {\n const editor = editorInstance.current;\n const currentIsStreaming = isStreaming ?? false;\n const prevIsStreaming = isStreamingRef.current;\n\n if (editor && isEditorAliveRef.current && currentIsStreaming && !prevIsStreaming) {\n const wrapper = editor.getWrapper();\n const shadcnComponents = wrapper?.findType('shadcn-generic') || [];\n\n shadcnComponents.forEach((comp: Component) => {\n resetStreamingComponent(comp);\n });\n }\n\n isStreamingRef.current = currentIsStreaming;\n }, [isStreaming]);\n\n return (\n <React.Fragment>\n <StyledEditor />\n <div\n ref={editorRef}\n id=\"grapesjs-editor\"\n style={{\n opacity: isTransitioning ? 0 : 1,\n transition: 'opacity 0.15s ease-in-out',\n }}\n />\n </React.Fragment>\n );\n}\n\nfunction GrapejsCanvas(props: GrapesjsCanvasProps) {\n const existingContext = usePageContext();\n\n if (existingContext) {\n return <GrapejsCanvasInternal {...props} />;\n }\n\n const normalizedJson = normalizeMultiPageJson(props.json);\n const pages = normalizedJson.pages.map(extractPageMetadata);\n const initialPageId = props.currentPageId || pages[0]?.id || '';\n\n return (\n <PageProvider pages={pages} initialPageId={initialPageId} onPageChange={props.onPageChange}>\n <GrapejsCanvasInternal {...props} />\n </PageProvider>\n );\n}\n\nexport default GrapejsCanvas;\n"],"mappings":"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","ignoreList":[]}
package/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  export { default as GrapejsCanvas } from './GrapesjsCanvas';
2
- export type { GrapesjsCanvasHandle } from './GrapesjsCanvas';
3
2
  export * from './index.styles';
4
3
  export { getUpdatedUiJson } from './helpers/merge-json';
5
4
  export { DataTable } from './plugins/helpers/data-table';
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["default","GrapejsCanvas","getUpdatedUiJson","DataTable","StyledInfoButton","AiAvatarIcon","CustomModal","QueryDetailsModal","QueryLoadingModal","PageProvider","usePageContext","useRequiredPageContext","useCurrentPage","usePageNavigation","mergeStyles","getCurrentPage","extractPageMetadata","validateMultiPageJson","normalizeMultiPageJson"],"sources":["../src/index.ts"],"sourcesContent":["export { default as GrapejsCanvas } from './GrapesjsCanvas';\nexport type { GrapesjsCanvasHandle } from './GrapesjsCanvas';\nexport * from './index.styles';\nexport { getUpdatedUiJson } from './helpers/merge-json';\nexport { DataTable } from './plugins/helpers/data-table';\nexport { StyledInfoButton } from './plugins/helpers/styled-info-button';\nexport { AiAvatarIcon } from './shadcn/components/icons/AiAvatarIcon';\nexport { CustomModal } from './plugins/helpers/custom-modal';\nexport { QueryDetailsModal } from './plugins/helpers/query-details-modal';\nexport { QueryLoadingModal } from './plugins/helpers/query-loading-modal';\nexport {\n PageProvider,\n usePageContext,\n useRequiredPageContext,\n useCurrentPage,\n usePageNavigation,\n} from './contexts/PageContext';\nexport {\n mergeStyles,\n getCurrentPage,\n extractPageMetadata,\n validateMultiPageJson,\n normalizeMultiPageJson,\n} from './helpers/page-utils';\nexport type {\n PageMetadata,\n PageStyle,\n NavigateToPageAction,\n Page,\n PageContext,\n PageAwareProps,\n MultiPageUIJson,\n} from './types/page';\n"],"mappings":"AAAA,OAASA,OAAO,GAAI,CAAAC,aAAa,KAAQ,kBAAkB,CAE3D,WAAc,gBAAgB,CAC9B,OAASC,gBAAgB,KAAQ,sBAAsB,CACvD,OAASC,SAAS,KAAQ,8BAA8B,CACxD,OAASC,gBAAgB,KAAQ,sCAAsC,CACvE,OAASC,YAAY,KAAQ,wCAAwC,CACrE,OAASC,WAAW,KAAQ,gCAAgC,CAC5D,OAASC,iBAAiB,KAAQ,uCAAuC,CACzE,OAASC,iBAAiB,KAAQ,uCAAuC,CACzE,OACEC,YAAY,CACZC,cAAc,CACdC,sBAAsB,CACtBC,cAAc,CACdC,iBAAiB,KACZ,wBAAwB,CAC/B,OACEC,WAAW,CACXC,cAAc,CACdC,mBAAmB,CACnBC,qBAAqB,CACrBC,sBAAsB,KACjB,sBAAsB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["default","GrapejsCanvas","getUpdatedUiJson","DataTable","StyledInfoButton","AiAvatarIcon","CustomModal","QueryDetailsModal","QueryLoadingModal","PageProvider","usePageContext","useRequiredPageContext","useCurrentPage","usePageNavigation","mergeStyles","getCurrentPage","extractPageMetadata","validateMultiPageJson","normalizeMultiPageJson"],"sources":["../src/index.ts"],"sourcesContent":["export { default as GrapejsCanvas } from './GrapesjsCanvas';\nexport * from './index.styles';\nexport { getUpdatedUiJson } from './helpers/merge-json';\nexport { DataTable } from './plugins/helpers/data-table';\nexport { StyledInfoButton } from './plugins/helpers/styled-info-button';\nexport { AiAvatarIcon } from './shadcn/components/icons/AiAvatarIcon';\nexport { CustomModal } from './plugins/helpers/custom-modal';\nexport { QueryDetailsModal } from './plugins/helpers/query-details-modal';\nexport { QueryLoadingModal } from './plugins/helpers/query-loading-modal';\nexport {\n PageProvider,\n usePageContext,\n useRequiredPageContext,\n useCurrentPage,\n usePageNavigation,\n} from './contexts/PageContext';\nexport {\n mergeStyles,\n getCurrentPage,\n extractPageMetadata,\n validateMultiPageJson,\n normalizeMultiPageJson,\n} from './helpers/page-utils';\nexport type {\n PageMetadata,\n PageStyle,\n NavigateToPageAction,\n Page,\n PageContext,\n PageAwareProps,\n MultiPageUIJson,\n} from './types/page';\n"],"mappings":"AAAA,OAASA,OAAO,GAAI,CAAAC,aAAa,KAAQ,kBAAkB,CAC3D,WAAc,gBAAgB,CAC9B,OAASC,gBAAgB,KAAQ,sBAAsB,CACvD,OAASC,SAAS,KAAQ,8BAA8B,CACxD,OAASC,gBAAgB,KAAQ,sCAAsC,CACvE,OAASC,YAAY,KAAQ,wCAAwC,CACrE,OAASC,WAAW,KAAQ,gCAAgC,CAC5D,OAASC,iBAAiB,KAAQ,uCAAuC,CACzE,OAASC,iBAAiB,KAAQ,uCAAuC,CACzE,OACEC,YAAY,CACZC,cAAc,CACdC,sBAAsB,CACtBC,cAAc,CACdC,iBAAiB,KACZ,wBAAwB,CAC/B,OACEC,WAAW,CACXC,cAAc,CACdC,mBAAmB,CACnBC,qBAAqB,CACrBC,sBAAsB,KACjB,sBAAsB","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.6.9-rc.10",
5
+ "version": "1.6.9-rc.2",
6
6
  "description": "",
7
7
  "dependencies": {
8
8
  "@emotion/react": "^11.11.4",
@@ -7,10 +7,10 @@ if(value===null||value===undefined){return""}var str=String(value);return str.tr
7
7
  * Generates a stable hash based on unique value sets per column.
8
8
  * This hash is order-independent - it only changes when the set of unique values changes,
9
9
  * not when rows are reordered (e.g., during sorting).
10
- */function getUniqueValuesHash(data,columnWithChipClass){if(!Array.isArray(data)||data.length===0){return""}var availableKeys=Object.keys(data[0]||{});var hashParts={};Object.keys(columnWithChipClass).forEach(function(columnKey){if(!availableKeys.includes(columnKey)){return}var chipMode=getChipMode(columnWithChipClass,columnKey);if(chipMode==="useRandom"){var uniqueNormalizedValues=new Set;data.forEach(function(row){var value=row[columnKey];var normalizedKey=normalizeValue(value);if(normalizedKey){uniqueNormalizedValues.add(normalizedKey)}});var sortedUniqueValues=Array.from(uniqueNormalizedValues).sort();hashParts[columnKey]=sortedUniqueValues}});return JSON.stringify(hashParts)}export function DataTable(_ref){var _ref2,_pagination$values$pa,_pagination$values,_ref3,_pagination$values$pa2,_pagination$values2,_pagination$totalCoun,_pagination$totalCoun2;var _ref$data=_ref.data,data=_ref$data===void 0?[]:_ref$data,_ref$headerMapper=_ref.headerMapper,headerMapper=_ref$headerMapper===void 0?{}:_ref$headerMapper,_ref$className=_ref.className,className=_ref$className===void 0?"":_ref$className,_ref$actions=_ref.actions,actions=_ref$actions===void 0?[]:_ref$actions,_ref$isEditable=_ref.isEditable,isEditable=_ref$isEditable===void 0?false:_ref$isEditable,pagination=_ref.pagination,_ref$isLoading=_ref.isLoading,isLoading=_ref$isLoading===void 0?false:_ref$isLoading,onRowAction=_ref.onRowAction,onPageChange=_ref.onPageChange,onSort=_ref.onSort,sortConfig=_ref.sortConfig,_ref$sortable=_ref.sortable,sortableGlobal=_ref$sortable===void 0?true:_ref$sortable,_ref$otherProps=_ref.otherProps,otherProps=_ref$otherProps===void 0?{}:_ref$otherProps,height=_ref.height,_ref$decimalPrecision=_ref.decimalPrecision,decimalPrecision=_ref$decimalPrecision===void 0?2:_ref$decimalPrecision,_ref$columnWithChipCl=_ref.columnWithChipClass,columnWithChipClass=_ref$columnWithChipCl===void 0?{}:_ref$columnWithChipCl,_ref$chipStylesMappin=_ref.chipStylesMapping,chipStylesMapping=_ref$chipStylesMappin===void 0?{}:_ref$chipStylesMappin,navigateToPage=_ref.navigateToPage,_ref$isBulkSelectionE=_ref.isBulkSelectionEnabled,isBulkSelectionEnabled=_ref$isBulkSelectionE===void 0?false:_ref$isBulkSelectionE,_ref$selectedIndices=_ref.selectedIndices,selectedIndices=_ref$selectedIndices===void 0?[]:_ref$selectedIndices,setSelectedIndices=_ref.setSelectedIndices,title=_ref.title,onDownload=_ref.onDownload;if(!data||data.length===0){return/*#__PURE__*/_jsx(Fragment,{children:/*#__PURE__*/_jsx("div",{className:"flex flex-col overflow-hidden",children:/*#__PURE__*/_jsx("div",{"data-slot":"table-container",className:"aspect-auto w-full",style:{height:"auto",minHeight:"180px"},children:isLoading?/*#__PURE__*/_jsx(TableLoader,{}):renderNoDataFallback()})})})}var _useState=useState(null),activeSortColumn=_useState[0],setActiveSortColumn=_useState[1];var _useState2=useState({}),sortDirections=_useState2[0],setSortDirections=_useState2[1];var _useState3=useState(null),activeRowIndex=_useState3[0],setActiveRowIndex=_useState3[1];var _useState4=useState(null),activeAction=_useState4[0],setActiveAction=_useState4[1];var _useState5=useState(false),isFormSubmitting=_useState5[0],setIsFormSubmitting=_useState5[1];var _useState6=useState(null),loadingActionKey=_useState6[0],setLoadingActionKey=_useState6[1];var _useState7=useState(Number((_ref2=(_pagination$values$pa=pagination==null||(_pagination$values=pagination.values)==null?void 0:_pagination$values.pageNumber)!=null?_pagination$values$pa:pagination==null?void 0:pagination.initialPage)!=null?_ref2:1)),pageNumber=_useState7[0],setPageNumber=_useState7[1];var _useState8=useState(Number((_ref3=(_pagination$values$pa2=pagination==null||(_pagination$values2=pagination.values)==null?void 0:_pagination$values2.pageSize)!=null?_pagination$values$pa2:pagination==null?void 0:pagination.initialPageSize)!=null?_ref3:10)),pageSize=_useState8[0],setPageSize=_useState8[1];var _useState9=useState(Math.ceil(((pagination==null?void 0:pagination.totalCount)||0)/pageSize)||1),totalPages=_useState9[0],setTotalPages=_useState9[1];var _useState10=useState({}),chipColorMap=_useState10[0],setChipColorMap=_useState10[1];var _useState11=useState(null),openDropdownIndex=_useState11[0],setOpenDropdownIndex=_useState11[1];var prevDataHashRef=useRef("");useEffect(function(){var _ref4,_pagination$values$pa3,_pagination$values3,_ref5,_pagination$values$pa4,_pagination$values4;setPageNumber(Number((_ref4=(_pagination$values$pa3=pagination==null||(_pagination$values3=pagination.values)==null?void 0:_pagination$values3.pageNumber)!=null?_pagination$values$pa3:pagination==null?void 0:pagination.initialPage)!=null?_ref4:1));setPageSize(Number((_ref5=(_pagination$values$pa4=pagination==null||(_pagination$values4=pagination.values)==null?void 0:_pagination$values4.pageSize)!=null?_pagination$values$pa4:pagination==null?void 0:pagination.initialPageSize)!=null?_ref5:25))},[pagination]);useEffect(function(){setTotalPages(Math.ceil(((pagination==null?void 0:pagination.totalCount)||0)/pageSize)||1)},[pagination==null?void 0:pagination.totalCount,pageSize]);useEffect(function(){if(sortConfig){setSortDirections(sortConfig);var first=Object.keys(sortConfig)[0];if(first){setActiveSortColumn(first)}}},[sortConfig]);useEffect(function(){if(sortConfig!=null&&sortConfig.sortColumn||sortConfig!=null&&sortConfig.sortDirection){sortConfig.sortColumn=null;sortConfig.sortDirection=null}setActiveSortColumn(null);setSortDirections({})},[]);var computedColorMap=useMemo(function(){if(!Array.isArray(data)||data.length===0){return{}}// Get available column keys from first row
10
+ */function getUniqueValuesHash(data,columnWithChipClass){if(!Array.isArray(data)||data.length===0){return""}var availableKeys=Object.keys(data[0]||{});var hashParts={};Object.keys(columnWithChipClass).forEach(function(columnKey){if(!availableKeys.includes(columnKey)){return}var chipMode=getChipMode(columnWithChipClass,columnKey);if(chipMode==="useRandom"){var uniqueNormalizedValues=new Set;data.forEach(function(row){var value=row[columnKey];var normalizedKey=normalizeValue(value);if(normalizedKey){uniqueNormalizedValues.add(normalizedKey)}});var sortedUniqueValues=Array.from(uniqueNormalizedValues).sort();hashParts[columnKey]=sortedUniqueValues}});return JSON.stringify(hashParts)}export function DataTable(_ref){var _ref2,_pagination$values$pa,_pagination$values,_ref3,_pagination$values$pa2,_pagination$values2,_pagination$totalCoun;var _ref$data=_ref.data,data=_ref$data===void 0?[]:_ref$data,_ref$headerMapper=_ref.headerMapper,headerMapper=_ref$headerMapper===void 0?{}:_ref$headerMapper,_ref$className=_ref.className,className=_ref$className===void 0?"":_ref$className,_ref$actions=_ref.actions,actions=_ref$actions===void 0?[]:_ref$actions,_ref$isEditable=_ref.isEditable,isEditable=_ref$isEditable===void 0?false:_ref$isEditable,pagination=_ref.pagination,_ref$isLoading=_ref.isLoading,isLoading=_ref$isLoading===void 0?false:_ref$isLoading,onRowAction=_ref.onRowAction,onPageChange=_ref.onPageChange,onSort=_ref.onSort,sortConfig=_ref.sortConfig,_ref$sortable=_ref.sortable,sortableGlobal=_ref$sortable===void 0?true:_ref$sortable,_ref$otherProps=_ref.otherProps,otherProps=_ref$otherProps===void 0?{}:_ref$otherProps,height=_ref.height,_ref$decimalPrecision=_ref.decimalPrecision,decimalPrecision=_ref$decimalPrecision===void 0?2:_ref$decimalPrecision,_ref$columnWithChipCl=_ref.columnWithChipClass,columnWithChipClass=_ref$columnWithChipCl===void 0?{}:_ref$columnWithChipCl,_ref$chipStylesMappin=_ref.chipStylesMapping,chipStylesMapping=_ref$chipStylesMappin===void 0?{}:_ref$chipStylesMappin,navigateToPage=_ref.navigateToPage,_ref$isBulkSelectionE=_ref.isBulkSelectionEnabled,isBulkSelectionEnabled=_ref$isBulkSelectionE===void 0?false:_ref$isBulkSelectionE,_ref$selectedIndices=_ref.selectedIndices,selectedIndices=_ref$selectedIndices===void 0?[]:_ref$selectedIndices,setSelectedIndices=_ref.setSelectedIndices,title=_ref.title,onDownload=_ref.onDownload;if(!data||data.length===0){return/*#__PURE__*/_jsx(Fragment,{children:/*#__PURE__*/_jsx("div",{className:"flex flex-col overflow-hidden",children:/*#__PURE__*/_jsx("div",{"data-slot":"table-container",className:"aspect-auto w-full",style:{height:"auto",minHeight:"180px"},children:isLoading?/*#__PURE__*/_jsx(TableLoader,{}):renderNoDataFallback()})})})}var _useState=useState(null),activeSortColumn=_useState[0],setActiveSortColumn=_useState[1];var _useState2=useState({}),sortDirections=_useState2[0],setSortDirections=_useState2[1];var _useState3=useState(null),activeRowIndex=_useState3[0],setActiveRowIndex=_useState3[1];var _useState4=useState(null),activeAction=_useState4[0],setActiveAction=_useState4[1];var _useState5=useState(false),isFormSubmitting=_useState5[0],setIsFormSubmitting=_useState5[1];var _useState6=useState(null),loadingActionKey=_useState6[0],setLoadingActionKey=_useState6[1];var _useState7=useState(Number((_ref2=(_pagination$values$pa=pagination==null||(_pagination$values=pagination.values)==null?void 0:_pagination$values.pageNumber)!=null?_pagination$values$pa:pagination==null?void 0:pagination.initialPage)!=null?_ref2:1)),pageNumber=_useState7[0],setPageNumber=_useState7[1];var _useState8=useState(Number((_ref3=(_pagination$values$pa2=pagination==null||(_pagination$values2=pagination.values)==null?void 0:_pagination$values2.pageSize)!=null?_pagination$values$pa2:pagination==null?void 0:pagination.initialPageSize)!=null?_ref3:10)),pageSize=_useState8[0],setPageSize=_useState8[1];var _useState9=useState(Math.ceil(((pagination==null?void 0:pagination.totalCount)||0)/pageSize)||1),totalPages=_useState9[0],setTotalPages=_useState9[1];var _useState10=useState({}),chipColorMap=_useState10[0],setChipColorMap=_useState10[1];var _useState11=useState(null),openDropdownIndex=_useState11[0],setOpenDropdownIndex=_useState11[1];var prevDataHashRef=useRef("");useEffect(function(){var _ref4,_pagination$values$pa3,_pagination$values3,_ref5,_pagination$values$pa4,_pagination$values4;setPageNumber(Number((_ref4=(_pagination$values$pa3=pagination==null||(_pagination$values3=pagination.values)==null?void 0:_pagination$values3.pageNumber)!=null?_pagination$values$pa3:pagination==null?void 0:pagination.initialPage)!=null?_ref4:1));setPageSize(Number((_ref5=(_pagination$values$pa4=pagination==null||(_pagination$values4=pagination.values)==null?void 0:_pagination$values4.pageSize)!=null?_pagination$values$pa4:pagination==null?void 0:pagination.initialPageSize)!=null?_ref5:25))},[pagination]);useEffect(function(){setTotalPages(Math.ceil(((pagination==null?void 0:pagination.totalCount)||0)/pageSize)||1)},[pagination==null?void 0:pagination.totalCount,pageSize]);useEffect(function(){if(sortConfig){setSortDirections(sortConfig);var first=Object.keys(sortConfig)[0];if(first){setActiveSortColumn(first)}}},[sortConfig]);useEffect(function(){if(sortConfig!=null&&sortConfig.sortColumn||sortConfig!=null&&sortConfig.sortDirection){sortConfig.sortColumn=null;sortConfig.sortDirection=null}setActiveSortColumn(null);setSortDirections({})},[]);var computedColorMap=useMemo(function(){if(!Array.isArray(data)||data.length===0){return{}}// Get available column keys from first row
11
11
  var availableKeys=Object.keys(data[0]||{});var newColorMap={};// Process each column that uses random chips
12
12
  Object.keys(columnWithChipClass).forEach(function(columnKey){// Validate column key exists in data
13
13
  if(!availableKeys.includes(columnKey)){return}var chipMode=getChipMode(columnWithChipClass,columnKey);if(chipMode==="useRandom"){if(!newColorMap[columnKey]){newColorMap[columnKey]={}}var uniqueNormalizedValues=new Set;data.forEach(function(row){var value=row[columnKey];var normalizedKey=normalizeValue(value);if(normalizedKey){uniqueNormalizedValues.add(normalizedKey)}});var sortedUniqueValues=Array.from(uniqueNormalizedValues).sort();sortedUniqueValues.forEach(function(normalizedKey,index){if(!newColorMap[columnKey][normalizedKey]){var colorIndex=index%RANDOM_CHIP_COLOR_PALETTE.length;newColorMap[columnKey][normalizedKey]=RANDOM_CHIP_COLOR_PALETTE[colorIndex]}})}});return newColorMap},[data,columnWithChipClass]);useEffect(function(){var uniqueValuesHash=getUniqueValuesHash(data,columnWithChipClass);// Only update if the set of unique values actually changed
14
14
  if(uniqueValuesHash!==prevDataHashRef.current){prevDataHashRef.current=uniqueValuesHash;setChipColorMap(function(prevMap){var merged=_extends({},prevMap);Object.keys(computedColorMap).forEach(function(columnKey){merged[columnKey]=_extends({},computedColorMap[columnKey],merged[columnKey])});return merged})}},[computedColorMap,data,columnWithChipClass]);useEffect(function(){setChipColorMap(function(prevMap){var cleaned=_extends({},prevMap);var hasChanges=false;Object.keys(cleaned).forEach(function(columnKey){var chipMode=getChipMode(columnWithChipClass,columnKey);if(!chipMode){delete cleaned[columnKey];hasChanges=true}});return hasChanges?cleaned:prevMap})},[columnWithChipClass]);var _useButtonForm=useButtonForm({formMapper:activeAction==null?void 0:activeAction.action.formMapper,formTitle:activeAction==null?void 0:activeAction.action.formTitle,formDescription:activeAction==null?void 0:activeAction.action.formDescription,formButtonText:activeAction==null?void 0:activeAction.action.formButtonText,isSubmitting:isFormSubmitting||isLoading,onClose:function onClose(){setActiveRowIndex(null);setActiveAction(null)},onSubmit:function(){var _onSubmit=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(formData){return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:if(!(activeRowIndex!==null&&activeAction)){_context.next=10;break}setIsFormSubmitting(true);_context.prev=2;_context.next=5;return onRowAction==null?void 0:onRowAction(activeRowIndex,activeAction.id,formData);case 5:_context.prev=5;setIsFormSubmitting(false);return _context.finish(5);case 8:setActiveAction(null);setActiveRowIndex(null);case 10:case"end":return _context.stop()}},_callee,null,[[2,,5,8]])}));function onSubmit(_x){return _onSubmit.apply(this,arguments)}return onSubmit}()}),FormDialog=_useButtonForm.FormDialog,openForm=_useButtonForm.openForm;function handleButtonClick(rowIndex,action){if(action.action.action==="navigateToPage"&&action.action.targetPageId){var rowContext=resolveRowContext(action.action.rowContext,data[rowIndex]);navigateToPage==null||navigateToPage(action.action.targetPageId,rowContext);return}if(action.action.type==="navigation"){var onClick=action.action.onClick;if((onClick==null?void 0:onClick.action)==="navigateToPage"&&onClick.targetPageId){var _rowContext=resolveRowContext(action.action.rowContext,data[rowIndex]);navigateToPage==null||navigateToPage(onClick.targetPageId,_rowContext);return}}if(action.action.formMapper&&Object.keys(action.action.formMapper).length>0){setActiveRowIndex(rowIndex);setActiveAction(action)}else{onRowAction==null||onRowAction(rowIndex,action.id)}}useEffect(function(){if(activeAction!=null&&activeAction.action.formMapper&&Object.keys(activeAction.action.formMapper).length>0){openForm()}},[activeAction]);var originalKeys=Object.keys(data[0]||{}).filter(function(key){return key in headerMapper});var headers=originalKeys.map(function(key){return headerMapper[key]});if(actions.length>0){headers.push("")}var rows=data.map(function(datum){return originalKeys.map(function(key){return datum[key]})});function handlePageChange(_x2,_x3){return _handlePageChange.apply(this,arguments)}function _handlePageChange(){_handlePageChange=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(newPage,newSize){return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:if(newPage===void 0){newPage=pageNumber}if(newSize===void 0){newSize=pageSize}setPageNumber(newPage);setPageSize(newSize);onPageChange==null||onPageChange(newPage,newSize);case 5:case"end":return _context3.stop()}},_callee3)}));return _handlePageChange.apply(this,arguments)}function handleSortClick(column,direction){setActiveSortColumn(direction?column:null);setSortDirections(function(prev){var _extends2;return _extends({},prev,(_extends2={},_extends2[column]=direction,_extends2))});onSort==null||onSort(column,direction)}function handleCheckboxClick(rowIndex){if(setSelectedIndices){if(selectedIndices.includes(rowIndex)){setSelectedIndices(selectedIndices.filter(function(idx){return idx!==rowIndex}))}else{setSelectedIndices([].concat(selectedIndices,[rowIndex]))}}}function ActionsDropdown(_ref6){var rowIndex=_ref6.rowIndex,rowActions=_ref6.rowActions;var isOpen=openDropdownIndex===rowIndex;var totalRows=rows.length;var isNearBottom=rowIndex>=totalRows-3;function handleActionClick(_x4){return _handleActionClick.apply(this,arguments)}function _handleActionClick(){_handleActionClick=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(action){var rowContext,onClick,_rowContext2,actionKey;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:if(!(action.action.action==="navigateToPage"&&action.action.targetPageId)){_context2.next=5;break}rowContext=resolveRowContext(action.action.rowContext,data[rowIndex]);navigateToPage==null||navigateToPage(action.action.targetPageId,rowContext);setOpenDropdownIndex(null);return _context2.abrupt("return");case 5:if(!(action.action.type==="navigation")){_context2.next=12;break}onClick=action.action.onClick;if(!((onClick==null?void 0:onClick.action)==="navigateToPage"&&onClick.targetPageId)){_context2.next=12;break}_rowContext2=resolveRowContext(action.action.rowContext,data[rowIndex]);navigateToPage==null||navigateToPage(onClick.targetPageId,_rowContext2);setOpenDropdownIndex(null);return _context2.abrupt("return");case 12:// Handle form-based and API actions
15
- actionKey=rowIndex+"-"+action.id;if(!(action.action.formMapper&&Object.keys(action.action.formMapper).length>0)){_context2.next=19;break}setActiveRowIndex(rowIndex);setActiveAction(action);setOpenDropdownIndex(null);_context2.next=27;break;case 19:_context2.prev=19;setLoadingActionKey(actionKey);_context2.next=23;return onRowAction==null?void 0:onRowAction(rowIndex,action.id);case 23:_context2.prev=23;setLoadingActionKey(null);setOpenDropdownIndex(null);return _context2.finish(23);case 27:case"end":return _context2.stop()}},_callee2,null,[[19,,23,27]])}));return _handleActionClick.apply(this,arguments)}function toggleDropdown(){setOpenDropdownIndex(isOpen?null:rowIndex)}function handleBackdropClick(){if(!loadingActionKey){setOpenDropdownIndex(null)}}return/*#__PURE__*/_jsxs(_Fragment,{children:[isOpen&&/*#__PURE__*/_jsx("div",{className:"fixed inset-0 z-40",onClick:handleBackdropClick,style:{background:"transparent",cursor:"default"}}),/*#__PURE__*/_jsxs("div",{className:"relative",children:[/*#__PURE__*/_jsx(Button,{variant:"ghost",size:"icon",onClick:function onClick(e){e.stopPropagation();toggleDropdown()},disabled:isLoading,className:"h-8 w-8 relative z-50","data-dropdown-button":"true",children:/*#__PURE__*/_jsx(MoreVertical,{className:"h-4 w-4"})}),isOpen&&/*#__PURE__*/_jsx("div",{className:cn("absolute right-full mr-2 w-48 rounded-md shadow-lg bg-white ring-gray-400 ring-opacity-5 z-50",isNearBottom?"bottom-0":"top-0"),children:/*#__PURE__*/_jsx("div",{className:"py-1",role:"menu",children:rowActions.map(function(action){var actionKey=rowIndex+"-"+action.id;var isActionLoading=loadingActionKey===actionKey;return/*#__PURE__*/_jsxs("button",{onClick:function onClick(){return handleActionClick(action)},className:"block w-full text-left px-4 py-2 text-sm hover:bg-accent transition-colors font-semibold disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-2 focus:outline-none focus:bg-accent",disabled:isLoading||isActionLoading,role:"menuitem",children:[isActionLoading&&/*#__PURE__*/_jsx(Loader2,{className:"h-3 w-3 animate-spin"}),action.text]},action.id)})})})]})]})}function renderActions(rowIndex,rowActions){if(!actions.length){return null}return/*#__PURE__*/_jsx(TableCell,{className:"sticky right-0 bg-white overflow-visible",children:/*#__PURE__*/_jsx(ActionsDropdown,{rowIndex:rowIndex,rowActions:rowActions})})}var defaultClasses="aspect-auto w-full";var mergedClasses=className?cn(defaultClasses,className):defaultClasses;function getRandomColorForValue(columnKey,value){var _chipColorMap$columnK;var normalizedKey=normalizeValue(value);if((_chipColorMap$columnK=chipColorMap[columnKey])!=null&&_chipColorMap$columnK[normalizedKey]){return chipColorMap[columnKey][normalizedKey]}return"bg-gray-50 text-gray-900 shadow-sm"}function renderChip(columnKey,value){var chipMode=getChipMode(columnWithChipClass,columnKey);var formattedValue=formatValue(value,decimalPrecision);if(!chipMode){return/*#__PURE__*/_jsx(_Fragment,{children:formattedValue})}var chipClassName="";if(chipMode==="useMap"){var _chipStylesMapping$co;var valueStr=String(value);chipClassName=(_chipStylesMapping$co=chipStylesMapping[columnKey])==null?void 0:_chipStylesMapping$co[valueStr];if(!chipClassName){var valueLower=valueStr.toLowerCase().trim();chipClassName=SEMANTIC_CHIP_STYLES_MAP[valueLower]}if(!chipClassName){chipClassName="bg-gray-50 text-gray-900 shadow-sm"}}else if(chipMode==="useRandom"){chipClassName=getRandomColorForValue(columnKey,value)}return/*#__PURE__*/_jsx("span",{className:cn("inline-flex items-center rounded-md px-2 py-1 text-xs font-medium ring-1 ring-inset ring-gray-500/10",chipClassName),children:formattedValue})}function renderTableComponent(){if(isLoading||!data||data.length===0){return/*#__PURE__*/_jsx(TableLoader,{})}return/*#__PURE__*/_jsxs(Table,_extends({},otherProps,{className:"caption-bottom text-sm relative "+mergedClasses,"data-slot":"table",children:[/*#__PURE__*/_jsx(TableHeader,{"data-slot":"table-header",className:"sticky top-0 z-2",children:/*#__PURE__*/_jsxs(TableRow,{children:[isBulkSelectionEnabled&&/*#__PURE__*/_jsx(TableCell,{className:"p-2 w-10",children:/*#__PURE__*/_jsx(Checkbox,{checked:(selectedIndices==null?void 0:selectedIndices.length)===data.length,onCheckedChange:function onCheckedChange(){if(setSelectedIndices){if((selectedIndices==null?void 0:selectedIndices.length)===data.length){setSelectedIndices([])}else{setSelectedIndices(data.map(function(_,idx){return idx}))}}}})}),headers.map(function(head,idx){var isActionColumn=actions.length>0&&idx===headers.length-1;var originalKey=originalKeys[idx];if(isActionColumn){return/*#__PURE__*/_jsx(TableHead,{"data-slot":"table-header-"+idx,contentEditable:isEditable,className:"sticky right-0 bg-slate-100",children:head},idx)}return/*#__PURE__*/_jsx(TableHeadSortable,{"data-slot":"table-header-"+idx,sortDirection:sortDirections[originalKey]||"asc",isActive:activeSortColumn===originalKey,onSort:function onSort(direction){return handleSortClick(originalKey,direction)},sortable:sortableGlobal&&!isLoading,isEditable:isEditable,children:head},idx)})]})}),/*#__PURE__*/_jsx(TableBody,{"data-slot":"table-body",children:rows.map(function(row,rIdx){return/*#__PURE__*/_jsxs(TableRow,{"data-slot":"row-"+rIdx,className:"hover:bg-muted/50 border-b transition-colors",children:[isBulkSelectionEnabled&&/*#__PURE__*/_jsx(TableCell,{className:"p-2 align-middle",children:/*#__PURE__*/_jsx(Checkbox,{checked:selectedIndices==null?void 0:selectedIndices.includes(rIdx),onCheckedChange:function onCheckedChange(){return handleCheckboxClick(rIdx)}})}),row.map(function(cell,cIdx){var columnKey=originalKeys[cIdx];var chipMode=columnKey?getChipMode(columnWithChipClass,columnKey):undefined;var shouldRenderChip=!!chipMode;return/*#__PURE__*/_jsx(TableCell,{"data-slot":"cell-"+rIdx+"-"+cIdx,className:"p-2 align-middle whitespace-nowrap",contentEditable:false,children:shouldRenderChip?renderChip(columnKey,cell):formatValue(cell,decimalPrecision)},cIdx)}),renderActions(rIdx,actions)]},rIdx)})})]}))}return/*#__PURE__*/_jsxs(Fragment,{children:[/*#__PURE__*/_jsx("div",{className:"flex flex-col h-full overflow-hidden",children:/*#__PURE__*/_jsxs(ScrollArea,_extends({"data-slot":"table-container",className:mergedClasses},height!==undefined&&{style:{height:height}},{children:[renderTableComponent(),/*#__PURE__*/_jsx(ScrollBar,{orientation:"horizontal"})]}))}),(((_pagination$totalCoun=pagination==null?void 0:pagination.totalCount)!=null?_pagination$totalCoun:0)>0||title&&!isEditable&&onDownload)&&/*#__PURE__*/_jsxs("div",{className:"flex-shrink-0 flex items-center justify-between mt-2 w-full overflow-x-auto border-t pt-2",children:[/*#__PURE__*/_jsx("div",{className:"flex items-center gap-2 flex-shrink-0",children:pagination&&pagination.totalCount>0&&/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx("label",{htmlFor:"page-size-select",className:"text-sm whitespace-nowrap",children:"Rows per page:"}),/*#__PURE__*/_jsx("select",{id:"page-size-select",value:pageSize,onChange:function onChange(e){return handlePageChange(1,Number(e.target.value))},className:"border rounded px-2 py-1 text-sm cursor-pointer",disabled:isLoading,children:(pagination.pageSizeOptions||[10,20,50,100]).map(function(size){return/*#__PURE__*/_jsx("option",{value:size,children:size},size)})})]})}),/*#__PURE__*/_jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[title&&!isEditable&&onDownload&&/*#__PURE__*/_jsx(DownloadButton,{component:"table",title:title,onDownload:onDownload,dataCount:(_pagination$totalCoun2=pagination==null?void 0:pagination.totalCount)!=null?_pagination$totalCoun2:data.length}),pagination&&pagination.totalCount>0&&/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsxs("span",{className:"text-xs text-muted-foreground whitespace-nowrap ml-1.5",children:[(pageNumber-1)*pageSize+1,"\u2013",Math.min(pageNumber*pageSize,pagination.totalCount)," of ",pagination.totalCount]}),/*#__PURE__*/_jsx(Pagination,{children:/*#__PURE__*/_jsx(PaginationContent,{className:"gap-0.2 flex-shrink-0",children:renderPaginationArrows(pageNumber,totalPages,isLoading,handlePageChange)})})]})]})]}),FormDialog]})}
15
+ actionKey=rowIndex+"-"+action.id;if(!(action.action.formMapper&&Object.keys(action.action.formMapper).length>0)){_context2.next=19;break}setActiveRowIndex(rowIndex);setActiveAction(action);setOpenDropdownIndex(null);_context2.next=27;break;case 19:_context2.prev=19;setLoadingActionKey(actionKey);_context2.next=23;return onRowAction==null?void 0:onRowAction(rowIndex,action.id);case 23:_context2.prev=23;setLoadingActionKey(null);setOpenDropdownIndex(null);return _context2.finish(23);case 27:case"end":return _context2.stop()}},_callee2,null,[[19,,23,27]])}));return _handleActionClick.apply(this,arguments)}function toggleDropdown(){setOpenDropdownIndex(isOpen?null:rowIndex)}function handleBackdropClick(){if(!loadingActionKey){setOpenDropdownIndex(null)}}return/*#__PURE__*/_jsxs(_Fragment,{children:[isOpen&&/*#__PURE__*/_jsx("div",{className:"fixed inset-0 z-40",onClick:handleBackdropClick,style:{background:"transparent",cursor:"default"}}),/*#__PURE__*/_jsxs("div",{className:"relative",children:[/*#__PURE__*/_jsx(Button,{variant:"ghost",size:"icon",onClick:function onClick(e){e.stopPropagation();toggleDropdown()},disabled:isLoading,className:"h-8 w-8 relative z-50","data-dropdown-button":"true",children:/*#__PURE__*/_jsx(MoreVertical,{className:"h-4 w-4"})}),isOpen&&/*#__PURE__*/_jsx("div",{className:cn("absolute right-full mr-2 w-48 rounded-md shadow-lg bg-white ring-gray-400 ring-opacity-5 z-50",isNearBottom?"bottom-0":"top-0"),children:/*#__PURE__*/_jsx("div",{className:"py-1",role:"menu",children:rowActions.map(function(action){var actionKey=rowIndex+"-"+action.id;var isActionLoading=loadingActionKey===actionKey;return/*#__PURE__*/_jsxs("button",{onClick:function onClick(){return handleActionClick(action)},className:"block w-full text-left px-4 py-2 text-sm hover:bg-accent transition-colors font-semibold disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-2 focus:outline-none focus:bg-accent",disabled:isLoading||isActionLoading,role:"menuitem",children:[isActionLoading&&/*#__PURE__*/_jsx(Loader2,{className:"h-3 w-3 animate-spin"}),action.text]},action.id)})})})]})]})}function renderActions(rowIndex,rowActions){if(!actions.length){return null}return/*#__PURE__*/_jsx(TableCell,{className:"sticky right-0 bg-white overflow-visible",children:/*#__PURE__*/_jsx(ActionsDropdown,{rowIndex:rowIndex,rowActions:rowActions})})}var defaultClasses="aspect-auto w-full";var mergedClasses=className?cn(defaultClasses,className):defaultClasses;function getRandomColorForValue(columnKey,value){var _chipColorMap$columnK;var normalizedKey=normalizeValue(value);if((_chipColorMap$columnK=chipColorMap[columnKey])!=null&&_chipColorMap$columnK[normalizedKey]){return chipColorMap[columnKey][normalizedKey]}return"bg-gray-50 text-gray-900 shadow-sm"}function renderChip(columnKey,value){var chipMode=getChipMode(columnWithChipClass,columnKey);var formattedValue=formatValue(value,decimalPrecision);if(!chipMode){return/*#__PURE__*/_jsx(_Fragment,{children:formattedValue})}var chipClassName="";if(chipMode==="useMap"){var _chipStylesMapping$co;var valueStr=String(value);chipClassName=(_chipStylesMapping$co=chipStylesMapping[columnKey])==null?void 0:_chipStylesMapping$co[valueStr];if(!chipClassName){var valueLower=valueStr.toLowerCase().trim();chipClassName=SEMANTIC_CHIP_STYLES_MAP[valueLower]}if(!chipClassName){chipClassName="bg-gray-50 text-gray-900 shadow-sm"}}else if(chipMode==="useRandom"){chipClassName=getRandomColorForValue(columnKey,value)}return/*#__PURE__*/_jsx("span",{className:cn("inline-flex items-center rounded-md px-2 py-1 text-xs font-medium ring-1 ring-inset ring-gray-500/10",chipClassName),children:formattedValue})}function renderTableComponent(){if(isLoading||!data||data.length===0){return/*#__PURE__*/_jsx(TableLoader,{})}return/*#__PURE__*/_jsxs(Table,_extends({},otherProps,{className:"caption-bottom text-sm relative "+mergedClasses,"data-slot":"table",children:[/*#__PURE__*/_jsx(TableHeader,{"data-slot":"table-header",className:"sticky top-0 z-2",children:/*#__PURE__*/_jsxs(TableRow,{children:[isBulkSelectionEnabled&&/*#__PURE__*/_jsx(TableCell,{className:"p-2 w-10",children:/*#__PURE__*/_jsx(Checkbox,{checked:(selectedIndices==null?void 0:selectedIndices.length)===data.length,onCheckedChange:function onCheckedChange(){if(setSelectedIndices){if((selectedIndices==null?void 0:selectedIndices.length)===data.length){setSelectedIndices([])}else{setSelectedIndices(data.map(function(_,idx){return idx}))}}}})}),headers.map(function(head,idx){var isActionColumn=actions.length>0&&idx===headers.length-1;var originalKey=originalKeys[idx];if(isActionColumn){return/*#__PURE__*/_jsx(TableHead,{"data-slot":"table-header-"+idx,contentEditable:isEditable,className:"sticky right-0 bg-slate-100",children:head},idx)}return/*#__PURE__*/_jsx(TableHeadSortable,{"data-slot":"table-header-"+idx,sortDirection:sortDirections[originalKey]||"asc",isActive:activeSortColumn===originalKey,onSort:function onSort(direction){return handleSortClick(originalKey,direction)},sortable:sortableGlobal&&!isLoading,isEditable:isEditable,children:head},idx)})]})}),/*#__PURE__*/_jsx(TableBody,{"data-slot":"table-body",children:rows.map(function(row,rIdx){return/*#__PURE__*/_jsxs(TableRow,{"data-slot":"row-"+rIdx,className:"hover:bg-muted/50 border-b transition-colors",children:[isBulkSelectionEnabled&&/*#__PURE__*/_jsx(TableCell,{className:"p-2 align-middle",children:/*#__PURE__*/_jsx(Checkbox,{checked:selectedIndices==null?void 0:selectedIndices.includes(rIdx),onCheckedChange:function onCheckedChange(){return handleCheckboxClick(rIdx)}})}),row.map(function(cell,cIdx){var columnKey=originalKeys[cIdx];var chipMode=columnKey?getChipMode(columnWithChipClass,columnKey):undefined;var shouldRenderChip=!!chipMode;return/*#__PURE__*/_jsx(TableCell,{"data-slot":"cell-"+rIdx+"-"+cIdx,className:"p-2 align-middle whitespace-nowrap",contentEditable:false,children:shouldRenderChip?renderChip(columnKey,cell):formatValue(cell,decimalPrecision)},cIdx)}),renderActions(rIdx,actions)]},rIdx)})})]}))}return/*#__PURE__*/_jsxs(Fragment,{children:[/*#__PURE__*/_jsx("div",{className:"flex flex-col h-full overflow-hidden",children:/*#__PURE__*/_jsxs(ScrollArea,_extends({"data-slot":"table-container",className:mergedClasses},height!==undefined&&{style:{height:height}},{children:[renderTableComponent(),/*#__PURE__*/_jsx(ScrollBar,{orientation:"horizontal"})]}))}),(((_pagination$totalCoun=pagination==null?void 0:pagination.totalCount)!=null?_pagination$totalCoun:0)>0||title&&!isEditable&&onDownload)&&/*#__PURE__*/_jsxs("div",{className:"flex-shrink-0 flex items-center justify-between mt-2 w-full overflow-x-auto border-t pt-2",children:[/*#__PURE__*/_jsx("div",{className:"flex items-center gap-2 flex-shrink-0",children:pagination&&pagination.totalCount>0&&/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx("label",{htmlFor:"page-size-select",className:"text-sm whitespace-nowrap",children:"Rows per page:"}),/*#__PURE__*/_jsx("select",{id:"page-size-select",value:pageSize,onChange:function onChange(e){return handlePageChange(1,Number(e.target.value))},className:"border rounded px-2 py-1 text-sm cursor-pointer",disabled:isLoading,children:(pagination.pageSizeOptions||[10,20,50,100]).map(function(size){return/*#__PURE__*/_jsx("option",{value:size,children:size},size)})})]})}),/*#__PURE__*/_jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[title&&!isEditable&&onDownload&&/*#__PURE__*/_jsx(DownloadButton,{component:"table",title:title,onDownload:onDownload,dataCount:typeof(pagination==null?void 0:pagination.totalCount)==="number"?pagination.totalCount:data.length}),pagination&&pagination.totalCount>0&&/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsxs("span",{className:"text-xs text-muted-foreground whitespace-nowrap ml-1.5",children:[(pageNumber-1)*pageSize+1,"\u2013",Math.min(pageNumber*pageSize,pagination.totalCount)," of ",pagination.totalCount]}),/*#__PURE__*/_jsx(Pagination,{children:/*#__PURE__*/_jsx(PaginationContent,{className:"gap-0.2 flex-shrink-0",children:renderPaginationArrows(pageNumber,totalPages,isLoading,handlePageChange)})})]})]})]}),FormDialog]})}
16
16
  //# sourceMappingURL=data-table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.js","names":["useEffect","useState","Fragment","useMemo","useRef","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","TableHeadSortable","TableLoader","ScrollArea","ScrollBar","Pagination","PaginationContent","renderPaginationArrows","Button","cn","renderNoDataFallback","formatValue","SEMANTIC_CHIP_STYLES_MAP","RANDOM_CHIP_COLOR_PALETTE","Checkbox","MoreVertical","Loader2","useButtonForm","DownloadButton","jsx","_jsx","jsxs","_jsxs","_Fragment","resolveRowContext","rowContext","row","Object","keys","length","undefined","resolved","_i","_Object$entries","entries","_Object$entries$_i","key","ref","startsWith","_row$fieldName","fieldName","includes","split","slice","join","normalizeValue","value","str","String","trim","toLowerCase","getChipMode","columnWithChipClass","columnKey","mode","getUniqueValuesHash","data","Array","isArray","availableKeys","hashParts","forEach","chipMode","uniqueNormalizedValues","Set","normalizedKey","add","sortedUniqueValues","from","sort","JSON","stringify","DataTable","_ref","_ref2","_pagination$values$pa","_pagination$values","_ref3","_pagination$values$pa2","_pagination$values2","_pagination$totalCoun","_pagination$totalCoun2","_ref$data","_ref$headerMapper","headerMapper","_ref$className","className","_ref$actions","actions","_ref$isEditable","isEditable","pagination","_ref$isLoading","isLoading","onRowAction","onPageChange","onSort","sortConfig","_ref$sortable","sortable","sortableGlobal","_ref$otherProps","otherProps","height","_ref$decimalPrecision","decimalPrecision","_ref$columnWithChipCl","_ref$chipStylesMappin","chipStylesMapping","navigateToPage","_ref$isBulkSelectionE","isBulkSelectionEnabled","_ref$selectedIndices","selectedIndices","setSelectedIndices","title","onDownload","children","style","minHeight","_useState","activeSortColumn","setActiveSortColumn","_useState2","sortDirections","setSortDirections","_useState3","activeRowIndex","setActiveRowIndex","_useState4","activeAction","setActiveAction","_useState5","isFormSubmitting","setIsFormSubmitting","_useState6","loadingActionKey","setLoadingActionKey","_useState7","Number","values","pageNumber","initialPage","setPageNumber","_useState8","pageSize","initialPageSize","setPageSize","_useState9","Math","ceil","totalCount","totalPages","setTotalPages","_useState10","chipColorMap","setChipColorMap","_useState11","openDropdownIndex","setOpenDropdownIndex","prevDataHashRef","_ref4","_pagination$values$pa3","_pagination$values3","_ref5","_pagination$values$pa4","_pagination$values4","first","sortColumn","sortDirection","computedColorMap","newColorMap","index","colorIndex","uniqueValuesHash","current","prevMap","merged","_extends","cleaned","hasChanges","_useButtonForm","formMapper","action","formTitle","formDescription","formButtonText","isSubmitting","onClose","onSubmit","_onSubmit","_asyncToGenerator","_regeneratorRuntime","mark","_callee","formData","wrap","_callee$","_context","prev","next","id","finish","stop","_x","apply","arguments","FormDialog","openForm","handleButtonClick","rowIndex","targetPageId","type","onClick","originalKeys","filter","headers","map","push","rows","datum","handlePageChange","_x2","_x3","_handlePageChange","_callee3","newPage","newSize","_callee3$","_context3","handleSortClick","column","direction","_extends2","handleCheckboxClick","idx","concat","ActionsDropdown","_ref6","rowActions","isOpen","totalRows","isNearBottom","handleActionClick","_x4","_handleActionClick","_callee2","_rowContext2","actionKey","_callee2$","_context2","abrupt","toggleDropdown","handleBackdropClick","background","cursor","variant","size","e","stopPropagation","disabled","role","isActionLoading","text","renderActions","defaultClasses","mergedClasses","getRandomColorForValue","_chipColorMap$columnK","renderChip","formattedValue","chipClassName","_chipStylesMapping$co","valueStr","valueLower","renderTableComponent","checked","onCheckedChange","_","head","isActionColumn","originalKey","contentEditable","isActive","rIdx","cell","cIdx","shouldRenderChip","orientation","htmlFor","onChange","target","pageSizeOptions","component","dataCount","min"],"sources":["../../../src/plugins/helpers/data-table.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useEffect, useState, Fragment, useMemo, useRef } from 'react';\nimport {\n Table,\n TableHeader,\n TableRow,\n TableHead,\n TableBody,\n TableCell,\n TableHeadSortable,\n SortDirection,\n} from '../../shadcn/components/ui/table';\nimport { TableLoader } from '../../shadcn/components/ui/skeleton';\nimport { ScrollArea, ScrollBar } from '../../shadcn/components/ui/scroll-area';\nimport {\n Pagination,\n PaginationContent,\n renderPaginationArrows,\n} from '../../shadcn/components/ui/pagination';\nimport { Button } from '../../shadcn/components/ui/button';\nimport { cn } from '../../shadcn/utils';\nimport { renderNoDataFallback } from './extra';\nimport { formatValue } from '../../helpers';\nimport { SEMANTIC_CHIP_STYLES_MAP, RANDOM_CHIP_COLOR_PALETTE } from '../../constants';\nimport { Checkbox } from '../../shadcn/components/ui/checkbox';\nimport { MoreVertical, Loader2 } from 'lucide-react';\nimport { useButtonForm } from './button-form';\nimport { DownloadButton } from './download-data-button';\n\nfunction resolveRowContext(\n rowContext: Record<string, string> | undefined,\n row: Record<string, any>,\n): Record<string, any> | undefined {\n if (!rowContext || Object.keys(rowContext).length === 0) {\n return undefined;\n }\n\n const resolved: Record<string, any> = {};\n\n for (const [key, ref] of Object.entries(rowContext)) {\n if (typeof ref === 'string' && ref.startsWith('@')) {\n const fieldName = ref.includes('.') ? ref.split('.').slice(1).join('.') : ref.slice(1);\n resolved[key] = row[fieldName] ?? row[ref.slice(1)];\n } else {\n resolved[key] = ref;\n }\n }\n\n return resolved;\n}\n\ntype RowAction = {\n id: string;\n text: string;\n variant?: string;\n tooltipContent?: string;\n className?: string;\n action: any;\n};\n\nexport type DataTableProps = {\n data: Record<string, any>[];\n headerMapper?: Record<string, string>;\n className?: string;\n isEditable?: boolean;\n actions?: RowAction[];\n pagination?: {\n values?: {\n pageNumber: number;\n pageSize: number;\n };\n initialPage?: number;\n initialPageSize?: number;\n totalCount: number;\n pageSizeOptions: number[];\n };\n isLoading?: boolean;\n onRowAction?: (rowIndex: number, actionId: string, formData?: Record<string, any>) => void;\n onPageChange?: (pageNumber: number, pageSize: number) => void;\n onSort?: (column: string, direction: SortDirection) => void;\n sortConfig?: Record<string, SortDirection>;\n sortable?: boolean;\n otherProps?: Record<string, any>;\n height?: string | number;\n decimalPrecision?: number;\n columnWithChipClass?: Record<string, 'useMap' | 'useRandom'>;\n chipStylesMapping?: Record<string, Record<string, string>>;\n navigateToPage?: (pageId: string, rowContext?: Record<string, any>) => void;\n isBulkSelectionEnabled?: boolean;\n selectedIndices?: number[];\n setSelectedIndices?: (indices: number[]) => void;\n title?: string;\n onDownload?: (limit: number) => Promise<void>;\n};\n\n/**\n * Normalizes a value to a consistent string key for color mapping.\n * Handles all value types: null/undefined, numbers, booleans, objects, arrays, dates.\n * Ensures consistent color assignment for all variations of the same logical value.\n */\nfunction normalizeValue(value: any): string {\n // Handle null/undefined\n if (value === null || value === undefined) {\n return '';\n }\n\n const str = String(value);\n\n return str.trim().toLowerCase();\n}\n\nfunction getChipMode(\n columnWithChipClass: Record<string, 'useMap' | 'useRandom'>,\n columnKey: string,\n): 'useMap' | 'useRandom' | undefined {\n if (!(columnKey in columnWithChipClass)) {\n return undefined;\n }\n\n const mode = columnWithChipClass[columnKey];\n\n if (mode !== 'useMap' && mode !== 'useRandom') {\n return 'useRandom';\n }\n\n return mode;\n}\n\n/**\n * Generates a stable hash based on unique value sets per column.\n * This hash is order-independent - it only changes when the set of unique values changes,\n * not when rows are reordered (e.g., during sorting).\n */\nfunction getUniqueValuesHash(\n data: Record<string, any>[],\n columnWithChipClass: Record<string, 'useMap' | 'useRandom'>,\n): string {\n if (!Array.isArray(data) || data.length === 0) {\n return '';\n }\n\n const availableKeys = Object.keys(data[0] || {});\n const hashParts: Record<string, string[]> = {};\n\n Object.keys(columnWithChipClass).forEach((columnKey) => {\n if (!availableKeys.includes(columnKey)) {\n return;\n }\n\n const chipMode = getChipMode(columnWithChipClass, columnKey);\n\n if (chipMode === 'useRandom') {\n const uniqueNormalizedValues = new Set<string>();\n data.forEach((row) => {\n const value = row[columnKey];\n const normalizedKey = normalizeValue(value);\n\n if (normalizedKey) {\n uniqueNormalizedValues.add(normalizedKey);\n }\n });\n const sortedUniqueValues = Array.from(uniqueNormalizedValues).sort();\n hashParts[columnKey] = sortedUniqueValues;\n }\n });\n\n return JSON.stringify(hashParts);\n}\n\nexport function DataTable({\n data = [],\n headerMapper = {},\n className = '',\n actions = [],\n isEditable = false,\n pagination,\n isLoading = false,\n onRowAction,\n onPageChange,\n onSort,\n sortConfig,\n sortable: sortableGlobal = true,\n otherProps = {},\n height,\n decimalPrecision = 2,\n columnWithChipClass = {},\n chipStylesMapping = {},\n navigateToPage,\n isBulkSelectionEnabled = false,\n selectedIndices = [],\n setSelectedIndices,\n title,\n onDownload,\n}: DataTableProps) {\n if (!data || data.length === 0) {\n return (\n <Fragment>\n <div className=\"flex flex-col overflow-hidden\">\n <div\n data-slot=\"table-container\"\n className=\"aspect-auto w-full\"\n style={{ height: 'auto', minHeight: '180px' }}\n >\n {isLoading ? <TableLoader /> : renderNoDataFallback()}\n </div>\n </div>\n </Fragment>\n );\n }\n\n const [activeSortColumn, setActiveSortColumn] = useState<string | null>(null);\n const [sortDirections, setSortDirections] = useState<Record<string, SortDirection>>({});\n const [activeRowIndex, setActiveRowIndex] = useState<number | null>(null);\n const [activeAction, setActiveAction] = useState<RowAction | null>(null);\n const [isFormSubmitting, setIsFormSubmitting] = useState(false);\n const [loadingActionKey, setLoadingActionKey] = useState<string | null>(null);\n\n const [pageNumber, setPageNumber] = useState(\n Number(pagination?.values?.pageNumber ?? pagination?.initialPage ?? 1),\n );\n const [pageSize, setPageSize] = useState(\n Number(pagination?.values?.pageSize ?? pagination?.initialPageSize ?? 10),\n );\n const [totalPages, setTotalPages] = useState(\n Math.ceil((pagination?.totalCount || 0) / pageSize) || 1,\n );\n\n const [chipColorMap, setChipColorMap] = useState<Record<string, Record<string, string>>>({});\n\n const [openDropdownIndex, setOpenDropdownIndex] = useState<number | null>(null);\n\n const prevDataHashRef = useRef<string>('');\n\n useEffect(() => {\n setPageNumber(Number(pagination?.values?.pageNumber ?? pagination?.initialPage ?? 1));\n setPageSize(Number(pagination?.values?.pageSize ?? pagination?.initialPageSize ?? 25));\n }, [pagination]);\n\n useEffect(() => {\n setTotalPages(Math.ceil((pagination?.totalCount || 0) / pageSize) || 1);\n }, [pagination?.totalCount, pageSize]);\n\n useEffect(() => {\n if (sortConfig) {\n setSortDirections(sortConfig);\n const first = Object.keys(sortConfig)[0];\n\n if (first) {\n setActiveSortColumn(first);\n }\n }\n }, [sortConfig]);\n\n useEffect(() => {\n if (sortConfig?.sortColumn || sortConfig?.sortDirection) {\n sortConfig.sortColumn = null;\n sortConfig.sortDirection = null;\n }\n\n setActiveSortColumn(null);\n setSortDirections({});\n }, []);\n\n const computedColorMap = useMemo(() => {\n if (!Array.isArray(data) || data.length === 0) {\n return {};\n }\n\n // Get available column keys from first row\n const availableKeys = Object.keys(data[0] || {});\n\n const newColorMap: Record<string, Record<string, string>> = {};\n\n // Process each column that uses random chips\n Object.keys(columnWithChipClass).forEach((columnKey) => {\n // Validate column key exists in data\n if (!availableKeys.includes(columnKey)) {\n return;\n }\n\n const chipMode = getChipMode(columnWithChipClass, columnKey);\n\n if (chipMode === 'useRandom') {\n if (!newColorMap[columnKey]) {\n newColorMap[columnKey] = {};\n }\n\n const uniqueNormalizedValues = new Set<string>();\n data.forEach((row) => {\n const value = row[columnKey];\n const normalizedKey = normalizeValue(value);\n\n if (normalizedKey) {\n uniqueNormalizedValues.add(normalizedKey);\n }\n });\n\n const sortedUniqueValues = Array.from(uniqueNormalizedValues).sort();\n\n sortedUniqueValues.forEach((normalizedKey, index) => {\n if (!newColorMap[columnKey][normalizedKey]) {\n const colorIndex = index % RANDOM_CHIP_COLOR_PALETTE.length;\n newColorMap[columnKey][normalizedKey] = RANDOM_CHIP_COLOR_PALETTE[colorIndex];\n }\n });\n }\n });\n\n return newColorMap;\n }, [data, columnWithChipClass]);\n\n useEffect(() => {\n const uniqueValuesHash = getUniqueValuesHash(data, columnWithChipClass);\n\n // Only update if the set of unique values actually changed\n if (uniqueValuesHash !== prevDataHashRef.current) {\n prevDataHashRef.current = uniqueValuesHash;\n\n setChipColorMap((prevMap) => {\n const merged = { ...prevMap };\n Object.keys(computedColorMap).forEach((columnKey) => {\n merged[columnKey] = { ...computedColorMap[columnKey], ...merged[columnKey] };\n });\n\n return merged;\n });\n }\n }, [computedColorMap, data, columnWithChipClass]);\n\n useEffect(() => {\n setChipColorMap((prevMap) => {\n const cleaned = { ...prevMap };\n let hasChanges = false;\n\n Object.keys(cleaned).forEach((columnKey) => {\n const chipMode = getChipMode(columnWithChipClass, columnKey);\n\n if (!chipMode) {\n delete cleaned[columnKey];\n hasChanges = true;\n }\n });\n\n return hasChanges ? cleaned : prevMap;\n });\n }, [columnWithChipClass]);\n\n const { FormDialog, openForm } = useButtonForm({\n formMapper: activeAction?.action.formMapper,\n formTitle: activeAction?.action.formTitle,\n formDescription: activeAction?.action.formDescription,\n formButtonText: activeAction?.action.formButtonText,\n isSubmitting: isFormSubmitting || isLoading,\n onClose: () => {\n setActiveRowIndex(null);\n setActiveAction(null);\n },\n onSubmit: async (formData) => {\n if (activeRowIndex !== null && activeAction) {\n setIsFormSubmitting(true);\n\n try {\n await onRowAction?.(activeRowIndex, activeAction.id, formData);\n } finally {\n setIsFormSubmitting(false);\n }\n\n setActiveAction(null);\n setActiveRowIndex(null);\n }\n },\n });\n\n function handleButtonClick(rowIndex: number, action: RowAction) {\n if (action.action.action === 'navigateToPage' && action.action.targetPageId) {\n const rowContext = resolveRowContext(action.action.rowContext, data[rowIndex]);\n navigateToPage?.(action.action.targetPageId, rowContext);\n\n return;\n }\n\n if (action.action.type === 'navigation') {\n const onClick = action.action.onClick;\n\n if (onClick?.action === 'navigateToPage' && onClick.targetPageId) {\n const rowContext = resolveRowContext(action.action.rowContext, data[rowIndex]);\n navigateToPage?.(onClick.targetPageId, rowContext);\n\n return;\n }\n }\n\n if (action.action.formMapper && Object.keys(action.action.formMapper).length > 0) {\n setActiveRowIndex(rowIndex);\n setActiveAction(action);\n } else {\n onRowAction?.(rowIndex, action.id);\n }\n }\n\n useEffect(() => {\n if (activeAction?.action.formMapper && Object.keys(activeAction.action.formMapper).length > 0) {\n openForm();\n }\n }, [activeAction]);\n\n const originalKeys = Object.keys(data[0] || {}).filter((key) => key in headerMapper);\n const headers = originalKeys.map((key) => headerMapper[key]);\n\n if (actions.length > 0) {\n headers.push('');\n }\n\n const rows = data.map((datum: any) => originalKeys.map((key) => datum[key]));\n\n async function handlePageChange(newPage = pageNumber, newSize = pageSize) {\n setPageNumber(newPage);\n setPageSize(newSize);\n onPageChange?.(newPage, newSize);\n }\n\n function handleSortClick(column: string, direction: SortDirection) {\n setActiveSortColumn(direction ? column : null);\n setSortDirections((prev) => ({\n ...prev,\n [column]: direction,\n }));\n onSort?.(column, direction);\n }\n\n function handleCheckboxClick(rowIndex: number) {\n if (setSelectedIndices) {\n if (selectedIndices.includes(rowIndex)) {\n setSelectedIndices(selectedIndices.filter((idx) => idx !== rowIndex));\n } else {\n setSelectedIndices([...selectedIndices, rowIndex]);\n }\n }\n }\n\n function ActionsDropdown({\n rowIndex,\n rowActions,\n }: {\n rowIndex: number;\n rowActions: RowAction[];\n }) {\n const isOpen = openDropdownIndex === rowIndex;\n\n const totalRows = rows.length;\n const isNearBottom = rowIndex >= totalRows - 3;\n\n async function handleActionClick(action: RowAction) {\n if (action.action.action === 'navigateToPage' && action.action.targetPageId) {\n const rowContext = resolveRowContext(action.action.rowContext, data[rowIndex]);\n navigateToPage?.(action.action.targetPageId, rowContext);\n setOpenDropdownIndex(null);\n\n return;\n }\n\n if (action.action.type === 'navigation') {\n const onClick = action.action.onClick;\n\n if (onClick?.action === 'navigateToPage' && onClick.targetPageId) {\n const rowContext = resolveRowContext(action.action.rowContext, data[rowIndex]);\n navigateToPage?.(onClick.targetPageId, rowContext);\n setOpenDropdownIndex(null);\n\n return;\n }\n }\n\n // Handle form-based and API actions\n const actionKey = `${rowIndex}-${action.id}`;\n\n if (action.action.formMapper && Object.keys(action.action.formMapper).length > 0) {\n setActiveRowIndex(rowIndex);\n setActiveAction(action);\n setOpenDropdownIndex(null);\n } else {\n try {\n setLoadingActionKey(actionKey);\n await onRowAction?.(rowIndex, action.id);\n } finally {\n setLoadingActionKey(null);\n setOpenDropdownIndex(null);\n }\n }\n }\n\n function toggleDropdown() {\n setOpenDropdownIndex(isOpen ? null : rowIndex);\n }\n\n function handleBackdropClick() {\n if (!loadingActionKey) {\n setOpenDropdownIndex(null);\n }\n }\n\n return (\n <>\n {isOpen && (\n <div\n className=\"fixed inset-0 z-40\"\n onClick={handleBackdropClick}\n style={{ background: 'transparent', cursor: 'default' }}\n />\n )}\n <div className=\"relative\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={(e) => {\n e.stopPropagation();\n toggleDropdown();\n }}\n disabled={isLoading}\n className=\"h-8 w-8 relative z-50\"\n data-dropdown-button=\"true\"\n >\n <MoreVertical className=\"h-4 w-4\" />\n </Button>\n {isOpen && (\n <div\n className={cn(\n 'absolute right-full mr-2 w-48 rounded-md shadow-lg bg-white ring-gray-400 ring-opacity-5 z-50',\n isNearBottom ? 'bottom-0' : 'top-0',\n )}\n >\n <div className=\"py-1\" role=\"menu\">\n {rowActions.map((action) => {\n const actionKey = `${rowIndex}-${action.id}`;\n const isActionLoading = loadingActionKey === actionKey;\n\n return (\n <button\n key={action.id}\n onClick={() => handleActionClick(action)}\n className=\"block w-full text-left px-4 py-2 text-sm hover:bg-accent transition-colors font-semibold disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-2 focus:outline-none focus:bg-accent\"\n disabled={isLoading || isActionLoading}\n role=\"menuitem\"\n >\n {isActionLoading && <Loader2 className=\"h-3 w-3 animate-spin\" />}\n {action.text}\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\n </>\n );\n }\n\n function renderActions(rowIndex: number, rowActions: RowAction[]) {\n if (!actions.length) {\n return null;\n }\n\n return (\n <TableCell className=\"sticky right-0 bg-white overflow-visible\">\n <ActionsDropdown rowIndex={rowIndex} rowActions={rowActions} />\n </TableCell>\n );\n }\n\n const defaultClasses = `aspect-auto w-full`;\n const mergedClasses = className ? cn(defaultClasses, className) : defaultClasses;\n\n function getRandomColorForValue(columnKey: string, value: any): string {\n const normalizedKey = normalizeValue(value);\n\n if (chipColorMap[columnKey]?.[normalizedKey]) {\n return chipColorMap[columnKey][normalizedKey];\n }\n\n return 'bg-gray-50 text-gray-900 shadow-sm';\n }\n\n function renderChip(columnKey: string, value: any) {\n const chipMode = getChipMode(columnWithChipClass, columnKey);\n const formattedValue = formatValue(value, decimalPrecision);\n\n if (!chipMode) {\n return <>{formattedValue}</>;\n }\n\n let chipClassName = '';\n\n if (chipMode === 'useMap') {\n const valueStr = String(value);\n chipClassName = chipStylesMapping[columnKey]?.[valueStr];\n\n if (!chipClassName) {\n const valueLower = valueStr.toLowerCase().trim();\n chipClassName = SEMANTIC_CHIP_STYLES_MAP[valueLower];\n }\n\n if (!chipClassName) {\n chipClassName = 'bg-gray-50 text-gray-900 shadow-sm';\n }\n } else if (chipMode === 'useRandom') {\n chipClassName = getRandomColorForValue(columnKey, value);\n }\n\n return (\n <span\n className={cn(\n 'inline-flex items-center rounded-md px-2 py-1 text-xs font-medium ring-1 ring-inset ring-gray-500/10',\n chipClassName,\n )}\n >\n {formattedValue}\n </span>\n );\n }\n\n function renderTableComponent() {\n if (isLoading || !data || data.length === 0) {\n return <TableLoader />;\n }\n\n return (\n <Table\n {...otherProps}\n className={`caption-bottom text-sm relative ${mergedClasses}`}\n data-slot=\"table\"\n >\n <TableHeader data-slot=\"table-header\" className=\"sticky top-0 z-2\">\n <TableRow>\n {isBulkSelectionEnabled && (\n <TableCell className=\"p-2 w-10\">\n <Checkbox\n checked={selectedIndices?.length === data.length}\n onCheckedChange={() => {\n if (setSelectedIndices) {\n if (selectedIndices?.length === data.length) {\n setSelectedIndices([]);\n } else {\n setSelectedIndices(data.map((_, idx) => idx));\n }\n }\n }}\n />\n </TableCell>\n )}\n {headers.map((head: string, idx: number) => {\n const isActionColumn = actions.length > 0 && idx === headers.length - 1;\n const originalKey = originalKeys[idx];\n\n if (isActionColumn) {\n return (\n <TableHead\n key={idx}\n data-slot={`table-header-${idx}`}\n contentEditable={isEditable}\n className=\"sticky right-0 bg-slate-100\"\n >\n {head}\n </TableHead>\n );\n }\n\n return (\n <TableHeadSortable\n key={idx}\n data-slot={`table-header-${idx}`}\n sortDirection={sortDirections[originalKey] || 'asc'}\n isActive={activeSortColumn === originalKey}\n onSort={(direction) => handleSortClick(originalKey, direction)}\n sortable={sortableGlobal && !isLoading}\n isEditable={isEditable}\n >\n {head}\n </TableHeadSortable>\n );\n })}\n </TableRow>\n </TableHeader>\n <TableBody data-slot=\"table-body\">\n {rows.map((row: any[], rIdx: number) => (\n <TableRow\n key={rIdx}\n data-slot={`row-${rIdx}`}\n className=\"hover:bg-muted/50 border-b transition-colors\"\n >\n {isBulkSelectionEnabled && (\n <TableCell className=\"p-2 align-middle\">\n <Checkbox\n checked={selectedIndices?.includes(rIdx)}\n onCheckedChange={() => handleCheckboxClick(rIdx)}\n />\n </TableCell>\n )}\n {row.map((cell: string, cIdx: number) => {\n const columnKey = originalKeys[cIdx];\n const chipMode = columnKey\n ? getChipMode(columnWithChipClass, columnKey)\n : undefined;\n const shouldRenderChip = !!chipMode;\n\n return (\n <TableCell\n key={cIdx}\n data-slot={`cell-${rIdx}-${cIdx}`}\n className=\"p-2 align-middle whitespace-nowrap\"\n contentEditable={false}\n >\n {shouldRenderChip\n ? renderChip(columnKey, cell)\n : formatValue(cell, decimalPrecision)}\n </TableCell>\n );\n })}\n {renderActions(rIdx, actions)}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n );\n }\n\n return (\n <Fragment>\n <div className=\"flex flex-col h-full overflow-hidden\">\n <ScrollArea\n data-slot=\"table-container\"\n className={mergedClasses}\n {...(height !== undefined && { style: { height } })}\n >\n {renderTableComponent()}\n <ScrollBar orientation=\"horizontal\" />\n </ScrollArea>\n </div>\n {((pagination?.totalCount ?? 0) > 0 || (title && !isEditable && onDownload)) && (\n <div className=\"flex-shrink-0 flex items-center justify-between mt-2 w-full overflow-x-auto border-t pt-2\">\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {pagination && pagination.totalCount > 0 && (\n <>\n <label htmlFor=\"page-size-select\" className=\"text-sm whitespace-nowrap\">\n Rows per page:\n </label>\n <select\n id=\"page-size-select\"\n value={pageSize}\n onChange={(e) => handlePageChange(1, Number(e.target.value))}\n className=\"border rounded px-2 py-1 text-sm cursor-pointer\"\n disabled={isLoading}\n >\n {(pagination.pageSizeOptions || [10, 20, 50, 100]).map((size: number) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </>\n )}\n </div>\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {title && !isEditable && onDownload && (\n <DownloadButton\n component=\"table\"\n title={title}\n onDownload={onDownload}\n dataCount={pagination?.totalCount ?? data.length}\n />\n )}\n {pagination && pagination.totalCount > 0 && (\n <>\n <span className=\"text-xs text-muted-foreground whitespace-nowrap ml-1.5\">\n {(pageNumber - 1) * pageSize + 1}–\n {Math.min(pageNumber * pageSize, pagination.totalCount)} of {pagination.totalCount}\n </span>\n <Pagination>\n <PaginationContent className=\"gap-0.2 flex-shrink-0\">\n {renderPaginationArrows(pageNumber, totalPages, isLoading, handlePageChange)}\n </PaginationContent>\n </Pagination>\n </>\n )}\n </div>\n </div>\n )}\n {FormDialog}\n </Fragment>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"data-table.js","names":["useEffect","useState","Fragment","useMemo","useRef","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","TableHeadSortable","TableLoader","ScrollArea","ScrollBar","Pagination","PaginationContent","renderPaginationArrows","Button","cn","renderNoDataFallback","formatValue","SEMANTIC_CHIP_STYLES_MAP","RANDOM_CHIP_COLOR_PALETTE","Checkbox","MoreVertical","Loader2","useButtonForm","DownloadButton","jsx","_jsx","jsxs","_jsxs","_Fragment","resolveRowContext","rowContext","row","Object","keys","length","undefined","resolved","_i","_Object$entries","entries","_Object$entries$_i","key","ref","startsWith","_row$fieldName","fieldName","includes","split","slice","join","normalizeValue","value","str","String","trim","toLowerCase","getChipMode","columnWithChipClass","columnKey","mode","getUniqueValuesHash","data","Array","isArray","availableKeys","hashParts","forEach","chipMode","uniqueNormalizedValues","Set","normalizedKey","add","sortedUniqueValues","from","sort","JSON","stringify","DataTable","_ref","_ref2","_pagination$values$pa","_pagination$values","_ref3","_pagination$values$pa2","_pagination$values2","_pagination$totalCoun","_ref$data","_ref$headerMapper","headerMapper","_ref$className","className","_ref$actions","actions","_ref$isEditable","isEditable","pagination","_ref$isLoading","isLoading","onRowAction","onPageChange","onSort","sortConfig","_ref$sortable","sortable","sortableGlobal","_ref$otherProps","otherProps","height","_ref$decimalPrecision","decimalPrecision","_ref$columnWithChipCl","_ref$chipStylesMappin","chipStylesMapping","navigateToPage","_ref$isBulkSelectionE","isBulkSelectionEnabled","_ref$selectedIndices","selectedIndices","setSelectedIndices","title","onDownload","children","style","minHeight","_useState","activeSortColumn","setActiveSortColumn","_useState2","sortDirections","setSortDirections","_useState3","activeRowIndex","setActiveRowIndex","_useState4","activeAction","setActiveAction","_useState5","isFormSubmitting","setIsFormSubmitting","_useState6","loadingActionKey","setLoadingActionKey","_useState7","Number","values","pageNumber","initialPage","setPageNumber","_useState8","pageSize","initialPageSize","setPageSize","_useState9","Math","ceil","totalCount","totalPages","setTotalPages","_useState10","chipColorMap","setChipColorMap","_useState11","openDropdownIndex","setOpenDropdownIndex","prevDataHashRef","_ref4","_pagination$values$pa3","_pagination$values3","_ref5","_pagination$values$pa4","_pagination$values4","first","sortColumn","sortDirection","computedColorMap","newColorMap","index","colorIndex","uniqueValuesHash","current","prevMap","merged","_extends","cleaned","hasChanges","_useButtonForm","formMapper","action","formTitle","formDescription","formButtonText","isSubmitting","onClose","onSubmit","_onSubmit","_asyncToGenerator","_regeneratorRuntime","mark","_callee","formData","wrap","_callee$","_context","prev","next","id","finish","stop","_x","apply","arguments","FormDialog","openForm","handleButtonClick","rowIndex","targetPageId","type","onClick","originalKeys","filter","headers","map","push","rows","datum","handlePageChange","_x2","_x3","_handlePageChange","_callee3","newPage","newSize","_callee3$","_context3","handleSortClick","column","direction","_extends2","handleCheckboxClick","idx","concat","ActionsDropdown","_ref6","rowActions","isOpen","totalRows","isNearBottom","handleActionClick","_x4","_handleActionClick","_callee2","_rowContext2","actionKey","_callee2$","_context2","abrupt","toggleDropdown","handleBackdropClick","background","cursor","variant","size","e","stopPropagation","disabled","role","isActionLoading","text","renderActions","defaultClasses","mergedClasses","getRandomColorForValue","_chipColorMap$columnK","renderChip","formattedValue","chipClassName","_chipStylesMapping$co","valueStr","valueLower","renderTableComponent","checked","onCheckedChange","_","head","isActionColumn","originalKey","contentEditable","isActive","rIdx","cell","cIdx","shouldRenderChip","orientation","htmlFor","onChange","target","pageSizeOptions","component","dataCount","min"],"sources":["../../../src/plugins/helpers/data-table.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useEffect, useState, Fragment, useMemo, useRef } from 'react';\nimport {\n Table,\n TableHeader,\n TableRow,\n TableHead,\n TableBody,\n TableCell,\n TableHeadSortable,\n SortDirection,\n} from '../../shadcn/components/ui/table';\nimport { TableLoader } from '../../shadcn/components/ui/skeleton';\nimport { ScrollArea, ScrollBar } from '../../shadcn/components/ui/scroll-area';\nimport {\n Pagination,\n PaginationContent,\n renderPaginationArrows,\n} from '../../shadcn/components/ui/pagination';\nimport { Button } from '../../shadcn/components/ui/button';\nimport { cn } from '../../shadcn/utils';\nimport { renderNoDataFallback } from './extra';\nimport { formatValue } from '../../helpers';\nimport { SEMANTIC_CHIP_STYLES_MAP, RANDOM_CHIP_COLOR_PALETTE } from '../../constants';\nimport { Checkbox } from '../../shadcn/components/ui/checkbox';\nimport { MoreVertical, Loader2 } from 'lucide-react';\nimport { useButtonForm } from './button-form';\nimport { DownloadButton } from './download-data-button';\n\nfunction resolveRowContext(\n rowContext: Record<string, string> | undefined,\n row: Record<string, any>,\n): Record<string, any> | undefined {\n if (!rowContext || Object.keys(rowContext).length === 0) {\n return undefined;\n }\n\n const resolved: Record<string, any> = {};\n\n for (const [key, ref] of Object.entries(rowContext)) {\n if (typeof ref === 'string' && ref.startsWith('@')) {\n const fieldName = ref.includes('.') ? ref.split('.').slice(1).join('.') : ref.slice(1);\n resolved[key] = row[fieldName] ?? row[ref.slice(1)];\n } else {\n resolved[key] = ref;\n }\n }\n\n return resolved;\n}\n\ntype RowAction = {\n id: string;\n text: string;\n variant?: string;\n tooltipContent?: string;\n className?: string;\n action: any;\n};\n\nexport type DataTableProps = {\n data: Record<string, any>[];\n headerMapper?: Record<string, string>;\n className?: string;\n isEditable?: boolean;\n actions?: RowAction[];\n pagination?: {\n values?: {\n pageNumber: number;\n pageSize: number;\n };\n initialPage?: number;\n initialPageSize?: number;\n totalCount: number;\n pageSizeOptions: number[];\n };\n isLoading?: boolean;\n onRowAction?: (rowIndex: number, actionId: string, formData?: Record<string, any>) => void;\n onPageChange?: (pageNumber: number, pageSize: number) => void;\n onSort?: (column: string, direction: SortDirection) => void;\n sortConfig?: Record<string, SortDirection>;\n sortable?: boolean;\n otherProps?: Record<string, any>;\n height?: string | number;\n decimalPrecision?: number;\n columnWithChipClass?: Record<string, 'useMap' | 'useRandom'>;\n chipStylesMapping?: Record<string, Record<string, string>>;\n navigateToPage?: (pageId: string, rowContext?: Record<string, any>) => void;\n isBulkSelectionEnabled?: boolean;\n selectedIndices?: number[];\n setSelectedIndices?: (indices: number[]) => void;\n title?: string;\n onDownload?: (limit: number) => Promise<void>;\n};\n\n/**\n * Normalizes a value to a consistent string key for color mapping.\n * Handles all value types: null/undefined, numbers, booleans, objects, arrays, dates.\n * Ensures consistent color assignment for all variations of the same logical value.\n */\nfunction normalizeValue(value: any): string {\n // Handle null/undefined\n if (value === null || value === undefined) {\n return '';\n }\n\n const str = String(value);\n\n return str.trim().toLowerCase();\n}\n\nfunction getChipMode(\n columnWithChipClass: Record<string, 'useMap' | 'useRandom'>,\n columnKey: string,\n): 'useMap' | 'useRandom' | undefined {\n if (!(columnKey in columnWithChipClass)) {\n return undefined;\n }\n\n const mode = columnWithChipClass[columnKey];\n\n if (mode !== 'useMap' && mode !== 'useRandom') {\n return 'useRandom';\n }\n\n return mode;\n}\n\n/**\n * Generates a stable hash based on unique value sets per column.\n * This hash is order-independent - it only changes when the set of unique values changes,\n * not when rows are reordered (e.g., during sorting).\n */\nfunction getUniqueValuesHash(\n data: Record<string, any>[],\n columnWithChipClass: Record<string, 'useMap' | 'useRandom'>,\n): string {\n if (!Array.isArray(data) || data.length === 0) {\n return '';\n }\n\n const availableKeys = Object.keys(data[0] || {});\n const hashParts: Record<string, string[]> = {};\n\n Object.keys(columnWithChipClass).forEach((columnKey) => {\n if (!availableKeys.includes(columnKey)) {\n return;\n }\n\n const chipMode = getChipMode(columnWithChipClass, columnKey);\n\n if (chipMode === 'useRandom') {\n const uniqueNormalizedValues = new Set<string>();\n data.forEach((row) => {\n const value = row[columnKey];\n const normalizedKey = normalizeValue(value);\n\n if (normalizedKey) {\n uniqueNormalizedValues.add(normalizedKey);\n }\n });\n const sortedUniqueValues = Array.from(uniqueNormalizedValues).sort();\n hashParts[columnKey] = sortedUniqueValues;\n }\n });\n\n return JSON.stringify(hashParts);\n}\n\nexport function DataTable({\n data = [],\n headerMapper = {},\n className = '',\n actions = [],\n isEditable = false,\n pagination,\n isLoading = false,\n onRowAction,\n onPageChange,\n onSort,\n sortConfig,\n sortable: sortableGlobal = true,\n otherProps = {},\n height,\n decimalPrecision = 2,\n columnWithChipClass = {},\n chipStylesMapping = {},\n navigateToPage,\n isBulkSelectionEnabled = false,\n selectedIndices = [],\n setSelectedIndices,\n title,\n onDownload,\n}: DataTableProps) {\n if (!data || data.length === 0) {\n return (\n <Fragment>\n <div className=\"flex flex-col overflow-hidden\">\n <div\n data-slot=\"table-container\"\n className=\"aspect-auto w-full\"\n style={{ height: 'auto', minHeight: '180px' }}\n >\n {isLoading ? <TableLoader /> : renderNoDataFallback()}\n </div>\n </div>\n </Fragment>\n );\n }\n\n const [activeSortColumn, setActiveSortColumn] = useState<string | null>(null);\n const [sortDirections, setSortDirections] = useState<Record<string, SortDirection>>({});\n const [activeRowIndex, setActiveRowIndex] = useState<number | null>(null);\n const [activeAction, setActiveAction] = useState<RowAction | null>(null);\n const [isFormSubmitting, setIsFormSubmitting] = useState(false);\n const [loadingActionKey, setLoadingActionKey] = useState<string | null>(null);\n\n const [pageNumber, setPageNumber] = useState(\n Number(pagination?.values?.pageNumber ?? pagination?.initialPage ?? 1),\n );\n const [pageSize, setPageSize] = useState(\n Number(pagination?.values?.pageSize ?? pagination?.initialPageSize ?? 10),\n );\n const [totalPages, setTotalPages] = useState(\n Math.ceil((pagination?.totalCount || 0) / pageSize) || 1,\n );\n\n const [chipColorMap, setChipColorMap] = useState<Record<string, Record<string, string>>>({});\n\n const [openDropdownIndex, setOpenDropdownIndex] = useState<number | null>(null);\n\n const prevDataHashRef = useRef<string>('');\n\n useEffect(() => {\n setPageNumber(Number(pagination?.values?.pageNumber ?? pagination?.initialPage ?? 1));\n setPageSize(Number(pagination?.values?.pageSize ?? pagination?.initialPageSize ?? 25));\n }, [pagination]);\n\n useEffect(() => {\n setTotalPages(Math.ceil((pagination?.totalCount || 0) / pageSize) || 1);\n }, [pagination?.totalCount, pageSize]);\n\n useEffect(() => {\n if (sortConfig) {\n setSortDirections(sortConfig);\n const first = Object.keys(sortConfig)[0];\n\n if (first) {\n setActiveSortColumn(first);\n }\n }\n }, [sortConfig]);\n\n useEffect(() => {\n if (sortConfig?.sortColumn || sortConfig?.sortDirection) {\n sortConfig.sortColumn = null;\n sortConfig.sortDirection = null;\n }\n\n setActiveSortColumn(null);\n setSortDirections({});\n }, []);\n\n const computedColorMap = useMemo(() => {\n if (!Array.isArray(data) || data.length === 0) {\n return {};\n }\n\n // Get available column keys from first row\n const availableKeys = Object.keys(data[0] || {});\n\n const newColorMap: Record<string, Record<string, string>> = {};\n\n // Process each column that uses random chips\n Object.keys(columnWithChipClass).forEach((columnKey) => {\n // Validate column key exists in data\n if (!availableKeys.includes(columnKey)) {\n return;\n }\n\n const chipMode = getChipMode(columnWithChipClass, columnKey);\n\n if (chipMode === 'useRandom') {\n if (!newColorMap[columnKey]) {\n newColorMap[columnKey] = {};\n }\n\n const uniqueNormalizedValues = new Set<string>();\n data.forEach((row) => {\n const value = row[columnKey];\n const normalizedKey = normalizeValue(value);\n\n if (normalizedKey) {\n uniqueNormalizedValues.add(normalizedKey);\n }\n });\n\n const sortedUniqueValues = Array.from(uniqueNormalizedValues).sort();\n\n sortedUniqueValues.forEach((normalizedKey, index) => {\n if (!newColorMap[columnKey][normalizedKey]) {\n const colorIndex = index % RANDOM_CHIP_COLOR_PALETTE.length;\n newColorMap[columnKey][normalizedKey] = RANDOM_CHIP_COLOR_PALETTE[colorIndex];\n }\n });\n }\n });\n\n return newColorMap;\n }, [data, columnWithChipClass]);\n\n useEffect(() => {\n const uniqueValuesHash = getUniqueValuesHash(data, columnWithChipClass);\n\n // Only update if the set of unique values actually changed\n if (uniqueValuesHash !== prevDataHashRef.current) {\n prevDataHashRef.current = uniqueValuesHash;\n\n setChipColorMap((prevMap) => {\n const merged = { ...prevMap };\n Object.keys(computedColorMap).forEach((columnKey) => {\n merged[columnKey] = { ...computedColorMap[columnKey], ...merged[columnKey] };\n });\n\n return merged;\n });\n }\n }, [computedColorMap, data, columnWithChipClass]);\n\n useEffect(() => {\n setChipColorMap((prevMap) => {\n const cleaned = { ...prevMap };\n let hasChanges = false;\n\n Object.keys(cleaned).forEach((columnKey) => {\n const chipMode = getChipMode(columnWithChipClass, columnKey);\n\n if (!chipMode) {\n delete cleaned[columnKey];\n hasChanges = true;\n }\n });\n\n return hasChanges ? cleaned : prevMap;\n });\n }, [columnWithChipClass]);\n\n const { FormDialog, openForm } = useButtonForm({\n formMapper: activeAction?.action.formMapper,\n formTitle: activeAction?.action.formTitle,\n formDescription: activeAction?.action.formDescription,\n formButtonText: activeAction?.action.formButtonText,\n isSubmitting: isFormSubmitting || isLoading,\n onClose: () => {\n setActiveRowIndex(null);\n setActiveAction(null);\n },\n onSubmit: async (formData) => {\n if (activeRowIndex !== null && activeAction) {\n setIsFormSubmitting(true);\n\n try {\n await onRowAction?.(activeRowIndex, activeAction.id, formData);\n } finally {\n setIsFormSubmitting(false);\n }\n\n setActiveAction(null);\n setActiveRowIndex(null);\n }\n },\n });\n\n function handleButtonClick(rowIndex: number, action: RowAction) {\n if (action.action.action === 'navigateToPage' && action.action.targetPageId) {\n const rowContext = resolveRowContext(action.action.rowContext, data[rowIndex]);\n navigateToPage?.(action.action.targetPageId, rowContext);\n\n return;\n }\n\n if (action.action.type === 'navigation') {\n const onClick = action.action.onClick;\n\n if (onClick?.action === 'navigateToPage' && onClick.targetPageId) {\n const rowContext = resolveRowContext(action.action.rowContext, data[rowIndex]);\n navigateToPage?.(onClick.targetPageId, rowContext);\n\n return;\n }\n }\n\n if (action.action.formMapper && Object.keys(action.action.formMapper).length > 0) {\n setActiveRowIndex(rowIndex);\n setActiveAction(action);\n } else {\n onRowAction?.(rowIndex, action.id);\n }\n }\n\n useEffect(() => {\n if (activeAction?.action.formMapper && Object.keys(activeAction.action.formMapper).length > 0) {\n openForm();\n }\n }, [activeAction]);\n\n const originalKeys = Object.keys(data[0] || {}).filter((key) => key in headerMapper);\n const headers = originalKeys.map((key) => headerMapper[key]);\n\n if (actions.length > 0) {\n headers.push('');\n }\n\n const rows = data.map((datum: any) => originalKeys.map((key) => datum[key]));\n\n async function handlePageChange(newPage = pageNumber, newSize = pageSize) {\n setPageNumber(newPage);\n setPageSize(newSize);\n onPageChange?.(newPage, newSize);\n }\n\n function handleSortClick(column: string, direction: SortDirection) {\n setActiveSortColumn(direction ? column : null);\n setSortDirections((prev) => ({\n ...prev,\n [column]: direction,\n }));\n onSort?.(column, direction);\n }\n\n function handleCheckboxClick(rowIndex: number) {\n if (setSelectedIndices) {\n if (selectedIndices.includes(rowIndex)) {\n setSelectedIndices(selectedIndices.filter((idx) => idx !== rowIndex));\n } else {\n setSelectedIndices([...selectedIndices, rowIndex]);\n }\n }\n }\n\n function ActionsDropdown({\n rowIndex,\n rowActions,\n }: {\n rowIndex: number;\n rowActions: RowAction[];\n }) {\n const isOpen = openDropdownIndex === rowIndex;\n\n const totalRows = rows.length;\n const isNearBottom = rowIndex >= totalRows - 3;\n\n async function handleActionClick(action: RowAction) {\n if (action.action.action === 'navigateToPage' && action.action.targetPageId) {\n const rowContext = resolveRowContext(action.action.rowContext, data[rowIndex]);\n navigateToPage?.(action.action.targetPageId, rowContext);\n setOpenDropdownIndex(null);\n\n return;\n }\n\n if (action.action.type === 'navigation') {\n const onClick = action.action.onClick;\n\n if (onClick?.action === 'navigateToPage' && onClick.targetPageId) {\n const rowContext = resolveRowContext(action.action.rowContext, data[rowIndex]);\n navigateToPage?.(onClick.targetPageId, rowContext);\n setOpenDropdownIndex(null);\n\n return;\n }\n }\n\n // Handle form-based and API actions\n const actionKey = `${rowIndex}-${action.id}`;\n\n if (action.action.formMapper && Object.keys(action.action.formMapper).length > 0) {\n setActiveRowIndex(rowIndex);\n setActiveAction(action);\n setOpenDropdownIndex(null);\n } else {\n try {\n setLoadingActionKey(actionKey);\n await onRowAction?.(rowIndex, action.id);\n } finally {\n setLoadingActionKey(null);\n setOpenDropdownIndex(null);\n }\n }\n }\n\n function toggleDropdown() {\n setOpenDropdownIndex(isOpen ? null : rowIndex);\n }\n\n function handleBackdropClick() {\n if (!loadingActionKey) {\n setOpenDropdownIndex(null);\n }\n }\n\n return (\n <>\n {isOpen && (\n <div\n className=\"fixed inset-0 z-40\"\n onClick={handleBackdropClick}\n style={{ background: 'transparent', cursor: 'default' }}\n />\n )}\n <div className=\"relative\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={(e) => {\n e.stopPropagation();\n toggleDropdown();\n }}\n disabled={isLoading}\n className=\"h-8 w-8 relative z-50\"\n data-dropdown-button=\"true\"\n >\n <MoreVertical className=\"h-4 w-4\" />\n </Button>\n {isOpen && (\n <div\n className={cn(\n 'absolute right-full mr-2 w-48 rounded-md shadow-lg bg-white ring-gray-400 ring-opacity-5 z-50',\n isNearBottom ? 'bottom-0' : 'top-0',\n )}\n >\n <div className=\"py-1\" role=\"menu\">\n {rowActions.map((action) => {\n const actionKey = `${rowIndex}-${action.id}`;\n const isActionLoading = loadingActionKey === actionKey;\n\n return (\n <button\n key={action.id}\n onClick={() => handleActionClick(action)}\n className=\"block w-full text-left px-4 py-2 text-sm hover:bg-accent transition-colors font-semibold disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-2 focus:outline-none focus:bg-accent\"\n disabled={isLoading || isActionLoading}\n role=\"menuitem\"\n >\n {isActionLoading && <Loader2 className=\"h-3 w-3 animate-spin\" />}\n {action.text}\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\n </>\n );\n }\n\n function renderActions(rowIndex: number, rowActions: RowAction[]) {\n if (!actions.length) {\n return null;\n }\n\n return (\n <TableCell className=\"sticky right-0 bg-white overflow-visible\">\n <ActionsDropdown rowIndex={rowIndex} rowActions={rowActions} />\n </TableCell>\n );\n }\n\n const defaultClasses = `aspect-auto w-full`;\n const mergedClasses = className ? cn(defaultClasses, className) : defaultClasses;\n\n function getRandomColorForValue(columnKey: string, value: any): string {\n const normalizedKey = normalizeValue(value);\n\n if (chipColorMap[columnKey]?.[normalizedKey]) {\n return chipColorMap[columnKey][normalizedKey];\n }\n\n return 'bg-gray-50 text-gray-900 shadow-sm';\n }\n\n function renderChip(columnKey: string, value: any) {\n const chipMode = getChipMode(columnWithChipClass, columnKey);\n const formattedValue = formatValue(value, decimalPrecision);\n\n if (!chipMode) {\n return <>{formattedValue}</>;\n }\n\n let chipClassName = '';\n\n if (chipMode === 'useMap') {\n const valueStr = String(value);\n chipClassName = chipStylesMapping[columnKey]?.[valueStr];\n\n if (!chipClassName) {\n const valueLower = valueStr.toLowerCase().trim();\n chipClassName = SEMANTIC_CHIP_STYLES_MAP[valueLower];\n }\n\n if (!chipClassName) {\n chipClassName = 'bg-gray-50 text-gray-900 shadow-sm';\n }\n } else if (chipMode === 'useRandom') {\n chipClassName = getRandomColorForValue(columnKey, value);\n }\n\n return (\n <span\n className={cn(\n 'inline-flex items-center rounded-md px-2 py-1 text-xs font-medium ring-1 ring-inset ring-gray-500/10',\n chipClassName,\n )}\n >\n {formattedValue}\n </span>\n );\n }\n\n function renderTableComponent() {\n if (isLoading || !data || data.length === 0) {\n return <TableLoader />;\n }\n\n return (\n <Table\n {...otherProps}\n className={`caption-bottom text-sm relative ${mergedClasses}`}\n data-slot=\"table\"\n >\n <TableHeader data-slot=\"table-header\" className=\"sticky top-0 z-2\">\n <TableRow>\n {isBulkSelectionEnabled && (\n <TableCell className=\"p-2 w-10\">\n <Checkbox\n checked={selectedIndices?.length === data.length}\n onCheckedChange={() => {\n if (setSelectedIndices) {\n if (selectedIndices?.length === data.length) {\n setSelectedIndices([]);\n } else {\n setSelectedIndices(data.map((_, idx) => idx));\n }\n }\n }}\n />\n </TableCell>\n )}\n {headers.map((head: string, idx: number) => {\n const isActionColumn = actions.length > 0 && idx === headers.length - 1;\n const originalKey = originalKeys[idx];\n\n if (isActionColumn) {\n return (\n <TableHead\n key={idx}\n data-slot={`table-header-${idx}`}\n contentEditable={isEditable}\n className=\"sticky right-0 bg-slate-100\"\n >\n {head}\n </TableHead>\n );\n }\n\n return (\n <TableHeadSortable\n key={idx}\n data-slot={`table-header-${idx}`}\n sortDirection={sortDirections[originalKey] || 'asc'}\n isActive={activeSortColumn === originalKey}\n onSort={(direction) => handleSortClick(originalKey, direction)}\n sortable={sortableGlobal && !isLoading}\n isEditable={isEditable}\n >\n {head}\n </TableHeadSortable>\n );\n })}\n </TableRow>\n </TableHeader>\n <TableBody data-slot=\"table-body\">\n {rows.map((row: any[], rIdx: number) => (\n <TableRow\n key={rIdx}\n data-slot={`row-${rIdx}`}\n className=\"hover:bg-muted/50 border-b transition-colors\"\n >\n {isBulkSelectionEnabled && (\n <TableCell className=\"p-2 align-middle\">\n <Checkbox\n checked={selectedIndices?.includes(rIdx)}\n onCheckedChange={() => handleCheckboxClick(rIdx)}\n />\n </TableCell>\n )}\n {row.map((cell: string, cIdx: number) => {\n const columnKey = originalKeys[cIdx];\n const chipMode = columnKey\n ? getChipMode(columnWithChipClass, columnKey)\n : undefined;\n const shouldRenderChip = !!chipMode;\n\n return (\n <TableCell\n key={cIdx}\n data-slot={`cell-${rIdx}-${cIdx}`}\n className=\"p-2 align-middle whitespace-nowrap\"\n contentEditable={false}\n >\n {shouldRenderChip\n ? renderChip(columnKey, cell)\n : formatValue(cell, decimalPrecision)}\n </TableCell>\n );\n })}\n {renderActions(rIdx, actions)}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n );\n }\n\n return (\n <Fragment>\n <div className=\"flex flex-col h-full overflow-hidden\">\n <ScrollArea\n data-slot=\"table-container\"\n className={mergedClasses}\n {...(height !== undefined && { style: { height } })}\n >\n {renderTableComponent()}\n <ScrollBar orientation=\"horizontal\" />\n </ScrollArea>\n </div>\n {((pagination?.totalCount ?? 0) > 0 || (title && !isEditable && onDownload)) && (\n <div className=\"flex-shrink-0 flex items-center justify-between mt-2 w-full overflow-x-auto border-t pt-2\">\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {pagination && pagination.totalCount > 0 && (\n <>\n <label htmlFor=\"page-size-select\" className=\"text-sm whitespace-nowrap\">\n Rows per page:\n </label>\n <select\n id=\"page-size-select\"\n value={pageSize}\n onChange={(e) => handlePageChange(1, Number(e.target.value))}\n className=\"border rounded px-2 py-1 text-sm cursor-pointer\"\n disabled={isLoading}\n >\n {(pagination.pageSizeOptions || [10, 20, 50, 100]).map((size: number) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </>\n )}\n </div>\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {title && !isEditable && onDownload && (\n <DownloadButton\n component=\"table\"\n title={title}\n onDownload={onDownload}\n dataCount={typeof pagination?.totalCount === 'number' ? pagination.totalCount : data.length}\n />\n )}\n {pagination && pagination.totalCount > 0 && (\n <>\n <span className=\"text-xs text-muted-foreground whitespace-nowrap ml-1.5\">\n {(pageNumber - 1) * pageSize + 1}–\n {Math.min(pageNumber * pageSize, pagination.totalCount)} of {pagination.totalCount}\n </span>\n <Pagination>\n <PaginationContent className=\"gap-0.2 flex-shrink-0\">\n {renderPaginationArrows(pageNumber, totalPages, isLoading, handlePageChange)}\n </PaginationContent>\n </Pagination>\n </>\n )}\n </div>\n </div>\n )}\n {FormDialog}\n </Fragment>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import _asyncToGenerator from"@babel/runtime/helpers/asyncToGenerator";import _regeneratorRuntime from"@babel/runtime/regenerator";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{useState}from"react";import{Button}from"../../shadcn/components/ui/button";import{Download,Loader2}from"lucide-react";import{Dialog,DialogContent,DialogDescription,DialogFooter,DialogHeader,DialogTitle}from"../../shadcn/components/ui/dialog";import{RadioOption}from"../../shadcn/components/ui/styled-elements";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";function getLegendItems(container){var legendItems=[];var legendWrapper=container.querySelector("[class*=\"recharts-legend-wrapper\"]");if(!legendWrapper)return legendItems;legendWrapper.querySelectorAll("[class*=\"recharts-legend-item\"]").forEach(function(item){var _item$textContent;var text=(_item$textContent=item.textContent)==null?void 0:_item$textContent.trim();var color="#666666";var colorElements=item.querySelectorAll("path, rect, circle, line");for(var _i=0,_Array$from=Array.from(colorElements);_i<_Array$from.length;_i++){var elem=_Array$from[_i];var computedStyle=window.getComputedStyle(elem);var computedFill=computedStyle.fill;var computedStroke=computedStyle.stroke;if(computedFill&&computedFill!=="none"&&computedFill!=="transparent"&&computedFill!=="rgb(0, 0, 0)"){color=computedFill;break}if(computedStroke&&computedStroke!=="none"&&computedStroke!=="transparent"&&computedStroke!=="rgb(0, 0, 0)"){color=computedStroke;break}var fill=elem.getAttribute("fill");var stroke=elem.getAttribute("stroke");if(fill&&fill!=="none"&&fill!=="transparent"){color=fill;break}if(stroke&&stroke!=="none"&&stroke!=="transparent"){color=stroke;break}}if(text&&!legendItems.some(function(existing){return existing.text===text})){legendItems.push({text:text,color:color})}});return legendItems}var SVG_INLINE_PROPS=["fill","stroke","stroke-width","stroke-dasharray","stroke-linecap","stroke-linejoin","font-size","font-family","font-weight","font-style","text-anchor","dominant-baseline","alignment-baseline","opacity","visibility"];function inlineSvgStyles(original,clone){var computed=window.getComputedStyle(original);var style="";for(var _iterator=_createForOfIteratorHelperLoose(SVG_INLINE_PROPS),_step;!(_step=_iterator()).done;){var prop=_step.value;var val=computed.getPropertyValue(prop);if(val)style+=prop+":"+val+";"}clone.setAttribute("style",style);for(var i=0;i<original.children.length;i++){inlineSvgStyles(original.children[i],clone.children[i])}}function escapeXml(str){return str.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function getSvgDimensions(svgElement){var width=parseFloat(svgElement.getAttribute("width")||"0")||svgElement.scrollWidth||800;var height=parseFloat(svgElement.getAttribute("height")||"0")||svgElement.scrollHeight||400;return{width:width,height:height}}function buildCompositeSvg(svgElement,title,subtitle,legendItems,inlineStyles){var cloned=svgElement.cloneNode(true);if(inlineStyles)inlineSvgStyles(svgElement,cloned);var _getSvgDimensions=getSvgDimensions(svgElement),chartWidth=_getSvgDimensions.width,chartHeight=_getSvgDimensions.height;var padding=20;var titleHeight=28;var subtitleHeight=subtitle?36:0;var legendHeight=legendItems.length>0?30:0;var headerHeight=padding+titleHeight+subtitleHeight;var totalWidth=chartWidth+padding*2;var totalHeight=chartHeight+headerHeight+legendHeight+padding;var serializer=new XMLSerializer;cloned.setAttribute("x",String(padding));cloned.setAttribute("y",String(headerHeight));cloned.setAttribute("overflow","visible");return"<svg xmlns=\"http://www.w3.org/2000/svg\" width=\""+totalWidth+"\" height=\""+totalHeight+"\">\n <rect width=\""+totalWidth+"\" height=\""+totalHeight+"\" fill=\"white\"/>\n <text x=\""+padding+"\" y=\""+(padding+20)+"\" font-family=\"Arial,sans-serif\" font-size=\"18\" font-weight=\"600\" fill=\"#000000\">"+escapeXml(title)+"</text>\n "+(subtitle?"<text x=\""+padding+"\" y=\""+(padding+44)+"\" font-family=\"Arial,sans-serif\" font-size=\"14\" fill=\"#666666\">"+escapeXml(subtitle)+"</text>":"")+"\n "+serializer.serializeToString(cloned)+"\n "+(legendItems.length>0?"<g transform=\"translate("+padding+", "+(totalHeight-25)+")\">\n "+legendItems.map(function(item,index){var x=index*200;return"<rect x=\""+x+"\" y=\"0\" width=\"12\" height=\"12\" fill=\""+item.color+"\"/>"+("<text x=\""+(x+18)+"\" y=\"10\" font-family=\"Arial,sans-serif\" font-size=\"12\" fill=\"#666666\">"+escapeXml(item.text)+"</text>")}).join("")+"\n </g>":"")+"\n </svg>"}function downloadChartSVG(title,containerRef,subtitle){if(!containerRef.current)return;var svgElement=containerRef.current.querySelector("svg");if(!svgElement)return;var legendItems=getLegendItems(containerRef.current);var compositeSvg=buildCompositeSvg(svgElement,title,subtitle,legendItems,false);var blob=new Blob([compositeSvg],{type:"image/svg+xml;charset=utf-8"});var url=URL.createObjectURL(blob);var link=document.createElement("a");link.href=url;link.download=title.replace(/\s+/g,"_")+".svg";link.click();URL.revokeObjectURL(url)}function downloadChartPNG(_x,_x2,_x3){return _downloadChartPNG.apply(this,arguments)}function _downloadChartPNG(){_downloadChartPNG=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(title,containerRef,subtitle){var svgElement,legendItems,compositeSvg,_getSvgDimensions2,chartWidth,chartHeight,padding,subtitleHeight,legendHeight,totalWidth,totalHeight;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:if(containerRef.current){_context3.next=2;break}return _context3.abrupt("return");case 2:svgElement=containerRef.current.querySelector("svg");if(svgElement){_context3.next=5;break}return _context3.abrupt("return");case 5:legendItems=getLegendItems(containerRef.current);compositeSvg=buildCompositeSvg(svgElement,title,subtitle,legendItems,true);_getSvgDimensions2=getSvgDimensions(svgElement),chartWidth=_getSvgDimensions2.width,chartHeight=_getSvgDimensions2.height;padding=20;subtitleHeight=subtitle?36:0;legendHeight=legendItems.length>0?30:0;totalWidth=chartWidth+padding*2;totalHeight=chartHeight+padding+28+subtitleHeight+legendHeight+padding;return _context3.abrupt("return",new Promise(function(resolve,reject){var img=new Image;var blob=new Blob([compositeSvg],{type:"image/svg+xml;charset=utf-8"});var url=URL.createObjectURL(blob);img.onload=function(){var scale=2;var canvas=document.createElement("canvas");canvas.width=totalWidth*scale;canvas.height=totalHeight*scale;var ctx=canvas.getContext("2d");ctx.scale(scale,scale);ctx.fillStyle="white";ctx.fillRect(0,0,totalWidth,totalHeight);ctx.drawImage(img,0,0,totalWidth,totalHeight);URL.revokeObjectURL(url);var link=document.createElement("a");link.download=title.replace(/\s+/g,"_")+".png";link.href=canvas.toDataURL("image/png");link.click();resolve()};img.onerror=function(){URL.revokeObjectURL(url);reject(new Error("SVG render failed"))};img.src=url}));case 14:case"end":return _context3.stop()}},_callee3)}));return _downloadChartPNG.apply(this,arguments)}var ROW_LIMITS=[100,500,1000];export function DownloadButton(_ref){var _ref$component=_ref.component,component=_ref$component===void 0?"chart":_ref$component,containerRef=_ref.containerRef,title=_ref.title,subtitle=_ref.subtitle,onDownload=_ref.onDownload,onDownloadCSV=_ref.onDownloadCSV,dataCount=_ref.dataCount;var defaultRowCount=dataCount!==undefined&&dataCount<100?"all":100;var _useState=useState(false),isModalOpen=_useState[0],setIsModalOpen=_useState[1];var _useState2=useState("svg"),selectedFormat=_useState2[0],setSelectedFormat=_useState2[1];var _useState3=useState(defaultRowCount),selectedRowCount=_useState3[0],setSelectedRowCount=_useState3[1];var _useState4=useState(false),isDownloading=_useState4[0],setIsDownloading=_useState4[1];var rowOptions=[].concat(ROW_LIMITS.filter(function(limit){return dataCount===undefined||dataCount>limit}).map(function(limit){return{value:limit,label:limit+" rows"}}),[{value:"all",label:dataCount!==undefined&&dataCount<=10000?"All ("+dataCount+" rows)":"All (max 10,000 rows)"}]);var handleChartDownload=/*#__PURE__*/function(){var _ref2=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(){return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:if(!(selectedFormat==="csv")){_context.next=10;break}setIsDownloading(true);_context.prev=2;_context.next=5;return onDownloadCSV==null?void 0:onDownloadCSV();case 5:_context.prev=5;setIsDownloading(false);return _context.finish(5);case 8:_context.next=21;break;case 10:if(!(selectedFormat==="png")){_context.next=20;break}setIsDownloading(true);_context.prev=12;_context.next=15;return downloadChartPNG(title,containerRef,subtitle);case 15:_context.prev=15;setIsDownloading(false);return _context.finish(15);case 18:_context.next=21;break;case 20:downloadChartSVG(title,containerRef,subtitle);case 21:setIsModalOpen(false);case 22:case"end":return _context.stop()}},_callee,null,[[2,,5,8],[12,,15,18]])}));return function handleChartDownload(){return _ref2.apply(this,arguments)}}();var handleTableDownload=/*#__PURE__*/function(){var _ref3=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(){var limit;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:limit=selectedRowCount==="all"?10000:selectedRowCount;setIsDownloading(true);_context2.prev=2;_context2.next=5;return onDownload==null?void 0:onDownload(limit);case 5:_context2.prev=5;setIsDownloading(false);return _context2.finish(5);case 8:setIsModalOpen(false);case 9:case"end":return _context2.stop()}},_callee2,null,[[2,,5,8]])}));return function handleTableDownload(){return _ref3.apply(this,arguments)}}();var handleCancel=function handleCancel(){setIsModalOpen(false);if(component==="chart"){setSelectedFormat("svg")}else{setSelectedRowCount(defaultRowCount)}};if(component==="table"){return/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Button,{variant:"outline",size:"sm",className:"h-8 w-8 bg-white text-muted-foreground border-none hover:text-black transition-all flex items-center justify-center",title:"Download table as CSV",onClick:function onClick(){setSelectedRowCount(defaultRowCount);setIsModalOpen(true)},children:/*#__PURE__*/_jsx(Download,{className:"h-3 w-3"})}),/*#__PURE__*/_jsx(Dialog,{open:isModalOpen,onOpenChange:setIsModalOpen,children:/*#__PURE__*/_jsxs(DialogContent,{children:[/*#__PURE__*/_jsxs(DialogHeader,{children:[/*#__PURE__*/_jsx(DialogTitle,{children:"Download Table"}),/*#__PURE__*/_jsx(DialogDescription,{children:"Max 10,000 rows can be downloaded at a time."})]}),/*#__PURE__*/_jsxs("div",{className:"py-4 flex items-center gap-3",children:[/*#__PURE__*/_jsx("span",{className:"text-sm text-muted-foreground whitespace-nowrap",children:"Number of rows to download"}),/*#__PURE__*/_jsx("select",{value:String(selectedRowCount),onChange:function onChange(e){var val=e.target.value;setSelectedRowCount(val==="all"?"all":Number(val))},className:"border border-gray-200 rounded-md px-3 py-2 text-sm bg-white focus:outline-none focus:ring-2 focus:ring-[#2A44D4] cursor-pointer",children:rowOptions.map(function(opt){return/*#__PURE__*/_jsx("option",{value:String(opt.value),children:opt.label},String(opt.value))})})]}),/*#__PURE__*/_jsx(DialogFooter,{className:"mt-6 block",children:/*#__PURE__*/_jsxs("div",{className:"flex items-center justify-end gap-2",children:[/*#__PURE__*/_jsx(Button,{type:"button",variant:"outline",onClick:handleCancel,disabled:isDownloading,className:"bg-[#EAECFB] border border-[#2A44D4] text-[#263DBF] hover:bg-[#EAECFB] hover:text-[#263DBF]",children:"Cancel"}),/*#__PURE__*/_jsx(Button,{type:"button",variant:"default",onClick:handleTableDownload,disabled:isDownloading,className:"bg-[#2A44D4] text-white hover:bg-[#2A44D4] hover:text-white disabled:opacity-70",children:isDownloading?/*#__PURE__*/_jsx(Loader2,{className:"h-4 w-4 animate-spin"}):"Download"})]})})]})})]})}return/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Button,{variant:"outline",size:"sm",className:"h-8 w-8 bg-white text-muted-foreground border-none hover:text-black transition-all flex items-center justify-center",title:"Download chart",onClick:function onClick(){return setIsModalOpen(true)},children:/*#__PURE__*/_jsx(Download,{className:"h-3 w-3"})}),/*#__PURE__*/_jsx(Dialog,{open:isModalOpen,onOpenChange:setIsModalOpen,children:/*#__PURE__*/_jsxs(DialogContent,{children:[/*#__PURE__*/_jsxs(DialogHeader,{children:[/*#__PURE__*/_jsx(DialogTitle,{children:"Download Chart"}),/*#__PURE__*/_jsx(DialogDescription,{children:"Choose the format you'd like to download the chart in."})]}),/*#__PURE__*/_jsxs("div",{className:"space-y-3 py-4",children:[/*#__PURE__*/_jsx(RadioOption,{label:"SVG",selected:selectedFormat==="svg",onClick:function onClick(){return setSelectedFormat("svg")}}),/*#__PURE__*/_jsx(RadioOption,{label:"PNG",selected:selectedFormat==="png",onClick:function onClick(){return setSelectedFormat("png")}}),onDownloadCSV&&/*#__PURE__*/_jsx(RadioOption,{label:"CSV",selected:selectedFormat==="csv",onClick:function onClick(){return setSelectedFormat("csv")}})]}),/*#__PURE__*/_jsx(DialogFooter,{className:"mt-6 block",children:/*#__PURE__*/_jsxs("div",{className:"flex items-center justify-end gap-2",children:[/*#__PURE__*/_jsx(Button,{type:"button",variant:"outline",onClick:handleCancel,disabled:isDownloading,className:"bg-[#EAECFB] border border-[#2A44D4] text-[#263DBF] hover:bg-[#EAECFB] hover:text-[#263DBF]",children:"Cancel"}),/*#__PURE__*/_jsx(Button,{type:"button",variant:"default",onClick:handleChartDownload,disabled:isDownloading,className:"bg-[#2A44D4] text-white hover:bg-[#2A44D4] hover:text-white disabled:opacity-70",children:isDownloading?/*#__PURE__*/_jsx(Loader2,{className:"h-4 w-4 animate-spin"}):"Download"})]})})]})})]})}
1
+ import _asyncToGenerator from"@babel/runtime/helpers/asyncToGenerator";import _regeneratorRuntime from"@babel/runtime/regenerator";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{useState}from"react";import{Button}from"../../shadcn/components/ui/button";import{Download,Loader2}from"lucide-react";import{Dialog,DialogContent,DialogDescription,DialogFooter,DialogHeader,DialogTitle}from"../../shadcn/components/ui/dialog";import{RadioOption}from"../../shadcn/components/ui/styled-elements";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";function getLegendItems(container){var legendItems=[];var legendWrapper=container.querySelector("[class*=\"recharts-legend-wrapper\"]");if(!legendWrapper)return legendItems;legendWrapper.querySelectorAll("[class*=\"recharts-legend-item\"]").forEach(function(item){var _item$textContent;var text=(_item$textContent=item.textContent)==null?void 0:_item$textContent.trim();var color="#666666";var colorElements=item.querySelectorAll("path, rect, circle, line");for(var _i=0,_Array$from=Array.from(colorElements);_i<_Array$from.length;_i++){var elem=_Array$from[_i];var computedStyle=window.getComputedStyle(elem);var computedFill=computedStyle.fill;var computedStroke=computedStyle.stroke;if(computedFill&&computedFill!=="none"&&computedFill!=="transparent"&&computedFill!=="rgb(0, 0, 0)"){color=computedFill;break}if(computedStroke&&computedStroke!=="none"&&computedStroke!=="transparent"&&computedStroke!=="rgb(0, 0, 0)"){color=computedStroke;break}var fill=elem.getAttribute("fill");var stroke=elem.getAttribute("stroke");if(fill&&fill!=="none"&&fill!=="transparent"){color=fill;break}if(stroke&&stroke!=="none"&&stroke!=="transparent"){color=stroke;break}}if(text&&!legendItems.some(function(existing){return existing.text===text})){legendItems.push({text:text,color:color})}});return legendItems}var SVG_INLINE_PROPS=["fill","stroke","stroke-width","stroke-dasharray","stroke-linecap","stroke-linejoin","font-size","font-family","font-weight","font-style","text-anchor","dominant-baseline","alignment-baseline","opacity","visibility"];function inlineSvgStyles(original,clone){var computed=window.getComputedStyle(original);var style="";for(var _iterator=_createForOfIteratorHelperLoose(SVG_INLINE_PROPS),_step;!(_step=_iterator()).done;){var prop=_step.value;var val=computed.getPropertyValue(prop);if(val)style+=prop+":"+val+";"}clone.setAttribute("style",style);for(var i=0;i<original.children.length;i++){inlineSvgStyles(original.children[i],clone.children[i])}}function escapeXml(str){return str.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function getSvgDimensions(svgElement){var width=parseFloat(svgElement.getAttribute("width")||"0")||svgElement.scrollWidth||800;var height=parseFloat(svgElement.getAttribute("height")||"0")||svgElement.scrollHeight||400;return{width:width,height:height}}function buildCompositeSvg(svgElement,title,subtitle,legendItems,inlineStyles){var cloned=svgElement.cloneNode(true);if(inlineStyles)inlineSvgStyles(svgElement,cloned);var _getSvgDimensions=getSvgDimensions(svgElement),chartWidth=_getSvgDimensions.width,chartHeight=_getSvgDimensions.height;var padding=20;var titleHeight=28;var subtitleHeight=subtitle?36:0;var legendHeight=legendItems.length>0?30:0;var headerHeight=padding+titleHeight+subtitleHeight;var totalWidth=chartWidth+padding*2;var totalHeight=chartHeight+headerHeight+legendHeight+padding;var serializer=new XMLSerializer;cloned.setAttribute("x",String(padding));cloned.setAttribute("y",String(headerHeight));cloned.setAttribute("overflow","visible");return"<svg xmlns=\"http://www.w3.org/2000/svg\" width=\""+totalWidth+"\" height=\""+totalHeight+"\">\n <rect width=\""+totalWidth+"\" height=\""+totalHeight+"\" fill=\"white\"/>\n <text x=\""+padding+"\" y=\""+(padding+20)+"\" font-family=\"Arial,sans-serif\" font-size=\"18\" font-weight=\"600\" fill=\"#000000\">"+escapeXml(title)+"</text>\n "+(subtitle?"<text x=\""+padding+"\" y=\""+(padding+44)+"\" font-family=\"Arial,sans-serif\" font-size=\"14\" fill=\"#666666\">"+escapeXml(subtitle)+"</text>":"")+"\n "+serializer.serializeToString(cloned)+"\n "+(legendItems.length>0?"<g transform=\"translate("+padding+", "+(totalHeight-25)+")\">\n "+legendItems.map(function(item,index){var x=index*200;return"<rect x=\""+x+"\" y=\"0\" width=\"12\" height=\"12\" fill=\""+item.color+"\"/>"+("<text x=\""+(x+18)+"\" y=\"10\" font-family=\"Arial,sans-serif\" font-size=\"12\" fill=\"#666666\">"+escapeXml(item.text)+"</text>")}).join("")+"\n </g>":"")+"\n </svg>"}function downloadChartSVG(title,containerRef,subtitle){if(!containerRef.current)return;var svgElement=containerRef.current.querySelector("svg");if(!svgElement)return;var legendItems=getLegendItems(containerRef.current);var compositeSvg=buildCompositeSvg(svgElement,title,subtitle,legendItems,false);var blob=new Blob([compositeSvg],{type:"image/svg+xml;charset=utf-8"});var url=URL.createObjectURL(blob);var link=document.createElement("a");link.href=url;link.download=title.replace(/\s+/g,"_")+".svg";link.click();URL.revokeObjectURL(url)}function downloadChartPNG(_x,_x2,_x3){return _downloadChartPNG.apply(this,arguments)}function _downloadChartPNG(){_downloadChartPNG=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(title,containerRef,subtitle){var svgElement,legendItems,compositeSvg,_getSvgDimensions2,chartWidth,chartHeight,padding,subtitleHeight,legendHeight,totalWidth,totalHeight;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:if(containerRef.current){_context3.next=2;break}return _context3.abrupt("return");case 2:svgElement=containerRef.current.querySelector("svg");if(svgElement){_context3.next=5;break}return _context3.abrupt("return");case 5:legendItems=getLegendItems(containerRef.current);compositeSvg=buildCompositeSvg(svgElement,title,subtitle,legendItems,true);_getSvgDimensions2=getSvgDimensions(svgElement),chartWidth=_getSvgDimensions2.width,chartHeight=_getSvgDimensions2.height;padding=20;subtitleHeight=subtitle?36:0;legendHeight=legendItems.length>0?30:0;totalWidth=chartWidth+padding*2;totalHeight=chartHeight+padding+28+subtitleHeight+legendHeight+padding;return _context3.abrupt("return",new Promise(function(resolve,reject){var img=new Image;var blob=new Blob([compositeSvg],{type:"image/svg+xml;charset=utf-8"});var url=URL.createObjectURL(blob);img.onload=function(){var scale=2;var canvas=document.createElement("canvas");canvas.width=totalWidth*scale;canvas.height=totalHeight*scale;var ctx=canvas.getContext("2d");ctx.scale(scale,scale);ctx.fillStyle="white";ctx.fillRect(0,0,totalWidth,totalHeight);ctx.drawImage(img,0,0,totalWidth,totalHeight);URL.revokeObjectURL(url);var link=document.createElement("a");link.download=title.replace(/\s+/g,"_")+".png";link.href=canvas.toDataURL("image/png");link.click();resolve()};img.onerror=function(){URL.revokeObjectURL(url);reject(new Error("SVG render failed"))};img.src=url}));case 14:case"end":return _context3.stop()}},_callee3)}));return _downloadChartPNG.apply(this,arguments)}var ROW_LIMITS=[100,500,1000];export function DownloadButton(_ref){var _ref$component=_ref.component,component=_ref$component===void 0?"chart":_ref$component,containerRef=_ref.containerRef,title=_ref.title,subtitle=_ref.subtitle,onDownload=_ref.onDownload,onDownloadCSV=_ref.onDownloadCSV,dataCount=_ref.dataCount;var defaultRowCount=dataCount!==undefined&&dataCount<100?"all":100;var _useState=useState(false),isModalOpen=_useState[0],setIsModalOpen=_useState[1];var _useState2=useState("svg"),selectedFormat=_useState2[0],setSelectedFormat=_useState2[1];var _useState3=useState(defaultRowCount),selectedRowCount=_useState3[0],setSelectedRowCount=_useState3[1];var _useState4=useState(false),isDownloading=_useState4[0],setIsDownloading=_useState4[1];var rowOptions=[].concat(ROW_LIMITS.filter(function(limit){return dataCount===undefined||dataCount>limit}).map(function(limit){return{value:limit,label:limit+" rows"}}),[{value:"all",label:dataCount!==undefined&&dataCount<=10000?"All ("+dataCount+" rows)":"All (max 10,000 rows)"}]);var handleChartDownload=/*#__PURE__*/function(){var _ref2=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(){return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:if(!(selectedFormat==="csv")){_context.next=10;break}setIsDownloading(true);_context.prev=2;_context.next=5;return onDownloadCSV==null?void 0:onDownloadCSV();case 5:_context.prev=5;setIsDownloading(false);return _context.finish(5);case 8:_context.next=21;break;case 10:if(!(selectedFormat==="png")){_context.next=20;break}setIsDownloading(true);_context.prev=12;_context.next=15;return downloadChartPNG(title,containerRef,subtitle);case 15:_context.prev=15;setIsDownloading(false);return _context.finish(15);case 18:_context.next=21;break;case 20:downloadChartSVG(title,containerRef,subtitle);case 21:setIsModalOpen(false);case 22:case"end":return _context.stop()}},_callee,null,[[2,,5,8],[12,,15,18]])}));return function handleChartDownload(){return _ref2.apply(this,arguments)}}();var handleTableDownload=/*#__PURE__*/function(){var _ref3=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(){var limit;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:limit=selectedRowCount==="all"?typeof dataCount==="number"&&dataCount<10000?dataCount:10000:selectedRowCount;setIsDownloading(true);_context2.prev=2;_context2.next=5;return onDownload==null?void 0:onDownload(limit);case 5:_context2.prev=5;setIsDownloading(false);return _context2.finish(5);case 8:setIsModalOpen(false);case 9:case"end":return _context2.stop()}},_callee2,null,[[2,,5,8]])}));return function handleTableDownload(){return _ref3.apply(this,arguments)}}();var handleCancel=function handleCancel(){setIsModalOpen(false);if(component==="chart"){setSelectedFormat("svg")}else{setSelectedRowCount(defaultRowCount)}};if(component==="table"){return/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Button,{variant:"outline",size:"sm",className:"h-8 w-8 bg-white text-muted-foreground border-none hover:text-black transition-all flex items-center justify-center",title:"Download table as CSV",onClick:function onClick(){setSelectedRowCount(defaultRowCount);setIsModalOpen(true)},children:/*#__PURE__*/_jsx(Download,{className:"h-3 w-3"})}),/*#__PURE__*/_jsx(Dialog,{open:isModalOpen,onOpenChange:setIsModalOpen,children:/*#__PURE__*/_jsxs(DialogContent,{children:[/*#__PURE__*/_jsxs(DialogHeader,{children:[/*#__PURE__*/_jsx(DialogTitle,{children:"Download Table"}),/*#__PURE__*/_jsx(DialogDescription,{children:"Max 10,000 rows can be downloaded at a time."})]}),/*#__PURE__*/_jsxs("div",{className:"py-4 flex items-center gap-3",children:[/*#__PURE__*/_jsx("span",{className:"text-sm text-muted-foreground whitespace-nowrap",children:"Number of rows to download"}),/*#__PURE__*/_jsx("select",{value:String(selectedRowCount),onChange:function onChange(e){var val=e.target.value;setSelectedRowCount(val==="all"?"all":Number(val))},className:"border border-gray-200 rounded-md px-3 py-2 text-sm bg-white focus:outline-none focus:ring-2 focus:ring-[#2A44D4] cursor-pointer",children:rowOptions.map(function(opt){return/*#__PURE__*/_jsx("option",{value:String(opt.value),children:opt.label},String(opt.value))})})]}),/*#__PURE__*/_jsx(DialogFooter,{className:"mt-6 block",children:/*#__PURE__*/_jsxs("div",{className:"flex items-center justify-end gap-2",children:[/*#__PURE__*/_jsx(Button,{type:"button",variant:"outline",onClick:handleCancel,disabled:isDownloading,className:"bg-[#EAECFB] border border-[#2A44D4] text-[#263DBF] hover:bg-[#EAECFB] hover:text-[#263DBF]",children:"Cancel"}),/*#__PURE__*/_jsx(Button,{type:"button",variant:"default",onClick:handleTableDownload,disabled:isDownloading,className:"bg-[#2A44D4] text-white hover:bg-[#2A44D4] hover:text-white disabled:opacity-70",children:isDownloading?/*#__PURE__*/_jsx(Loader2,{className:"h-4 w-4 animate-spin"}):"Download"})]})})]})})]})}return/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Button,{variant:"outline",size:"sm",className:"h-8 w-8 bg-white text-muted-foreground border-none hover:text-black transition-all flex items-center justify-center",title:"Download chart",onClick:function onClick(){return setIsModalOpen(true)},children:/*#__PURE__*/_jsx(Download,{className:"h-3 w-3"})}),/*#__PURE__*/_jsx(Dialog,{open:isModalOpen,onOpenChange:setIsModalOpen,children:/*#__PURE__*/_jsxs(DialogContent,{children:[/*#__PURE__*/_jsxs(DialogHeader,{children:[/*#__PURE__*/_jsx(DialogTitle,{children:"Download Chart"}),/*#__PURE__*/_jsx(DialogDescription,{children:"Choose the format you'd like to download the chart in."})]}),/*#__PURE__*/_jsxs("div",{className:"space-y-3 py-4",children:[/*#__PURE__*/_jsx(RadioOption,{label:"SVG",selected:selectedFormat==="svg",onClick:function onClick(){return setSelectedFormat("svg")}}),/*#__PURE__*/_jsx(RadioOption,{label:"PNG",selected:selectedFormat==="png",onClick:function onClick(){return setSelectedFormat("png")}}),onDownloadCSV&&/*#__PURE__*/_jsx(RadioOption,{label:"CSV",selected:selectedFormat==="csv",onClick:function onClick(){return setSelectedFormat("csv")}})]}),/*#__PURE__*/_jsx(DialogFooter,{className:"mt-6 block",children:/*#__PURE__*/_jsxs("div",{className:"flex items-center justify-end gap-2",children:[/*#__PURE__*/_jsx(Button,{type:"button",variant:"outline",onClick:handleCancel,disabled:isDownloading,className:"bg-[#EAECFB] border border-[#2A44D4] text-[#263DBF] hover:bg-[#EAECFB] hover:text-[#263DBF]",children:"Cancel"}),/*#__PURE__*/_jsx(Button,{type:"button",variant:"default",onClick:handleChartDownload,disabled:isDownloading,className:"bg-[#2A44D4] text-white hover:bg-[#2A44D4] hover:text-white disabled:opacity-70",children:isDownloading?/*#__PURE__*/_jsx(Loader2,{className:"h-4 w-4 animate-spin"}):"Download"})]})})]})})]})}
2
2
  //# sourceMappingURL=download-data-button.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"download-data-button.js","names":["useState","Button","Download","Loader2","Dialog","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogTitle","RadioOption","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","getLegendItems","container","legendItems","legendWrapper","querySelector","querySelectorAll","forEach","item","_item$textContent","text","textContent","trim","color","colorElements","_i","_Array$from","Array","from","length","elem","computedStyle","window","getComputedStyle","computedFill","fill","computedStroke","stroke","getAttribute","some","existing","push","SVG_INLINE_PROPS","inlineSvgStyles","original","clone","computed","style","_iterator","_createForOfIteratorHelperLoose","_step","done","prop","value","val","getPropertyValue","setAttribute","i","children","escapeXml","str","replace","getSvgDimensions","svgElement","width","parseFloat","scrollWidth","height","scrollHeight","buildCompositeSvg","title","subtitle","inlineStyles","cloned","cloneNode","_getSvgDimensions","chartWidth","chartHeight","padding","titleHeight","subtitleHeight","legendHeight","headerHeight","totalWidth","totalHeight","serializer","XMLSerializer","String","serializeToString","map","index","x","join","downloadChartSVG","containerRef","current","compositeSvg","blob","Blob","type","url","URL","createObjectURL","link","document","createElement","href","download","click","revokeObjectURL","downloadChartPNG","_x","_x2","_x3","_downloadChartPNG","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee3","_getSvgDimensions2","wrap","_callee3$","_context3","prev","next","abrupt","Promise","resolve","reject","img","Image","onload","scale","canvas","ctx","getContext","fillStyle","fillRect","drawImage","toDataURL","onerror","Error","src","stop","ROW_LIMITS","DownloadButton","_ref","_ref$component","component","onDownload","onDownloadCSV","dataCount","defaultRowCount","undefined","_useState","isModalOpen","setIsModalOpen","_useState2","selectedFormat","setSelectedFormat","_useState3","selectedRowCount","setSelectedRowCount","_useState4","isDownloading","setIsDownloading","rowOptions","concat","filter","limit","label","handleChartDownload","_ref2","_callee","_callee$","_context","finish","handleTableDownload","_ref3","_callee2","_callee2$","_context2","handleCancel","variant","size","className","onClick","open","onOpenChange","onChange","e","target","Number","opt","disabled","selected"],"sources":["../../../src/plugins/helpers/download-data-button.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { Button } from \"../../shadcn/components/ui/button\";\nimport { Download, Loader2 } from \"lucide-react\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"../../shadcn/components/ui/dialog\";\nimport { RadioOption } from \"../../shadcn/components/ui/styled-elements\";\n\ntype LegendItem = { text: string; color: string };\n\nfunction getLegendItems(container: Element): LegendItem[] {\n const legendItems: LegendItem[] = [];\n const legendWrapper = container.querySelector('[class*=\"recharts-legend-wrapper\"]');\n if (!legendWrapper) return legendItems;\n\n legendWrapper.querySelectorAll('[class*=\"recharts-legend-item\"]').forEach((item) => {\n const text = item.textContent?.trim();\n let color = '#666666';\n const colorElements = item.querySelectorAll('path, rect, circle, line');\n\n for (const elem of Array.from(colorElements)) {\n const computedStyle = window.getComputedStyle(elem);\n const computedFill = computedStyle.fill;\n const computedStroke = computedStyle.stroke;\n\n if (computedFill && computedFill !== 'none' && computedFill !== 'transparent' && computedFill !== 'rgb(0, 0, 0)') {\n color = computedFill;\n break;\n }\n if (computedStroke && computedStroke !== 'none' && computedStroke !== 'transparent' && computedStroke !== 'rgb(0, 0, 0)') {\n color = computedStroke;\n break;\n }\n\n const fill = elem.getAttribute('fill');\n const stroke = elem.getAttribute('stroke');\n\n if (fill && fill !== 'none' && fill !== 'transparent') {\n color = fill;\n break;\n }\n if (stroke && stroke !== 'none' && stroke !== 'transparent') {\n color = stroke;\n break;\n }\n }\n\n if (text && !legendItems.some((existing) => existing.text === text)) {\n legendItems.push({ text, color });\n }\n });\n\n return legendItems;\n}\n\nconst SVG_INLINE_PROPS = [\n 'fill', 'stroke', 'stroke-width', 'stroke-dasharray', 'stroke-linecap', 'stroke-linejoin',\n 'font-size', 'font-family', 'font-weight', 'font-style',\n 'text-anchor', 'dominant-baseline', 'alignment-baseline', 'opacity', 'visibility',\n];\n\nfunction inlineSvgStyles(original: Element, clone: Element) {\n const computed = window.getComputedStyle(original);\n let style = '';\n for (const prop of SVG_INLINE_PROPS) {\n const val = computed.getPropertyValue(prop);\n if (val) style += `${prop}:${val};`;\n }\n (clone as SVGElement).setAttribute('style', style);\n for (let i = 0; i < original.children.length; i++) {\n inlineSvgStyles(original.children[i], clone.children[i]);\n }\n}\n\nfunction escapeXml(str: string): string {\n return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n\nfunction getSvgDimensions(svgElement: SVGSVGElement): { width: number; height: number } {\n const width = parseFloat(svgElement.getAttribute('width') || '0') || svgElement.scrollWidth || 800;\n const height = parseFloat(svgElement.getAttribute('height') || '0') || svgElement.scrollHeight || 400;\n return { width, height };\n}\n\nfunction buildCompositeSvg(\n svgElement: SVGSVGElement,\n title: string,\n subtitle: string | undefined,\n legendItems: LegendItem[],\n inlineStyles: boolean,\n): string {\n const cloned = svgElement.cloneNode(true) as SVGSVGElement;\n if (inlineStyles) inlineSvgStyles(svgElement, cloned);\n\n const { width: chartWidth, height: chartHeight } = getSvgDimensions(svgElement);\n\n const padding = 20;\n const titleHeight = 28;\n const subtitleHeight = subtitle ? 36 : 0;\n const legendHeight = legendItems.length > 0 ? 30 : 0;\n const headerHeight = padding + titleHeight + subtitleHeight;\n const totalWidth = chartWidth + padding * 2;\n const totalHeight = chartHeight + headerHeight + legendHeight + padding;\n\n const serializer = new XMLSerializer();\n cloned.setAttribute('x', String(padding));\n cloned.setAttribute('y', String(headerHeight));\n cloned.setAttribute('overflow', 'visible');\n\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${totalWidth}\" height=\"${totalHeight}\">\n <rect width=\"${totalWidth}\" height=\"${totalHeight}\" fill=\"white\"/>\n <text x=\"${padding}\" y=\"${padding + 20}\" font-family=\"Arial,sans-serif\" font-size=\"18\" font-weight=\"600\" fill=\"#000000\">${escapeXml(title)}</text>\n ${subtitle ? `<text x=\"${padding}\" y=\"${padding + 44}\" font-family=\"Arial,sans-serif\" font-size=\"14\" fill=\"#666666\">${escapeXml(subtitle)}</text>` : ''}\n ${serializer.serializeToString(cloned)}\n ${legendItems.length > 0 ? `<g transform=\"translate(${padding}, ${totalHeight - 25})\">\n ${legendItems.map((item, index) => {\n const x = index * 200;\n return `<rect x=\"${x}\" y=\"0\" width=\"12\" height=\"12\" fill=\"${item.color}\"/>` +\n `<text x=\"${x + 18}\" y=\"10\" font-family=\"Arial,sans-serif\" font-size=\"12\" fill=\"#666666\">${escapeXml(item.text)}</text>`;\n }).join('')}\n </g>` : ''}\n </svg>`;\n}\n\nfunction downloadChartSVG(title: string, containerRef: any, subtitle?: string) {\n if (!containerRef.current) return;\n\n const svgElement = containerRef.current.querySelector('svg') as SVGSVGElement | null;\n if (!svgElement) return;\n\n const legendItems = getLegendItems(containerRef.current);\n const compositeSvg = buildCompositeSvg(svgElement, title, subtitle, legendItems, false);\n\n const blob = new Blob([compositeSvg], { type: 'image/svg+xml;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `${title.replace(/\\s+/g, '_')}.svg`;\n link.click();\n URL.revokeObjectURL(url);\n}\n\nasync function downloadChartPNG(title: string, containerRef: any, subtitle?: string): Promise<void> {\n if (!containerRef.current) return;\n\n const svgElement = containerRef.current.querySelector('svg') as SVGSVGElement | null;\n if (!svgElement) return;\n\n const legendItems = getLegendItems(containerRef.current);\n const compositeSvg = buildCompositeSvg(svgElement, title, subtitle, legendItems, true);\n\n const { width: chartWidth, height: chartHeight } = getSvgDimensions(svgElement);\n const padding = 20;\n const subtitleHeight = subtitle ? 36 : 0;\n const legendHeight = legendItems.length > 0 ? 30 : 0;\n const totalWidth = chartWidth + padding * 2;\n const totalHeight = chartHeight + padding + 28 + subtitleHeight + legendHeight + padding;\n\n return new Promise((resolve, reject) => {\n const img = new Image();\n const blob = new Blob([compositeSvg], { type: 'image/svg+xml;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n\n img.onload = () => {\n const scale = 2;\n const canvas = document.createElement('canvas');\n canvas.width = totalWidth * scale;\n canvas.height = totalHeight * scale;\n const ctx = canvas.getContext('2d')!;\n ctx.scale(scale, scale);\n ctx.fillStyle = 'white';\n ctx.fillRect(0, 0, totalWidth, totalHeight);\n ctx.drawImage(img, 0, 0, totalWidth, totalHeight);\n URL.revokeObjectURL(url);\n\n const link = document.createElement('a');\n link.download = `${title.replace(/\\s+/g, '_')}.png`;\n link.href = canvas.toDataURL('image/png');\n link.click();\n resolve();\n };\n\n img.onerror = () => { URL.revokeObjectURL(url); reject(new Error('SVG render failed')); };\n img.src = url;\n });\n}\n\nconst ROW_LIMITS = [100, 500, 1000] as const;\n\ntype DownloadButtonProps = {\n component: \"chart\" | \"table\";\n containerRef?: any;\n title: string;\n subtitle?: string;\n onDownload?: (limit: number) => Promise<void>;\n onDownloadCSV?: () => Promise<void>;\n dataCount?: number;\n};\n\nexport function DownloadButton({\n component = \"chart\",\n containerRef,\n title,\n subtitle,\n onDownload,\n onDownloadCSV,\n dataCount,\n}: DownloadButtonProps) {\n const defaultRowCount = dataCount !== undefined && dataCount < 100 ? \"all\" : 100;\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [selectedFormat, setSelectedFormat] = useState<\"svg\" | \"png\" | \"csv\">(\"svg\");\n const [selectedRowCount, setSelectedRowCount] = useState<100 | 500 | 1000 | \"all\">(defaultRowCount);\n const [isDownloading, setIsDownloading] = useState(false);\n\n const rowOptions = [\n ...ROW_LIMITS\n .filter((limit) => dataCount === undefined || dataCount > limit)\n .map((limit) => ({ value: limit as number, label: `${limit} rows` })),\n {\n value: \"all\" as const,\n label: dataCount !== undefined && dataCount <= 10000\n ? `All (${dataCount} rows)`\n : \"All (max 10,000 rows)\",\n },\n ];\n\n const handleChartDownload = async () => {\n if (selectedFormat === \"csv\") {\n setIsDownloading(true);\n try {\n await onDownloadCSV?.();\n } finally {\n setIsDownloading(false);\n }\n } else if (selectedFormat === \"png\") {\n setIsDownloading(true);\n try {\n await downloadChartPNG(title, containerRef, subtitle);\n } finally {\n setIsDownloading(false);\n }\n } else {\n downloadChartSVG(title, containerRef, subtitle);\n }\n setIsModalOpen(false);\n };\n\n const handleTableDownload = async () => {\n const limit = selectedRowCount === \"all\" ? 10000 : selectedRowCount;\n setIsDownloading(true);\n try {\n await onDownload?.(limit);\n } finally {\n setIsDownloading(false);\n }\n setIsModalOpen(false);\n };\n\n const handleCancel = () => {\n setIsModalOpen(false);\n if (component === \"chart\") {\n setSelectedFormat(\"svg\");\n } else {\n setSelectedRowCount(defaultRowCount);\n }\n };\n\n if (component === \"table\") {\n return (\n <>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 w-8 bg-white text-muted-foreground border-none hover:text-black transition-all flex items-center justify-center\"\n title=\"Download table as CSV\"\n onClick={() => {\n setSelectedRowCount(defaultRowCount);\n setIsModalOpen(true);\n }}\n >\n <Download className=\"h-3 w-3\" />\n </Button>\n\n <Dialog open={isModalOpen} onOpenChange={setIsModalOpen}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Download Table</DialogTitle>\n <DialogDescription>\n Max 10,000 rows can be downloaded at a time.\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"py-4 flex items-center gap-3\">\n <span className=\"text-sm text-muted-foreground whitespace-nowrap\">Number of rows to download</span>\n <select\n value={String(selectedRowCount)}\n onChange={(e) => {\n const val = e.target.value;\n setSelectedRowCount(val === \"all\" ? \"all\" : Number(val) as 100 | 500 | 1000);\n }}\n className=\"border border-gray-200 rounded-md px-3 py-2 text-sm bg-white focus:outline-none focus:ring-2 focus:ring-[#2A44D4] cursor-pointer\"\n >\n {rowOptions.map((opt) => (\n <option key={String(opt.value)} value={String(opt.value)}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n\n <DialogFooter className=\"mt-6 block\">\n <div className=\"flex items-center justify-end gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleCancel}\n disabled={isDownloading}\n className=\"bg-[#EAECFB] border border-[#2A44D4] text-[#263DBF] hover:bg-[#EAECFB] hover:text-[#263DBF]\"\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n variant=\"default\"\n onClick={handleTableDownload}\n disabled={isDownloading}\n className=\"bg-[#2A44D4] text-white hover:bg-[#2A44D4] hover:text-white disabled:opacity-70\"\n >\n {isDownloading ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : 'Download'}\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </>\n );\n }\n\n return (\n <>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 w-8 bg-white text-muted-foreground border-none hover:text-black transition-all flex items-center justify-center\"\n title=\"Download chart\"\n onClick={() => setIsModalOpen(true)}\n >\n <Download className=\"h-3 w-3\" />\n </Button>\n\n <Dialog open={isModalOpen} onOpenChange={setIsModalOpen}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Download Chart</DialogTitle>\n <DialogDescription>\n Choose the format you'd like to download the chart in.\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-3 py-4\">\n <RadioOption label=\"SVG\" selected={selectedFormat === \"svg\"} onClick={() => setSelectedFormat(\"svg\")} />\n <RadioOption label=\"PNG\" selected={selectedFormat === \"png\"} onClick={() => setSelectedFormat(\"png\")} />\n {onDownloadCSV && (\n <RadioOption label=\"CSV\" selected={selectedFormat === \"csv\"} onClick={() => setSelectedFormat(\"csv\")} />\n )}\n </div>\n\n <DialogFooter className=\"mt-6 block\">\n <div className=\"flex items-center justify-end gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleCancel}\n disabled={isDownloading}\n className=\"bg-[#EAECFB] border border-[#2A44D4] text-[#263DBF] hover:bg-[#EAECFB] hover:text-[#263DBF]\"\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n variant=\"default\"\n onClick={handleChartDownload}\n disabled={isDownloading}\n className=\"bg-[#2A44D4] text-white hover:bg-[#2A44D4] hover:text-white disabled:opacity-70\"\n >\n {isDownloading ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : 'Download'}\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </>\n );\n}\n"],"mappings":"4iCAAA,OAASA,QAAQ,KAAQ,OAAO,CAChC,OAASC,MAAM,KAAQ,mCAAmC,CAC1D,OAASC,QAAQ,CAAEC,OAAO,KAAQ,cAAc,CAChD,OACIC,MAAM,CACNC,aAAa,CACbC,iBAAiB,CACjBC,YAAY,CACZC,YAAY,CACZC,WAAW,KACR,mCAAmC,CAC1C,OAASC,WAAW,KAAQ,4CAA4C,CAAC,OAAAC,GAAA,IAAAC,IAAA,CAAAC,IAAA,IAAAC,KAAA,CAAAC,QAAA,IAAAC,SAAA,yBAIzE,QAAS,CAAAC,cAAcA,CAACC,SAAkB,CAAgB,CACtD,GAAM,CAAAC,WAAyB,CAAG,EAAE,CACpC,GAAM,CAAAC,aAAa,CAAGF,SAAS,CAACG,aAAa,CAAC,sCAAoC,CAAC,CACnF,GAAI,CAACD,aAAa,CAAE,MAAO,CAAAD,WAAW,CAEtCC,aAAa,CAACE,gBAAgB,CAAC,mCAAiC,CAAC,CAACC,OAAO,CAAC,SAACC,IAAI,CAAK,KAAAC,iBAAA,CAChF,GAAM,CAAAC,IAAI,EAAAD,iBAAA,CAAGD,IAAI,CAACG,WAAW,eAAhBF,iBAAA,CAAkBG,IAAI,CAAC,CAAC,CACrC,GAAI,CAAAC,KAAK,CAAG,SAAS,CACrB,GAAM,CAAAC,aAAa,CAAGN,IAAI,CAACF,gBAAgB,CAAC,0BAA0B,CAAC,CAEvE,QAAAS,EAAA,GAAAC,WAAA,CAAmBC,KAAK,CAACC,IAAI,CAACJ,aAAa,CAAC,CAAAC,EAAA,CAAAC,WAAA,CAAAG,MAAA,CAAAJ,EAAA,GAAE,CAAzC,GAAM,CAAAK,IAAI,CAAAJ,WAAA,CAAAD,EAAA,EACX,GAAM,CAAAM,aAAa,CAAGC,MAAM,CAACC,gBAAgB,CAACH,IAAI,CAAC,CACnD,GAAM,CAAAI,YAAY,CAAGH,aAAa,CAACI,IAAI,CACvC,GAAM,CAAAC,cAAc,CAAGL,aAAa,CAACM,MAAM,CAE3C,GAAIH,YAAY,EAAIA,YAAY,GAAK,MAAM,EAAIA,YAAY,GAAK,aAAa,EAAIA,YAAY,GAAK,cAAc,CAAE,CAC9GX,KAAK,CAAGW,YAAY,CACpB,KACJ,CACA,GAAIE,cAAc,EAAIA,cAAc,GAAK,MAAM,EAAIA,cAAc,GAAK,aAAa,EAAIA,cAAc,GAAK,cAAc,CAAE,CACtHb,KAAK,CAAGa,cAAc,CACtB,KACJ,CAEA,GAAM,CAAAD,IAAI,CAAGL,IAAI,CAACQ,YAAY,CAAC,MAAM,CAAC,CACtC,GAAM,CAAAD,MAAM,CAAGP,IAAI,CAACQ,YAAY,CAAC,QAAQ,CAAC,CAE1C,GAAIH,IAAI,EAAIA,IAAI,GAAK,MAAM,EAAIA,IAAI,GAAK,aAAa,CAAE,CACnDZ,KAAK,CAAGY,IAAI,CACZ,KACJ,CACA,GAAIE,MAAM,EAAIA,MAAM,GAAK,MAAM,EAAIA,MAAM,GAAK,aAAa,CAAE,CACzDd,KAAK,CAAGc,MAAM,CACd,KACJ,CACJ,CAEA,GAAIjB,IAAI,EAAI,CAACP,WAAW,CAAC0B,IAAI,CAAC,SAACC,QAAQ,QAAK,CAAAA,QAAQ,CAACpB,IAAI,GAAKA,IAAI,EAAC,CAAE,CACjEP,WAAW,CAAC4B,IAAI,CAAC,CAAErB,IAAI,CAAJA,IAAI,CAAEG,KAAK,CAALA,KAAM,CAAC,CACpC,CACJ,CAAC,CAAC,CAEF,MAAO,CAAAV,WACX,CAEA,GAAM,CAAA6B,gBAAgB,CAAG,CACrB,MAAM,CAAE,QAAQ,CAAE,cAAc,CAAE,kBAAkB,CAAE,gBAAgB,CAAE,iBAAiB,CACzF,WAAW,CAAE,aAAa,CAAE,aAAa,CAAE,YAAY,CACvD,aAAa,CAAE,mBAAmB,CAAE,oBAAoB,CAAE,SAAS,CAAE,YAAY,CACpF,CAED,QAAS,CAAAC,eAAeA,CAACC,QAAiB,CAAEC,KAAc,CAAE,CACxD,GAAM,CAAAC,QAAQ,CAAGd,MAAM,CAACC,gBAAgB,CAACW,QAAQ,CAAC,CAClD,GAAI,CAAAG,KAAK,CAAG,EAAE,CACd,QAAAC,SAAA,CAAAC,+BAAA,CAAmBP,gBAAgB,EAAAQ,KAAA,GAAAA,KAAA,CAAAF,SAAA,IAAAG,IAAA,EAAE,IAA1B,CAAAC,IAAI,CAAAF,KAAA,CAAAG,KAAA,CACX,GAAM,CAAAC,GAAG,CAAGR,QAAQ,CAACS,gBAAgB,CAACH,IAAI,CAAC,CAC3C,GAAIE,GAAG,CAAEP,KAAK,EAAOK,IAAI,KAAIE,GAAG,IACpC,CACCT,KAAK,CAAgBW,YAAY,CAAC,OAAO,CAAET,KAAK,CAAC,CAClD,IAAK,GAAI,CAAAU,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAGb,QAAQ,CAACc,QAAQ,CAAC7B,MAAM,CAAE4B,CAAC,EAAE,CAAE,CAC/Cd,eAAe,CAACC,QAAQ,CAACc,QAAQ,CAACD,CAAC,CAAC,CAAEZ,KAAK,CAACa,QAAQ,CAACD,CAAC,CAAC,CAC3D,CACJ,CAEA,QAAS,CAAAE,SAASA,CAACC,GAAW,CAAU,CACpC,MAAO,CAAAA,GAAG,CAACC,OAAO,CAAC,IAAI,CAAE,OAAO,CAAC,CAACA,OAAO,CAAC,IAAI,CAAE,MAAM,CAAC,CAACA,OAAO,CAAC,IAAI,CAAE,MAAM,CAChF,CAEA,QAAS,CAAAC,gBAAgBA,CAACC,UAAyB,CAAqC,CACpF,GAAM,CAAAC,KAAK,CAAGC,UAAU,CAACF,UAAU,CAACzB,YAAY,CAAC,OAAO,CAAC,EAAI,GAAG,CAAC,EAAIyB,UAAU,CAACG,WAAW,EAAI,GAAG,CAClG,GAAM,CAAAC,MAAM,CAAGF,UAAU,CAACF,UAAU,CAACzB,YAAY,CAAC,QAAQ,CAAC,EAAI,GAAG,CAAC,EAAIyB,UAAU,CAACK,YAAY,EAAI,GAAG,CACrG,MAAO,CAAEJ,KAAK,CAALA,KAAK,CAAEG,MAAM,CAANA,MAAO,CAC3B,CAEA,QAAS,CAAAE,iBAAiBA,CACtBN,UAAyB,CACzBO,KAAa,CACbC,QAA4B,CAC5B1D,WAAyB,CACzB2D,YAAqB,CACf,CACN,GAAM,CAAAC,MAAM,CAAGV,UAAU,CAACW,SAAS,CAAC,IAAI,CAAkB,CAC1D,GAAIF,YAAY,CAAE7B,eAAe,CAACoB,UAAU,CAAEU,MAAM,CAAC,CAErD,IAAAE,iBAAA,CAAmDb,gBAAgB,CAACC,UAAU,CAAC,CAAhEa,UAAU,CAAAD,iBAAA,CAAjBX,KAAK,CAAsBa,WAAW,CAAAF,iBAAA,CAAnBR,MAAM,CAEjC,GAAM,CAAAW,OAAO,CAAG,EAAE,CAClB,GAAM,CAAAC,WAAW,CAAG,EAAE,CACtB,GAAM,CAAAC,cAAc,CAAGT,QAAQ,CAAG,EAAE,CAAG,CAAC,CACxC,GAAM,CAAAU,YAAY,CAAGpE,WAAW,CAACgB,MAAM,CAAG,CAAC,CAAG,EAAE,CAAG,CAAC,CACpD,GAAM,CAAAqD,YAAY,CAAGJ,OAAO,CAAGC,WAAW,CAAGC,cAAc,CAC3D,GAAM,CAAAG,UAAU,CAAGP,UAAU,CAAGE,OAAO,CAAG,CAAC,CAC3C,GAAM,CAAAM,WAAW,CAAGP,WAAW,CAAGK,YAAY,CAAGD,YAAY,CAAGH,OAAO,CAEvE,GAAM,CAAAO,UAAU,CAAG,GAAI,CAAAC,aAAe,CACtCb,MAAM,CAACjB,YAAY,CAAC,GAAG,CAAE+B,MAAM,CAACT,OAAO,CAAC,CAAC,CACzCL,MAAM,CAACjB,YAAY,CAAC,GAAG,CAAE+B,MAAM,CAACL,YAAY,CAAC,CAAC,CAC9CT,MAAM,CAACjB,YAAY,CAAC,UAAU,CAAE,SAAS,CAAC,CAE1C,2DAAyD2B,UAAU,gBAAaC,WAAW,+BACxED,UAAU,gBAAaC,WAAW,2CACtCN,OAAO,YAAQA,OAAO,CAAG,EAAE,+FAAoFnB,SAAS,CAACW,KAAK,CAAC,sBACxIC,QAAQ,cAAeO,OAAO,YAAQA,OAAO,CAAG,EAAE,2EAAkEnB,SAAS,CAACY,QAAQ,CAAC,WAAY,EAAE,eACrJc,UAAU,CAACG,iBAAiB,CAACf,MAAM,CAAC,eACpC5D,WAAW,CAACgB,MAAM,CAAG,CAAC,6BAA8BiD,OAAO,OAAKM,WAAW,CAAG,EAAE,uBAC5EvE,WAAW,CAAC4E,GAAG,CAAC,SAACvE,IAAI,CAAEwE,KAAK,CAAK,CAC/B,GAAM,CAAAC,CAAC,CAAGD,KAAK,CAAG,GAAG,CACrB,MAAO,aAAYC,CAAC,iDAAwCzE,IAAI,CAACK,KAAK,uBACtDoE,CAAC,CAAG,EAAE,oFAAyEhC,SAAS,CAACzC,IAAI,CAACE,IAAI,CAAC,WACvH,CAAC,CAAC,CAACwE,IAAI,CAAC,EAAE,CAAC,kBACP,EAAE,gBAElB,CAEA,QAAS,CAAAC,gBAAgBA,CAACvB,KAAa,CAAEwB,YAAiB,CAAEvB,QAAiB,CAAE,CAC3E,GAAI,CAACuB,YAAY,CAACC,OAAO,CAAE,OAE3B,GAAM,CAAAhC,UAAU,CAAG+B,YAAY,CAACC,OAAO,CAAChF,aAAa,CAAC,KAAK,CAAyB,CACpF,GAAI,CAACgD,UAAU,CAAE,OAEjB,GAAM,CAAAlD,WAAW,CAAGF,cAAc,CAACmF,YAAY,CAACC,OAAO,CAAC,CACxD,GAAM,CAAAC,YAAY,CAAG3B,iBAAiB,CAACN,UAAU,CAAEO,KAAK,CAAEC,QAAQ,CAAE1D,WAAW,CAAE,KAAK,CAAC,CAEvF,GAAM,CAAAoF,IAAI,CAAG,GAAI,CAAAC,IAAI,CAAC,CAACF,YAAY,CAAC,CAAE,CAAEG,IAAI,CAAE,6BAA8B,CAAC,CAAC,CAC9E,GAAM,CAAAC,GAAG,CAAGC,GAAG,CAACC,eAAe,CAACL,IAAI,CAAC,CACrC,GAAM,CAAAM,IAAI,CAAGC,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC,CACxCF,IAAI,CAACG,IAAI,CAAGN,GAAG,CACfG,IAAI,CAACI,QAAQ,CAAMrC,KAAK,CAACT,OAAO,CAAC,MAAM,CAAE,GAAG,CAAC,OAAM,CACnD0C,IAAI,CAACK,KAAK,CAAC,CAAC,CACZP,GAAG,CAACQ,eAAe,CAACT,GAAG,CAC3B,CAAC,QAEc,CAAAU,gBAAgBA,CAAAC,EAAA,CAAAC,GAAA,CAAAC,GAAA,SAAAC,iBAAA,CAAAC,KAAA,MAAAC,SAAA,WAAAF,kBAAA,EAAAA,iBAAA,CAAAG,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAA/B,SAAAC,SAAgClD,KAAa,CAAEwB,YAAiB,CAAEvB,QAAiB,MAAAR,UAAA,CAAAlD,WAAA,CAAAmF,YAAA,CAAAyB,kBAAA,CAAA7C,UAAA,CAAAC,WAAA,CAAAC,OAAA,CAAAE,cAAA,CAAAC,YAAA,CAAAE,UAAA,CAAAC,WAAA,QAAAkC,mBAAA,CAAAI,IAAA,UAAAC,UAAAC,SAAA,iBAAAA,SAAA,CAAAC,IAAA,CAAAD,SAAA,CAAAE,IAAA,YAC1EhC,YAAY,CAACC,OAAO,EAAA6B,SAAA,CAAAE,IAAA,gBAAAF,SAAA,CAAAG,MAAA,kBAEnBhE,UAAU,CAAG+B,YAAY,CAACC,OAAO,CAAChF,aAAa,CAAC,KAAK,CAAC,IACvDgD,UAAU,EAAA6D,SAAA,CAAAE,IAAA,gBAAAF,SAAA,CAAAG,MAAA,kBAETlH,WAAW,CAAGF,cAAc,CAACmF,YAAY,CAACC,OAAO,CAAC,CAClDC,YAAY,CAAG3B,iBAAiB,CAACN,UAAU,CAAEO,KAAK,CAAEC,QAAQ,CAAE1D,WAAW,CAAE,IAAI,CAAC,CAAA4G,kBAAA,CAEnC3D,gBAAgB,CAACC,UAAU,CAAC,CAAhEa,UAAU,CAAA6C,kBAAA,CAAjBzD,KAAK,CAAsBa,WAAW,CAAA4C,kBAAA,CAAnBtD,MAAM,CAC3BW,OAAO,CAAG,EAAE,CACZE,cAAc,CAAGT,QAAQ,CAAG,EAAE,CAAG,CAAC,CAClCU,YAAY,CAAGpE,WAAW,CAACgB,MAAM,CAAG,CAAC,CAAG,EAAE,CAAG,CAAC,CAC9CsD,UAAU,CAAGP,UAAU,CAAGE,OAAO,CAAG,CAAC,CACrCM,WAAW,CAAGP,WAAW,CAAGC,OAAO,CAAG,EAAE,CAAGE,cAAc,CAAGC,YAAY,CAAGH,OAAO,QAAA8C,SAAA,CAAAG,MAAA,UAEjF,GAAI,CAAAC,OAAO,CAAC,SAACC,OAAO,CAAEC,MAAM,CAAK,CACpC,GAAM,CAAAC,GAAG,CAAG,GAAI,CAAAC,KAAO,CACvB,GAAM,CAAAnC,IAAI,CAAG,GAAI,CAAAC,IAAI,CAAC,CAACF,YAAY,CAAC,CAAE,CAAEG,IAAI,CAAE,6BAA8B,CAAC,CAAC,CAC9E,GAAM,CAAAC,GAAG,CAAGC,GAAG,CAACC,eAAe,CAACL,IAAI,CAAC,CAErCkC,GAAG,CAACE,MAAM,CAAG,UAAM,CACf,GAAM,CAAAC,KAAK,CAAG,CAAC,CACf,GAAM,CAAAC,MAAM,CAAG/B,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC,CAC/C8B,MAAM,CAACvE,KAAK,CAAGmB,UAAU,CAAGmD,KAAK,CACjCC,MAAM,CAACpE,MAAM,CAAGiB,WAAW,CAAGkD,KAAK,CACnC,GAAM,CAAAE,GAAG,CAAGD,MAAM,CAACE,UAAU,CAAC,IAAI,CAAE,CACpCD,GAAG,CAACF,KAAK,CAACA,KAAK,CAAEA,KAAK,CAAC,CACvBE,GAAG,CAACE,SAAS,CAAG,OAAO,CACvBF,GAAG,CAACG,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAExD,UAAU,CAAEC,WAAW,CAAC,CAC3CoD,GAAG,CAACI,SAAS,CAACT,GAAG,CAAE,CAAC,CAAE,CAAC,CAAEhD,UAAU,CAAEC,WAAW,CAAC,CACjDiB,GAAG,CAACQ,eAAe,CAACT,GAAG,CAAC,CAExB,GAAM,CAAAG,IAAI,CAAGC,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC,CACxCF,IAAI,CAACI,QAAQ,CAAMrC,KAAK,CAACT,OAAO,CAAC,MAAM,CAAE,GAAG,CAAC,OAAM,CACnD0C,IAAI,CAACG,IAAI,CAAG6B,MAAM,CAACM,SAAS,CAAC,WAAW,CAAC,CACzCtC,IAAI,CAACK,KAAK,CAAC,CAAC,CACZqB,OAAO,CAAC,CACZ,CAAC,CAEDE,GAAG,CAACW,OAAO,CAAG,UAAM,CAAEzC,GAAG,CAACQ,eAAe,CAACT,GAAG,CAAC,CAAE8B,MAAM,CAAC,GAAI,CAAAa,KAAK,CAAC,mBAAmB,CAAC,CAAG,CAAC,CACzFZ,GAAG,CAACa,GAAG,CAAG5C,GACd,CAAC,CAAC,2BAAAwB,SAAA,CAAAqB,IAAA,KAAAzB,QAAA,EACL,UAAAN,iBAAA,CAAAC,KAAA,MAAAC,SAAA,EAED,GAAM,CAAA8B,UAAU,CAAG,CAAC,GAAG,CAAE,GAAG,CAAE,IAAI,CAAU,CAY5C,MAAO,SAAS,CAAAC,cAAcA,CAAAC,IAAA,CAQN,KAAAC,cAAA,CAAAD,IAAA,CAPpBE,SAAS,CAATA,SAAS,CAAAD,cAAA,UAAG,OAAO,CAAAA,cAAA,CACnBvD,YAAY,CAAAsD,IAAA,CAAZtD,YAAY,CACZxB,KAAK,CAAA8E,IAAA,CAAL9E,KAAK,CACLC,QAAQ,CAAA6E,IAAA,CAAR7E,QAAQ,CACRgF,UAAU,CAAAH,IAAA,CAAVG,UAAU,CACVC,aAAa,CAAAJ,IAAA,CAAbI,aAAa,CACbC,SAAS,CAAAL,IAAA,CAATK,SAAS,CAET,GAAM,CAAAC,eAAe,CAAGD,SAAS,GAAKE,SAAS,EAAIF,SAAS,CAAG,GAAG,CAAG,KAAK,CAAG,GAAG,CAChF,IAAAG,SAAA,CAAsClK,QAAQ,CAAC,KAAK,CAAC,CAA9CmK,WAAW,CAAAD,SAAA,IAAEE,cAAc,CAAAF,SAAA,IAClC,IAAAG,UAAA,CAA4CrK,QAAQ,CAAwB,KAAK,CAAC,CAA3EsK,cAAc,CAAAD,UAAA,IAAEE,iBAAiB,CAAAF,UAAA,IACxC,IAAAG,UAAA,CAAgDxK,QAAQ,CAA2BgK,eAAe,CAAC,CAA5FS,gBAAgB,CAAAD,UAAA,IAAEE,mBAAmB,CAAAF,UAAA,IAC5C,IAAAG,UAAA,CAA0C3K,QAAQ,CAAC,KAAK,CAAC,CAAlD4K,aAAa,CAAAD,UAAA,IAAEE,gBAAgB,CAAAF,UAAA,IAEtC,GAAM,CAAAG,UAAU,IAAAC,MAAA,CACTvB,UAAU,CACRwB,MAAM,CAAC,SAACC,KAAK,QAAK,CAAAlB,SAAS,GAAKE,SAAS,EAAIF,SAAS,CAAGkB,KAAK,EAAC,CAC/DlF,GAAG,CAAC,SAACkF,KAAK,QAAM,CAAEtH,KAAK,CAAEsH,KAAe,CAAEC,KAAK,CAAKD,KAAK,QAAQ,CAAC,CAAC,CAAC,EACzE,CACItH,KAAK,CAAE,KAAc,CACrBuH,KAAK,CAAEnB,SAAS,GAAKE,SAAS,EAAIF,SAAS,EAAI,KAAK,SACtCA,SAAS,UACjB,uBACV,CAAC,EACJ,CAED,GAAM,CAAAoB,mBAAmB,6BAAAC,KAAA,CAAAzD,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAAG,SAAAwD,QAAA,SAAAzD,mBAAA,CAAAI,IAAA,UAAAsD,SAAAC,QAAA,iBAAAA,QAAA,CAAApD,IAAA,CAAAoD,QAAA,CAAAnD,IAAA,cACpBkC,cAAc,GAAK,KAAK,GAAAiB,QAAA,CAAAnD,IAAA,UACxByC,gBAAgB,CAAC,IAAI,CAAC,CAACU,QAAA,CAAApD,IAAA,GAAAoD,QAAA,CAAAnD,IAAA,SAEb,CAAA0B,aAAa,cAAbA,aAAa,CAAG,CAAC,QAAAyB,QAAA,CAAApD,IAAA,GAEvB0C,gBAAgB,CAAC,KAAK,CAAC,CAAC,OAAAU,QAAA,CAAAC,MAAA,WAAAD,QAAA,CAAAnD,IAAA,uBAErBkC,cAAc,GAAK,KAAK,GAAAiB,QAAA,CAAAnD,IAAA,UAC/ByC,gBAAgB,CAAC,IAAI,CAAC,CAACU,QAAA,CAAApD,IAAA,IAAAoD,QAAA,CAAAnD,IAAA,UAEb,CAAAhB,gBAAgB,CAACxC,KAAK,CAAEwB,YAAY,CAAEvB,QAAQ,CAAC,SAAA0G,QAAA,CAAApD,IAAA,IAErD0C,gBAAgB,CAAC,KAAK,CAAC,CAAC,OAAAU,QAAA,CAAAC,MAAA,aAAAD,QAAA,CAAAnD,IAAA,kBAG5BjC,gBAAgB,CAACvB,KAAK,CAAEwB,YAAY,CAAEvB,QAAQ,CAAC,CAAC,QAEpDuF,cAAc,CAAC,KAAK,CAAC,CAAC,yBAAAmB,QAAA,CAAAhC,IAAA,KAAA8B,OAAA,8BACzB,kBAnBK,CAAAF,mBAAmBA,CAAA,SAAAC,KAAA,CAAA3D,KAAA,MAAAC,SAAA,KAmBxB,CAED,GAAM,CAAA+D,mBAAmB,6BAAAC,KAAA,CAAA/D,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAAG,SAAA8D,SAAA,MAAAV,KAAA,QAAArD,mBAAA,CAAAI,IAAA,UAAA4D,UAAAC,SAAA,iBAAAA,SAAA,CAAA1D,IAAA,CAAA0D,SAAA,CAAAzD,IAAA,SAClB6C,KAAK,CAAGR,gBAAgB,GAAK,KAAK,CAAG,KAAK,CAAGA,gBAAgB,CACnEI,gBAAgB,CAAC,IAAI,CAAC,CAACgB,SAAA,CAAA1D,IAAA,GAAA0D,SAAA,CAAAzD,IAAA,SAEb,CAAAyB,UAAU,cAAVA,UAAU,CAAGoB,KAAK,CAAC,QAAAY,SAAA,CAAA1D,IAAA,GAEzB0C,gBAAgB,CAAC,KAAK,CAAC,CAAC,OAAAgB,SAAA,CAAAL,MAAA,WAE5BpB,cAAc,CAAC,KAAK,CAAC,CAAC,wBAAAyB,SAAA,CAAAtC,IAAA,KAAAoC,QAAA,kBACzB,kBATK,CAAAF,mBAAmBA,CAAA,SAAAC,KAAA,CAAAjE,KAAA,MAAAC,SAAA,KASxB,CAED,GAAM,CAAAoE,YAAY,CAAG,QAAf,CAAAA,YAAYA,CAAA,CAAS,CACvB1B,cAAc,CAAC,KAAK,CAAC,CACrB,GAAIR,SAAS,GAAK,OAAO,CAAE,CACvBW,iBAAiB,CAAC,KAAK,CAC3B,CAAC,IAAM,CACHG,mBAAmB,CAACV,eAAe,CACvC,CACJ,CAAC,CAED,GAAIJ,SAAS,GAAK,OAAO,CAAE,CACvB,mBACI9I,KAAA,CAAAE,SAAA,EAAAgD,QAAA,eACIpD,IAAA,CAACX,MAAM,EACH8L,OAAO,CAAC,SAAS,CACjBC,IAAI,CAAC,IAAI,CACTC,SAAS,CAAC,qHAAqH,CAC/HrH,KAAK,CAAC,uBAAuB,CAC7BsH,OAAO,CAAE,QAAT,CAAAA,OAAOA,CAAA,CAAQ,CACXxB,mBAAmB,CAACV,eAAe,CAAC,CACpCI,cAAc,CAAC,IAAI,CACvB,CAAE,CAAApG,QAAA,cAEFpD,IAAA,CAACV,QAAQ,EAAC+L,SAAS,CAAC,SAAS,CAAE,CAAC,CAC5B,CAAC,cAETrL,IAAA,CAACR,MAAM,EAAC+L,IAAI,CAAEhC,WAAY,CAACiC,YAAY,CAAEhC,cAAe,CAAApG,QAAA,cACpDlD,KAAA,CAACT,aAAa,EAAA2D,QAAA,eACVlD,KAAA,CAACN,YAAY,EAAAwD,QAAA,eACTpD,IAAA,CAACH,WAAW,EAAAuD,QAAA,CAAC,gBAAc,CAAa,CAAC,cACzCpD,IAAA,CAACN,iBAAiB,EAAA0D,QAAA,CAAC,8CAEnB,CAAmB,CAAC,EACV,CAAC,cAEflD,KAAA,QAAKmL,SAAS,CAAC,8BAA8B,CAAAjI,QAAA,eACzCpD,IAAA,SAAMqL,SAAS,CAAC,iDAAiD,CAAAjI,QAAA,CAAC,4BAA0B,CAAM,CAAC,cACnGpD,IAAA,WACI+C,KAAK,CAAEkC,MAAM,CAAC4E,gBAAgB,CAAE,CAChC4B,QAAQ,CAAE,QAAV,CAAAA,QAAQA,CAAGC,CAAC,CAAK,CACb,GAAM,CAAA1I,GAAG,CAAG0I,CAAC,CAACC,MAAM,CAAC5I,KAAK,CAC1B+G,mBAAmB,CAAC9G,GAAG,GAAK,KAAK,CAAG,KAAK,CAAG4I,MAAM,CAAC5I,GAAG,CAAqB,CAC/E,CAAE,CACFqI,SAAS,CAAC,kIAAkI,CAAAjI,QAAA,CAE3I8G,UAAU,CAAC/E,GAAG,CAAC,SAAC0G,GAAG,qBAChB7L,IAAA,WAAgC+C,KAAK,CAAEkC,MAAM,CAAC4G,GAAG,CAAC9I,KAAK,CAAE,CAAAK,QAAA,CACpDyI,GAAG,CAACvB,KAAK,EADDrF,MAAM,CAAC4G,GAAG,CAAC9I,KAAK,CAErB,CAAC,CACZ,CAAC,CACE,CAAC,EACR,CAAC,cAEN/C,IAAA,CAACL,YAAY,EAAC0L,SAAS,CAAC,YAAY,CAAAjI,QAAA,cAChClD,KAAA,QAAKmL,SAAS,CAAC,qCAAqC,CAAAjI,QAAA,eAChDpD,IAAA,CAACX,MAAM,EACHwG,IAAI,CAAC,QAAQ,CACbsF,OAAO,CAAC,SAAS,CACjBG,OAAO,CAAEJ,YAAa,CACtBY,QAAQ,CAAE9B,aAAc,CACxBqB,SAAS,CAAC,6FAA6F,CAAAjI,QAAA,CAC1G,QAED,CAAQ,CAAC,cACTpD,IAAA,CAACX,MAAM,EACHwG,IAAI,CAAC,QAAQ,CACbsF,OAAO,CAAC,SAAS,CACjBG,OAAO,CAAET,mBAAoB,CAC7BiB,QAAQ,CAAE9B,aAAc,CACxBqB,SAAS,CAAC,iFAAiF,CAAAjI,QAAA,CAE1F4G,aAAa,cAAGhK,IAAA,CAACT,OAAO,EAAC8L,SAAS,CAAC,sBAAsB,CAAE,CAAC,CAAG,UAAU,CACtE,CAAC,EACR,CAAC,CACI,CAAC,EACJ,CAAC,CACZ,CAAC,EACX,CAEV,CAEA,mBACInL,KAAA,CAAAE,SAAA,EAAAgD,QAAA,eACIpD,IAAA,CAACX,MAAM,EACH8L,OAAO,CAAC,SAAS,CACjBC,IAAI,CAAC,IAAI,CACTC,SAAS,CAAC,qHAAqH,CAC/HrH,KAAK,CAAC,gBAAgB,CACtBsH,OAAO,CAAE,QAAT,CAAAA,OAAOA,CAAA,QAAQ,CAAA9B,cAAc,CAAC,IAAI,CAAC,CAAC,CAAApG,QAAA,cAEpCpD,IAAA,CAACV,QAAQ,EAAC+L,SAAS,CAAC,SAAS,CAAE,CAAC,CAC5B,CAAC,cAETrL,IAAA,CAACR,MAAM,EAAC+L,IAAI,CAAEhC,WAAY,CAACiC,YAAY,CAAEhC,cAAe,CAAApG,QAAA,cACpDlD,KAAA,CAACT,aAAa,EAAA2D,QAAA,eACVlD,KAAA,CAACN,YAAY,EAAAwD,QAAA,eACTpD,IAAA,CAACH,WAAW,EAAAuD,QAAA,CAAC,gBAAc,CAAa,CAAC,cACzCpD,IAAA,CAACN,iBAAiB,EAAA0D,QAAA,CAAC,wDAEnB,CAAmB,CAAC,EACV,CAAC,cAEflD,KAAA,QAAKmL,SAAS,CAAC,gBAAgB,CAAAjI,QAAA,eAC3BpD,IAAA,CAACF,WAAW,EAACwK,KAAK,CAAC,KAAK,CAACyB,QAAQ,CAAErC,cAAc,GAAK,KAAM,CAAC4B,OAAO,CAAE,QAAT,CAAAA,OAAOA,CAAA,QAAQ,CAAA3B,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,cACxG3J,IAAA,CAACF,WAAW,EAACwK,KAAK,CAAC,KAAK,CAACyB,QAAQ,CAAErC,cAAc,GAAK,KAAM,CAAC4B,OAAO,CAAE,QAAT,CAAAA,OAAOA,CAAA,QAAQ,CAAA3B,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CACvGT,aAAa,eACVlJ,IAAA,CAACF,WAAW,EAACwK,KAAK,CAAC,KAAK,CAACyB,QAAQ,CAAErC,cAAc,GAAK,KAAM,CAAC4B,OAAO,CAAE,QAAT,CAAAA,OAAOA,CAAA,QAAQ,CAAA3B,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAE,CAC1G,EACA,CAAC,cAEN3J,IAAA,CAACL,YAAY,EAAC0L,SAAS,CAAC,YAAY,CAAAjI,QAAA,cAChClD,KAAA,QAAKmL,SAAS,CAAC,qCAAqC,CAAAjI,QAAA,eAChDpD,IAAA,CAACX,MAAM,EACHwG,IAAI,CAAC,QAAQ,CACbsF,OAAO,CAAC,SAAS,CACjBG,OAAO,CAAEJ,YAAa,CACtBY,QAAQ,CAAE9B,aAAc,CACxBqB,SAAS,CAAC,6FAA6F,CAAAjI,QAAA,CAC1G,QAED,CAAQ,CAAC,cACTpD,IAAA,CAACX,MAAM,EACHwG,IAAI,CAAC,QAAQ,CACbsF,OAAO,CAAC,SAAS,CACjBG,OAAO,CAAEf,mBAAoB,CAC7BuB,QAAQ,CAAE9B,aAAc,CACxBqB,SAAS,CAAC,iFAAiF,CAAAjI,QAAA,CAE1F4G,aAAa,cAAGhK,IAAA,CAACT,OAAO,EAAC8L,SAAS,CAAC,sBAAsB,CAAE,CAAC,CAAG,UAAU,CACtE,CAAC,EACR,CAAC,CACI,CAAC,EACJ,CAAC,CACZ,CAAC,EACX,CAEV","ignoreList":[]}
1
+ {"version":3,"file":"download-data-button.js","names":["useState","Button","Download","Loader2","Dialog","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogTitle","RadioOption","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","getLegendItems","container","legendItems","legendWrapper","querySelector","querySelectorAll","forEach","item","_item$textContent","text","textContent","trim","color","colorElements","_i","_Array$from","Array","from","length","elem","computedStyle","window","getComputedStyle","computedFill","fill","computedStroke","stroke","getAttribute","some","existing","push","SVG_INLINE_PROPS","inlineSvgStyles","original","clone","computed","style","_iterator","_createForOfIteratorHelperLoose","_step","done","prop","value","val","getPropertyValue","setAttribute","i","children","escapeXml","str","replace","getSvgDimensions","svgElement","width","parseFloat","scrollWidth","height","scrollHeight","buildCompositeSvg","title","subtitle","inlineStyles","cloned","cloneNode","_getSvgDimensions","chartWidth","chartHeight","padding","titleHeight","subtitleHeight","legendHeight","headerHeight","totalWidth","totalHeight","serializer","XMLSerializer","String","serializeToString","map","index","x","join","downloadChartSVG","containerRef","current","compositeSvg","blob","Blob","type","url","URL","createObjectURL","link","document","createElement","href","download","click","revokeObjectURL","downloadChartPNG","_x","_x2","_x3","_downloadChartPNG","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee3","_getSvgDimensions2","wrap","_callee3$","_context3","prev","next","abrupt","Promise","resolve","reject","img","Image","onload","scale","canvas","ctx","getContext","fillStyle","fillRect","drawImage","toDataURL","onerror","Error","src","stop","ROW_LIMITS","DownloadButton","_ref","_ref$component","component","onDownload","onDownloadCSV","dataCount","defaultRowCount","undefined","_useState","isModalOpen","setIsModalOpen","_useState2","selectedFormat","setSelectedFormat","_useState3","selectedRowCount","setSelectedRowCount","_useState4","isDownloading","setIsDownloading","rowOptions","concat","filter","limit","label","handleChartDownload","_ref2","_callee","_callee$","_context","finish","handleTableDownload","_ref3","_callee2","_callee2$","_context2","handleCancel","variant","size","className","onClick","open","onOpenChange","onChange","e","target","Number","opt","disabled","selected"],"sources":["../../../src/plugins/helpers/download-data-button.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { Button } from \"../../shadcn/components/ui/button\";\nimport { Download, Loader2 } from \"lucide-react\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"../../shadcn/components/ui/dialog\";\nimport { RadioOption } from \"../../shadcn/components/ui/styled-elements\";\n\ntype LegendItem = { text: string; color: string };\n\nfunction getLegendItems(container: Element): LegendItem[] {\n const legendItems: LegendItem[] = [];\n const legendWrapper = container.querySelector('[class*=\"recharts-legend-wrapper\"]');\n if (!legendWrapper) return legendItems;\n\n legendWrapper.querySelectorAll('[class*=\"recharts-legend-item\"]').forEach((item) => {\n const text = item.textContent?.trim();\n let color = '#666666';\n const colorElements = item.querySelectorAll('path, rect, circle, line');\n\n for (const elem of Array.from(colorElements)) {\n const computedStyle = window.getComputedStyle(elem);\n const computedFill = computedStyle.fill;\n const computedStroke = computedStyle.stroke;\n\n if (computedFill && computedFill !== 'none' && computedFill !== 'transparent' && computedFill !== 'rgb(0, 0, 0)') {\n color = computedFill;\n break;\n }\n if (computedStroke && computedStroke !== 'none' && computedStroke !== 'transparent' && computedStroke !== 'rgb(0, 0, 0)') {\n color = computedStroke;\n break;\n }\n\n const fill = elem.getAttribute('fill');\n const stroke = elem.getAttribute('stroke');\n\n if (fill && fill !== 'none' && fill !== 'transparent') {\n color = fill;\n break;\n }\n if (stroke && stroke !== 'none' && stroke !== 'transparent') {\n color = stroke;\n break;\n }\n }\n\n if (text && !legendItems.some((existing) => existing.text === text)) {\n legendItems.push({ text, color });\n }\n });\n\n return legendItems;\n}\n\nconst SVG_INLINE_PROPS = [\n 'fill', 'stroke', 'stroke-width', 'stroke-dasharray', 'stroke-linecap', 'stroke-linejoin',\n 'font-size', 'font-family', 'font-weight', 'font-style',\n 'text-anchor', 'dominant-baseline', 'alignment-baseline', 'opacity', 'visibility',\n];\n\nfunction inlineSvgStyles(original: Element, clone: Element) {\n const computed = window.getComputedStyle(original);\n let style = '';\n for (const prop of SVG_INLINE_PROPS) {\n const val = computed.getPropertyValue(prop);\n if (val) style += `${prop}:${val};`;\n }\n (clone as SVGElement).setAttribute('style', style);\n for (let i = 0; i < original.children.length; i++) {\n inlineSvgStyles(original.children[i], clone.children[i]);\n }\n}\n\nfunction escapeXml(str: string): string {\n return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n\nfunction getSvgDimensions(svgElement: SVGSVGElement): { width: number; height: number } {\n const width = parseFloat(svgElement.getAttribute('width') || '0') || svgElement.scrollWidth || 800;\n const height = parseFloat(svgElement.getAttribute('height') || '0') || svgElement.scrollHeight || 400;\n return { width, height };\n}\n\nfunction buildCompositeSvg(\n svgElement: SVGSVGElement,\n title: string,\n subtitle: string | undefined,\n legendItems: LegendItem[],\n inlineStyles: boolean,\n): string {\n const cloned = svgElement.cloneNode(true) as SVGSVGElement;\n if (inlineStyles) inlineSvgStyles(svgElement, cloned);\n\n const { width: chartWidth, height: chartHeight } = getSvgDimensions(svgElement);\n\n const padding = 20;\n const titleHeight = 28;\n const subtitleHeight = subtitle ? 36 : 0;\n const legendHeight = legendItems.length > 0 ? 30 : 0;\n const headerHeight = padding + titleHeight + subtitleHeight;\n const totalWidth = chartWidth + padding * 2;\n const totalHeight = chartHeight + headerHeight + legendHeight + padding;\n\n const serializer = new XMLSerializer();\n cloned.setAttribute('x', String(padding));\n cloned.setAttribute('y', String(headerHeight));\n cloned.setAttribute('overflow', 'visible');\n\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${totalWidth}\" height=\"${totalHeight}\">\n <rect width=\"${totalWidth}\" height=\"${totalHeight}\" fill=\"white\"/>\n <text x=\"${padding}\" y=\"${padding + 20}\" font-family=\"Arial,sans-serif\" font-size=\"18\" font-weight=\"600\" fill=\"#000000\">${escapeXml(title)}</text>\n ${subtitle ? `<text x=\"${padding}\" y=\"${padding + 44}\" font-family=\"Arial,sans-serif\" font-size=\"14\" fill=\"#666666\">${escapeXml(subtitle)}</text>` : ''}\n ${serializer.serializeToString(cloned)}\n ${legendItems.length > 0 ? `<g transform=\"translate(${padding}, ${totalHeight - 25})\">\n ${legendItems.map((item, index) => {\n const x = index * 200;\n return `<rect x=\"${x}\" y=\"0\" width=\"12\" height=\"12\" fill=\"${item.color}\"/>` +\n `<text x=\"${x + 18}\" y=\"10\" font-family=\"Arial,sans-serif\" font-size=\"12\" fill=\"#666666\">${escapeXml(item.text)}</text>`;\n }).join('')}\n </g>` : ''}\n </svg>`;\n}\n\nfunction downloadChartSVG(title: string, containerRef: any, subtitle?: string) {\n if (!containerRef.current) return;\n\n const svgElement = containerRef.current.querySelector('svg') as SVGSVGElement | null;\n if (!svgElement) return;\n\n const legendItems = getLegendItems(containerRef.current);\n const compositeSvg = buildCompositeSvg(svgElement, title, subtitle, legendItems, false);\n\n const blob = new Blob([compositeSvg], { type: 'image/svg+xml;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `${title.replace(/\\s+/g, '_')}.svg`;\n link.click();\n URL.revokeObjectURL(url);\n}\n\nasync function downloadChartPNG(title: string, containerRef: any, subtitle?: string): Promise<void> {\n if (!containerRef.current) return;\n\n const svgElement = containerRef.current.querySelector('svg') as SVGSVGElement | null;\n if (!svgElement) return;\n\n const legendItems = getLegendItems(containerRef.current);\n const compositeSvg = buildCompositeSvg(svgElement, title, subtitle, legendItems, true);\n\n const { width: chartWidth, height: chartHeight } = getSvgDimensions(svgElement);\n const padding = 20;\n const subtitleHeight = subtitle ? 36 : 0;\n const legendHeight = legendItems.length > 0 ? 30 : 0;\n const totalWidth = chartWidth + padding * 2;\n const totalHeight = chartHeight + padding + 28 + subtitleHeight + legendHeight + padding;\n\n return new Promise((resolve, reject) => {\n const img = new Image();\n const blob = new Blob([compositeSvg], { type: 'image/svg+xml;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n\n img.onload = () => {\n const scale = 2;\n const canvas = document.createElement('canvas');\n canvas.width = totalWidth * scale;\n canvas.height = totalHeight * scale;\n const ctx = canvas.getContext('2d')!;\n ctx.scale(scale, scale);\n ctx.fillStyle = 'white';\n ctx.fillRect(0, 0, totalWidth, totalHeight);\n ctx.drawImage(img, 0, 0, totalWidth, totalHeight);\n URL.revokeObjectURL(url);\n\n const link = document.createElement('a');\n link.download = `${title.replace(/\\s+/g, '_')}.png`;\n link.href = canvas.toDataURL('image/png');\n link.click();\n resolve();\n };\n\n img.onerror = () => { URL.revokeObjectURL(url); reject(new Error('SVG render failed')); };\n img.src = url;\n });\n}\n\nconst ROW_LIMITS = [100, 500, 1000] as const;\n\ntype DownloadButtonProps = {\n component: \"chart\" | \"table\";\n containerRef?: any;\n title: string;\n subtitle?: string;\n onDownload?: (limit: number) => Promise<void>;\n onDownloadCSV?: () => Promise<void>;\n dataCount?: number;\n};\n\nexport function DownloadButton({\n component = \"chart\",\n containerRef,\n title,\n subtitle,\n onDownload,\n onDownloadCSV,\n dataCount,\n}: DownloadButtonProps) {\n const defaultRowCount = dataCount !== undefined && dataCount < 100 ? \"all\" : 100;\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [selectedFormat, setSelectedFormat] = useState<\"svg\" | \"png\" | \"csv\">(\"svg\");\n const [selectedRowCount, setSelectedRowCount] = useState<100 | 500 | 1000 | \"all\">(defaultRowCount);\n const [isDownloading, setIsDownloading] = useState(false);\n\n const rowOptions = [\n ...ROW_LIMITS\n .filter((limit) => dataCount === undefined || dataCount > limit)\n .map((limit) => ({ value: limit as number, label: `${limit} rows` })),\n {\n value: \"all\" as const,\n label: dataCount !== undefined && dataCount <= 10000\n ? `All (${dataCount} rows)`\n : \"All (max 10,000 rows)\",\n },\n ];\n const handleChartDownload = async () => {\n if (selectedFormat === \"csv\") {\n setIsDownloading(true);\n try {\n await onDownloadCSV?.();\n } finally {\n setIsDownloading(false);\n }\n } else if (selectedFormat === \"png\") {\n setIsDownloading(true);\n try {\n await downloadChartPNG(title, containerRef, subtitle);\n } finally {\n setIsDownloading(false);\n }\n } else {\n downloadChartSVG(title, containerRef, subtitle);\n }\n setIsModalOpen(false);\n };\n\n const handleTableDownload = async () => {\n const limit = selectedRowCount === \"all\"\n ? (typeof dataCount === 'number' && dataCount < 10000 ? dataCount : 10000)\n : selectedRowCount;\n setIsDownloading(true);\n try {\n await onDownload?.(limit);\n } finally {\n setIsDownloading(false);\n }\n setIsModalOpen(false);\n };\n\n const handleCancel = () => {\n setIsModalOpen(false);\n if (component === \"chart\") {\n setSelectedFormat(\"svg\");\n } else {\n setSelectedRowCount(defaultRowCount);\n }\n };\n\n if (component === \"table\") {\n return (\n <>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 w-8 bg-white text-muted-foreground border-none hover:text-black transition-all flex items-center justify-center\"\n title=\"Download table as CSV\"\n onClick={() => {\n setSelectedRowCount(defaultRowCount);\n setIsModalOpen(true);\n }}\n >\n <Download className=\"h-3 w-3\" />\n </Button>\n\n <Dialog open={isModalOpen} onOpenChange={setIsModalOpen}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Download Table</DialogTitle>\n <DialogDescription>\n Max 10,000 rows can be downloaded at a time.\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"py-4 flex items-center gap-3\">\n <span className=\"text-sm text-muted-foreground whitespace-nowrap\">Number of rows to download</span>\n <select\n value={String(selectedRowCount)}\n onChange={(e) => {\n const val = e.target.value;\n setSelectedRowCount(val === \"all\" ? \"all\" : Number(val) as 100 | 500 | 1000);\n }}\n className=\"border border-gray-200 rounded-md px-3 py-2 text-sm bg-white focus:outline-none focus:ring-2 focus:ring-[#2A44D4] cursor-pointer\"\n >\n {rowOptions.map((opt) => (\n <option key={String(opt.value)} value={String(opt.value)}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n\n <DialogFooter className=\"mt-6 block\">\n <div className=\"flex items-center justify-end gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleCancel}\n disabled={isDownloading}\n className=\"bg-[#EAECFB] border border-[#2A44D4] text-[#263DBF] hover:bg-[#EAECFB] hover:text-[#263DBF]\"\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n variant=\"default\"\n onClick={handleTableDownload}\n disabled={isDownloading}\n className=\"bg-[#2A44D4] text-white hover:bg-[#2A44D4] hover:text-white disabled:opacity-70\"\n >\n {isDownloading ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : 'Download'}\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </>\n );\n }\n\n return (\n <>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 w-8 bg-white text-muted-foreground border-none hover:text-black transition-all flex items-center justify-center\"\n title=\"Download chart\"\n onClick={() => setIsModalOpen(true)}\n >\n <Download className=\"h-3 w-3\" />\n </Button>\n\n <Dialog open={isModalOpen} onOpenChange={setIsModalOpen}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Download Chart</DialogTitle>\n <DialogDescription>\n Choose the format you'd like to download the chart in.\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-3 py-4\">\n <RadioOption label=\"SVG\" selected={selectedFormat === \"svg\"} onClick={() => setSelectedFormat(\"svg\")} />\n <RadioOption label=\"PNG\" selected={selectedFormat === \"png\"} onClick={() => setSelectedFormat(\"png\")} />\n {onDownloadCSV && (\n <RadioOption label=\"CSV\" selected={selectedFormat === \"csv\"} onClick={() => setSelectedFormat(\"csv\")} />\n )}\n </div>\n\n <DialogFooter className=\"mt-6 block\">\n <div className=\"flex items-center justify-end gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleCancel}\n disabled={isDownloading}\n className=\"bg-[#EAECFB] border border-[#2A44D4] text-[#263DBF] hover:bg-[#EAECFB] hover:text-[#263DBF]\"\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n variant=\"default\"\n onClick={handleChartDownload}\n disabled={isDownloading}\n className=\"bg-[#2A44D4] text-white hover:bg-[#2A44D4] hover:text-white disabled:opacity-70\"\n >\n {isDownloading ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : 'Download'}\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </>\n );\n}\n"],"mappings":"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","ignoreList":[]}