@bygd/nc-report-ui 0.1.37 → 0.1.38

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 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@mui/material/Paper"),a=require("@mui/material/Box"),r=require("@mui/material/CircularProgress"),n=require("react-google-charts"),l=require("numeral"),o=require("axios"),i=require("@mui/material/Typography"),s=require("@mui/material/Link"),d=require("@mui/icons-material/OpenInNew"),c=require("nunjucks"),u=require("@mui/material/FormControl"),f=require("@mui/material/Select"),m=require("@mui/material/MenuItem"),p=require("react-intersection-observer"),g=require("@mui/material"),h=require("@mui/icons-material/CheckBoxOutlineBlank"),y=require("@mui/icons-material/CheckBox"),x=require("eventemitter3"),b=require("@mui/material/Grid"),v=require("@mui/material/IconButton"),E=require("@mui/material/Tooltip"),w=require("@mui/material/Container"),C=require("@mui/icons-material/InsertChartOutlined"),S=require("@mui/icons-material/FormatListBulleted"),k=require("@mui/icons-material/TableChartOutlined"),T=require("@mui/icons-material/BarChart"),R=require("@mui/icons-material/PieChartOutline"),D=require("@mui/icons-material/DonutLarge"),B=require("@mui/icons-material/ShowChart"),P=require("@mui/icons-material/StackedLineChart"),z=require("@mui/icons-material/MapOutlined"),M=require("@mui/icons-material/PinOutlined"),I=require("@mui/icons-material/QueryStats"),F=require("@mui/x-data-grid"),q=require("@mui/icons-material/Add"),$=require("@mui/icons-material/Edit"),O=require("@mui/icons-material/ContentCopy"),A=require("@mui/icons-material/Delete"),j=require("@mui/icons-material/PlayArrow"),N=require("@mui/icons-material/Restore"),_=require("@mui/icons-material/ArrowBack"),W=require("@mui/icons-material/Save"),K=require("@mui/icons-material/Download"),U=require("@dnd-kit/core"),L=require("@dnd-kit/sortable"),G=require("@dnd-kit/utilities"),Y=require("@mui/icons-material/DragIndicator"),H=require("@mui/icons-material/ArrowUpward"),V=require("@mui/icons-material/ArrowDownward"),J=require("@mui/icons-material/Sort"),Q=require("@mui/icons-material/Check"),Z=require("@mui/icons-material/Close"),X=require("@mui/icons-material/RestartAlt"),ee=require("@mui/icons-material/PlaylistAdd"),te=require("@mui/icons-material/Storage"),ae=require("@mui/icons-material/TrendingUp"),re=require("@mui/icons-material/Bolt"),ne=require("@mui/icons-material/FilterAlt"),le=require("@mui/icons-material/InfoOutlined"),oe=require("@mui/x-date-pickers/LocalizationProvider"),ie=require("@mui/x-date-pickers/DatePicker"),se=require("@mui/x-date-pickers/AdapterDayjs"),de=require("dayjs"),ce=require("@mui/material/styles");function ue(e){return e&&e.__esModule?e:{default:e}}function fe(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(a){if("default"!==a){var r=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(t,a,r.get?r:{enumerable:!0,get:function(){return e[a]}})}}),t.default=e,Object.freeze(t)}var me=fe(e),pe=ue(t),ge=ue(a),he=ue(r),ye=ue(l),xe=ue(o),be=ue(i),ve=ue(s),Ee=ue(d),we=ue(c),Ce=ue(u),Se=ue(f),ke=ue(m),Te=ue(h),Re=ue(y),De=ue(x),Be=ue(b),Pe=ue(v),ze=ue(E),Me=ue(w),Ie=ue(C),Fe=ue(S),qe=ue(k),$e=ue(T),Oe=ue(R),Ae=ue(D),je=ue(B),Ne=ue(P),_e=ue(z),We=ue(M),Ke=ue(I),Ue=ue(q),Le=ue($),Ge=ue(O),Ye=ue(A),He=ue(j),Ve=ue(N),Je=ue(_),Qe=ue(W),Ze=ue(K),Xe=ue(Y),et=ue(H),tt=ue(V),at=ue(J),rt=ue(Q),nt=ue(Z),lt=ue(X),ot=ue(ee),it=ue(te),st=ue(ae),dt=ue(re),ct=ue(ne),ut=ue(le),ft=ue(de);function mt(){return mt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var r in a)({}).hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e},mt.apply(null,arguments)}function pt(e){return me.default.createElement(ge.default,mt({},e,{sx:{width:"100%","& > * + *":{mt:2},...e?.sx||{}}}),me.default.createElement(he.default,{style:{color:"rgb(70, 134, 128)"},size:25}))}function gt(e,t,a="array"){const r=e.columns,n=[...t.doc.metrics,...t.doc.dimensions].reduce((e,t)=>(e[t.name]=t,e),{});return e=>{const t="array"===a?[]:{};return r.reduce((t,r)=>{const l=e[r.name],o=n[r.name];let i=l;return i=o?"timestamp"===o.type?new Date(l):o.format?o.format&&o.prefix?{v:+l,f:o.prefix+" "+ye.default(l).format(o.format)}:o.format?{v:+l,f:ye.default(l).format(o.format)}:l:l:l,"array"===a?t.push(i):t[r.name]=i?.f||i,t},t)}}const ht="https://report-api.netcapital.pro",yt=xe.default.create({baseURL:ht,headers:{"Content-Type":"application/json"}}),xt={},bt=()=>{const e=Object.keys(xt);return e.length>0?e[0]:null},vt={setBaseUrl(e){yt.defaults.baseURL=e||ht},setToken(e){e&&(yt.defaults.headers.common.Authorization=`Bearer ${e}`)},loadDashboardMeta:async({dashboardId:e})=>{const{data:t}=await yt.get(`/dashboard-meta/${e}`);return xt[e]={dashboards:t.dashboards||{},charts:t.charts||{},reports:t.reports||{},reportMetadata:t.reportMetadata||{},dateRanges:t.dateRanges||[]},console.log({dashboardMeta:xt[e]}),xt[e]},getDashboard:async({id:e,dashboardId:t})=>{const a=t||bt();if(a&&xt[a]?.dashboards?.[e])return xt[a].dashboards[e];const{data:r}=await yt.get(`/entity/dashboards/${e}`);return r},getChart:async({id:e,dashboardId:t})=>{const a=t||bt();if(a&&xt[a]?.charts?.[e])return xt[a].charts[e];const{data:r}=await yt.get(`/entity/charts/${e}`);return r},getReport:async({source:e,dashboardId:t})=>{const{id:a,type:r}=e,n=t||bt();if(n&&xt[n]?.reports?.[a])return xt[n].reports[a];const l="dynamic"===r?`/report-build/${a}/report`:`/entity/reports/${a}`,{data:o}=await yt.get(l);return o},getProviders:async()=>{const{data:e}=await yt.get("/entity/providers");return e},getReportSchema:async({source:e,dashboardId:t,query:a={}})=>{const{id:r,type:n}=e,l=t||bt();if(l&&xt[l]?.reportMetadata?.[r])return xt[l].reportMetadata[r];const o="dynamic"===n?`/report-build/${r}/schema`:`/reports/${r}/metadata`,{data:i}=await yt.post(o,a);return i},runReport:async({source:e,query:t={}})=>{const{id:a,type:r}=e,n="dynamic"===r?`/report-build/${a}/run`:`/reports/${a}/run`,{data:l}=await yt.post(n,t);return l},runAdHocReport:async({report:e})=>{const{data:t}=await yt.post("/report-build/run",e);return t},downloadAdHocReport:async({report:e,filename:t})=>{const a=await yt.post("/report-build/run?download=csv",e,{responseType:"blob"}),r=window.URL.createObjectURL(new Blob([a.data])),n=document.createElement("a");n.href=r;let l=t||"report.csv";if(!t){const e=a.headers["content-disposition"];if(e){const t=e.match(/filename="?(.+)"?/i);t&&t[1]&&(l=t[1])}}n.setAttribute("download",l),document.body.appendChild(n),n.click(),n.remove(),window.URL.revokeObjectURL(r)},getDateRanges:async({dashboardId:e}={})=>{const t=e||bt();if(t&&xt[t]?.dateRanges)return xt[t].dateRanges;const{data:a}=await yt.get("/globals/date-ranges");return a},getReportDefinitions:async()=>{const{data:e}=await yt.get("/report-definitions");return e},getReportDefinition:async({id:e})=>{const{data:t}=await yt.get(`/report-definitions/${e}`);return t},createReportDefinition:async({reportDefinition:e})=>{const{data:t}=await yt.post("/report-definitions",e);return t},updateReportDefinition:async({id:e,reportDefinition:t})=>{const{data:a}=await yt.put(`/report-definitions/${e}`,t);return a},deleteReportDefinition:async({id:e})=>{const{data:t}=await yt.delete(`/report-definitions/${e}`);return t}};!function(e,t){void 0===t&&(t={});var a=t.insertAt;if("undefined"!=typeof document){var r=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css","top"===a&&r.firstChild?r.insertBefore(n,r.firstChild):r.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}}("/* Google Charts Table styling — class names here are referenced from\n * GoogleChart.js via the `cssClassNames` option and must stay in sync. */\n\n.ncGcHeaderRow {\n font-size: 13px;\n}\n\n.ncGcHeaderCell {\n background-color: #ffffff !important;\n padding: 12px 16px !important;\n border-bottom: 1px solid #e5e7eb !important;\n border-right: none !important;\n font-weight: 600 !important;\n color: #6b7280 !important;\n text-align: left !important;\n white-space: nowrap;\n}\n\n.ncGcTableRow,\n.ncGcOddTableRow {\n font-size: 14px;\n background-color: #ffffff;\n}\n\n.ncGcTableRow a,\n.ncGcOddTableRow a {\n color: #468682;\n text-decoration: underline;\n}\n\n.ncGcTableRow a:hover,\n.ncGcOddTableRow a:hover {\n color: #305f5c;\n}\n\n.ncGcHoverTableRow {\n background-color: #f9fafb !important;\n}\n\n.ncGcTableCell {\n padding: 12px 16px !important;\n border-bottom: 1px solid #f1f2f4 !important;\n border-right: none !important;\n color: #1f2937;\n}\n");const Et={headerRow:"ncGcHeaderRow",headerCell:"ncGcHeaderCell",tableRow:"ncGcTableRow",oddTableRow:"ncGcOddTableRow",hoverTableRow:"ncGcHoverTableRow",tableCell:"ncGcTableCell"},wt={none:"YYYY-MM-dd",day:"MMM dd",week:"MMM dd",month:"YYYY MMM",year:"YYYY"};const Ct={GoogleChart:function({chart:t,source:a,view:r,report:l,schema:o,dashboard:i,query:s,params:d}){const[c,u]=me.default.useState([]),[f,m]=me.default.useState([]);e.useEffect(()=>{(async()=>{const e=await vt.getDateRanges();m(e)})()},[]);const p=e.useMemo(()=>{const e="YYYY-MM-dd",t=s?.date_range?.name,a=f.find(e=>e.name===t);if(!a)return e;return wt[a?.granularity]||e},[f,s]);me.default.useEffect(()=>{if(!(t&&r&&a&&l&&o))return;let e=[];e.push(function(e,t){const a=[...t.doc.metrics,...t.doc.dimensions];return e.columns.reduce((e,t)=>{const r=a.find(e=>e.name===t.name)||t;return e.push(r.title||r.name),e},[])}(r,o));const n=gt(r,o);a?.forEach(t=>{const a=n(t);e.push(a)}),a?.length?u(e):u()},[t,a,r,l,o]);const g=(r?.columns||[]).filter(e=>e.hidden).map(e=>e.name),h=(r?.columns||[]).map((e,t)=>g.includes(e.name)?-1:t).filter(e=>-1!==e),y=e=>e&&"object"==typeof e&&"v"in e?e.v:e,x={client_id:d?.client},b=c?.length?c.map((e,t)=>0===t?h.map(t=>e[t]):h.map(t=>{const a=r.columns[t],n=e[t];if(!a?.link)return n;const l=(o=a.link,i=e,o.replace(/\{\{([\w.]+)\}\}/g,(e,t)=>{if(t.startsWith("params.")){const e=t.slice(7);return encodeURIComponent(d?.[e]??"")}const a=(r?.columns||[]).findIndex(e=>e.name===t);return a>=0?encodeURIComponent(y(i[a])??""):t in x?encodeURIComponent(x[t]??""):d&&t in d?encodeURIComponent(d[t]??""):""}));var o,i;const s=(c=(e=>e&&"object"==typeof e&&"f"in e?e.f:e)(n),String(c??"").replace(/[&<>"']/g,e=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}[e])));var c;return{v:y(n),f:`<a href="${l}" target="blank">${s}</a>`}})):c,v=t?.doc?.chart?.options?.maxHeight,E=v?{maxHeight:v,overflow:"auto"}:{};return c?me.default.createElement("div",{style:E},me.default.createElement(n.Chart,mt({width:t?.doc.size?.width||"100%",chartType:t?.doc.chart?.type,data:b,options:(e=>{const a=["#468682","#ff686b","#6c757d","#FFD700","#073b4c"];if("Table"===t?.doc.chart?.type)return{...t?.doc.chart?.options,cssClassNames:Et,allowHtml:!0};if("AreaChart"===t?.doc.chart?.type){const r=t?.doc.chart?.options?.hAxis||{},n={...{ticks:e.slice(1).map(e=>e[0]),format:p},...r};return{...t?.doc.chart?.options,hAxis:n,focusTarget:"category",colors:a}}return{...t?.doc.chart?.options,colors:a}})(c)},t?.doc.chart?.props,{chartEvents:[{eventName:"select",callback:({chartWrapper:e})=>{const t=e.getChart().getSelection();if(!t.length)return;const{row:a}=t[0],n=c[a+1],l=(r?.columns||[]).reduce((e,t,a)=>{const r=n[a];return e[t.name]=r&&"object"==typeof r&&"v"in r?r.v:r,e},{});console.log("clicked row:",a,l)}}]}))):me.default.createElement("div",null)},LabelChart:function({chart:e,source:t,view:a,report:r,schema:n,onViewChange:l,onNavigate:o}){const[i,s]=me.default.useState([]),[d,c]=me.default.useState(),[u,f]=me.default.useState();me.default.useEffect(()=>{if(!(e&&a&&t&&r&&n))return;let l=[];const o=gt(a,n);t.forEach(e=>l.push(o(e))),s(l);const i=e?.doc?.chart?.options||{},d=i?.index||0;if(l.length>0&&c(l[0][d]),i.subText?.format){we.default.configure({autoescape:!1});const e=gt(a,n,"object")(t[0]),r=we.default.renderString(i.subText?.format,e);f(r)}},[e,t,a,r,n]);const m=e?.doc?.chart?.options?.nextView,p="number"==typeof m&&"function"==typeof l,g=e?.doc?.chart?.options?.onNavigate,h=!!g?.url&&"function"==typeof o;return me.default.createElement("div",{style:{display:"flex",justifyContent:"center",alignContent:"center",height:"100%",flexDirection:"column"}},me.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:8}},me.default.createElement(be.default,{variant:"h6"},d?.f||d),p&&me.default.createElement(ve.default,{component:"button",variant:"h6",onClick:()=>l(m),style:{lineHeight:1,fontSize:"2rem"}},"»"),h&&me.default.createElement(ve.default,{component:"button",onClick:()=>{let e;if(null!=g?.ctx)if("string"==typeof g.ctx)try{e=JSON.parse(g.ctx)}catch(t){console.warn("LabelChart onNavigate: failed to parse ctx as JSON",t),e=g.ctx}else e=g.ctx;o(g.url,e)},style:{lineHeight:1,display:"inline-flex",alignItems:"center"},"aria-label":"navigate"},me.default.createElement(Ee.default,{fontSize:"small"}))),me.default.createElement(be.default,{variant:"caption"},u))}};function St(e,t){return void 0!==Ct[e]?me.default.createElement(Ct[e],t):me.default.createElement(pt,t)}const kt=me.createElement(Te.default,{fontSize:"small"}),Tt=me.createElement(Re.default,{fontSize:"small"});function Rt({items:t,selectedKeys:a,defaultSelectedKeys:r,onChange:n,inputValue:l,defaultInputValue:o,onInputChange:i,onInputChangeImmediate:s,debounceMs:d=300,label:c,placeholder:u,loading:f,disabled:m,size:p="small",error:h,helperText:y,limitTags:x=3,disableClearable:b,id:v,textFieldProps:E}){const w=e.useMemo(()=>Array.isArray(t)?t:[],[t]),C=Array.isArray(a),[S,k]=e.useState(Array.isArray(r)?r:[]),T=C?a:S,R=e.useMemo(()=>{const e=new Map;for(const t of w)e.set(t&&t.key,t);return e},[w]),D=e.useMemo(()=>(Array.isArray(T)?T:[]).map(e=>R.get(e)).filter(Boolean),[T,R]),B="string"==typeof l,[P,z]=e.useState("string"==typeof o?o:""),M=B?l:P,I=function(t,a=300){const r=e.useRef(t),n=e.useRef(null);return r.current=t,e.useEffect(()=>()=>{n.current&&window.clearTimeout(n.current)},[]),me.useCallback((...e)=>{r.current&&(n.current&&window.clearTimeout(n.current),n.current=window.setTimeout(()=>{r.current&&r.current(...e)},a))},[a])}(e=>{i&&i(e)},d),F=D;return me.createElement(g.FormControl,{fullWidth:!0,error:h,disabled:m},me.createElement(g.Autocomplete,{openOnFocus:!0,forcePopupIcon:!0,id:v,multiple:!0,disableCloseOnSelect:!0,options:w,value:F,inputValue:M,getOptionLabel:e=>e&&"object"==typeof e?e.value??"":"",isOptionEqualToValue:(e,t)=>e&&t&&e.key===t.key,loading:f,limitTags:x,disableClearable:b,onChange:(e,t)=>{const a=Array.isArray(t)?t.map(e=>e&&e.key):[];C||k(a),n&&n(a,Array.isArray(t)?t:[])},onInputChange:(e,t,a)=>{if(B||z(t??""),"input"===a||"clear"===a){s&&s("clear"===a?"":t??"")}"input"===a?I(t??""):"clear"===a&&I("")},renderOption:(e,t,{selected:a})=>me.createElement("li",mt({},e,{key:t&&t.key||Math.random().toString(36)}),me.createElement(g.Checkbox,{icon:kt,checkedIcon:Tt,style:{marginRight:8},checked:!!a}),t&&t.value),renderTags:(e,t)=>(Array.isArray(e)?e:[]).map((e,a)=>me.createElement(g.Chip,mt({},t({index:a}),{key:e&&e.key||a,label:e&&e.value||""}))),renderInput:e=>me.createElement(g.TextField,mt({},e,{label:c,placeholder:u,InputProps:{...e.InputProps,endAdornment:me.createElement(me.Fragment,null,f?me.createElement(g.CircularProgress,{size:18}):null,e.InputProps.endAdornment)},size:p},E))}),y?me.createElement(g.FormHelperText,null,y):null)}const Dt=({filter:t,channel:a,query:r})=>{const n=r?.filter?.and?.find(e=>!!e[t?.filter])?.[t?.filter]||[],[l,o]=e.useState([]),[i,s]=e.useState(n),[d,c]=e.useState(!1),[u,f]=e.useState("");return e.useEffect(()=>{(async()=>{c(!0);const e=await async function(e,t){return t?.source?(await vt.runReport({source:{id:t.source},query:{parameters:e?.parameters||{}}})).map(e=>({key:e[t.field],value:e[t.field]})):[]}(r,t);o(e),c(!1)})()},[u]),me.default.createElement("div",{style:{display:"flex"}},me.default.createElement("div",{style:{maxWidth:640,minWidth:200}},me.default.createElement(Rt,{id:t?.title,label:t?.title,placeholder:"Type to search…",items:l,selectedKeys:i,onChange:(e,r)=>{s(e),a.emit("filterChanged",t,{[t.filter]:e})},onInputChange:e=>{f(e)},loading:d,debounceMs:300,helperText:i.length?`${i.length} selected`:""})))},Bt=e=>e?.replace(/([a-z])([A-Z])/g,"$1 $2")?.replace(/_/g," ")?.replace(/-/g," ").replace(/\b\w/g,e=>e.toUpperCase());function Pt({items:e,value:t,onChange:a,sx:r={width:"100%"},disabled:n=!1,label:l}){const o=e.some(e=>e.key===t)?t:"";return me.default.createElement(ge.default,{sx:r},me.default.createElement(Ce.default,{fullWidth:!0,size:"small"},me.default.createElement(Se.default,{value:o,onChange:a,disabled:n,displayEmpty:!0,MenuProps:{style:{maxHeight:300}},sx:{height:"40px",borderRadius:"8px",fontFamily:"system-ui",backgroundColor:"white","& .MuiSelect-select":{display:"flex",alignItems:"center",padding:"8px 12px"},"& fieldset":{borderColor:"rgba(0,0,0,0.23)"},"&:hover fieldset":{borderColor:"rgb(70, 134, 128) !important"},"&.Mui-focused fieldset":{borderColor:"rgb(70, 134, 128) !important"}}},me.default.createElement(ke.default,{value:"",disabled:!0,sx:{color:"rgba(37, 37, 37, 0.58)"}},Bt(l)),e.map(e=>{const{key:t,value:a,disabled:r,icon:n}=e;return me.default.createElement(ke.default,{key:t,value:t,disabled:r,sx:{fontFamily:"system-ui",minHeight:"36px",display:"flex",alignItems:"center",gap:"6px"}},n&&me.default.createElement(ge.default,{component:"span",sx:{display:"inline-flex",alignItems:"center"}},n),Bt(a))}))))}const zt=({filter:t,channel:a,query:r})=>{const[n,l]=e.useState([]),[o,i]=e.useState("");return e.useEffect(()=>{i(r?.date_range?.name)},[r]),e.useEffect(()=>{(async()=>{const e=(await vt.getDateRanges()).filter(e=>!(t.allowedOptions.length>0)||t.allowedOptions.some(t=>t===e.name)).map(e=>({key:e.name,value:e.title}));l(e)})()},[]),me.default.createElement("div",{style:{minWidth:"200px",maxWidth:"640px"}},me.default.createElement(Pt,{items:n,value:o,label:t?.title,onChange:(e,r)=>{const n=e.target.value;i(n),a.emit("filterChanged",t,{date_range:{name:n}})}}))},Mt=({filters:e=[],channel:t,query:a})=>me.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px"}},e.map(e=>"multi-select"===e.type?me.default.createElement(Dt,{key:e.title,channel:t,filter:e,query:a}):"date-range"===e.type?me.default.createElement(zt,{key:e.title,channel:t,filter:e,query:a}):null));const It=e.createContext(void 0);var Ft=({id:t,cache:a,dashboard:r,channel:n,...l})=>{const[o,i]=me.default.useState(),[s,d]=me.default.useState(),[c,u]=me.default.useState(),[f,m]=me.default.useState(),[g,h]=me.default.useState(St()),[y,x]=me.default.useState(),[b,v]=me.default.useState(0),[E,w]=me.default.useState(!1),[C,S]=me.default.useState(),[k,T]=me.default.useState(!1),R=me.default.useRef({value:l?.filter}),[D,B]=me.default.useState({});e.useEffect(()=>{console.log("CHART",{id:t})},[t]);const P=e.useContext(It);if(P&&"chart"===P.mode&&P.chart&&P.chart.length>0){const e=P.chart.split(",").some(e=>e===t);if(!e)return null}const{ref:z,inView:M,entry:I}=p.useInView({threshold:.1,delay:1e3}),F=(e=>me.default.useRef(e||new De.default).current)(n);!function(e){const t=me.default.useRef({});me.default.useEffect(()=>{if(!e)return;const a=function(a,r){const n={...t.current,...r};t.current=n,e.emit("mergedFilterChanged",{value:n})};return e.on("filterChanged",a),()=>{e.off("filterChanged",a)}},[e])}(F);const q=me.default.useCallback(e=>{const t=e.target.value;v(t),x(o.doc.view[t])},[o]);me.default.useEffect(()=>{t&&(async()=>{const e=t,r=a?.[e]||await vt.getChart({id:e}),n=r.doc.source?.id,o=r?.doc?.source||{},s=n?a?.[n]||await vt.getReport({source:o}):void 0,c=a?.[`schema_${n}`]||l?.schema||await vt.getReportSchema({source:o}),f=r.doc?.view?.[0];v(0),d(s),i(r),x(f),u(c),T(!0)})().catch(e=>{console.error(e.message)})},[t]),me.default.useEffect(()=>{o&&f&&(!o?.doc?.source?.id||s)&&c&&(async()=>{h(St(o.doc.chart?.component,{view:y,source:f,chart:o,report:s,schema:c,dashboard:r,query:D,params:l.params,onViewChange:l.onViewChange,onNavigate:l.onNavigate}))})().catch(e=>{console.error(e.message)})},[o,f,y,s,c]);const $=e=>{const t=s?.doc.query.filter||{},a=e?.value?.date_range;let r=a||s?.doc.query.date_range;const n=o?.doc?.filters?.find(e=>"date-range"===e.type);n&&!r&&(r={name:n.default,field:n.filter});const i={and:[...t.and||[],...Object.entries(l?.filter||{}).map(([e,t])=>({[e]:t})),...Object.entries(e?.value||{}).map(([e,t])=>({[e]:t})).filter(e=>!e.date_range)]};if(T(!1),S(),w(!0),"context"===o?.doc?.source?.type)return m({filter:i}),void w(!1);r&&!r.field&&(r.field=o?.doc?.filters?.find(e=>"date-range"===e.type)?.filter);const d={filter:i,date_range:r,parameters:l?.params};B(d),vt.runReport({source:o.doc.source,query:d}).then(e=>{m(o.doc.source.reverse?e.reverse():e)}).catch(e=>{m([])}).finally(()=>{w(!1)})},O=e=>{R.current=e,M?$(e):(S(e),T(!0))};return me.default.useEffect(()=>(F?.on("mergedFilterChanged",O),()=>{F?.off("mergedFilterChanged",O)}),[F,s,o,M]),me.default.useEffect(()=>{M&&k&&o&&$(C)},[M,k,o]),me.default.useEffect(()=>{T(!0)},[l.params]),me.default.createElement(pe.default,{ref:z,elevation:0,style:{borderRadius:12,padding:20,border:"1px solid #e5e5e5",background:"#fff",display:"flex",flexDirection:"column",gap:"12px",height:"100%"}},(o||l?.headerActions)&&me.default.createElement("div",{style:{display:"flex",alignItems:"center",lineHeight:0}},o&&me.default.createElement(be.default,{variant:"subtitle2",style:{fontWeight:600,color:"#252525"}},l?.title||o.doc.name," "),l?.headerActions&&me.default.createElement("div",{style:{marginLeft:"auto",lineHeight:"normal"}},l.headerActions)),E?me.default.createElement(pt,{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%",width:"100%"}}):me.default.createElement(me.default.Fragment,null,me.default.createElement("div",{style:{display:"flex"}},me.default.createElement("div",{style:{flexGrow:1}}),me.default.createElement("div",null,o?.doc?.view?.length>1&&me.default.createElement(Ce.default,{variant:"standard"},me.default.createElement(Se.default,{variant:"standard",labelId:"date-range-select-label",id:"date-range-select",value:b,onChange:q,style:{fontSize:"12px"},disableUnderline:!0},o.doc.view.map((e,t)=>me.default.createElement(ke.default,{key:t,value:t},e.title)))))),me.default.createElement("div",{style:{position:"relative",flexGrow:r?void 0:1,display:"flex",flexDirection:"column"}},me.default.createElement(Mt,{filters:o?.doc?.filters,channel:F,query:D}),g)))};const qt=e.createContext(void 0),$t=({defaultParameters:t={},defaultApi:a={},children:r})=>{const n={base_currency:"EUR",...t},[l,o]=e.useState(n),[i,s]=e.useState(a);e.useEffect(()=>{const e={base_currency:"EUR",...t};o(e)},[t]),e.useEffect(()=>{s(a)},[a]);const d={parameters:l,setParameters:e=>{const t={base_currency:"EUR",...e};o(t)},api:i,setApi:s,setReportingContext:({parameters:e,api:t})=>{if(void 0!==e){const t={base_currency:"EUR",...e};o(t)}void 0!==t&&s(t)}};return me.default.createElement(qt.Provider,{value:d},r)},Ot=()=>e.useContext(qt),At={count:We.default,list:Fe.default,table:qe.default,bar:$e.default,pie:Oe.default,donut:Ae.default,line:je.default,area:Ne.default,map:_e.default,stats:Ke.default};function jt({column:e,md:t,api:a,cache:r,dashboard:n,schema:l,params:o,onNavigate:i}){const s=Array.isArray(e.views)?e.views:null,[d,c]=me.default.useState(0);if(s&&s.length>0){const u=Math.min(d,s.length-1),f=s[u],m=me.default.createElement(ge.default,{display:"flex"},s.map((e,t)=>{const a=(e=>At[e]||Ie.default)(e.icon),r=t===u;return me.default.createElement(ze.default,{key:e.id||t,title:e.name||e.id||""},me.default.createElement(Pe.default,{size:"small",onClick:()=>c(t),"aria-label":e.name||e.id,"aria-pressed":r,style:{color:r?"#468682":"#9ca3af"}},me.default.createElement(a,{fontSize:"small"})))}));return me.default.createElement(Be.default,{size:{xs:12,md:t}},me.default.createElement(Ft,{api:a,cache:r,id:f.id,dashboard:n,schema:l,title:e.name||f.title,filter:f.filter,params:o,headerActions:m,onViewChange:e=>{"number"==typeof e&&e>=0&&e<s.length&&c(e)},onNavigate:i}))}return me.default.createElement(Be.default,{size:{xs:12,md:t}},me.default.createElement(Ft,{api:a,cache:r,id:e.id,dashboard:n,schema:l,title:e.title,filter:e.filter,params:o,onNavigate:i}))}const Nt=e.createContext(),_t=({children:t})=>{const[a,r]=e.useState({open:!1,message:"",severity:"info",duration:6e3}),n=(e,t="info",a=6e3)=>{r({open:!0,message:e,severity:t,duration:a})},l=(e,t)=>{"clickaway"!==t&&r(e=>({...e,open:!1}))},o={success:(e,t)=>n(e,"success",t),error:(e,t)=>n(e,"error",t),warning:(e,t)=>n(e,"warning",t),info:(e,t)=>n(e,"info",t)};return me.default.createElement(Nt.Provider,{value:o},t,me.default.createElement(g.Snackbar,{open:a.open,autoHideDuration:a.duration,onClose:l,anchorOrigin:{vertical:"top",horizontal:"right"}},me.default.createElement(g.Alert,{onClose:l,severity:a.severity,variant:"filled",sx:{width:"100%"}},a.message)))},Wt=()=>{const t=e.useContext(Nt);if(!t)throw new Error("useNotify must be used within a NotifyProvider");return t},Kt=({open:e,title:t="Confirm Action",message:a,onConfirm:r,onCancel:n,confirmText:l="Confirm",cancelText:o="Cancel",confirmColor:i="error"})=>me.default.createElement(g.Dialog,{open:e,onClose:n,"aria-labelledby":"confirm-dialog-title","aria-describedby":"confirm-dialog-description"},me.default.createElement(g.DialogTitle,{id:"confirm-dialog-title"},t),me.default.createElement(g.DialogContent,null,me.default.createElement(g.DialogContentText,{id:"confirm-dialog-description"},a)),me.default.createElement(g.DialogActions,null,me.default.createElement(g.Button,{onClick:n,variant:"outlined"},o),me.default.createElement(g.Button,{onClick:r,variant:"contained",color:i,autoFocus:!0},l))),Ut=({onSelectReport:t,onAddNew:a,onCloneReport:r,onRunReport:n,refreshTrigger:l})=>{const o=Wt(),[i,s]=e.useState([]),[d,c]=e.useState(!0),[u,f]=e.useState(null),[m,p]=e.useState(!1),[h,y]=e.useState(null);e.useEffect(()=>{x()},[l]);const x=async()=>{try{c(!0),f(null);const e=await vt.getReportDefinitions();s(e)}catch(e){console.error("Error loading report definitions:",e);const t="Failed to load report definitions: "+(e.message||"Unknown error");f(t),o.error(t)}finally{c(!1)}},b=(e,t)=>{t.stopPropagation();const a=i.find(t=>t.id===e);y(a),p(!0)},v=[{field:"title",headerName:"Title",flex:1,minWidth:200},{field:"provider",headerName:"Provider",flex:1,minWidth:200},{field:"source",headerName:"Source",flex:1,minWidth:150},{field:"actions",headerName:"Actions",width:200,sortable:!1,filterable:!1,disableColumnMenu:!0,renderCell:e=>{const a="user-override"===e.row.source;return me.default.createElement(g.Box,{sx:{display:"flex",gap:1}},me.default.createElement(g.Tooltip,{title:"Run"},me.default.createElement(g.IconButton,{size:"small",color:"success",onClick:t=>{return a=e.row.id,t.stopPropagation(),void n(a);var a}},me.default.createElement(He.default,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:"Edit"},me.default.createElement(g.IconButton,{size:"small",color:"primary",onClick:a=>{return r=e.row.id,a.stopPropagation(),void t(r);var r}},me.default.createElement(Le.default,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:"Clone"},me.default.createElement(g.IconButton,{size:"small",onClick:t=>(async(e,t)=>{t.stopPropagation();try{const t=await vt.getReportDefinition({id:e}),a={...t,title:`${t.title} (Copy)`};r(a)}catch(e){console.error("Error cloning report:",e),o.error("Failed to clone report: "+(e.message||"Unknown error"))}})(e.row.id,t)},me.default.createElement(Ge.default,{fontSize:"small"}))),a?me.default.createElement(g.Tooltip,{title:"Revert to the system report"},me.default.createElement(g.IconButton,{size:"small",color:"warning",onClick:t=>b(e.row.id,t)},me.default.createElement(Ve.default,{fontSize:"small"}))):me.default.createElement(g.Tooltip,{title:"Delete"},me.default.createElement(g.IconButton,{size:"small",color:"error",onClick:t=>b(e.row.id,t)},me.default.createElement(Ye.default,{fontSize:"small"}))))}}],E=i.map(e=>({id:e.id,title:e.title,provider:e.provider,source:e.source}));return d?me.default.createElement(g.Box,{display:"flex",justifyContent:"center",alignItems:"center",minHeight:400},me.default.createElement(g.CircularProgress,null)):u?me.default.createElement(g.Box,{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",minHeight:400,gap:2},me.default.createElement(g.Typography,{variant:"body1",color:"error"},u),me.default.createElement(g.Button,{variant:"contained",onClick:x},"Retry")):me.default.createElement(g.Box,{sx:{p:3,display:"flex",flexDirection:"column",fontFamily:"system-ui"}},me.default.createElement(g.Box,{sx:{display:"flex",justifyContent:"flex-end",alignItems:"center",mb:2,fontFamily:"system-ui"}},me.default.createElement(g.Button,{variant:"contained",sx:{backgroundColor:" rgb(70, 134, 128)",borderRadius:"0.5rem",boxShadow:"none",textTransform:"none"},startIcon:me.default.createElement(Ue.default,null),onClick:a},"Add New Report")),me.default.createElement(g.Box,{sx:{flex:1,width:"100%",borderRadius:"0.5rem",overflow:"hidden",fontFamily:"system-ui"}},me.default.createElement(F.DataGrid,{rows:E,columns:v,pageSize:10,rowsPerPageOptions:[10,25,50],disableSelectionOnClick:!0,onRowClick:e=>{t(e.row.id)},sx:{height:"100%",borderRadius:"0.5rem",overflow:"hidden",fontFamily:"system-ui","& .MuiDataGrid-columnHeaders":{backgroundColor:"#ffff"},"& .MuiDataGrid-columnHeaderTitle":{fontWeight:"600 !important",fontSize:"0.875rem !important"},"& .MuiDataGrid-columnHeader:first-of-type":{borderTopLeftRadius:"0.5rem"},"& .MuiDataGrid-columnHeader:last-of-type":{borderTopRightRadius:"0.5rem"},"& .MuiDataGrid-row":{cursor:"pointer",fontSize:"0.875rem !important"},"& .MuiDataGrid-row:hover":{backgroundColor:"#f6f5f5ff"}}})),me.default.createElement(Kt,{open:m,title:"user-override"===h?.source?"Revert Report Definition":"Delete Report Definition",message:h?"user-override"===h.source?`Are you sure you want to revert "${h.title}" to the system version? Your custom changes will be lost.`:`Are you sure you want to delete "${h.title}"? This action cannot be undone.`:"",onConfirm:async()=>{if(!h)return;const e="user-override"===h.source,t=e?"reverted":"deleted";try{await vt.deleteReportDefinition({id:h.id}),o.success(e?`Report "${h.title}" reverted to system version successfully!`:`Report "${h.title}" deleted successfully!`),p(!1),y(null),x()}catch(e){console.error(`Error ${t} report:`,e),o.error(`Failed to ${t.toLowerCase()} report: `+(e.response?.data?.message||e.message||"Unknown error")),p(!1),y(null)}},onCancel:()=>{p(!1),y(null)},confirmText:"user-override"===h?.source?"Revert":"Delete",cancelText:"Cancel",confirmColor:"user-override"===h?.source?"warning":"error"}))},Lt=({providersData:t,rootProvider:a,onSelectionChange:r,existingDimensions:n=[],existingMetrics:l=[],existingFilters:o={}})=>{const[i,s]=e.useState([]);e.useEffect(()=>{s([]),r&&r([])},[a]);const d=e=>{if(!t||!e)return[];const a=t[e];if(!a||!a.relations||0===a.relations.length)return[];const r=(()=>{const e=new Map,t=t=>{if(t.relations&&t.providerPath)for(let a=0;a<t.relations.length;a++){const r=t.relations[a],n=t.providerPath[a];r.type&&(e.has(n)||e.set(n,new Set),e.get(n).add(r.name))}};return n.forEach(t),l.forEach(t),Object.values(o).forEach(t),e})().get(e);return a.relations.filter(e=>t[e.target]).map(e=>{let t=!1,a=null;if(!!e.type&&r&&r.size>0){if(!r.has(e.name)&&r.size>0){t=!0;a=`Cannot select: '${Array.from(r)[0]}' is already in use`}}return{key:e.name,value:e.name,targetKey:e.target,disabled:t,disabledReason:a}}).sort((e,t)=>e.value.localeCompare(t.value))},c=(e,t)=>{const n=t.target.value,l=0===e?a:i[e-1].targetKey,o=d(l).find(e=>e.key===n);if(!o)return;const c=i.slice(0,e);c.push({providerKey:n,relationName:n,targetKey:o.targetKey}),s(c),console.log("Selection chain:",c),r&&r(c)};return me.default.createElement(g.Box,null,i.length>0&&me.default.createElement(g.Box,{sx:{marginBottom:2}},me.default.createElement(g.Box,{sx:{display:"flex",alignItems:"center",gap:1.5,flexWrap:"wrap"}},me.default.createElement(g.Chip,{label:Bt(a),size:"medium",variant:"outlined",sx:{fontWeight:600,borderColor:"rgb(70, 134, 128)",color:"rgb(70, 134, 128)",backgroundColor:"white",height:"32px",fontFamily:"system-ui"}}),i.map((e,t)=>me.default.createElement(me.default.Fragment,{key:t},me.default.createElement(g.Typography,{variant:"body2",sx:{color:"#9e9e9e",fontWeight:"bold"}},"→"),me.default.createElement(g.Chip,{label:Bt(e.targetKey),size:"medium",onDelete:()=>(e=>{const t=i.slice(0,e);s(t),r&&r(t)})(t),sx:{fontWeight:500,backgroundColor:"rgb(70, 134, 128)",color:"white",height:"32px",fontFamily:"system-ui","& .MuiChip-deleteIcon":{color:"rgba(255, 255, 255, 0.7)","&:hover":{color:"white"}}}}))))),me.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",alignItems:"flex-start",gap:"16px"}},(()=>{if(!t||!a)return null;const e=[],r=d(a);r.length>0&&e.push(me.default.createElement("div",{key:"level-0",style:{marginRight:"16px"}},me.default.createElement(Pt,{items:r,value:i[0]?.providerKey||"",label:`Related to ${a}`,onChange:e=>c(0,e),sx:{width:"300px"}})));for(let t=0;t<i.length;t++){const a=i[t],r=d(a.targetKey);if(r.length>0){const n=i[t+1];e.push(me.default.createElement("div",{key:`level-${t+1}`,style:{marginRight:"16px"}},me.default.createElement(Pt,{items:r,value:n?.providerKey||"",label:`Related to ${a.targetKey}`,onChange:e=>c(t+1,e),sx:{width:"300px"}})))}}return e})()))},Gt=({id:t,label:a,fullLabel:r,onDelete:n,onMoveUp:l,onMoveDown:o,isFirst:i,isLast:s,sortOrder:d,onSortOrderChange:c,fullPath:u,defaultTitle:f,customTitle:m,onUpdateTitle:p,onResetTitle:h})=>{const[y,x]=e.useState(!1),[b,v]=e.useState(""),E=e.useRef(null),w=e.useRef(null),{attributes:C,listeners:S,setNodeRef:k,transform:T,transition:R,isDragging:D}=L.useSortable({id:t}),B={transform:G.CSS.Transform.toString(T),transition:R,opacity:D?.5:1,display:"flex",alignItems:"center",width:"100%"};e.useEffect(()=>{y&&E.current&&(E.current.focus(),E.current.select())},[y]),e.useEffect(()=>{const e=e=>{y&&w.current&&!w.current.contains(e.target)&&z()};if(y)return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[y]);const P=()=>{const e=b.trim();""!==e?(p(u,e),x(!1)):z()},z=()=>{x(!1),v("")},M=m||a,I=!!m;return me.default.createElement("div",mt({ref:k,style:B},C),me.default.createElement(g.Box,{ref:w,sx:{display:"flex",alignItems:"center",width:"100%",gap:1,backgroundColor:"white",border:"1px solid #e0e0e0",borderRadius:2,padding:1,transition:"transform 0.2s ease, box-shadow 0.2s ease","&:hover .hover-icons":{opacity:1}}},me.default.createElement(g.Box,mt({},S,{sx:{display:"flex",alignItems:"center",cursor:"grab","&:active":{cursor:"grabbing"}}}),me.default.createElement(Xe.default,{sx:{cursor:"grab",color:"rgba(110, 110, 110, 0.62)"}})),y?me.default.createElement(me.default.Fragment,null,me.default.createElement(g.TextField,{inputRef:E,value:b,onChange:e=>v(e.target.value),onKeyDown:e=>{"Enter"===e.key?P():"Escape"===e.key&&z()},size:"small",sx:{minWidth:"200px",maxWidth:"400px"}}),me.default.createElement(g.Box,{className:"hover-icons",sx:{display:"flex",gap:.5,opacity:1}},me.default.createElement(g.Tooltip,{title:"Save",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:P,color:"primary","aria-label":"save title"},me.default.createElement(rt.default,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:"Cancel",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:z,"aria-label":"cancel edit"},me.default.createElement(nt.default,{fontSize:"small"}))),I&&me.default.createElement(g.Tooltip,{title:"Reset to default",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:()=>{h(u),x(!1),v("")},color:"warning","aria-label":"reset title"},me.default.createElement(lt.default,{fontSize:"small"})))),me.default.createElement(g.Box,{sx:{flex:1}})):me.default.createElement(me.default.Fragment,null,me.default.createElement(g.Box,{sx:{minWidth:0}},me.default.createElement(g.Tooltip,{title:r||M,arrow:!0,placement:"top"},me.default.createElement(g.Typography,{variant:"h6",sx:{fontWeight:I?600:500,fontStyle:I?"italic":"normal",color:"#1a1a1a",fontSize:"14px",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},M))),me.default.createElement(g.Box,{className:"hover-icons",sx:{display:"flex",gap:.5,opacity:0,transition:"opacity 0.2s"}},me.default.createElement(g.Tooltip,{title:"Edit title",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:()=>{v(m||f),x(!0)},"aria-label":"edit title"},me.default.createElement(Le.default,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:null===d?"No sort":"asc"===d?"Ascending":"Descending",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:()=>{c(null===d?"asc":"asc"===d?"desc":null)},"aria-label":"toggle sort order",color:d?"primary":"default"},"asc"===d?me.default.createElement(et.default,{fontSize:"small"}):"desc"===d?me.default.createElement(tt.default,{fontSize:"small"}):me.default.createElement(at.default,{fontSize:"small",sx:{opacity:.3}}))),me.default.createElement(g.Tooltip,{title:"Delete",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:n,"aria-label":"delete",sx:{color:"#ef5350"}},me.default.createElement(F.GridDeleteIcon,{fontSize:"small"})))),me.default.createElement(g.Box,{sx:{flex:1}}),me.default.createElement(g.Box,{className:"hover-icons",sx:{display:"flex",gap:.5,opacity:0,transition:"opacity 0.2s"}},me.default.createElement(g.IconButton,{size:"small",onClick:l,disabled:i,"aria-label":"move up"},me.default.createElement(et.default,{fontSize:"small"})),me.default.createElement(g.IconButton,{size:"small",onClick:o,disabled:s,"aria-label":"move down"},me.default.createElement(tt.default,{fontSize:"small"}))))))},Yt=({providersData:t,rootProvider:a,savedDimensions:r=[],onSaveDimension:n,onRemoveDimension:l,onReorderDimensions:o,titleOverrides:i={},onUpdateTitle:s,onResetTitle:d,existingMetrics:c=[],existingFilters:u={}})=>{const[f,m]=e.useState(!1),[p,h]=e.useState([]),[y,x]=e.useState(""),b=U.useSensors(U.useSensor(U.PointerSensor),U.useSensor(U.KeyboardSensor,{coordinateGetter:L.sortableKeyboardCoordinates})),v=()=>{const e=a?0===p.length?a:p[p.length-1].targetKey:null;if(!e||!t||!t[e])return[];const n=t[e];if(!n.dimensions)return[];const l=[t[a].default_alias];let o=a;p.forEach(e=>{const a=t[o];if(a&&a.relations){const t=a.relations.find(t=>t.name===e.relationName);t&&l.push(t.alias)}o=e.targetKey});const i=new Set(r.map(e=>e.fullPath)),s=[];return Object.keys(n.dimensions).forEach(t=>{const a=n.dimensions[t];Object.keys(a).forEach(r=>{const n=a[r],o=`${l.join("_")}.${r}`,d=i.has(o);s.push({key:`${e}_${t}.${r}`,value:n.title||r,dimensionKey:r,alias:t,dimension:n,disabled:d})})}),s.sort((e,t)=>e.value.localeCompare(t.value))},E=()=>{m(!1),h([]),x("")},w=e=>{const t=[a];return e.relationNames&&e.relationNames.length>0&&t.push(...e.relationNames),t.join(" → ")};return me.default.createElement("div",null,me.default.createElement(g.Box,{sx:{display:"flex",justifyContent:"flex-start",mb:2}},!f&&me.default.createElement(g.Button,{variant:"contained",startIcon:me.default.createElement(F.GridAddIcon,null),onClick:()=>{m(!0),h([]),x("")},sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",textTransform:"none",backgroundColor:"rgb(70, 134, 128)",boxShadow:"none","&:hover":{backgroundColor:"rgb(50, 114, 108)",boxShadow:"none"}}},"Add Dimension")),f&&me.default.createElement(g.Paper,{elevation:0,sx:{p:3,mb:3,border:"1px solid #e0e0e0",borderRadius:"12px",backgroundColor:"white",boxShadow:"0px 2px 4px rgba(0,0,0,0.02)",fontFamily:"system-ui"}},me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1.5,color:"rgb(37, 37, 37)"}},"Select Provider Path"),me.default.createElement(g.Box,{sx:{mb:3}},me.default.createElement(Lt,{providersData:t,rootProvider:a,onSelectionChange:h,existingDimensions:r,existingMetrics:c,existingFilters:u})),me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1.5,color:"rgb(37, 37, 37)"}},"Select Dimension"),me.default.createElement(g.Box,{sx:{display:"flex",alignItems:"center",gap:2,mb:3}},me.default.createElement(Pt,{items:v(),value:y,label:"Choose Dimension",onChange:e=>{x(e.target.value)},sx:{width:"400px",fontFamily:"system-ui"}}),me.default.createElement(g.Tooltip,{title:"Add all available dimensions",arrow:!0,placement:"top"},me.default.createElement("span",null,me.default.createElement(g.IconButton,{onClick:()=>{const e=v().filter(e=>!e.disabled);if(0===e.length)return;const r=[],l=[a],o=[];let i=a;p.forEach(e=>{const a=t[i];if(a&&a.relations){const t=a.relations.find(t=>t.name===e.relationName);t&&(r.push(t),o.push(t.name))}l.push(e.targetKey),i=e.targetKey});const s=[t[a].default_alias];r.forEach(e=>{s.push(e.alias)}),e.forEach(e=>{const t=`${s.join("_")}.${e.dimensionKey}`,a={dimension:e.dimension,relations:r,providerPath:l,relationNames:o,dimensionKey:e.dimensionKey,dimensionTitle:e.value,fullPath:t};n(a)}),E()},disabled:0===v().filter(e=>!e.disabled).length,"aria-label":"add all dimensions",sx:{color:"rgb(70, 134, 128)",border:"1px solid #e0e0e0",borderRadius:"8px",padding:"8px","&:hover":{backgroundColor:"#f5f5f5"},"&.Mui-disabled":{opacity:.5}}},me.default.createElement(ot.default,null))))),me.default.createElement(g.Box,{sx:{display:"flex",justifyContent:"flex-end",gap:2,mt:3}},me.default.createElement(g.Button,{variant:"outlined",onClick:E,sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",boxShadow:"none",borderColor:"#e0e0e0",color:"rgb(37, 37, 37)",textTransform:"none","&:hover":{backgroundColor:"#f5f5f5",borderColor:"#d0d0d0"}}},"Cancel"),me.default.createElement(g.Button,{variant:"contained",onClick:()=>{if(!y)return;const e=v().find(e=>e.key===y);if(!e)return;const r=[],l=[a],o=[];let i=a;p.forEach(e=>{const a=t[i];if(a&&a.relations){const t=a.relations.find(t=>t.name===e.relationName);t&&(r.push(t),o.push(t.name))}l.push(e.targetKey),i=e.targetKey});const s=[t[a].default_alias];r.forEach(e=>{s.push(e.alias)});const d=`${s.join("_")}.${e.dimensionKey}`,c={dimension:e.dimension,relations:r,providerPath:l,relationNames:o,dimensionKey:e.dimensionKey,dimensionTitle:e.value,fullPath:d};n(c),E()},disabled:!y,sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",boxShadow:"none",textTransform:"none",backgroundColor:"rgb(70, 134, 128)","&:hover":{backgroundColor:"rgb(50, 114, 108)",boxShadow:"none"}}},"Save Dimension"))),r.length>0&&me.default.createElement(g.Box,{sx:{marginTop:0}},me.default.createElement(g.Typography,{variant:"h6",sx:{fontSize:"16px",fontWeight:600,marginTop:2,color:"rgb(37, 37, 37)"}},"Saved Dimensions"),me.default.createElement(g.Typography,{sx:{fontSize:"13px",color:"#666",marginBottom:2}},"Drag to reorder or use arrows"),me.default.createElement(U.DndContext,{sensors:b,collisionDetection:U.closestCenter,onDragEnd:e=>{const{active:t,over:a}=e;if(a&&t.id!==a.id){const e=r.findIndex((e,a)=>a===t.id),n=r.findIndex((e,t)=>t===a.id),l=L.arrayMove(r,e,n);o(l)}}},me.default.createElement(L.SortableContext,{items:r.map((e,t)=>t),strategy:L.verticalListSortingStrategy},me.default.createElement(g.Box,{sx:{display:"flex",flexDirection:"column",gap:1}},r.map((e,t)=>me.default.createElement(Gt,{key:t,id:t,label:e.dimensionTitle,fullLabel:`${w(e)} → ${e.dimensionTitle} (${e.fullPath})`,onDelete:()=>l(t),onMoveUp:()=>(e=>{if(e>0){const t=L.arrayMove(r,e,e-1);o(t)}})(t),onMoveDown:()=>(e=>{if(e<r.length-1){const t=L.arrayMove(r,e,e+1);o(t)}})(t),isFirst:0===t,isLast:t===r.length-1,sortOrder:e.sortOrder||null,onSortOrderChange:e=>((e,t)=>{const a=[...r];a[e]={...a[e],sortOrder:t},o(a)})(t,e),fullPath:e.fullPath,defaultTitle:e.dimensionTitle,customTitle:i[e.fullPath],onUpdateTitle:s,onResetTitle:d})))))))},Ht=({source:e})=>{const t={fontSize:"15px"};return"kpi"===e?me.default.createElement(g.Tooltip,{title:"KPI Metric",arrow:!0,placement:"top"},me.default.createElement(st.default,{sx:{...t,color:"rgb(70, 134, 128)"}})):"dynamic"===e?me.default.createElement(g.Tooltip,{title:"Dynamic Metric",arrow:!0,placement:"top"},me.default.createElement(dt.default,{sx:{...t,color:"#e65100"}})):"provider"===e?me.default.createElement(g.Tooltip,{title:"Provider Metric",arrow:!0,placement:"top"},me.default.createElement(it.default,{sx:{...t,color:"#546e7a"}})):null},Vt=({id:t,label:a,fullLabel:r,onDelete:n,onMoveUp:l,onMoveDown:o,isFirst:i,isLast:s,fullPath:d,defaultTitle:c,customTitle:u,onUpdateTitle:f,onResetTitle:m,source:p})=>{const[h,y]=e.useState(!1),[x,b]=e.useState(""),v=e.useRef(null),E=e.useRef(null),{attributes:w,listeners:C,setNodeRef:S,transform:k,transition:T,isDragging:R}=L.useSortable({id:t}),D={transform:G.CSS.Transform.toString(k),transition:T,opacity:R?.5:1,display:"flex",alignItems:"center",width:"100%"};e.useEffect(()=>{h&&v.current&&(v.current.focus(),v.current.select())},[h]),e.useEffect(()=>{const e=e=>{h&&E.current&&!E.current.contains(e.target)&&P()};if(h)return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[h]);const B=()=>{const e=x.trim();""!==e?(f(d,e),y(!1)):P()},P=()=>{y(!1),b("")},z=u||a,M=!!u;return me.default.createElement("div",mt({ref:S,style:D},w),me.default.createElement(g.Box,{ref:E,sx:{display:"flex",alignItems:"center",width:"100%",gap:1,backgroundColor:"white",border:"1px solid #e0e0e0",borderRadius:2,padding:1,transition:"transform 0.2s ease, box-shadow 0.2s ease","&:hover .hover-icons":{opacity:1}}},me.default.createElement(g.Box,mt({},C,{sx:{display:"flex",alignItems:"center",cursor:"grab","&:active":{cursor:"grabbing"}}}),me.default.createElement(Xe.default,{sx:{cursor:"grab",color:"rgba(110, 110, 110, 0.62)"}})),h?me.default.createElement(me.default.Fragment,null,me.default.createElement(g.TextField,{inputRef:v,value:x,onChange:e=>b(e.target.value),onKeyDown:e=>{"Enter"===e.key?B():"Escape"===e.key&&P()},size:"small",sx:{minWidth:"200px",maxWidth:"400px"}}),me.default.createElement(g.Box,{className:"hover-icons",sx:{display:"flex",gap:.5,opacity:1}},me.default.createElement(g.Tooltip,{title:"Save",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:B,color:"primary","aria-label":"save title"},me.default.createElement(rt.default,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:"Cancel",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:P,"aria-label":"cancel edit"},me.default.createElement(nt.default,{fontSize:"small"}))),M&&me.default.createElement(g.Tooltip,{title:"Reset to default",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:()=>{m(d),y(!1),b("")},color:"warning","aria-label":"reset title"},me.default.createElement(lt.default,{fontSize:"small"})))),me.default.createElement(g.Box,{sx:{flex:1}})):me.default.createElement(me.default.Fragment,null,p&&me.default.createElement(g.Box,{sx:{display:"flex",alignItems:"center",flexShrink:0}},me.default.createElement(Ht,{source:p})),me.default.createElement(g.Box,{sx:{minWidth:0}},me.default.createElement(g.Tooltip,{title:r||z,arrow:!0,placement:"top"},me.default.createElement(g.Typography,{variant:"h6",sx:{fontWeight:M?600:500,fontStyle:M?"italic":"normal",color:"#1a1a1a",fontSize:"14px",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},z))),me.default.createElement(g.Box,{className:"hover-icons",sx:{display:"flex",gap:.5,opacity:0,transition:"opacity 0.2s"}},me.default.createElement(g.Tooltip,{title:"Edit title",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:()=>{b(u||c),y(!0)},"aria-label":"edit title"},me.default.createElement(Le.default,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:"Delete",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:n,"aria-label":"delete",sx:{color:"#ef5350"}},me.default.createElement(F.GridDeleteIcon,{fontSize:"small"})))),me.default.createElement(g.Box,{sx:{flex:1}}),me.default.createElement(g.Box,{className:"hover-icons",sx:{display:"flex",gap:.5,opacity:0,transition:"opacity 0.2s"}},me.default.createElement(g.IconButton,{size:"small",onClick:l,disabled:i,"aria-label":"move up"},me.default.createElement(et.default,{fontSize:"small"})),me.default.createElement(g.IconButton,{size:"small",onClick:o,disabled:s,"aria-label":"move down"},me.default.createElement(tt.default,{fontSize:"small"}))))))},Jt=({providersData:t,rootProvider:a,savedMetrics:r=[],onSaveMetric:n,onRemoveMetric:l,onReorderMetrics:o,titleOverrides:i={},onUpdateTitle:s,onResetTitle:d,existingDimensions:c=[],existingFilters:u={}})=>{const[f,m]=e.useState(!1),[p,h]=e.useState([]),[y,x]=e.useState(""),b=U.useSensors(U.useSensor(U.PointerSensor),U.useSensor(U.KeyboardSensor,{coordinateGetter:L.sortableKeyboardCoordinates})),v=()=>{const e=a?0===p.length?a:p[p.length-1].targetKey:null;if(!e||!t||!t[e])return[];const n=t[e];if(!n.metrics)return[];const l=[t[a].default_alias];let o=a;p.forEach(e=>{const a=t[o];if(a&&a.relations){const t=a.relations.find(t=>t.name===e.relationName);t&&l.push(t.alias)}o=e.targetKey});const i=new Set(r.map(e=>e.fullPath)),s=n.metrics.map((t,a)=>{const r=`${l.join("_")}.${t.name}`,n=i.has(r);return{key:`${e}_${t.name}_${a}`,value:t.title||t.name,metricName:t.name,metric:t,disabled:n,icon:t.source?me.default.createElement(Ht,{source:t.source}):void 0}});return s.sort((e,t)=>e.value.localeCompare(t.value))},E=()=>{m(!1),h([]),x("")},w=e=>{const t=[a];return e.relationNames&&e.relationNames.length>0&&t.push(...e.relationNames),t.join(" → ")};return me.default.createElement("div",null,me.default.createElement(g.Box,{sx:{display:"flex",justifyContent:"flex-start",mb:2}},!f&&me.default.createElement(g.Button,{variant:"contained",startIcon:me.default.createElement(F.GridAddIcon,null),onClick:()=>{m(!0),h([]),x("")},sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",textTransform:"none",backgroundColor:"rgb(70, 134, 128)",boxShadow:"none","&:hover":{backgroundColor:"rgb(50, 114, 108)",boxShadow:"none"}}},"Add Metric")),f&&me.default.createElement(g.Paper,{elevation:0,sx:{p:3,mb:3,border:"1px solid #e0e0e0",borderRadius:"12px",backgroundColor:"white",boxShadow:"0px 2px 4px rgba(0,0,0,0.02)",fontFamily:"system-ui"}},me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1.5,color:"rgb(37, 37, 37)"}},"Select Provider Path"),me.default.createElement(g.Box,{sx:{mb:3}},me.default.createElement(Lt,{providersData:t,rootProvider:a,onSelectionChange:h,existingDimensions:c,existingMetrics:r,existingFilters:u})),me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1.5,color:"rgb(37, 37, 37)"}},"Select Metric"),me.default.createElement(g.Box,{sx:{display:"flex",alignItems:"center",gap:2,mb:3}},me.default.createElement(Pt,{items:v(),value:y,label:"Choose Metric",onChange:e=>{x(e.target.value)},sx:{width:"400px",fontFamily:"system-ui"}}),me.default.createElement(g.Tooltip,{title:"Add all available metrics",arrow:!0,placement:"top"},me.default.createElement("span",null,me.default.createElement(g.IconButton,{onClick:()=>{const e=v().filter(e=>!e.disabled);if(0===e.length)return;const r=[],l=[a],o=[];let i=a;p.forEach(e=>{const a=t[i];if(a&&a.relations){const t=a.relations.find(t=>t.name===e.relationName);t&&(r.push(t),o.push(t.name))}l.push(e.targetKey),i=e.targetKey});const s=[t[a].default_alias];r.forEach(e=>{s.push(e.alias)}),e.forEach(e=>{const t=`${s.join("_")}.${e.metricName}`,a={metric:e.metric,relations:r,providerPath:l,relationNames:o,metricName:e.metricName,metricTitle:e.value,fullPath:t};n(a)}),E()},disabled:0===v().filter(e=>!e.disabled).length,"aria-label":"add all metrics",sx:{color:"rgb(70, 134, 128)",border:"1px solid #e0e0e0",borderRadius:"8px",padding:"8px","&:hover":{backgroundColor:"#f5f5f5"},"&.Mui-disabled":{opacity:.5}}},me.default.createElement(ot.default,null))))),me.default.createElement(g.Box,{sx:{display:"flex",justifyContent:"flex-end",gap:2,mt:3}},me.default.createElement(g.Button,{variant:"outlined",onClick:E,sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",boxShadow:"none",borderColor:"#e0e0e0",color:"rgb(37, 37, 37)",textTransform:"none","&:hover":{backgroundColor:"#f5f5f5",borderColor:"#d0d0d0"}}},"Cancel"),me.default.createElement(g.Button,{variant:"contained",onClick:()=>{if(!y)return;const e=v().find(e=>e.key===y);if(!e)return;const r=[],l=[a],o=[];let i=a;p.forEach(e=>{const a=t[i];if(a&&a.relations){const t=a.relations.find(t=>t.name===e.relationName);t&&(r.push(t),o.push(t.name))}l.push(e.targetKey),i=e.targetKey});const s=[t[a].default_alias];r.forEach(e=>{s.push(e.alias)});const d=`${s.join("_")}.${e.metricName}`,c={metric:e.metric,relations:r,providerPath:l,relationNames:o,metricName:e.metricName,metricTitle:e.value,fullPath:d};n(c),E()},disabled:!y,sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",boxShadow:"none",textTransform:"none",backgroundColor:"rgb(70, 134, 128)","&:hover":{backgroundColor:"rgb(50, 114, 108)",boxShadow:"none"}}},"Save Metric"))),r.length>0&&me.default.createElement(g.Box,{sx:{marginTop:0}},me.default.createElement(g.Typography,{variant:"h6",sx:{fontSize:"16px",fontWeight:600,marginBottom:1,color:"rgb(37, 37, 37)"}},"Saved Metrics"),me.default.createElement(U.DndContext,{sensors:b,collisionDetection:U.closestCenter,onDragEnd:e=>{const{active:t,over:a}=e;if(a&&t.id!==a.id){const e=r.findIndex((e,a)=>a===t.id),n=r.findIndex((e,t)=>t===a.id),l=L.arrayMove(r,e,n);o(l)}}},me.default.createElement(L.SortableContext,{items:r.map((e,t)=>t),strategy:L.verticalListSortingStrategy},me.default.createElement(g.Box,{sx:{display:"flex",flexDirection:"column",gap:1}},r.map((e,t)=>me.default.createElement(Vt,{key:t,id:t,label:e.metricTitle,fullLabel:`${w(e)} → ${e.metricTitle} (${e.fullPath})`,onDelete:()=>l(t),onMoveUp:()=>(e=>{if(e>0){const t=L.arrayMove(r,e,e-1);o(t)}})(t),onMoveDown:()=>(e=>{if(e<r.length-1){const t=L.arrayMove(r,e,e+1);o(t)}})(t),isFirst:0===t,isLast:t===r.length-1,fullPath:e.fullPath,defaultTitle:e.metricTitle,customTitle:i[e.fullPath],onUpdateTitle:s,onResetTitle:d,source:e.metric?.source})))))))},Qt=({providersData:t,rootProvider:a,savedFilters:r={},onSaveFilter:n,onRemoveFilter:l,existingDimensions:o=[],existingMetrics:i=[],titleOverrides:s={},dimensionTitleOverrides:d={},onUpdateTitle:c,onResetTitle:u})=>{const f=Ot(),[m,p]=e.useState(!1),[h,y]=e.useState(!1),[x,b]=e.useState([]),[v,E]=e.useState(""),[w,C]=e.useState(""),[S,k]=e.useState([]),[T,R]=e.useState([]),[D,B]=e.useState(!1),[P,z]=e.useState(null),[M,I]=e.useState(""),[q,$]=e.useState(null),[O,A]=e.useState(null),[j,N]=e.useState(null),[_,W]=e.useState("");e.useEffect(()=>{E(""),k([]),R([]),$(null),A(null),I("")},[x]);const K=e=>e&&("date"===e.type||"timestamp"===e.type),U=()=>{const e=a?0===x.length?a:x[x.length-1].targetKey:null;if(!e||!t||!t[e])return[];const r=t[e];if(!r.dimensions)return[];const n=[];return Object.keys(r.dimensions).forEach(t=>{const a=r.dimensions[t];Object.keys(a).forEach(r=>{const l=a[r];l.column&&n.push({key:`${e}_${t}.${r}`,value:l.title||r,dimensionKey:r,alias:t,dimension:l})})}),n.sort((e,t)=>e.value.localeCompare(t.value))},L=()=>{p(!1),y(!1),b([]),E(""),C(""),k([]),R([]),$(null),A(null),I(""),z(null)},G=()=>{z(null),k([]),R([]),$(null),A(null),I("")},Y=e=>{const t=_.trim();""!==t?(c(e,t),N(null),W("")):H()},H=()=>{N(null),W("")},V=async(e,t="")=>{B(!0);try{const r=f?.parameters||{base_currency:"EUR"},n={dimensions:[e],metrics:[],order_by:[{name:e}]};t&&""!==t.trim()&&(n.filter={and:[{[e]:{ilike:`${t.trim()}%`}}]});const l={provider:a,doc:{query:n},parameters:r};console.log("Fetching filter values with payload:",l);const o=await vt.runAdHocReport({report:l});console.log("Filter values results:",o);const i=(Array.isArray(o)?o:o.data||[]).map(t=>{let a=t[e];if(void 0===a){a=t[e.replace(/\./g,"_")]}if(void 0===a){const e=Object.keys(t);e.length>0&&(a=t[e[0]])}return{key:String(a),value:String(a)}}),s=T.map(e=>({key:String(e),value:String(e)})),d=new Map;s.forEach(e=>{d.set(e.key,e)}),i.forEach(e=>{d.set(e.key,e)});const c=Array.from(d.values());console.log("Transformed distinct values:",i),console.log("Merged with selected values:",c),k(c)}catch(e){console.error("Error fetching filter values:",e),k([])}finally{B(!1)}},J=e=>{let r=null;if(h&&w)r=w;else if(m&&v){const e=U().find(e=>e.key===v);if(e){const n=[];let l=a;x.forEach(e=>{const a=t[l];if(a&&a.relations){const t=a.relations.find(t=>t.name===e.relationName);t&&n.push(t)}l=e.targetKey});const o=[t[a].default_alias];n.forEach(e=>{o.push(e.alias)}),r=`${o.join("_")}.${e.dimensionKey}`}}else P&&(r=P);r&&V(r,e)},Q=e=>{I(e)},Z=e=>{const t=[a];return e.relationNames&&e.relationNames.length>0&&t.push(...e.relationNames),t.join(" → ")},X=Object.entries(r);return me.default.createElement("div",null,me.default.createElement(g.Box,{sx:{display:"flex",justifyContent:"flex-start",gap:2,mb:2}},!m&&!h&&me.default.createElement(me.default.Fragment,null,o.length>0&&me.default.createElement(g.Button,{variant:"contained",startIcon:me.default.createElement(ct.default,null),onClick:()=>{y(!0),p(!1),C(""),k([]),R([]),$(null),A(null),z(null)},sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",textTransform:"none",backgroundColor:"rgb(70, 134, 128)",boxShadow:"none","&:hover":{backgroundColor:"rgb(50, 114, 108)",boxShadow:"none"}}},"Add Filter"),me.default.createElement(g.Button,{variant:"outlined",startIcon:me.default.createElement(F.GridAddIcon,null),onClick:()=>{p(!0),y(!1),b([]),E(""),C(""),k([]),R([]),$(null),A(null),z(null)},sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",textTransform:"none",borderColor:"rgb(70, 134, 128)",color:"rgb(70, 134, 128)",boxShadow:"none","&:hover":{backgroundColor:"rgba(70, 134, 128, 0.04)",borderColor:"rgb(50, 114, 108)",boxShadow:"none"}}},"Add Advanced Filter"))),m&&me.default.createElement(g.Paper,{elevation:0,sx:{p:3,mb:3,border:"1px solid #e0e0e0",borderRadius:"12px",backgroundColor:"white",boxShadow:"0px 2px 4px rgba(0,0,0,0.02)",fontFamily:"system-ui"}},me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1.5,color:"rgb(37, 37, 37)"}},"Select Provider Path"),me.default.createElement(g.Box,{sx:{mb:3}},me.default.createElement(Lt,{providersData:t,rootProvider:a,onSelectionChange:b,existingDimensions:o,existingMetrics:i,existingFilters:r})),me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1.5,color:"rgb(37, 37, 37)"}},"Select Dimension for Filter"),me.default.createElement(g.Box,{sx:{mb:3}},me.default.createElement(Pt,{items:U(),value:v,label:"Choose Dimension",onChange:e=>{const r=e.target.value;if(E(r),R([]),$(null),A(null),r){const e=U().find(e=>e.key===r);if(e){if(!K(e.dimension)){const r=[];let n=a;x.forEach(e=>{const a=t[n];if(a&&a.relations){const t=a.relations.find(t=>t.name===e.relationName);t&&r.push(t)}n=e.targetKey});const l=[t[a].default_alias];r.forEach(e=>{l.push(e.alias)});const o=`${l.join("_")}.${e.dimensionKey}`;V(o)}}}else k([])},sx:{width:"400px",fontFamily:"system-ui"}})),v&&(()=>{const e=U().find(e=>e.key===v),t=e&&K(e.dimension);return me.default.createElement(me.default.Fragment,null,me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1.5,mt:3,color:"rgb(37, 37, 37)"}},t?"Select Date Range":"Select Filter Values"),t?me.default.createElement(oe.LocalizationProvider,{dateAdapter:se.AdapterDayjs},me.default.createElement(g.Box,{sx:{display:"flex",gap:2,width:"400px"}},me.default.createElement(ie.DatePicker,{label:"From Date",value:q,onChange:e=>$(e),slotProps:{textField:{size:"small",fullWidth:!0},field:{clearable:!0}}}),me.default.createElement(ie.DatePicker,{label:"To Date",value:O,onChange:e=>A(e),slotProps:{textField:{size:"small",fullWidth:!0},field:{clearable:!0}}}))):me.default.createElement(g.Box,{sx:{width:"400px"}},me.default.createElement(Rt,{items:S,selectedKeys:T,onChange:e=>R(e),inputValue:M,onInputChange:J,onInputChangeImmediate:Q,label:"Choose Values",placeholder:"Type to search...",loading:D,helperText:T.length>0?`${T.length} value(s) selected`:"Select at least one value",debounceMs:1e3})))})(),me.default.createElement(g.Box,{sx:{display:"flex",justifyContent:"flex-end",gap:2,mt:3}},me.default.createElement(g.Button,{variant:"outlined",onClick:L,sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",boxShadow:"none",borderColor:"#e0e0e0",color:"rgb(37, 37, 37)",textTransform:"none","&:hover":{backgroundColor:"#f5f5f5",borderColor:"#d0d0d0"}}},"Cancel"),me.default.createElement(g.Button,{variant:"contained",onClick:()=>{const e=U().find(e=>e.key===v);if(!e)return;const r=K(e.dimension);if(r){if(!q&&!O)return}else if(0===T.length)return;if(!v)return;const l=[],o=[a],i=[];let s=a;x.forEach(e=>{const a=t[s];if(a&&a.relations){const t=a.relations.find(t=>t.name===e.relationName);t&&(l.push(t),i.push(t.name))}o.push(e.targetKey),s=e.targetKey});const d=[t[a].default_alias];l.forEach(e=>{d.push(e.alias)});const c=`${d.join("_")}.${e.dimensionKey}`;let u;r?(u={},q&&(u.gte=q.format("YYYY-MM-DD")),O&&(u.lte=O.format("YYYY-MM-DD"))):u=T;const f={dimension:e.dimension,relations:l,providerPath:o,relationNames:i,dimensionKey:e.dimensionKey,dimensionTitle:e.value,fullPath:c,values:u};n(c,f),L()},disabled:(()=>{if(!v)return!0;const e=U().find(e=>e.key===v);if(!e)return!0;return K(e.dimension)?!q&&!O:0===T.length})(),sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",boxShadow:"none",textTransform:"none",backgroundColor:"rgb(70, 134, 128)","&:hover":{backgroundColor:"rgb(50, 114, 108)",boxShadow:"none"}}},"Save Filter"))),h&&me.default.createElement(g.Paper,{elevation:0,sx:{p:3,mb:3,border:"1px solid #e0e0e0",borderRadius:"12px",backgroundColor:"white",boxShadow:"0px 2px 4px rgba(0,0,0,0.02)",fontFamily:"system-ui"}},me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1.5,color:"rgb(37, 37, 37)"}},"Select Dimension from Report"),me.default.createElement(g.Box,{sx:{mb:3}},me.default.createElement(Pt,{items:o.map(e=>({key:e.fullPath,value:d[e.fullPath]||e.dimensionTitle})).sort((e,t)=>e.value.localeCompare(t.value)),value:w,label:"Choose Dimension",onChange:e=>{const t=e.target.value;if(C(t),R([]),$(null),A(null),I(""),t){const e=o.find(e=>e.fullPath===t);if(e){K(e.dimension)||V(t)}}else k([])},sx:{width:"400px",fontFamily:"system-ui"}})),w&&(()=>{const e=o.find(e=>e.fullPath===w),t=e&&K(e.dimension);return me.default.createElement(me.default.Fragment,null,me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1.5,mt:3,color:"rgb(37, 37, 37)"}},t?"Select Date Range":"Select Filter Values"),t?me.default.createElement(oe.LocalizationProvider,{dateAdapter:se.AdapterDayjs},me.default.createElement(g.Box,{sx:{display:"flex",gap:2,width:"400px"}},me.default.createElement(ie.DatePicker,{label:"From Date",value:q,onChange:e=>$(e),slotProps:{textField:{size:"small",fullWidth:!0},field:{clearable:!0}}}),me.default.createElement(ie.DatePicker,{label:"To Date",value:O,onChange:e=>A(e),slotProps:{textField:{size:"small",fullWidth:!0},field:{clearable:!0}}}))):me.default.createElement(g.Box,{sx:{width:"400px"}},me.default.createElement(Rt,{items:S,selectedKeys:T,onChange:e=>R(e),inputValue:M,onInputChange:J,onInputChangeImmediate:Q,label:"Choose Values",placeholder:"Type to search...",loading:D,helperText:T.length>0?`${T.length} value(s) selected`:"Select at least one value",debounceMs:1e3})))})(),me.default.createElement(g.Box,{sx:{display:"flex",justifyContent:"flex-end",gap:2,mt:3}},me.default.createElement(g.Button,{variant:"outlined",onClick:L,sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",boxShadow:"none",borderColor:"#e0e0e0",color:"rgb(37, 37, 37)",textTransform:"none","&:hover":{backgroundColor:"#f5f5f5",borderColor:"#d0d0d0"}}},"Cancel"),me.default.createElement(g.Button,{variant:"contained",onClick:()=>{if(!w)return;const e=o.find(e=>e.fullPath===w);if(!e)return;const t=K(e.dimension);if(t){if(!q&&!O)return}else if(0===T.length)return;let a;t?(a={},q&&(a.gte=q.format("YYYY-MM-DD")),O&&(a.lte=O.format("YYYY-MM-DD"))):a=T;const r={dimension:e.dimension,relations:e.relations,providerPath:e.providerPath,relationNames:e.relationNames,dimensionKey:e.dimensionKey,dimensionTitle:e.dimensionTitle,fullPath:e.fullPath,values:a};n(e.fullPath,r),L()},disabled:(()=>{if(!w)return!0;const e=o.find(e=>e.fullPath===w);if(!e)return!0;return K(e.dimension)?!q&&!O:0===T.length})(),sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",boxShadow:"none",textTransform:"none",backgroundColor:"rgb(70, 134, 128)","&:hover":{backgroundColor:"rgb(50, 114, 108)",boxShadow:"none"}}},"Save Filter"))),X.length>0&&me.default.createElement(g.Box,{sx:{marginTop:0}},me.default.createElement(g.Typography,{variant:"h6",sx:{fontSize:"16px",fontWeight:600,marginBottom:1,color:"rgb(37, 37, 37)"}},"Saved Filters"),me.default.createElement(g.Box,{sx:{display:"flex",flexDirection:"column",gap:1}},X.map(([e,t])=>{const a=K(t.dimension),o=P===e,i=j===e;let c,f;a&&t.values&&"object"==typeof t.values&&!Array.isArray(t.values)?f=t.values.gte&&t.values.lte?`${t.values.gte} to ${t.values.lte}`:t.values.gte?`From ${t.values.gte}`:t.values.lte?`Until ${t.values.lte}`:"No dates":(c=t.values?.length||0,f=t.values?.join(", ")||"No values");const m=s[e]||d[e]||t.dimensionTitle,h=!!s[e];return me.default.createElement(g.Box,{key:e},me.default.createElement(g.Box,{sx:{display:"flex",alignItems:"center",width:"100%",gap:1,backgroundColor:"white",border:"1px solid #e0e0e0",borderRadius:2,padding:2,boxSizing:"border-box",transition:"box-shadow 0.2s ease","&:hover .hover-icons":{opacity:1}}},i?me.default.createElement(me.default.Fragment,null,me.default.createElement(g.TextField,{value:_,onChange:e=>W(e.target.value),onKeyDown:t=>((e,t)=>{"Enter"===e.key?Y(t):"Escape"===e.key&&H()})(t,e),size:"small",autoFocus:!0,placeholder:"Enter custom title",sx:{flex:1}}),me.default.createElement(g.Box,{sx:{display:"flex",gap:.5}},me.default.createElement(g.Tooltip,{title:"Save",arrow:!0},me.default.createElement(g.IconButton,{size:"small",onClick:()=>Y(e),color:"primary"},me.default.createElement(rt.default,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:"Cancel",arrow:!0},me.default.createElement(g.IconButton,{size:"small",onClick:H},me.default.createElement(nt.default,{fontSize:"small"}))),h&&me.default.createElement(g.Tooltip,{title:"Reset to default",arrow:!0},me.default.createElement(g.IconButton,{size:"small",onClick:()=>(e=>{u(e),N(null),W("")})(e),color:"warning"},me.default.createElement(lt.default,{fontSize:"small"}))))):me.default.createElement(me.default.Fragment,null,me.default.createElement(g.Box,{sx:{display:"flex",alignItems:"center",gap:1,flex:1,minWidth:0}},me.default.createElement(g.Typography,{variant:"h6",sx:{fontWeight:h?600:500,fontStyle:h?"italic":"normal",color:"#1a1a1a",fontSize:"14px"}},m),me.default.createElement(g.Box,{className:"hover-icons",sx:{display:"flex",gap:.5,opacity:0,transition:"opacity 0.2s"}},me.default.createElement(g.Tooltip,{title:"Rename filter",arrow:!0},me.default.createElement(g.IconButton,{size:"small",onClick:()=>((e,t)=>{N(e),W(s[e]||t||"")})(e,d[e]||t.dimensionTitle),disabled:o},me.default.createElement(Le.default,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:"Edit filter values",arrow:!0},me.default.createElement(g.IconButton,{size:"small",onClick:()=>(async(e,t)=>{p(!1),z(e),K(t.dimension)?t.values&&"object"==typeof t.values&&!Array.isArray(t.values)&&($(t.values.gte?ft.default(t.values.gte):null),A(t.values.lte?ft.default(t.values.lte):null)):(R(t.values||[]),await V(e))})(e,t),disabled:o},me.default.createElement(ct.default,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:"Remove filter",arrow:!0},me.default.createElement(g.IconButton,{size:"small",onClick:()=>l(e),sx:{color:"#ef5350"}},me.default.createElement(F.GridDeleteIcon,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:me.default.createElement("div",null,me.default.createElement("div",null,me.default.createElement("strong",null,"Path:")," ",Z(t)," → ",d[e]||t.dimensionTitle),me.default.createElement("div",null,me.default.createElement("strong",null,"Full Path:")," ",e),me.default.createElement("div",null,me.default.createElement("strong",null,a?"Date Range":`Values (${c})`,":")," ",f)),arrow:!0,placement:"right"},me.default.createElement(g.IconButton,{size:"small",disabled:o},me.default.createElement(ut.default,{fontSize:"small",sx:{color:"#757575"}}))))))),o&&me.default.createElement(g.Paper,{elevation:0,sx:{p:2,mt:1,ml:2,border:"1px solid #e0e0e0",borderRadius:"8px",backgroundColor:"#fafafa"}},me.default.createElement(g.Typography,{variant:"subtitle2",sx:{marginBottom:1.5,fontWeight:600}},"Edit ",a?"Date Range":"Values"," for: ",d[e]||t.dimensionTitle),a?me.default.createElement(oe.LocalizationProvider,{dateAdapter:se.AdapterDayjs},me.default.createElement(g.Box,{sx:{display:"flex",gap:2,width:"400px",marginBottom:2}},me.default.createElement(ie.DatePicker,{label:"From Date",value:q,onChange:e=>$(e),slotProps:{textField:{size:"small",fullWidth:!0},field:{clearable:!0}}}),me.default.createElement(ie.DatePicker,{label:"To Date",value:O,onChange:e=>A(e),slotProps:{textField:{size:"small",fullWidth:!0},field:{clearable:!0}}}))):me.default.createElement(g.Box,{sx:{width:"400px",marginBottom:2}},me.default.createElement(Rt,{items:S,selectedKeys:T,onChange:e=>R(e),inputValue:M,onInputChange:J,onInputChangeImmediate:Q,label:"Choose Values",placeholder:"Type to search...",loading:D,helperText:T.length>0?`${T.length} value(s) selected`:"Select at least one value",debounceMs:1e3})),me.default.createElement(g.Box,{sx:{display:"flex",gap:1,justifyContent:"flex-end"}},me.default.createElement(g.Button,{variant:"outlined",size:"small",onClick:G,sx:{textTransform:"none",borderRadius:"6px"}},"Cancel"),me.default.createElement(g.Button,{variant:"contained",size:"small",onClick:()=>(e=>{const t=r[e];if(K(t.dimension)){if(!q&&!O)return;const a={};q&&(a.gte=q.format("YYYY-MM-DD")),O&&(a.lte=O.format("YYYY-MM-DD"));const r={...t,values:a};n(e,r)}else{if(0===T.length)return;const a={...t,values:T};n(e,a)}z(null),k([]),R([]),$(null),A(null)})(e),disabled:a?!q&&!O:0===T.length,sx:{textTransform:"none",borderRadius:"6px",backgroundColor:"rgb(70, 134, 128)",boxShadow:"none","&:hover":{backgroundColor:"rgb(50, 114, 108)",boxShadow:"none"}}},"Save Changes"))))}))))},Zt=({reportData:t,dimensions:a,metrics:r,loading:n,onPageChange:l,totalRows:o=0,titleOverrides:i={dimensions:{},metrics:{}}})=>{const[s,d]=e.useState({page:0,pageSize:50}),c=me.default.useMemo(()=>{const e=[];return a.forEach(t=>{let a,r;if(t.relations&&t.relations.length>0){const e=t.fullPath.split("."),r=e[0],n=e[1],l=r.split("_");l.shift();const o=l.join("_");a=o?`${o}_${n}`:n}else a=t.fullPath.replace(".","_");r=i.dimensions[t.fullPath]||t.dimensionTitle||a,e.push({field:a,headerName:r,flex:1,minWidth:150})}),r.forEach(t=>{const a=t.metric;let r,n;if((t.fullPath.match(/\./g)||[]).length>=2)r=t.fullPath.replace(/\./g,"_");else if(t.relations&&t.relations.length>0){const e=t.fullPath.split("."),a=e[0],n=e[1],l=a.split("_");l.shift();const o=l.join("_");r=o?`${o}_${n}`:n}else r=t.metricName;n=i.metrics[t.fullPath]||t.metricTitle||r,e.push({field:r,headerName:n,flex:1,minWidth:150,type:"integer"===a?.type||"currency"===a?.type?"number":"string",renderHeader:()=>me.default.createElement(g.Box,{sx:{display:"flex",alignItems:"center",gap:.5}},me.default.createElement(Ht,{source:a?.source}),me.default.createElement("span",null,n)),valueFormatter:e=>{if(null==e)return"";if(a?.format){const t=ye.default(e).format(a.format);return a?.prefix?`${a.prefix} ${t}`:t}return e}})}),e},[a,r,i]),u=me.default.useMemo(()=>t&&Array.isArray(t)?t.map((e,t)=>{const a={id:t};return Object.entries(e).forEach(([e,t])=>{a[e.replace(/\./g,"_")]=t}),a}):[],[t]);return n?me.default.createElement(g.Box,{display:"flex",justifyContent:"center",alignItems:"center",minHeight:400},me.default.createElement(g.CircularProgress,null)):t&&0!==t.length?me.default.createElement(g.Box,{sx:{height:600,width:"100%"}},me.default.createElement(F.DataGrid,{rows:u,columns:c,paginationModel:s,onPaginationModelChange:e=>{d(e),l&&e.page!==s.page&&l(e.page,e.pageSize)},pageSizeOptions:[10,25,50,100],paginationMode:"server",rowCount:o||u.length,loading:n,disableRowSelectionOnClick:!0,sx:{"& .MuiDataGrid-cell":{padding:"8px"},"& .MuiDataGrid-columnHeader":{backgroundColor:"#f5f5f5",fontWeight:"bold"}}})):me.default.createElement(g.Box,{display:"flex",justifyContent:"center",alignItems:"center",minHeight:400},me.default.createElement(g.Typography,{variant:"body1",color:"textSecondary"},"No data available. Run a report to see results."))};function Xt({children:e,value:t,index:a}){return me.default.createElement("div",{role:"tabpanel",hidden:t!==a,id:`report-tabpanel-${a}`,"aria-labelledby":`report-tab-${a}`},t===a&&me.default.createElement(g.Box,{sx:{py:3}},e))}const ea=({reportDefinitionId:t,cloneData:a,autoRun:r,onBackToList:n})=>{const l=Wt(),o=Ot(),[i,s]=e.useState(null),[d,c]=e.useState(""),[u,f]=e.useState(""),[m,p]=e.useState({dimensions:[],metrics:[],filters:{}}),[h,y]=e.useState({dimensions:{},metrics:{},filters:{}}),[x,b]=e.useState(null),[v,E]=e.useState(!1),[w,C]=e.useState(0),[S,k]=e.useState(0),[T,R]=e.useState(50),[D,B]=e.useState(0),[P,z]=e.useState(!1),[M,I]=e.useState(!1);e.useEffect(()=>{(async()=>{const e=await vt.getProviders();console.log({providers:e}),s(e)})()},[]),e.useEffect(()=>{t&&i&&$(t)},[t,i]),e.useEffect(()=>{a&&i&&O(a)},[a,i]),e.useEffect(()=>{r&&M&&d&&m.dimensions.length>0&&N()},[r,M]);const F=(e,t,a)=>{try{const[r,n]=e.split("."),l=r.split("_");let o=a;const i=[],s=[a],d=[];for(let e=1;e<l.length;e++){const a=l[e],r=t[o];if(!r||!r.relations)return console.warn(`Provider ${o} not found or has no relations`),null;const n=r.relations.find(e=>e.alias===a);if(!n)return console.warn(`Relation with alias ${a} not found in provider ${o}`),null;i.push(n),d.push(n.name),o=n.target,s.push(o)}const c=t[o];if(!c)return console.warn(`Final provider ${o} not found`),null;const u=c.default_alias;if(!c.dimensions||!c.dimensions[u])return console.warn(`Dimensions not found for alias ${u} in provider ${o}`),null;const f=c.dimensions[u][n];return f?{dimension:f,relations:i,providerPath:s,relationNames:d,dimensionKey:n,dimensionTitle:f.title||n,fullPath:e}:(console.warn(`Dimension ${n} not found in provider ${o}, alias ${u}`),null)}catch(t){return console.warn(`Error reconstructing dimension from path ${e}:`,t),null}},q=(e,t,a)=>{try{const r=e.indexOf("."),n=e.substring(0,r),l=e.substring(r+1),o=n.split("_");let i=a;const s=[],d=[a],c=[];for(let e=1;e<o.length;e++){const a=o[e],r=t[i];if(!r||!r.relations)return console.warn(`Provider ${i} not found or has no relations`),null;const n=r.relations.find(e=>e.alias===a);if(!n)return console.warn(`Relation with alias ${a} not found in provider ${i}`),null;s.push(n),c.push(n.name),i=n.target,d.push(i)}const u=t[i];if(!u)return console.warn(`Final provider ${i} not found`),null;if(!u.metrics)return console.warn(`Metrics not found in provider ${i}`),null;const f=u.metrics.find(e=>e.name===l);return f?{metric:f,relations:s,providerPath:d,relationNames:c,metricName:l,metricTitle:f.title||l,fullPath:e}:(console.warn(`Metric ${l} not found in provider ${i}`),null)}catch(t){return console.warn(`Error reconstructing metric from path ${e}:`,t),null}},$=async e=>{try{console.log("Loading report definition:",e);const t=await vt.getReportDefinition({id:e});console.log("Loaded report definition:",t),c(t.provider),f(t.title||"");const a=[],r={};if(t.definition?.doc?.query?.order_by)for(const e of t.definition.doc.query.order_by)!0===e.desc?r[e.name]="desc":r[e.name]="asc";if(t.definition?.doc?.query?.dimensions)for(const e of t.definition.doc.query.dimensions){const n=F(e,i,t.provider);n&&(n.sortOrder=r[e]||null,a.push(n))}const n=[];if(t.definition?.doc?.query?.metrics)for(const e of t.definition.doc.query.metrics){const a=q(e,i,t.provider);a&&n.push(a)}const l={dimensions:{},metrics:{},filters:{}};t.definition?.doc?.query?.titles&&(t.definition.doc.query.titles.dimensions&&(l.dimensions=t.definition.doc.query.titles.dimensions),t.definition.doc.query.titles.metrics&&(l.metrics=t.definition.doc.query.titles.metrics),t.definition.doc.query.titles.filters&&(l.filters=t.definition.doc.query.titles.filters));const o={};if(t.definition?.doc?.query?.filter){const e=t.definition.doc.query.filter;(e.and||e.or||[]).forEach(e=>{const[a,r]=Object.entries(e)[0],n=F(a,i,t.provider);n&&(o[a]={...n,values:r})})}p({dimensions:a,metrics:n,filters:o}),y(l),I(!0),console.log("Reconstructed report:",{dimensions:a,metrics:n,filters:o,titleOverrides:l})}catch(e){console.error("Error loading report definition:",e),l.error("Error loading report definition: "+(e.message||"Unknown error"))}},O=e=>{try{console.log("Loading cloned report:",e),c(e.provider),f(e.title||"");const t=[],a={};if(e.definition?.doc?.query?.order_by)for(const t of e.definition.doc.query.order_by)!0===t.desc?a[t.name]="desc":a[t.name]="asc";if(e.definition?.doc?.query?.dimensions)for(const r of e.definition.doc.query.dimensions){const n=F(r,i,e.provider);n&&(n.sortOrder=a[r]||null,t.push(n))}const r=[];if(e.definition?.doc?.query?.metrics)for(const t of e.definition.doc.query.metrics){const a=q(t,i,e.provider);a&&r.push(a)}const n={dimensions:{},metrics:{},filters:{}};e.definition?.doc?.query?.titles&&(e.definition.doc.query.titles.dimensions&&(n.dimensions=e.definition.doc.query.titles.dimensions),e.definition.doc.query.titles.metrics&&(n.metrics=e.definition.doc.query.titles.metrics),e.definition.doc.query.titles.filters&&(n.filters=e.definition.doc.query.titles.filters));const l={};if(e.definition?.doc?.query?.filter){const t=e.definition.doc.query.filter;(t.and||t.or||[]).forEach(t=>{const[a,r]=Object.entries(t)[0],n=F(a,i,e.provider);n&&(l[a]={...n,values:r})})}p({dimensions:t,metrics:r,filters:l}),y(n),console.log("Loaded cloned report:",{dimensions:t,metrics:r,filters:l,titleOverrides:n})}catch(e){console.error("Error loading cloned report:",e),l.error("Error loading cloned report: "+(e.message||"Unknown error"))}},A=(e=0,t=50)=>{const a=m.dimensions.map(e=>{const t={name:e.fullPath};return"desc"===e.sortOrder&&(t.desc=!0),t}),r=[];m.filters&&Object.keys(m.filters).length>0&&Object.entries(m.filters).forEach(([e,t])=>{t.values&&(Array.isArray(t.values)?t.values.length>0&&r.push({[e]:t.values}):"object"==typeof t.values&&r.push({[e]:t.values}))});const n=r.length>0?{and:r}:null,l={};Object.keys(h.dimensions).length>0&&(l.dimensions=h.dimensions),Object.keys(h.metrics).length>0&&(l.metrics=h.metrics),Object.keys(h.filters).length>0&&(l.filters=h.filters);const i={dimensions:m.dimensions.map(e=>e.fullPath),metrics:m.metrics.map(e=>e.fullPath),order_by:a,limit:t,offset:e*t};Object.keys(l).length>0&&(i.titles=l),n&&(i.filter=n);return{provider:d,doc:{query:i},parameters:o?.parameters||{base_currency:"EUR"}}},j=async(e,t)=>{try{E(!0);const a=A(e,t);console.log("Running report with:",a);const r=await vt.runAdHocReport({report:a});console.log("Report result:",r),b(r),r&&r.length<t?C(e*t+r.length):C((e+2)*t)}catch(e){console.error("Error running report:",e),l.error("Error running report: "+(e.message||"Unknown error")),b(null)}finally{E(!1)}},N=async()=>{k(0),await j(0,T),B(3)},_=d,W=d&&u.trim()&&(m.dimensions.length>0||m.metrics.length>0);return me.default.createElement(g.Box,{sx:{p:3,fontFamily:"system-ui"}},me.default.createElement(g.Box,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2,backgroundColor:"transparent",fontFamily:"system-ui"}},me.default.createElement("h1",null,t?"Edit Report":"Create New Report"),n&&me.default.createElement(g.Button,{variant:"outlined",startIcon:me.default.createElement(Je.default,null),onClick:n},"Back to List")),me.default.createElement(g.Box,{sx:{mt:2,p:3,backgroundColor:"white",borderRadius:"12px",border:"1px solid #e0e0e0",fontFamily:"system-ui",display:"flex",flexDirection:"column",gap:3,boxShadow:"0px 2px 4px rgba(0,0,0,0.02)"}},me.default.createElement(g.Box,{sx:{display:"flex",gap:4,alignItems:"flex-start",flexWrap:"wrap"}},me.default.createElement("div",null,me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1,color:"rgb(37, 37, 37)"}},"Report Title"),me.default.createElement(g.TextField,{value:u,onChange:e=>f(e.target.value),placeholder:"Enter report title",sx:{width:"400px",fontFamily:"system-ui","& .MuiOutlinedInput-root":{backgroundColor:"white",borderRadius:"8px"}},size:"small"})),me.default.createElement("div",null,me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1,color:"rgb(37, 37, 37)"}},"Select Root Provider"),me.default.createElement(Pt,{items:i?Object.keys(i).filter(e=>!0===i[e].base).map(e=>({key:e,value:i[e].name||e})):[],value:d,onChange:e=>{c(e.target.value),p({dimensions:[],metrics:[],filters:{}}),y({dimensions:{},metrics:{},filters:{}}),console.log("Selected root provider:",e.target.value)},sx:{width:"300px",fontFamily:"system-ui"},disabled:!!t}))),me.default.createElement(g.Box,{sx:{display:"flex",gap:2,alignItems:"center"}},me.default.createElement(g.Button,{variant:"contained",onClick:N,disabled:!_,startIcon:me.default.createElement(He.default,null),sx:{height:"40px",fontFamily:"system-ui",borderRadius:"8px",boxShadow:"none",textTransform:"none",backgroundColor:"rgb(70, 134, 128)",fontWeight:500,padding:"0 20px","&:hover":{backgroundColor:"rgb(46, 102, 98)",boxShadow:"none"}}},"Run Report"),me.default.createElement(g.Button,{variant:"outlined",startIcon:me.default.createElement(Ze.default,null),onClick:async()=>{try{E(!0);const e=A();console.log("Downloading report with:",e);const t=(new Date).toISOString().split("T")[0],a=`${(u||"report").replace(/[^a-z0-9]/gi,"_").toLowerCase()}_${t}.csv`;await vt.downloadAdHocReport({report:e,filename:a}),l.success("Report downloaded successfully!")}catch(e){console.error("Error downloading report:",e),l.error("Error downloading report: "+(e.message||"Unknown error"))}finally{E(!1)}},disabled:!_||v,sx:{height:"40px",fontFamily:"system-ui",borderRadius:"8px",boxShadow:"none",textTransform:"none",color:"#9c27b0",borderColor:"#e1bee7",fontWeight:500,padding:"0 20px","&:hover":{borderColor:"#9c27b0",backgroundColor:"rgba(156, 39, 176, 0.04)"}}},"Download CSV"),me.default.createElement(g.Button,{variant:"outlined",startIcon:me.default.createElement(Qe.default,null),onClick:async()=>{if(d)if(u.trim())if(0!==m.dimensions.length||0!==m.metrics.length)try{z(!0);const e=m.dimensions.map(e=>{const t={name:e.fullPath};return"desc"===e.sortOrder&&(t.desc=!0),t}),a={};Object.keys(h.dimensions).length>0&&(a.dimensions=h.dimensions),Object.keys(h.metrics).length>0&&(a.metrics=h.metrics),Object.keys(h.filters).length>0&&(a.filters=h.filters);const r={dimensions:m.dimensions.map(e=>e.fullPath),metrics:m.metrics.map(e=>e.fullPath),order_by:e};if(Object.keys(a).length>0&&(r.titles=a),Object.keys(m.filters).length>0){const e=[];Object.entries(m.filters).forEach(([t,a])=>{a.values&&(Array.isArray(a.values)?a.values.length>0&&e.push({[t]:a.values}):"object"==typeof a.values&&e.push({[t]:a.values}))}),e.length>0&&(r.filter={and:e})}const o={query:r},i={provider:d,title:u.trim(),definition:{provider:d,doc:o,parameters:{base_currency:"EUR"}}};console.log("Saving report definition:",i),t?(await vt.updateReportDefinition({id:t,reportDefinition:i}),l.success("Report definition updated successfully!")):(await vt.createReportDefinition({reportDefinition:i}),l.success("Report definition created successfully!")),n&&n()}catch(e){console.error("Error saving report definition:",e),l.error("Error saving report definition: "+(e.message||"Unknown error"))}finally{z(!1)}else l.warning("Please add at least one dimension or metric");else l.warning("Please enter a report title");else l.warning("Please select a provider first")},disabled:!W||P,sx:{height:"40px",fontFamily:"system-ui",borderRadius:"8px",boxShadow:"none",textTransform:"none",color:"#2e7d32",borderColor:"#a5d6a7",fontWeight:500,padding:"0 20px","&:hover":{borderColor:"#2e7d32",backgroundColor:"rgba(46, 125, 50, 0.04)"}}},P?"Saving...":t?"Update Report":"Save Report"))),d&&me.default.createElement(g.Box,{sx:{mt:2,fontFamily:"system-ui",backgroundColor:"white",px:3,py:2,borderRadius:"8px"}},me.default.createElement(g.Box,{sx:{borderBottom:1,borderColor:"rgba(70, 134, 127, 0.27)"}},me.default.createElement(g.Tabs,{value:D,onChange:(e,t)=>{B(t)},"aria-label":"report builder tabs",sx:{"& .MuiTabs-indicator":{display:"flex",justifyContent:"center",backgroundColor:"rgb(70, 134, 128)"},"& .MuiTabs-indicatorSpan":{backgroundColor:"rgb(70, 134, 128)"}}},me.default.createElement(g.Tab,{label:me.default.createElement(g.Badge,{badgeContent:m.dimensions.length,sx:{"& .MuiBadge-badge":{backgroundColor:"rgb(70, 134, 128)",color:"#fff"}}},me.default.createElement("span",{style:{marginRight:m.dimensions.length>0?"12px":"0"}},"Dimensions")),id:"report-tab-0","aria-controls":"report-tabpanel-0",sx:{height:"41px",fontFamily:"system-ui",borderRadius:"0.5rem",boxShadow:"none",textTransform:"none",color:"rgb(37, 37, 37)","&.Mui-selected":{color:"rgb(70, 134, 128)"}}}),me.default.createElement(g.Tab,{label:me.default.createElement(g.Badge,{badgeContent:m.metrics.length,sx:{"& .MuiBadge-badge":{backgroundColor:"rgb(70, 134, 128)",color:"#fff"}}},me.default.createElement("span",{style:{marginRight:m.metrics.length>0?"12px":"0"}},"Metrics")),id:"report-tab-1","aria-controls":"report-tabpanel-1",sx:{height:"41px",fontFamily:"system-ui",borderRadius:"0.5rem",boxShadow:"none",textTransform:"none",color:"rgb(37, 37, 37)","&.Mui-selected":{color:"rgb(70, 134, 128)"}}}),me.default.createElement(g.Tab,{label:me.default.createElement(g.Badge,{badgeContent:Object.keys(m.filters).length,sx:{"& .MuiBadge-badge":{backgroundColor:"rgb(70, 134, 128)",color:"#fff"}}},me.default.createElement("span",{style:{marginRight:Object.keys(m.filters).length>0?"12px":"0"}},"Filters")),id:"report-tab-2","aria-controls":"report-tabpanel-2",sx:{height:"41px",fontFamily:"system-ui",borderRadius:"0.5rem",boxShadow:"none",textTransform:"none",color:"rgb(37, 37, 37)","&.Mui-selected":{color:"rgb(70, 134, 128)"}}}),me.default.createElement(g.Tab,{label:x?"Results":"Results (Run report first)",id:"report-tab-3","aria-controls":"report-tabpanel-3",disabled:!x,sx:{height:"41px",fontFamily:"system-ui",borderRadius:"0.5rem",boxShadow:"none",textTransform:"none",color:"rgb(37, 37, 37)","&.Mui-selected":{color:"rgb(70, 134, 128)"}}}))),me.default.createElement(Xt,{value:D,index:0},me.default.createElement(Yt,{providersData:i,rootProvider:d,savedDimensions:m.dimensions,onSaveDimension:e=>{p(t=>{const a={...t,dimensions:[...t.dimensions,e]};return console.log("Dimension saved:",e),console.log("Complete report:",a),a})},onRemoveDimension:e=>{p(t=>({...t,dimensions:t.dimensions.filter((t,a)=>a!==e)}))},onReorderDimensions:e=>{p(t=>({...t,dimensions:e}))},titleOverrides:h.dimensions,onUpdateTitle:(e,t)=>{y(a=>({...a,dimensions:{...a.dimensions,[e]:t}}))},onResetTitle:e=>{y(t=>{const a={...t.dimensions};return delete a[e],{...t,dimensions:a}})},existingMetrics:m.metrics,existingFilters:m.filters})),me.default.createElement(Xt,{value:D,index:1},me.default.createElement(Jt,{providersData:i,rootProvider:d,savedMetrics:m.metrics,onSaveMetric:e=>{p(t=>{const a={...t,metrics:[...t.metrics,e]};return console.log("Metric saved:",e),console.log("Complete report:",a),a})},onRemoveMetric:e=>{p(t=>({...t,metrics:t.metrics.filter((t,a)=>a!==e)}))},onReorderMetrics:e=>{p(t=>({...t,metrics:e}))},titleOverrides:h.metrics,onUpdateTitle:(e,t)=>{y(a=>({...a,metrics:{...a.metrics,[e]:t}}))},onResetTitle:e=>{y(t=>{const a={...t.metrics};return delete a[e],{...t,metrics:a}})},existingDimensions:m.dimensions,existingFilters:m.filters})),me.default.createElement(Xt,{value:D,index:2},me.default.createElement(Qt,{providersData:i,rootProvider:d,savedFilters:m.filters,existingDimensions:m.dimensions,existingMetrics:m.metrics,onSaveFilter:(e,t)=>{p(a=>{const r={...a,filters:{...a.filters,[e]:t}};return console.log("Filter saved:",{fullPath:e,filterData:t}),console.log("Complete report:",r),r})},onRemoveFilter:e=>{p(t=>{const a={...t.filters};return delete a[e],{...t,filters:a}})},titleOverrides:h.filters,dimensionTitleOverrides:h.dimensions,onUpdateTitle:(e,t)=>{y(a=>({...a,filters:{...a.filters,[e]:t}}))},onResetTitle:e=>{y(t=>{const a={...t.filters};return delete a[e],{...t,filters:a}})}})),me.default.createElement(Xt,{value:D,index:3},x&&me.default.createElement(Zt,{reportData:x,dimensions:m.dimensions,metrics:m.metrics,loading:v,onPageChange:async(e,t)=>{k(e),t!==T&&R(t),await j(e,t)},totalRows:w,titleOverrides:h}))))},ta=()=>{const[t,a]=e.useState("list"),[r,n]=e.useState(null),[l,o]=e.useState(null),[i,s]=e.useState(!1),[d,c]=e.useState(0),u=e=>{n(e),o(null),s(!1),a("builder")},f=()=>{n(null),o(null),s(!1),a("builder")},m=e=>{n(e),o(null),s(!0),a("builder")},p=e=>{n(null),o(e),s(!1),a("builder")};return"list"===t?me.default.createElement(Ut,{onSelectReport:u,onAddNew:f,onCloneReport:p,onRunReport:m,refreshTrigger:d}):me.default.createElement(ea,{reportDefinitionId:r,cloneData:l,autoRun:i,onBackToList:()=>{n(null),o(null),s(!1),a("list"),c(e=>e+1)}})};var aa={Chart:Ft,Dashboard:function({id:t,api:a,params:r,onNavigate:n}){const l=t||"dynamic_dashboard",o=Ot(),i=a||o?.api||{},s=r||o?.parameters||{},[d,c]=me.default.useState(),[u]=me.default.useState(),[f,m]=me.default.useState([]),p=me.default.useRef({});e.useEffect(()=>{vt.setBaseUrl(i.base_url),vt.setToken(i.token)},[i]);const g=async e=>{const t=e?.doc?.rows||[],a=[],r=e=>{if(e?.override?.filter?.length){const t={};e.override.filter.forEach(e=>{e.hasOwnProperty("value")&&(t[e.field]=[e.value])}),e.filter=t}};for(let e=0;e<t.length;e++){const n=t[e];n.columns?.forEach(e=>{r(e),e.views?.forEach(r)}),a.push(n)}m(a)};return me.default.useEffect(()=>{(async()=>{vt.setBaseUrl(i.base_url),vt.setToken(i.token),await vt.loadDashboardMeta({dashboardId:l});const e=await vt.getDashboard({id:l});p.current[e?.id]=e,c(e),await g(e)})().catch(e=>console.error(e.message))},[l]),me.default.createElement(Me.default,{maxWidth:!1,disableGutters:!0},me.default.createElement(Be.default,{container:!0,spacing:3},f?.map((e,t)=>{const a=(e=>0===e?12:12/e)(e.columns.length);return me.default.createElement(me.default.Fragment,{key:t},1===t?me.default.createElement(Be.default,{size:{xs:12}},me.default.createElement(Be.default,{container:!0,spacing:3},e.columns.map((e,t)=>me.default.createElement(jt,{key:t,column:e,md:a,api:i,cache:p.current,dashboard:d,schema:u,params:s,onNavigate:n})))):e.columns.map((e,t)=>me.default.createElement(jt,{key:t,column:e,md:a,api:i,cache:p.current,dashboard:d,schema:u,params:s,onNavigate:n})))})))},ReportApp:({params:t,api:a})=>(vt._initialized||(vt.setBaseUrl(a.base_url),vt.setToken(a.token),vt._initialized=!0),e.useEffect(()=>{vt.setBaseUrl(a.base_url),vt.setToken(a.token)},[a]),me.default.createElement(_t,null,me.default.createElement($t,{defaultParameters:t,defaultApi:a},me.default.createElement(ce.ThemeProvider,{theme:ce.createTheme({palette:{primary:{main:"rgb(70, 134, 128)"}},components:{MuiButton:{styleOverrides:{root:{borderRadius:8,textTransform:"none",boxShadow:"none","&:hover":{boxShadow:"none"}}}},MuiTooltip:{styleOverrides:{tooltip:{fontSize:"0.875rem",backgroundColor:"rgba(97, 97, 97, 0.95)",maxWidth:500},arrow:{color:"rgba(97, 97, 97, 0.95)"}},defaultProps:{arrow:!0,enterDelay:300,leaveDelay:200}},MuiPopper:{defaultProps:{style:{zIndex:1500}}}}})},me.default.createElement(ta,null)))))};exports.default=aa;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@mui/material/Paper"),a=require("@mui/material/Box"),n=require("@mui/material/CircularProgress"),r=require("react-google-charts"),l=require("numeral"),o=require("axios"),i=require("@mui/material/Typography"),s=require("@mui/material/Link"),d=require("@mui/icons-material/OpenInNew"),c=require("nunjucks"),u=require("@mui/material/FormControl"),f=require("@mui/material/Select"),m=require("@mui/material/MenuItem"),p=require("react-intersection-observer"),g=require("@mui/material"),h=require("@mui/icons-material/CheckBoxOutlineBlank"),y=require("@mui/icons-material/CheckBox"),x=require("eventemitter3"),b=require("@mui/material/Grid"),v=require("@mui/material/IconButton"),E=require("@mui/material/Tooltip"),w=require("@mui/material/Container"),C=require("@mui/icons-material/InsertChartOutlined"),S=require("@mui/icons-material/FormatListBulleted"),k=require("@mui/icons-material/TableChartOutlined"),T=require("@mui/icons-material/BarChart"),R=require("@mui/icons-material/PieChartOutline"),D=require("@mui/icons-material/DonutLarge"),B=require("@mui/icons-material/ShowChart"),P=require("@mui/icons-material/StackedLineChart"),z=require("@mui/icons-material/MapOutlined"),M=require("@mui/icons-material/PinOutlined"),I=require("@mui/icons-material/QueryStats"),F=require("@mui/x-data-grid"),q=require("@mui/icons-material/Add"),$=require("@mui/icons-material/Edit"),O=require("@mui/icons-material/ContentCopy"),A=require("@mui/icons-material/Delete"),j=require("@mui/icons-material/PlayArrow"),N=require("@mui/icons-material/Restore"),_=require("@mui/icons-material/ArrowBack"),W=require("@mui/icons-material/Save"),K=require("@mui/icons-material/Download"),U=require("@dnd-kit/core"),L=require("@dnd-kit/sortable"),G=require("@dnd-kit/utilities"),Y=require("@mui/icons-material/DragIndicator"),H=require("@mui/icons-material/ArrowUpward"),V=require("@mui/icons-material/ArrowDownward"),J=require("@mui/icons-material/Sort"),Q=require("@mui/icons-material/Check"),Z=require("@mui/icons-material/Close"),X=require("@mui/icons-material/RestartAlt"),ee=require("@mui/icons-material/PlaylistAdd"),te=require("@mui/icons-material/Storage"),ae=require("@mui/icons-material/TrendingUp"),ne=require("@mui/icons-material/Bolt"),re=require("@mui/icons-material/FilterAlt"),le=require("@mui/icons-material/InfoOutlined"),oe=require("@mui/x-date-pickers/LocalizationProvider"),ie=require("@mui/x-date-pickers/DatePicker"),se=require("@mui/x-date-pickers/AdapterDayjs"),de=require("dayjs"),ce=require("@mui/material/styles");function ue(e){return e&&e.__esModule?e:{default:e}}function fe(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(a){if("default"!==a){var n=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(t,a,n.get?n:{enumerable:!0,get:function(){return e[a]}})}}),t.default=e,Object.freeze(t)}var me=fe(e),pe=ue(t),ge=ue(a),he=ue(n),ye=ue(l),xe=ue(o),be=ue(i),ve=ue(s),Ee=ue(d),we=ue(c),Ce=ue(u),Se=ue(f),ke=ue(m),Te=ue(h),Re=ue(y),De=ue(x),Be=ue(b),Pe=ue(v),ze=ue(E),Me=ue(w),Ie=ue(C),Fe=ue(S),qe=ue(k),$e=ue(T),Oe=ue(R),Ae=ue(D),je=ue(B),Ne=ue(P),_e=ue(z),We=ue(M),Ke=ue(I),Ue=ue(q),Le=ue($),Ge=ue(O),Ye=ue(A),He=ue(j),Ve=ue(N),Je=ue(_),Qe=ue(W),Ze=ue(K),Xe=ue(Y),et=ue(H),tt=ue(V),at=ue(J),nt=ue(Q),rt=ue(Z),lt=ue(X),ot=ue(ee),it=ue(te),st=ue(ae),dt=ue(ne),ct=ue(re),ut=ue(le),ft=ue(de);function mt(){return mt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},mt.apply(null,arguments)}function pt(e){return me.default.createElement(ge.default,mt({},e,{sx:{width:"100%","& > * + *":{mt:2},...e?.sx||{}}}),me.default.createElement(he.default,{style:{color:"rgb(70, 134, 128)"},size:25}))}function gt(e,t,a="array"){const n=e.columns,r=[...t.doc.metrics,...t.doc.dimensions].reduce((e,t)=>(e[t.name]=t,e),{});return e=>{const t="array"===a?[]:{};return n.reduce((t,n)=>{const l=e[n.name],o=r[n.name];let i=l;return i=o?"timestamp"===o.type?new Date(l):o.format?o.format&&o.prefix?{v:+l,f:o.prefix+" "+ye.default(l).format(o.format)}:o.format?{v:+l,f:ye.default(l).format(o.format)}:l:l:l,"array"===a?t.push(i):t[n.name]=i?.f||i,t},t)}}const ht="https://report-api.netcapital.pro",yt=xe.default.create({baseURL:ht,headers:{"Content-Type":"application/json"}}),xt={},bt=()=>{const e=Object.keys(xt);return e.length>0?e[0]:null},vt={setBaseUrl(e){yt.defaults.baseURL=e||ht},setToken(e){e&&(yt.defaults.headers.common.Authorization=`Bearer ${e}`)},loadDashboardMeta:async({dashboardId:e})=>{const{data:t}=await yt.get(`/dashboard-meta/${e}`);return xt[e]={dashboards:t.dashboards||{},charts:t.charts||{},reports:t.reports||{},reportMetadata:t.reportMetadata||{},dateRanges:t.dateRanges||[]},console.log({dashboardMeta:xt[e]}),xt[e]},getDashboard:async({id:e,dashboardId:t})=>{const a=t||bt();if(a&&xt[a]?.dashboards?.[e])return xt[a].dashboards[e];const{data:n}=await yt.get(`/entity/dashboards/${e}`);return n},getChart:async({id:e,dashboardId:t})=>{const a=t||bt();if(a&&xt[a]?.charts?.[e])return xt[a].charts[e];const{data:n}=await yt.get(`/entity/charts/${e}`);return n},getReport:async({source:e,dashboardId:t})=>{const{id:a,type:n}=e,r=t||bt();if(r&&xt[r]?.reports?.[a])return xt[r].reports[a];const l="dynamic"===n?`/report-build/${a}/report`:`/entity/reports/${a}`,{data:o}=await yt.get(l);return o},getProviders:async()=>{const{data:e}=await yt.get("/entity/providers");return e},getReportSchema:async({source:e,dashboardId:t,query:a={}})=>{const{id:n,type:r}=e,l=t||bt();if(l&&xt[l]?.reportMetadata?.[n])return xt[l].reportMetadata[n];const o="dynamic"===r?`/report-build/${n}/schema`:`/reports/${n}/metadata`,{data:i}=await yt.post(o,a);return i},runReport:async({source:e,query:t={}})=>{const{id:a,type:n}=e,r="dynamic"===n?`/report-build/${a}/run`:`/reports/${a}/run`,{data:l}=await yt.post(r,t);return l},runAdHocReport:async({report:e})=>{const{data:t}=await yt.post("/report-build/run",e);return t},downloadAdHocReport:async({report:e,filename:t})=>{const a=await yt.post("/report-build/run?download=csv",e,{responseType:"blob"}),n=window.URL.createObjectURL(new Blob([a.data])),r=document.createElement("a");r.href=n;let l=t||"report.csv";if(!t){const e=a.headers["content-disposition"];if(e){const t=e.match(/filename="?(.+)"?/i);t&&t[1]&&(l=t[1])}}r.setAttribute("download",l),document.body.appendChild(r),r.click(),r.remove(),window.URL.revokeObjectURL(n)},getDateRanges:async({dashboardId:e}={})=>{const t=e||bt();if(t&&xt[t]?.dateRanges)return xt[t].dateRanges;const{data:a}=await yt.get("/globals/date-ranges");return a},getReportDefinitions:async()=>{const{data:e}=await yt.get("/report-definitions");return e},getReportDefinition:async({id:e})=>{const{data:t}=await yt.get(`/report-definitions/${e}`);return t},createReportDefinition:async({reportDefinition:e})=>{const{data:t}=await yt.post("/report-definitions",e);return t},updateReportDefinition:async({id:e,reportDefinition:t})=>{const{data:a}=await yt.put(`/report-definitions/${e}`,t);return a},deleteReportDefinition:async({id:e})=>{const{data:t}=await yt.delete(`/report-definitions/${e}`);return t}};!function(e,t){void 0===t&&(t={});var a=t.insertAt;if("undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css","top"===a&&n.firstChild?n.insertBefore(r,n.firstChild):n.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}("/* Google Charts Table styling — class names here are referenced from\n * GoogleChart.js via the `cssClassNames` option and must stay in sync. */\n\n.ncGcHeaderRow {\n font-size: 13px;\n}\n\n.ncGcHeaderCell {\n background-color: #ffffff !important;\n padding: 12px 16px !important;\n border-bottom: 1px solid #e5e7eb !important;\n border-right: none !important;\n font-weight: 600 !important;\n color: #6b7280 !important;\n text-align: left !important;\n white-space: nowrap;\n}\n\n.ncGcTableRow,\n.ncGcOddTableRow {\n font-size: 14px;\n background-color: #ffffff;\n}\n\n.ncGcTableRow a,\n.ncGcOddTableRow a {\n color: #468682;\n text-decoration: underline;\n}\n\n.ncGcTableRow a:hover,\n.ncGcOddTableRow a:hover {\n color: #305f5c;\n}\n\n.ncGcHoverTableRow {\n background-color: #f9fafb !important;\n}\n\n.ncGcTableCell {\n padding: 12px 16px !important;\n border-bottom: 1px solid #f1f2f4 !important;\n border-right: none !important;\n color: #1f2937;\n}\n");const Et={headerRow:"ncGcHeaderRow",headerCell:"ncGcHeaderCell",tableRow:"ncGcTableRow",oddTableRow:"ncGcOddTableRow",hoverTableRow:"ncGcHoverTableRow",tableCell:"ncGcTableCell"},wt={none:"YYYY-MM-dd",day:"MMM dd",week:"MMM dd",month:"YYYY MMM",year:"YYYY"};const Ct={GoogleChart:function({chart:t,source:a,view:n,report:l,schema:o,dashboard:i,query:s,params:d}){const[c,u]=me.default.useState([]),[f,m]=me.default.useState([]);e.useEffect(()=>{(async()=>{const e=await vt.getDateRanges();m(e)})()},[]);const p=e.useMemo(()=>{const e="YYYY-MM-dd",t=s?.date_range?.name,a=f.find(e=>e.name===t);if(!a)return e;return wt[a?.granularity]||e},[f,s]);me.default.useEffect(()=>{if(!(t&&n&&a&&l&&o))return;let e=[];e.push(function(e,t){const a=[...t.doc.metrics,...t.doc.dimensions];return e.columns.reduce((e,t)=>{const n=a.find(e=>e.name===t.name)||t;return e.push(n.title||n.name),e},[])}(n,o));const r=gt(n,o);a?.forEach(t=>{const a=r(t);e.push(a)}),a?.length?u(e):u()},[t,a,n,l,o]);const g=(n?.columns||[]).filter(e=>e.hidden).map(e=>e.name),h=(n?.columns||[]).map((e,t)=>g.includes(e.name)?-1:t).filter(e=>-1!==e),y=e=>e&&"object"==typeof e&&"v"in e?e.v:e,x={client_id:d?.client},b=c?.length?c.map((e,t)=>0===t?h.map(t=>e[t]):h.map(t=>{const a=n.columns[t],r=e[t];if(!a?.link)return r;const l=(o=a.link,i=e,o.replace(/\{\{([\w.]+)\}\}/g,(e,t)=>{if(t.startsWith("params.")){const e=t.slice(7);return encodeURIComponent(d?.[e]??"")}const a=(n?.columns||[]).findIndex(e=>e.name===t);return a>=0?encodeURIComponent(y(i[a])??""):t in x?encodeURIComponent(x[t]??""):d&&t in d?encodeURIComponent(d[t]??""):""}));var o,i;const s=(c=(e=>e&&"object"==typeof e&&"f"in e?e.f:e)(r),String(c??"").replace(/[&<>"']/g,e=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}[e])));var c;return{v:y(r),f:`<a href="${l}" target="blank">${s}</a>`}})):c,v=t?.doc?.chart?.options?.maxHeight,E=v?{maxHeight:v,overflow:"auto"}:{};return c?me.default.createElement("div",{style:E},me.default.createElement(r.Chart,mt({width:t?.doc.size?.width||"100%",chartType:t?.doc.chart?.type,data:b,options:(e=>{const a=["#468682","#ff686b","#6c757d","#FFD700","#073b4c"];if("Table"===t?.doc.chart?.type)return{...t?.doc.chart?.options,cssClassNames:Et,allowHtml:!0};if("AreaChart"===t?.doc.chart?.type){const n=t?.doc.chart?.options?.hAxis||{},r={...{ticks:e.slice(1).map(e=>e[0]),format:p},...n};return{...t?.doc.chart?.options,hAxis:r,focusTarget:"category",colors:a}}return{...t?.doc.chart?.options,colors:a}})(c)},t?.doc.chart?.props,{chartEvents:[{eventName:"select",callback:({chartWrapper:e})=>{const t=e.getChart().getSelection();if(!t.length)return;const{row:a}=t[0],r=c[a+1],l=(n?.columns||[]).reduce((e,t,a)=>{const n=r[a];return e[t.name]=n&&"object"==typeof n&&"v"in n?n.v:n,e},{});console.log("clicked row:",a,l)}}]}))):me.default.createElement("div",null)},LabelChart:function({chart:e,source:t,view:a,report:n,schema:r,onViewChange:l,onNavigate:o}){const[i,s]=me.default.useState([]),[d,c]=me.default.useState(),[u,f]=me.default.useState();me.default.useEffect(()=>{if(!(e&&a&&t&&n&&r))return;let l=[];const o=gt(a,r);t.forEach(e=>l.push(o(e))),s(l);const i=e?.doc?.chart?.options||{},d=i?.index||0;if(l.length>0&&c(l[0][d]),i.subText?.format){we.default.configure({autoescape:!1});const e=gt(a,r,"object")(t[0]),n=we.default.renderString(i.subText?.format,e);f(n)}},[e,t,a,n,r]);const m=e?.doc?.chart?.options?.nextView,p="number"==typeof m&&"function"==typeof l,g=e?.doc?.chart?.options?.onNavigate,h=!!g?.url&&"function"==typeof o;return me.default.createElement("div",{style:{display:"flex",justifyContent:"center",alignContent:"center",height:"100%",flexDirection:"column"}},me.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:8}},me.default.createElement(be.default,{variant:"h6"},d?.f||d),p&&me.default.createElement(ve.default,{component:"button",variant:"h6",onClick:()=>l(m),style:{lineHeight:1,fontSize:"2rem"}},"»"),h&&me.default.createElement(ve.default,{component:"button",onClick:()=>{let e;if(null!=g?.ctx)if("string"==typeof g.ctx)try{e=JSON.parse(g.ctx)}catch(t){console.warn("LabelChart onNavigate: failed to parse ctx as JSON",t),e=g.ctx}else e=g.ctx;o(g.url,e)},style:{lineHeight:1,display:"inline-flex",alignItems:"center"},"aria-label":"navigate"},me.default.createElement(Ee.default,{fontSize:"small"}))),me.default.createElement(be.default,{variant:"caption"},u))}};function St(e,t){return void 0!==Ct[e]?me.default.createElement(Ct[e],t):me.default.createElement(pt,t)}const kt=me.createElement(Te.default,{fontSize:"small"}),Tt=me.createElement(Re.default,{fontSize:"small"});function Rt({items:t,selectedKeys:a,defaultSelectedKeys:n,onChange:r,inputValue:l,defaultInputValue:o,onInputChange:i,onInputChangeImmediate:s,debounceMs:d=300,label:c,placeholder:u,loading:f,disabled:m,size:p="small",error:h,helperText:y,limitTags:x=3,disableClearable:b,id:v,textFieldProps:E}){const w=e.useMemo(()=>Array.isArray(t)?t:[],[t]),C=Array.isArray(a),[S,k]=e.useState(Array.isArray(n)?n:[]),T=C?a:S,R=e.useMemo(()=>{const e=new Map;for(const t of w)e.set(t&&t.key,t);return e},[w]),D=e.useMemo(()=>(Array.isArray(T)?T:[]).map(e=>R.get(e)).filter(Boolean),[T,R]),B="string"==typeof l,[P,z]=e.useState("string"==typeof o?o:""),M=B?l:P,I=function(t,a=300){const n=e.useRef(t),r=e.useRef(null);return n.current=t,e.useEffect(()=>()=>{r.current&&window.clearTimeout(r.current)},[]),me.useCallback((...e)=>{n.current&&(r.current&&window.clearTimeout(r.current),r.current=window.setTimeout(()=>{n.current&&n.current(...e)},a))},[a])}(e=>{i&&i(e)},d),F=D;return me.createElement(g.FormControl,{fullWidth:!0,error:h,disabled:m},me.createElement(g.Autocomplete,{openOnFocus:!0,forcePopupIcon:!0,id:v,multiple:!0,disableCloseOnSelect:!0,options:w,value:F,inputValue:M,getOptionLabel:e=>e&&"object"==typeof e?e.value??"":"",isOptionEqualToValue:(e,t)=>e&&t&&e.key===t.key,loading:f,limitTags:x,disableClearable:b,onChange:(e,t)=>{const a=Array.isArray(t)?t.map(e=>e&&e.key):[];C||k(a),r&&r(a,Array.isArray(t)?t:[])},onInputChange:(e,t,a)=>{if(B||z(t??""),"input"===a||"clear"===a){s&&s("clear"===a?"":t??"")}"input"===a?I(t??""):"clear"===a&&I("")},renderOption:(e,t,{selected:a})=>me.createElement("li",mt({},e,{key:t&&t.key||Math.random().toString(36)}),me.createElement(g.Checkbox,{icon:kt,checkedIcon:Tt,style:{marginRight:8},checked:!!a}),t&&t.value),renderTags:(e,t)=>(Array.isArray(e)?e:[]).map((e,a)=>me.createElement(g.Chip,mt({},t({index:a}),{key:e&&e.key||a,label:e&&e.value||""}))),renderInput:e=>me.createElement(g.TextField,mt({},e,{label:c,placeholder:u,InputProps:{...e.InputProps,endAdornment:me.createElement(me.Fragment,null,f?me.createElement(g.CircularProgress,{size:18}):null,e.InputProps.endAdornment)},size:p},E))}),y?me.createElement(g.FormHelperText,null,y):null)}const Dt=({filter:t,channel:a,query:n})=>{const r=n?.filter?.and?.find(e=>!!e[t?.filter])?.[t?.filter]||[],[l,o]=e.useState([]),[i,s]=e.useState(r),[d,c]=e.useState(!1),[u,f]=e.useState("");return e.useEffect(()=>{(async()=>{c(!0);const e=await async function(e,t){return t?.source?(await vt.runReport({source:{id:t.source},query:{parameters:e?.parameters||{}}})).map(e=>({key:e[t.field],value:e[t.field]})):[]}(n,t);o(e),c(!1)})()},[u]),me.default.createElement("div",{style:{display:"flex"}},me.default.createElement("div",{style:{maxWidth:640,minWidth:200}},me.default.createElement(Rt,{id:t?.title,label:t?.title,placeholder:"Type to search…",items:l,selectedKeys:i,onChange:(e,n)=>{s(e),a.emit("filterChanged",t,{[t.filter]:e})},onInputChange:e=>{f(e)},loading:d,debounceMs:300,helperText:i.length?`${i.length} selected`:""})))},Bt=e=>e?.replace(/([a-z])([A-Z])/g,"$1 $2")?.replace(/_/g," ")?.replace(/-/g," ").replace(/\b\w/g,e=>e.toUpperCase());function Pt({items:e,value:t,onChange:a,sx:n={width:"100%"},disabled:r=!1,label:l}){const o=e.some(e=>e.key===t)?t:"";return me.default.createElement(ge.default,{sx:n},me.default.createElement(Ce.default,{fullWidth:!0,size:"small"},me.default.createElement(Se.default,{value:o,onChange:a,disabled:r,displayEmpty:!0,MenuProps:{style:{maxHeight:300}},sx:{height:"40px",borderRadius:"8px",fontFamily:"system-ui",backgroundColor:"white","& .MuiSelect-select":{display:"flex",alignItems:"center",padding:"8px 12px"},"& fieldset":{borderColor:"rgba(0,0,0,0.23)"},"&:hover fieldset":{borderColor:"rgb(70, 134, 128) !important"},"&.Mui-focused fieldset":{borderColor:"rgb(70, 134, 128) !important"}}},me.default.createElement(ke.default,{value:"",disabled:!0,sx:{color:"rgba(37, 37, 37, 0.58)"}},Bt(l)),e.map(e=>{const{key:t,value:a,disabled:n,icon:r}=e;return me.default.createElement(ke.default,{key:t,value:t,disabled:n,sx:{fontFamily:"system-ui",minHeight:"36px",display:"flex",alignItems:"center",gap:"6px"}},r&&me.default.createElement(ge.default,{component:"span",sx:{display:"inline-flex",alignItems:"center"}},r),Bt(a))}))))}const zt=({filter:t,channel:a,query:n})=>{const[r,l]=e.useState([]),[o,i]=e.useState("");return e.useEffect(()=>{i(n?.date_range?.name)},[n]),e.useEffect(()=>{(async()=>{const e=(await vt.getDateRanges()).filter(e=>!(t.allowedOptions.length>0)||t.allowedOptions.some(t=>t===e.name)).map(e=>({key:e.name,value:e.title}));l(e)})()},[]),me.default.createElement("div",{style:{minWidth:"200px",maxWidth:"640px"}},me.default.createElement(Pt,{items:r,value:o,label:t?.title,onChange:(e,n)=>{const r=e.target.value;i(r),a.emit("filterChanged",t,{date_range:{name:r}})}}))},Mt=({filters:e=[],channel:t,query:a})=>me.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px"}},e.map(e=>"multi-select"===e.type?me.default.createElement(Dt,{key:e.title,channel:t,filter:e,query:a}):"date-range"===e.type?me.default.createElement(zt,{key:e.title,channel:t,filter:e,query:a}):null));const It=e.createContext(void 0);var Ft=({id:t,cache:a,dashboard:n,channel:r,...l})=>{const[o,i]=me.default.useState(),[s,d]=me.default.useState(),[c,u]=me.default.useState(),[f,m]=me.default.useState(),[g,h]=me.default.useState(St()),[y,x]=me.default.useState(),[b,v]=me.default.useState(0),[E,w]=me.default.useState(!1),[C,S]=me.default.useState(),[k,T]=me.default.useState(!1),R=me.default.useRef({value:l?.filter}),[D,B]=me.default.useState({});e.useEffect(()=>{console.log("CHART",{id:t})},[t]);const P=e.useContext(It);if(P&&"chart"===P.mode&&P.chart&&P.chart.length>0){const e=P.chart.split(",").some(e=>e===t);if(!e)return null}const{ref:z,inView:M,entry:I}=p.useInView({threshold:.1,delay:1e3}),F=(e=>me.default.useRef(e||new De.default).current)(r);!function(e){const t=me.default.useRef({});me.default.useEffect(()=>{if(!e)return;const a=function(a,n){const r={...t.current,...n};t.current=r,e.emit("mergedFilterChanged",{value:r})};return e.on("filterChanged",a),()=>{e.off("filterChanged",a)}},[e])}(F);const q=me.default.useCallback(e=>{const t=e.target.value;v(t),x(o.doc.view[t])},[o]);me.default.useEffect(()=>{t&&(async()=>{const e=t,n=a?.[e]||await vt.getChart({id:e}),r=n.doc.source?.id,o=n?.doc?.source||{},s=r?a?.[r]||await vt.getReport({source:o}):void 0,c=a?.[`schema_${r}`]||l?.schema||await vt.getReportSchema({source:o}),f=n.doc?.view?.[0];v(0),d(s),i(n),x(f),u(c),T(!0)})().catch(e=>{console.error(e.message)})},[t]),me.default.useEffect(()=>{o&&f&&(!o?.doc?.source?.id||s)&&c&&(async()=>{h(St(o.doc.chart?.component,{view:y,source:f,chart:o,report:s,schema:c,dashboard:n,query:D,params:l.params,onViewChange:l.onViewChange,onNavigate:l.onNavigate}))})().catch(e=>{console.error(e.message)})},[o,f,y,s,c]);const $=e=>{const t=s?.doc.query.filter||{},a=e?.value?.date_range;let n=a||s?.doc.query.date_range;const r=o?.doc?.filters?.find(e=>"date-range"===e.type);r&&!n&&(n={name:r.default,field:r.filter});const i={and:[...t.and||[],...Object.entries(l?.filter||{}).map(([e,t])=>({[e]:t})),...Object.entries(e?.value||{}).map(([e,t])=>({[e]:t})).filter(e=>!e.date_range)]};if(T(!1),S(),w(!0),"context"===o?.doc?.source?.type)return m({filter:i}),void w(!1);n&&!n.field&&(n.field=o?.doc?.filters?.find(e=>"date-range"===e.type)?.filter);const d={filter:i,date_range:n,parameters:l?.params};B(d),vt.runReport({source:o.doc.source,query:d}).then(e=>{m(o.doc.source.reverse?e.reverse():e)}).catch(e=>{m([])}).finally(()=>{w(!1)})},O=e=>{R.current=e,M?$(e):(S(e),T(!0))};return me.default.useEffect(()=>(F?.on("mergedFilterChanged",O),()=>{F?.off("mergedFilterChanged",O)}),[F,s,o,M]),me.default.useEffect(()=>{M&&k&&o&&$(C)},[M,k,o]),me.default.useEffect(()=>{T(!0)},[l.params]),me.default.createElement(pe.default,{ref:z,elevation:0,style:{borderRadius:12,padding:20,border:"1px solid #e5e5e5",background:"#fff",display:"flex",flexDirection:"column",gap:"12px",height:"100%"}},(o||l?.headerActions)&&me.default.createElement("div",{style:{display:"flex",alignItems:"center",lineHeight:0}},o&&me.default.createElement(be.default,{variant:"subtitle2",style:{fontWeight:600,color:"#252525"}},l?.title||o.doc.name," "),l?.headerActions&&me.default.createElement("div",{style:{marginLeft:"auto",lineHeight:"normal"}},l.headerActions)),E?me.default.createElement(pt,{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%",width:"100%"}}):me.default.createElement(me.default.Fragment,null,me.default.createElement("div",{style:{display:"flex"}},me.default.createElement("div",{style:{flexGrow:1}}),me.default.createElement("div",null,o?.doc?.view?.length>1&&me.default.createElement(Ce.default,{variant:"standard"},me.default.createElement(Se.default,{variant:"standard",labelId:"date-range-select-label",id:"date-range-select",value:b,onChange:q,style:{fontSize:"12px"},disableUnderline:!0},o.doc.view.map((e,t)=>me.default.createElement(ke.default,{key:t,value:t},e.title)))))),me.default.createElement("div",{style:{position:"relative",flexGrow:n?void 0:1,display:"flex",flexDirection:"column"}},me.default.createElement(Mt,{filters:o?.doc?.filters,channel:F,query:D}),g)))};const qt=e.createContext(void 0),$t=({defaultParameters:t={},defaultApi:a={},children:n})=>{const r={base_currency:"EUR",...t},[l,o]=e.useState(r),[i,s]=e.useState(a);e.useEffect(()=>{const e={base_currency:"EUR",...t};o(e)},[t]),e.useEffect(()=>{s(a)},[a]);const d={parameters:l,setParameters:e=>{const t={base_currency:"EUR",...e};o(t)},api:i,setApi:s,setReportingContext:({parameters:e,api:t})=>{if(void 0!==e){const t={base_currency:"EUR",...e};o(t)}void 0!==t&&s(t)}};return me.default.createElement(qt.Provider,{value:d},n)},Ot=()=>e.useContext(qt),At={count:We.default,list:Fe.default,table:qe.default,bar:$e.default,pie:Oe.default,donut:Ae.default,line:je.default,area:Ne.default,map:_e.default,stats:Ke.default};function jt({column:e,md:t,api:a,cache:n,dashboard:r,schema:l,params:o,onNavigate:i}){const s=Array.isArray(e.views)?e.views:null,[d,c]=me.default.useState(0);if(s&&s.length>0){const u=Math.min(d,s.length-1),f=s[u],m=me.default.createElement(ge.default,{display:"flex"},s.map((e,t)=>{const a=(e=>At[e]||Ie.default)(e.icon),n=t===u;return me.default.createElement(ze.default,{key:e.id||t,title:e.name||e.id||""},me.default.createElement(Pe.default,{size:"small",onClick:()=>c(t),"aria-label":e.name||e.id,"aria-pressed":n,style:{color:n?"#468682":"#9ca3af"}},me.default.createElement(a,{fontSize:"small"})))}));return me.default.createElement(Be.default,{size:{xs:12,md:t}},me.default.createElement(Ft,{api:a,cache:n,id:f.id,dashboard:r,schema:l,title:e.name||f.title,filter:f.filter,params:o,headerActions:m,onViewChange:e=>{"number"==typeof e&&e>=0&&e<s.length&&c(e)},onNavigate:i}))}return me.default.createElement(Be.default,{size:{xs:12,md:t}},me.default.createElement(Ft,{api:a,cache:n,id:e.id,dashboard:r,schema:l,title:e.title,filter:e.filter,params:o,onNavigate:i}))}const Nt=e.createContext(),_t=({children:t})=>{const[a,n]=e.useState({open:!1,message:"",severity:"info",duration:6e3}),r=(e,t="info",a=6e3)=>{n({open:!0,message:e,severity:t,duration:a})},l=(e,t)=>{"clickaway"!==t&&n(e=>({...e,open:!1}))},o={success:(e,t)=>r(e,"success",t),error:(e,t)=>r(e,"error",t),warning:(e,t)=>r(e,"warning",t),info:(e,t)=>r(e,"info",t)};return me.default.createElement(Nt.Provider,{value:o},t,me.default.createElement(g.Snackbar,{open:a.open,autoHideDuration:a.duration,onClose:l,anchorOrigin:{vertical:"top",horizontal:"right"}},me.default.createElement(g.Alert,{onClose:l,severity:a.severity,variant:"filled",sx:{width:"100%"}},a.message)))},Wt=()=>{const t=e.useContext(Nt);if(!t)throw new Error("useNotify must be used within a NotifyProvider");return t},Kt=({open:e,title:t="Confirm Action",message:a,onConfirm:n,onCancel:r,confirmText:l="Confirm",cancelText:o="Cancel",confirmColor:i="error"})=>me.default.createElement(g.Dialog,{open:e,onClose:r,"aria-labelledby":"confirm-dialog-title","aria-describedby":"confirm-dialog-description"},me.default.createElement(g.DialogTitle,{id:"confirm-dialog-title"},t),me.default.createElement(g.DialogContent,null,me.default.createElement(g.DialogContentText,{id:"confirm-dialog-description"},a)),me.default.createElement(g.DialogActions,null,me.default.createElement(g.Button,{onClick:r,variant:"outlined"},o),me.default.createElement(g.Button,{onClick:n,variant:"contained",color:i,autoFocus:!0},l))),Ut=({onSelectReport:t,onAddNew:a,onCloneReport:n,onRunReport:r,refreshTrigger:l})=>{const o=Wt(),[i,s]=e.useState([]),[d,c]=e.useState(!0),[u,f]=e.useState(null),[m,p]=e.useState(!1),[h,y]=e.useState(null);e.useEffect(()=>{x()},[l]);const x=async()=>{try{c(!0),f(null);const e=await vt.getReportDefinitions();s(e)}catch(e){console.error("Error loading report definitions:",e);const t="Failed to load report definitions: "+(e.message||"Unknown error");f(t),o.error(t)}finally{c(!1)}},b=(e,t)=>{t.stopPropagation();const a=i.find(t=>t.id===e);y(a),p(!0)},v=[{field:"title",headerName:"Title",flex:1,minWidth:200},{field:"provider",headerName:"Provider",flex:1,minWidth:200},{field:"source",headerName:"Source",flex:1,minWidth:150},{field:"actions",headerName:"Actions",width:200,sortable:!1,filterable:!1,disableColumnMenu:!0,renderCell:e=>{const a="user-override"===e.row.source;return me.default.createElement(g.Box,{sx:{display:"flex",gap:1}},me.default.createElement(g.Tooltip,{title:"Run"},me.default.createElement(g.IconButton,{size:"small",color:"success",onClick:t=>{return a=e.row.id,t.stopPropagation(),void r(a);var a}},me.default.createElement(He.default,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:"Edit"},me.default.createElement(g.IconButton,{size:"small",color:"primary",onClick:a=>{return n=e.row.id,a.stopPropagation(),void t(n);var n}},me.default.createElement(Le.default,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:"Clone"},me.default.createElement(g.IconButton,{size:"small",onClick:t=>(async(e,t)=>{t.stopPropagation();try{const t=await vt.getReportDefinition({id:e}),a={...t,title:`${t.title} (Copy)`};n(a)}catch(e){console.error("Error cloning report:",e),o.error("Failed to clone report: "+(e.message||"Unknown error"))}})(e.row.id,t)},me.default.createElement(Ge.default,{fontSize:"small"}))),a?me.default.createElement(g.Tooltip,{title:"Revert to the system report"},me.default.createElement(g.IconButton,{size:"small",color:"warning",onClick:t=>b(e.row.id,t)},me.default.createElement(Ve.default,{fontSize:"small"}))):me.default.createElement(g.Tooltip,{title:"Delete"},me.default.createElement(g.IconButton,{size:"small",color:"error",onClick:t=>b(e.row.id,t)},me.default.createElement(Ye.default,{fontSize:"small"}))))}}],E=i.map(e=>({id:e.id,title:e.title,provider:e.provider,source:e.source}));return d?me.default.createElement(g.Box,{display:"flex",justifyContent:"center",alignItems:"center",minHeight:400},me.default.createElement(g.CircularProgress,null)):u?me.default.createElement(g.Box,{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",minHeight:400,gap:2},me.default.createElement(g.Typography,{variant:"body1",color:"error"},u),me.default.createElement(g.Button,{variant:"contained",onClick:x},"Retry")):me.default.createElement(g.Box,{sx:{p:3,display:"flex",flexDirection:"column",fontFamily:"system-ui"}},me.default.createElement(g.Box,{sx:{display:"flex",justifyContent:"flex-end",alignItems:"center",mb:2,fontFamily:"system-ui"}},me.default.createElement(g.Button,{variant:"contained",sx:{backgroundColor:" rgb(70, 134, 128)",borderRadius:"0.5rem",boxShadow:"none",textTransform:"none"},startIcon:me.default.createElement(Ue.default,null),onClick:a},"Add New Report")),me.default.createElement(g.Box,{sx:{flex:1,width:"100%",borderRadius:"0.5rem",overflow:"hidden",fontFamily:"system-ui"}},me.default.createElement(F.DataGrid,{rows:E,columns:v,pageSize:10,rowsPerPageOptions:[10,25,50],disableSelectionOnClick:!0,onRowClick:e=>{t(e.row.id)},sx:{height:"100%",borderRadius:"0.5rem",overflow:"hidden",fontFamily:"system-ui","& .MuiDataGrid-columnHeaders":{backgroundColor:"#ffff"},"& .MuiDataGrid-columnHeaderTitle":{fontWeight:"600 !important",fontSize:"0.875rem !important"},"& .MuiDataGrid-columnHeader:first-of-type":{borderTopLeftRadius:"0.5rem"},"& .MuiDataGrid-columnHeader:last-of-type":{borderTopRightRadius:"0.5rem"},"& .MuiDataGrid-row":{cursor:"pointer",fontSize:"0.875rem !important"},"& .MuiDataGrid-row:hover":{backgroundColor:"#f6f5f5ff"}}})),me.default.createElement(Kt,{open:m,title:"user-override"===h?.source?"Revert Report Definition":"Delete Report Definition",message:h?"user-override"===h.source?`Are you sure you want to revert "${h.title}" to the system version? Your custom changes will be lost.`:`Are you sure you want to delete "${h.title}"? This action cannot be undone.`:"",onConfirm:async()=>{if(!h)return;const e="user-override"===h.source,t=e?"reverted":"deleted";try{await vt.deleteReportDefinition({id:h.id}),o.success(e?`Report "${h.title}" reverted to system version successfully!`:`Report "${h.title}" deleted successfully!`),p(!1),y(null),x()}catch(e){console.error(`Error ${t} report:`,e),o.error(`Failed to ${t.toLowerCase()} report: `+(e.response?.data?.message||e.message||"Unknown error")),p(!1),y(null)}},onCancel:()=>{p(!1),y(null)},confirmText:"user-override"===h?.source?"Revert":"Delete",cancelText:"Cancel",confirmColor:"user-override"===h?.source?"warning":"error"}))},Lt=({providersData:t,rootProvider:a,onSelectionChange:n,existingDimensions:r=[],existingMetrics:l=[],existingFilters:o={}})=>{const[i,s]=e.useState([]);e.useEffect(()=>{s([]),n&&n([])},[a]);const d=e=>{if(!t||!e)return[];const a=t[e];if(!a||!a.relations||0===a.relations.length)return[];const n=(()=>{const e=new Map,t=t=>{if(t.relations&&t.providerPath)for(let a=0;a<t.relations.length;a++){const n=t.relations[a],r=t.providerPath[a];n.type&&(e.has(r)||e.set(r,new Set),e.get(r).add(n.name))}};return r.forEach(t),l.forEach(t),Object.values(o).forEach(t),e})().get(e);return a.relations.filter(e=>t[e.target]).map(e=>{let t=!1,a=null;if(!!e.type&&n&&n.size>0){if(!n.has(e.name)&&n.size>0){t=!0;a=`Cannot select: '${Array.from(n)[0]}' is already in use`}}return{key:e.name,value:e.name,targetKey:e.target,disabled:t,disabledReason:a}}).sort((e,t)=>e.value.localeCompare(t.value))},c=(e,t)=>{const r=t.target.value,l=0===e?a:i[e-1].targetKey,o=d(l).find(e=>e.key===r);if(!o)return;const c=i.slice(0,e);c.push({providerKey:r,relationName:r,targetKey:o.targetKey}),s(c),console.log("Selection chain:",c),n&&n(c)};return me.default.createElement(g.Box,null,i.length>0&&me.default.createElement(g.Box,{sx:{marginBottom:2}},me.default.createElement(g.Box,{sx:{display:"flex",alignItems:"center",gap:1.5,flexWrap:"wrap"}},me.default.createElement(g.Chip,{label:Bt(a),size:"medium",variant:"outlined",sx:{fontWeight:600,borderColor:"rgb(70, 134, 128)",color:"rgb(70, 134, 128)",backgroundColor:"white",height:"32px",fontFamily:"system-ui"}}),i.map((e,t)=>me.default.createElement(me.default.Fragment,{key:t},me.default.createElement(g.Typography,{variant:"body2",sx:{color:"#9e9e9e",fontWeight:"bold"}},"→"),me.default.createElement(g.Chip,{label:Bt(e.targetKey),size:"medium",onDelete:()=>(e=>{const t=i.slice(0,e);s(t),n&&n(t)})(t),sx:{fontWeight:500,backgroundColor:"rgb(70, 134, 128)",color:"white",height:"32px",fontFamily:"system-ui","& .MuiChip-deleteIcon":{color:"rgba(255, 255, 255, 0.7)","&:hover":{color:"white"}}}}))))),me.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",alignItems:"flex-start",gap:"16px"}},(()=>{if(!t||!a)return null;const e=[],n=d(a);n.length>0&&e.push(me.default.createElement("div",{key:"level-0",style:{marginRight:"16px"}},me.default.createElement(Pt,{items:n,value:i[0]?.providerKey||"",label:`Related to ${a}`,onChange:e=>c(0,e),sx:{width:"300px"}})));for(let t=0;t<i.length;t++){const a=i[t],n=d(a.targetKey);if(n.length>0){const r=i[t+1];e.push(me.default.createElement("div",{key:`level-${t+1}`,style:{marginRight:"16px"}},me.default.createElement(Pt,{items:n,value:r?.providerKey||"",label:`Related to ${a.targetKey}`,onChange:e=>c(t+1,e),sx:{width:"300px"}})))}}return e})()))},Gt=({id:t,label:a,fullLabel:n,onDelete:r,onMoveUp:l,onMoveDown:o,isFirst:i,isLast:s,sortOrder:d,onSortOrderChange:c,fullPath:u,defaultTitle:f,customTitle:m,onUpdateTitle:p,onResetTitle:h})=>{const[y,x]=e.useState(!1),[b,v]=e.useState(""),E=e.useRef(null),w=e.useRef(null),{attributes:C,listeners:S,setNodeRef:k,transform:T,transition:R,isDragging:D}=L.useSortable({id:t}),B={transform:G.CSS.Transform.toString(T),transition:R,opacity:D?.5:1,display:"flex",alignItems:"center",width:"100%"};e.useEffect(()=>{y&&E.current&&(E.current.focus(),E.current.select())},[y]),e.useEffect(()=>{const e=e=>{y&&w.current&&!w.current.contains(e.target)&&z()};if(y)return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[y]);const P=()=>{const e=b.trim();""!==e?(p(u,e),x(!1)):z()},z=()=>{x(!1),v("")},M=m||a,I=!!m;return me.default.createElement("div",mt({ref:k,style:B},C),me.default.createElement(g.Box,{ref:w,sx:{display:"flex",alignItems:"center",width:"100%",gap:1,backgroundColor:"white",border:"1px solid #e0e0e0",borderRadius:2,padding:1,transition:"transform 0.2s ease, box-shadow 0.2s ease","&:hover .hover-icons":{opacity:1}}},me.default.createElement(g.Box,mt({},S,{sx:{display:"flex",alignItems:"center",cursor:"grab","&:active":{cursor:"grabbing"}}}),me.default.createElement(Xe.default,{sx:{cursor:"grab",color:"rgba(110, 110, 110, 0.62)"}})),y?me.default.createElement(me.default.Fragment,null,me.default.createElement(g.TextField,{inputRef:E,value:b,onChange:e=>v(e.target.value),onKeyDown:e=>{"Enter"===e.key?P():"Escape"===e.key&&z()},size:"small",sx:{minWidth:"200px",maxWidth:"400px"}}),me.default.createElement(g.Box,{className:"hover-icons",sx:{display:"flex",gap:.5,opacity:1}},me.default.createElement(g.Tooltip,{title:"Save",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:P,color:"primary","aria-label":"save title"},me.default.createElement(nt.default,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:"Cancel",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:z,"aria-label":"cancel edit"},me.default.createElement(rt.default,{fontSize:"small"}))),I&&me.default.createElement(g.Tooltip,{title:"Reset to default",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:()=>{h(u),x(!1),v("")},color:"warning","aria-label":"reset title"},me.default.createElement(lt.default,{fontSize:"small"})))),me.default.createElement(g.Box,{sx:{flex:1}})):me.default.createElement(me.default.Fragment,null,me.default.createElement(g.Box,{sx:{minWidth:0}},me.default.createElement(g.Tooltip,{title:n||M,arrow:!0,placement:"top"},me.default.createElement(g.Typography,{variant:"h6",sx:{fontWeight:I?600:500,fontStyle:I?"italic":"normal",color:"#1a1a1a",fontSize:"14px",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},M))),me.default.createElement(g.Box,{className:"hover-icons",sx:{display:"flex",gap:.5,opacity:0,transition:"opacity 0.2s"}},me.default.createElement(g.Tooltip,{title:"Edit title",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:()=>{v(m||f),x(!0)},"aria-label":"edit title"},me.default.createElement(Le.default,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:null===d?"No sort":"asc"===d?"Ascending":"Descending",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:()=>{c(null===d?"asc":"asc"===d?"desc":null)},"aria-label":"toggle sort order",color:d?"primary":"default"},"asc"===d?me.default.createElement(et.default,{fontSize:"small"}):"desc"===d?me.default.createElement(tt.default,{fontSize:"small"}):me.default.createElement(at.default,{fontSize:"small",sx:{opacity:.3}}))),me.default.createElement(g.Tooltip,{title:"Delete",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:r,"aria-label":"delete",sx:{color:"#ef5350"}},me.default.createElement(F.GridDeleteIcon,{fontSize:"small"})))),me.default.createElement(g.Box,{sx:{flex:1}}),me.default.createElement(g.Box,{className:"hover-icons",sx:{display:"flex",gap:.5,opacity:0,transition:"opacity 0.2s"}},me.default.createElement(g.IconButton,{size:"small",onClick:l,disabled:i,"aria-label":"move up"},me.default.createElement(et.default,{fontSize:"small"})),me.default.createElement(g.IconButton,{size:"small",onClick:o,disabled:s,"aria-label":"move down"},me.default.createElement(tt.default,{fontSize:"small"}))))))},Yt=({providersData:t,rootProvider:a,savedDimensions:n=[],onSaveDimension:r,onRemoveDimension:l,onReorderDimensions:o,titleOverrides:i={},onUpdateTitle:s,onResetTitle:d,existingMetrics:c=[],existingFilters:u={}})=>{const[f,m]=e.useState(!1),[p,h]=e.useState([]),[y,x]=e.useState(""),b=U.useSensors(U.useSensor(U.PointerSensor),U.useSensor(U.KeyboardSensor,{coordinateGetter:L.sortableKeyboardCoordinates})),v=()=>{const e=a?0===p.length?a:p[p.length-1].targetKey:null;if(!e||!t||!t[e])return[];const r=t[e];if(!r.dimensions)return[];const l=[t[a].default_alias];let o=a;p.forEach(e=>{const a=t[o];if(a&&a.relations){const t=a.relations.find(t=>t.name===e.relationName);t&&l.push(t.alias)}o=e.targetKey});const i=new Set(n.map(e=>e.fullPath)),s=[];return Object.keys(r.dimensions).forEach(t=>{const a=r.dimensions[t];Object.keys(a).forEach(n=>{const r=a[n],o=`${l.join("_")}.${n}`,d=i.has(o);s.push({key:`${e}_${t}.${n}`,value:r.title||n,dimensionKey:n,alias:t,dimension:r,disabled:d})})}),s.sort((e,t)=>e.value.localeCompare(t.value))},E=()=>{m(!1),h([]),x("")},w=e=>{const t=[a];return e.relationNames&&e.relationNames.length>0&&t.push(...e.relationNames),t.join(" → ")};return me.default.createElement("div",null,me.default.createElement(g.Box,{sx:{display:"flex",justifyContent:"flex-start",mb:2}},!f&&me.default.createElement(g.Button,{variant:"contained",startIcon:me.default.createElement(F.GridAddIcon,null),onClick:()=>{m(!0),h([]),x("")},sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",textTransform:"none",backgroundColor:"rgb(70, 134, 128)",boxShadow:"none","&:hover":{backgroundColor:"rgb(50, 114, 108)",boxShadow:"none"}}},"Add Dimension")),f&&me.default.createElement(g.Paper,{elevation:0,sx:{p:3,mb:3,border:"1px solid #e0e0e0",borderRadius:"12px",backgroundColor:"white",boxShadow:"0px 2px 4px rgba(0,0,0,0.02)",fontFamily:"system-ui"}},me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1.5,color:"rgb(37, 37, 37)"}},"Select Provider Path"),me.default.createElement(g.Box,{sx:{mb:3}},me.default.createElement(Lt,{providersData:t,rootProvider:a,onSelectionChange:h,existingDimensions:n,existingMetrics:c,existingFilters:u})),me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1.5,color:"rgb(37, 37, 37)"}},"Select Dimension"),me.default.createElement(g.Box,{sx:{display:"flex",alignItems:"center",gap:2,mb:3}},me.default.createElement(Pt,{items:v(),value:y,label:"Choose Dimension",onChange:e=>{x(e.target.value)},sx:{width:"400px",fontFamily:"system-ui"}}),me.default.createElement(g.Tooltip,{title:"Add all available dimensions",arrow:!0,placement:"top"},me.default.createElement("span",null,me.default.createElement(g.IconButton,{onClick:()=>{const e=v().filter(e=>!e.disabled);if(0===e.length)return;const n=[],l=[a],o=[];let i=a;p.forEach(e=>{const a=t[i];if(a&&a.relations){const t=a.relations.find(t=>t.name===e.relationName);t&&(n.push(t),o.push(t.name))}l.push(e.targetKey),i=e.targetKey});const s=[t[a].default_alias];n.forEach(e=>{s.push(e.alias)}),e.forEach(e=>{const t=`${s.join("_")}.${e.dimensionKey}`,a={dimension:e.dimension,relations:n,providerPath:l,relationNames:o,dimensionKey:e.dimensionKey,dimensionTitle:e.value,fullPath:t};r(a)}),E()},disabled:0===v().filter(e=>!e.disabled).length,"aria-label":"add all dimensions",sx:{color:"rgb(70, 134, 128)",border:"1px solid #e0e0e0",borderRadius:"8px",padding:"8px","&:hover":{backgroundColor:"#f5f5f5"},"&.Mui-disabled":{opacity:.5}}},me.default.createElement(ot.default,null))))),me.default.createElement(g.Box,{sx:{display:"flex",justifyContent:"flex-end",gap:2,mt:3}},me.default.createElement(g.Button,{variant:"outlined",onClick:E,sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",boxShadow:"none",borderColor:"#e0e0e0",color:"rgb(37, 37, 37)",textTransform:"none","&:hover":{backgroundColor:"#f5f5f5",borderColor:"#d0d0d0"}}},"Cancel"),me.default.createElement(g.Button,{variant:"contained",onClick:()=>{if(!y)return;const e=v().find(e=>e.key===y);if(!e)return;const n=[],l=[a],o=[];let i=a;p.forEach(e=>{const a=t[i];if(a&&a.relations){const t=a.relations.find(t=>t.name===e.relationName);t&&(n.push(t),o.push(t.name))}l.push(e.targetKey),i=e.targetKey});const s=[t[a].default_alias];n.forEach(e=>{s.push(e.alias)});const d=`${s.join("_")}.${e.dimensionKey}`,c={dimension:e.dimension,relations:n,providerPath:l,relationNames:o,dimensionKey:e.dimensionKey,dimensionTitle:e.value,fullPath:d};r(c),E()},disabled:!y,sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",boxShadow:"none",textTransform:"none",backgroundColor:"rgb(70, 134, 128)","&:hover":{backgroundColor:"rgb(50, 114, 108)",boxShadow:"none"}}},"Save Dimension"))),n.length>0&&me.default.createElement(g.Box,{sx:{marginTop:0}},me.default.createElement(g.Typography,{variant:"h6",sx:{fontSize:"16px",fontWeight:600,marginTop:2,color:"rgb(37, 37, 37)"}},"Saved Dimensions"),me.default.createElement(g.Typography,{sx:{fontSize:"13px",color:"#666",marginBottom:2}},"Drag to reorder or use arrows"),me.default.createElement(U.DndContext,{sensors:b,collisionDetection:U.closestCenter,onDragEnd:e=>{const{active:t,over:a}=e;if(a&&t.id!==a.id){const e=n.findIndex((e,a)=>a===t.id),r=n.findIndex((e,t)=>t===a.id),l=L.arrayMove(n,e,r);o(l)}}},me.default.createElement(L.SortableContext,{items:n.map((e,t)=>t),strategy:L.verticalListSortingStrategy},me.default.createElement(g.Box,{sx:{display:"flex",flexDirection:"column",gap:1}},n.map((e,t)=>me.default.createElement(Gt,{key:t,id:t,label:e.dimensionTitle,fullLabel:`${w(e)} → ${e.dimensionTitle} (${e.fullPath})`,onDelete:()=>l(t),onMoveUp:()=>(e=>{if(e>0){const t=L.arrayMove(n,e,e-1);o(t)}})(t),onMoveDown:()=>(e=>{if(e<n.length-1){const t=L.arrayMove(n,e,e+1);o(t)}})(t),isFirst:0===t,isLast:t===n.length-1,sortOrder:e.sortOrder||null,onSortOrderChange:e=>((e,t)=>{const a=[...n];a[e]={...a[e],sortOrder:t},o(a)})(t,e),fullPath:e.fullPath,defaultTitle:e.dimensionTitle,customTitle:i[e.fullPath],onUpdateTitle:s,onResetTitle:d})))))))},Ht=({source:e})=>{const t={fontSize:"15px"};return"kpi"===e?me.default.createElement(g.Tooltip,{title:"KPI Metric",arrow:!0,placement:"top"},me.default.createElement(st.default,{sx:{...t,color:"rgb(70, 134, 128)"}})):"dynamic"===e?me.default.createElement(g.Tooltip,{title:"Dynamic Metric",arrow:!0,placement:"top"},me.default.createElement(dt.default,{sx:{...t,color:"#e65100"}})):"provider"===e?me.default.createElement(g.Tooltip,{title:"Provider Metric",arrow:!0,placement:"top"},me.default.createElement(it.default,{sx:{...t,color:"#546e7a"}})):null},Vt=({id:t,label:a,fullLabel:n,onDelete:r,onMoveUp:l,onMoveDown:o,isFirst:i,isLast:s,fullPath:d,defaultTitle:c,customTitle:u,onUpdateTitle:f,onResetTitle:m,source:p})=>{const[h,y]=e.useState(!1),[x,b]=e.useState(""),v=e.useRef(null),E=e.useRef(null),{attributes:w,listeners:C,setNodeRef:S,transform:k,transition:T,isDragging:R}=L.useSortable({id:t}),D={transform:G.CSS.Transform.toString(k),transition:T,opacity:R?.5:1,display:"flex",alignItems:"center",width:"100%"};e.useEffect(()=>{h&&v.current&&(v.current.focus(),v.current.select())},[h]),e.useEffect(()=>{const e=e=>{h&&E.current&&!E.current.contains(e.target)&&P()};if(h)return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[h]);const B=()=>{const e=x.trim();""!==e?(f(d,e),y(!1)):P()},P=()=>{y(!1),b("")},z=u||a,M=!!u;return me.default.createElement("div",mt({ref:S,style:D},w),me.default.createElement(g.Box,{ref:E,sx:{display:"flex",alignItems:"center",width:"100%",gap:1,backgroundColor:"white",border:"1px solid #e0e0e0",borderRadius:2,padding:1,transition:"transform 0.2s ease, box-shadow 0.2s ease","&:hover .hover-icons":{opacity:1}}},me.default.createElement(g.Box,mt({},C,{sx:{display:"flex",alignItems:"center",cursor:"grab","&:active":{cursor:"grabbing"}}}),me.default.createElement(Xe.default,{sx:{cursor:"grab",color:"rgba(110, 110, 110, 0.62)"}})),h?me.default.createElement(me.default.Fragment,null,me.default.createElement(g.TextField,{inputRef:v,value:x,onChange:e=>b(e.target.value),onKeyDown:e=>{"Enter"===e.key?B():"Escape"===e.key&&P()},size:"small",sx:{minWidth:"200px",maxWidth:"400px"}}),me.default.createElement(g.Box,{className:"hover-icons",sx:{display:"flex",gap:.5,opacity:1}},me.default.createElement(g.Tooltip,{title:"Save",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:B,color:"primary","aria-label":"save title"},me.default.createElement(nt.default,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:"Cancel",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:P,"aria-label":"cancel edit"},me.default.createElement(rt.default,{fontSize:"small"}))),M&&me.default.createElement(g.Tooltip,{title:"Reset to default",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:()=>{m(d),y(!1),b("")},color:"warning","aria-label":"reset title"},me.default.createElement(lt.default,{fontSize:"small"})))),me.default.createElement(g.Box,{sx:{flex:1}})):me.default.createElement(me.default.Fragment,null,p&&me.default.createElement(g.Box,{sx:{display:"flex",alignItems:"center",flexShrink:0}},me.default.createElement(Ht,{source:p})),me.default.createElement(g.Box,{sx:{minWidth:0}},me.default.createElement(g.Tooltip,{title:n||z,arrow:!0,placement:"top"},me.default.createElement(g.Typography,{variant:"h6",sx:{fontWeight:M?600:500,fontStyle:M?"italic":"normal",color:"#1a1a1a",fontSize:"14px",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},z))),me.default.createElement(g.Box,{className:"hover-icons",sx:{display:"flex",gap:.5,opacity:0,transition:"opacity 0.2s"}},me.default.createElement(g.Tooltip,{title:"Edit title",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:()=>{b(u||c),y(!0)},"aria-label":"edit title"},me.default.createElement(Le.default,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:"Delete",arrow:!0,placement:"top"},me.default.createElement(g.IconButton,{size:"small",onClick:r,"aria-label":"delete",sx:{color:"#ef5350"}},me.default.createElement(F.GridDeleteIcon,{fontSize:"small"})))),me.default.createElement(g.Box,{sx:{flex:1}}),me.default.createElement(g.Box,{className:"hover-icons",sx:{display:"flex",gap:.5,opacity:0,transition:"opacity 0.2s"}},me.default.createElement(g.IconButton,{size:"small",onClick:l,disabled:i,"aria-label":"move up"},me.default.createElement(et.default,{fontSize:"small"})),me.default.createElement(g.IconButton,{size:"small",onClick:o,disabled:s,"aria-label":"move down"},me.default.createElement(tt.default,{fontSize:"small"}))))))},Jt=({providersData:t,rootProvider:a,savedMetrics:n=[],onSaveMetric:r,onRemoveMetric:l,onReorderMetrics:o,titleOverrides:i={},onUpdateTitle:s,onResetTitle:d,existingDimensions:c=[],existingFilters:u={}})=>{const[f,m]=e.useState(!1),[p,h]=e.useState([]),[y,x]=e.useState(""),b=U.useSensors(U.useSensor(U.PointerSensor),U.useSensor(U.KeyboardSensor,{coordinateGetter:L.sortableKeyboardCoordinates})),v=()=>{const e=a?0===p.length?a:p[p.length-1].targetKey:null;if(!e||!t||!t[e])return[];const r=t[e];if(!r.metrics)return[];const l=[t[a].default_alias];let o=a;p.forEach(e=>{const a=t[o];if(a&&a.relations){const t=a.relations.find(t=>t.name===e.relationName);t&&l.push(t.alias)}o=e.targetKey});const i=new Set(n.map(e=>e.fullPath)),s=r.metrics.map((t,a)=>{const n=`${l.join("_")}.${t.name}`,r=i.has(n);return{key:`${e}_${t.name}_${a}`,value:t.title||t.name,metricName:t.name,metric:t,disabled:r,icon:t.source?me.default.createElement(Ht,{source:t.source}):void 0}});return s.sort((e,t)=>e.value.localeCompare(t.value))},E=()=>{m(!1),h([]),x("")},w=e=>{const t=[a];return e.relationNames&&e.relationNames.length>0&&t.push(...e.relationNames),t.join(" → ")};return me.default.createElement("div",null,me.default.createElement(g.Box,{sx:{display:"flex",justifyContent:"flex-start",mb:2}},!f&&me.default.createElement(g.Button,{variant:"contained",startIcon:me.default.createElement(F.GridAddIcon,null),onClick:()=>{m(!0),h([]),x("")},sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",textTransform:"none",backgroundColor:"rgb(70, 134, 128)",boxShadow:"none","&:hover":{backgroundColor:"rgb(50, 114, 108)",boxShadow:"none"}}},"Add Metric")),f&&me.default.createElement(g.Paper,{elevation:0,sx:{p:3,mb:3,border:"1px solid #e0e0e0",borderRadius:"12px",backgroundColor:"white",boxShadow:"0px 2px 4px rgba(0,0,0,0.02)",fontFamily:"system-ui"}},me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1.5,color:"rgb(37, 37, 37)"}},"Select Provider Path"),me.default.createElement(g.Box,{sx:{mb:3}},me.default.createElement(Lt,{providersData:t,rootProvider:a,onSelectionChange:h,existingDimensions:c,existingMetrics:n,existingFilters:u})),me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1.5,color:"rgb(37, 37, 37)"}},"Select Metric"),me.default.createElement(g.Box,{sx:{display:"flex",alignItems:"center",gap:2,mb:3}},me.default.createElement(Pt,{items:v(),value:y,label:"Choose Metric",onChange:e=>{x(e.target.value)},sx:{width:"400px",fontFamily:"system-ui"}}),me.default.createElement(g.Tooltip,{title:"Add all available metrics",arrow:!0,placement:"top"},me.default.createElement("span",null,me.default.createElement(g.IconButton,{onClick:()=>{const e=v().filter(e=>!e.disabled);if(0===e.length)return;const n=[],l=[a],o=[];let i=a;p.forEach(e=>{const a=t[i];if(a&&a.relations){const t=a.relations.find(t=>t.name===e.relationName);t&&(n.push(t),o.push(t.name))}l.push(e.targetKey),i=e.targetKey});const s=[t[a].default_alias];n.forEach(e=>{s.push(e.alias)}),e.forEach(e=>{const t=`${s.join("_")}.${e.metricName}`,a={metric:e.metric,relations:n,providerPath:l,relationNames:o,metricName:e.metricName,metricTitle:e.value,fullPath:t};r(a)}),E()},disabled:0===v().filter(e=>!e.disabled).length,"aria-label":"add all metrics",sx:{color:"rgb(70, 134, 128)",border:"1px solid #e0e0e0",borderRadius:"8px",padding:"8px","&:hover":{backgroundColor:"#f5f5f5"},"&.Mui-disabled":{opacity:.5}}},me.default.createElement(ot.default,null))))),me.default.createElement(g.Box,{sx:{display:"flex",justifyContent:"flex-end",gap:2,mt:3}},me.default.createElement(g.Button,{variant:"outlined",onClick:E,sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",boxShadow:"none",borderColor:"#e0e0e0",color:"rgb(37, 37, 37)",textTransform:"none","&:hover":{backgroundColor:"#f5f5f5",borderColor:"#d0d0d0"}}},"Cancel"),me.default.createElement(g.Button,{variant:"contained",onClick:()=>{if(!y)return;const e=v().find(e=>e.key===y);if(!e)return;const n=[],l=[a],o=[];let i=a;p.forEach(e=>{const a=t[i];if(a&&a.relations){const t=a.relations.find(t=>t.name===e.relationName);t&&(n.push(t),o.push(t.name))}l.push(e.targetKey),i=e.targetKey});const s=[t[a].default_alias];n.forEach(e=>{s.push(e.alias)});const d=`${s.join("_")}.${e.metricName}`,c={metric:e.metric,relations:n,providerPath:l,relationNames:o,metricName:e.metricName,metricTitle:e.value,fullPath:d};r(c),E()},disabled:!y,sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",boxShadow:"none",textTransform:"none",backgroundColor:"rgb(70, 134, 128)","&:hover":{backgroundColor:"rgb(50, 114, 108)",boxShadow:"none"}}},"Save Metric"))),n.length>0&&me.default.createElement(g.Box,{sx:{marginTop:0}},me.default.createElement(g.Typography,{variant:"h6",sx:{fontSize:"16px",fontWeight:600,marginBottom:1,color:"rgb(37, 37, 37)"}},"Saved Metrics"),me.default.createElement(U.DndContext,{sensors:b,collisionDetection:U.closestCenter,onDragEnd:e=>{const{active:t,over:a}=e;if(a&&t.id!==a.id){const e=n.findIndex((e,a)=>a===t.id),r=n.findIndex((e,t)=>t===a.id),l=L.arrayMove(n,e,r);o(l)}}},me.default.createElement(L.SortableContext,{items:n.map((e,t)=>t),strategy:L.verticalListSortingStrategy},me.default.createElement(g.Box,{sx:{display:"flex",flexDirection:"column",gap:1}},n.map((e,t)=>me.default.createElement(Vt,{key:t,id:t,label:e.metricTitle,fullLabel:`${w(e)} → ${e.metricTitle} (${e.fullPath})`,onDelete:()=>l(t),onMoveUp:()=>(e=>{if(e>0){const t=L.arrayMove(n,e,e-1);o(t)}})(t),onMoveDown:()=>(e=>{if(e<n.length-1){const t=L.arrayMove(n,e,e+1);o(t)}})(t),isFirst:0===t,isLast:t===n.length-1,fullPath:e.fullPath,defaultTitle:e.metricTitle,customTitle:i[e.fullPath],onUpdateTitle:s,onResetTitle:d,source:e.metric?.source})))))))},Qt=({providersData:t,rootProvider:a,savedFilters:n={},onSaveFilter:r,onRemoveFilter:l,existingDimensions:o=[],existingMetrics:i=[],titleOverrides:s={},dimensionTitleOverrides:d={},onUpdateTitle:c,onResetTitle:u})=>{const f=Ot(),[m,p]=e.useState(!1),[h,y]=e.useState(!1),[x,b]=e.useState([]),[v,E]=e.useState(""),[w,C]=e.useState(""),[S,k]=e.useState([]),[T,R]=e.useState([]),[D,B]=e.useState(!1),[P,z]=e.useState(null),[M,I]=e.useState(""),[q,$]=e.useState(null),[O,A]=e.useState(null),[j,N]=e.useState(null),[_,W]=e.useState("");e.useEffect(()=>{E(""),k([]),R([]),$(null),A(null),I("")},[x]);const K=e=>e&&("date"===e.type||"timestamp"===e.type),U=()=>{const e=a?0===x.length?a:x[x.length-1].targetKey:null;if(!e||!t||!t[e])return[];const n=t[e];if(!n.dimensions)return[];const r=[];return Object.keys(n.dimensions).forEach(t=>{const a=n.dimensions[t];Object.keys(a).forEach(n=>{const l=a[n];l.column&&r.push({key:`${e}_${t}.${n}`,value:l.title||n,dimensionKey:n,alias:t,dimension:l})})}),r.sort((e,t)=>e.value.localeCompare(t.value))},L=()=>{p(!1),y(!1),b([]),E(""),C(""),k([]),R([]),$(null),A(null),I(""),z(null)},G=()=>{z(null),k([]),R([]),$(null),A(null),I("")},Y=e=>{const t=_.trim();""!==t?(c(e,t),N(null),W("")):H()},H=()=>{N(null),W("")},V=async(e,t="")=>{B(!0);try{const n=f?.parameters||{base_currency:"EUR"},r={dimensions:[e],metrics:[],order_by:[{name:e}]};t&&""!==t.trim()&&(r.filter={and:[{[e]:{ilike:`${t.trim()}%`}}]});const l={provider:a,doc:{query:r},parameters:n};console.log("Fetching filter values with payload:",l);const o=await vt.runAdHocReport({report:l});console.log("Filter values results:",o);const i=(Array.isArray(o)?o:o.data||[]).map(t=>{let a=t[e];if(void 0===a){a=t[e.replace(/\./g,"_")]}if(void 0===a){const e=Object.keys(t);e.length>0&&(a=t[e[0]])}return{key:String(a),value:String(a)}}),s=T.map(e=>({key:String(e),value:String(e)})),d=new Map;s.forEach(e=>{d.set(e.key,e)}),i.forEach(e=>{d.set(e.key,e)});const c=Array.from(d.values());console.log("Transformed distinct values:",i),console.log("Merged with selected values:",c),k(c)}catch(e){console.error("Error fetching filter values:",e),k([])}finally{B(!1)}},J=e=>{let n=null;if(h&&w)n=w;else if(m&&v){const e=U().find(e=>e.key===v);if(e){const r=[];let l=a;x.forEach(e=>{const a=t[l];if(a&&a.relations){const t=a.relations.find(t=>t.name===e.relationName);t&&r.push(t)}l=e.targetKey});const o=[t[a].default_alias];r.forEach(e=>{o.push(e.alias)}),n=`${o.join("_")}.${e.dimensionKey}`}}else P&&(n=P);n&&V(n,e)},Q=e=>{I(e)},Z=e=>{const t=[a];return e.relationNames&&e.relationNames.length>0&&t.push(...e.relationNames),t.join(" → ")},X=Object.entries(n);return me.default.createElement("div",null,me.default.createElement(g.Box,{sx:{display:"flex",justifyContent:"flex-start",gap:2,mb:2}},!m&&!h&&me.default.createElement(me.default.Fragment,null,o.length>0&&me.default.createElement(g.Button,{variant:"contained",startIcon:me.default.createElement(ct.default,null),onClick:()=>{y(!0),p(!1),C(""),k([]),R([]),$(null),A(null),z(null)},sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",textTransform:"none",backgroundColor:"rgb(70, 134, 128)",boxShadow:"none","&:hover":{backgroundColor:"rgb(50, 114, 108)",boxShadow:"none"}}},"Add Filter"),me.default.createElement(g.Button,{variant:"outlined",startIcon:me.default.createElement(F.GridAddIcon,null),onClick:()=>{p(!0),y(!1),b([]),E(""),C(""),k([]),R([]),$(null),A(null),z(null)},sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",textTransform:"none",borderColor:"rgb(70, 134, 128)",color:"rgb(70, 134, 128)",boxShadow:"none","&:hover":{backgroundColor:"rgba(70, 134, 128, 0.04)",borderColor:"rgb(50, 114, 108)",boxShadow:"none"}}},"Add Advanced Filter"))),m&&me.default.createElement(g.Paper,{elevation:0,sx:{p:3,mb:3,border:"1px solid #e0e0e0",borderRadius:"12px",backgroundColor:"white",boxShadow:"0px 2px 4px rgba(0,0,0,0.02)",fontFamily:"system-ui"}},me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1.5,color:"rgb(37, 37, 37)"}},"Select Provider Path"),me.default.createElement(g.Box,{sx:{mb:3}},me.default.createElement(Lt,{providersData:t,rootProvider:a,onSelectionChange:b,existingDimensions:o,existingMetrics:i,existingFilters:n})),me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1.5,color:"rgb(37, 37, 37)"}},"Select Dimension for Filter"),me.default.createElement(g.Box,{sx:{mb:3}},me.default.createElement(Pt,{items:U(),value:v,label:"Choose Dimension",onChange:e=>{const n=e.target.value;if(E(n),R([]),$(null),A(null),n){const e=U().find(e=>e.key===n);if(e){if(!K(e.dimension)){const n=[];let r=a;x.forEach(e=>{const a=t[r];if(a&&a.relations){const t=a.relations.find(t=>t.name===e.relationName);t&&n.push(t)}r=e.targetKey});const l=[t[a].default_alias];n.forEach(e=>{l.push(e.alias)});const o=`${l.join("_")}.${e.dimensionKey}`;V(o)}}}else k([])},sx:{width:"400px",fontFamily:"system-ui"}})),v&&(()=>{const e=U().find(e=>e.key===v),t=e&&K(e.dimension);return me.default.createElement(me.default.Fragment,null,me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1.5,mt:3,color:"rgb(37, 37, 37)"}},t?"Select Date Range":"Select Filter Values"),t?me.default.createElement(oe.LocalizationProvider,{dateAdapter:se.AdapterDayjs},me.default.createElement(g.Box,{sx:{display:"flex",gap:2,width:"400px"}},me.default.createElement(ie.DatePicker,{label:"From Date",value:q,onChange:e=>$(e),slotProps:{textField:{size:"small",fullWidth:!0},field:{clearable:!0}}}),me.default.createElement(ie.DatePicker,{label:"To Date",value:O,onChange:e=>A(e),slotProps:{textField:{size:"small",fullWidth:!0},field:{clearable:!0}}}))):me.default.createElement(g.Box,{sx:{width:"400px"}},me.default.createElement(Rt,{items:S,selectedKeys:T,onChange:e=>R(e),inputValue:M,onInputChange:J,onInputChangeImmediate:Q,label:"Choose Values",placeholder:"Type to search...",loading:D,helperText:T.length>0?`${T.length} value(s) selected`:"Select at least one value",debounceMs:1e3})))})(),me.default.createElement(g.Box,{sx:{display:"flex",justifyContent:"flex-end",gap:2,mt:3}},me.default.createElement(g.Button,{variant:"outlined",onClick:L,sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",boxShadow:"none",borderColor:"#e0e0e0",color:"rgb(37, 37, 37)",textTransform:"none","&:hover":{backgroundColor:"#f5f5f5",borderColor:"#d0d0d0"}}},"Cancel"),me.default.createElement(g.Button,{variant:"contained",onClick:()=>{const e=U().find(e=>e.key===v);if(!e)return;const n=K(e.dimension);if(n){if(!q&&!O)return}else if(0===T.length)return;if(!v)return;const l=[],o=[a],i=[];let s=a;x.forEach(e=>{const a=t[s];if(a&&a.relations){const t=a.relations.find(t=>t.name===e.relationName);t&&(l.push(t),i.push(t.name))}o.push(e.targetKey),s=e.targetKey});const d=[t[a].default_alias];l.forEach(e=>{d.push(e.alias)});const c=`${d.join("_")}.${e.dimensionKey}`;let u;n?(u={},q&&(u.gte=q.format("YYYY-MM-DD")),O&&(u.lte=O.format("YYYY-MM-DD"))):u=T;const f={dimension:e.dimension,relations:l,providerPath:o,relationNames:i,dimensionKey:e.dimensionKey,dimensionTitle:e.value,fullPath:c,values:u};r(c,f),L()},disabled:(()=>{if(!v)return!0;const e=U().find(e=>e.key===v);if(!e)return!0;return K(e.dimension)?!q&&!O:0===T.length})(),sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",boxShadow:"none",textTransform:"none",backgroundColor:"rgb(70, 134, 128)","&:hover":{backgroundColor:"rgb(50, 114, 108)",boxShadow:"none"}}},"Save Filter"))),h&&me.default.createElement(g.Paper,{elevation:0,sx:{p:3,mb:3,border:"1px solid #e0e0e0",borderRadius:"12px",backgroundColor:"white",boxShadow:"0px 2px 4px rgba(0,0,0,0.02)",fontFamily:"system-ui"}},me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1.5,color:"rgb(37, 37, 37)"}},"Select Dimension from Report"),me.default.createElement(g.Box,{sx:{mb:3}},me.default.createElement(Pt,{items:o.map(e=>({key:e.fullPath,value:d[e.fullPath]||e.dimensionTitle})).sort((e,t)=>e.value.localeCompare(t.value)),value:w,label:"Choose Dimension",onChange:e=>{const t=e.target.value;if(C(t),R([]),$(null),A(null),I(""),t){const e=o.find(e=>e.fullPath===t);if(e){K(e.dimension)||V(t)}}else k([])},sx:{width:"400px",fontFamily:"system-ui"}})),w&&(()=>{const e=o.find(e=>e.fullPath===w),t=e&&K(e.dimension);return me.default.createElement(me.default.Fragment,null,me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1.5,mt:3,color:"rgb(37, 37, 37)"}},t?"Select Date Range":"Select Filter Values"),t?me.default.createElement(oe.LocalizationProvider,{dateAdapter:se.AdapterDayjs},me.default.createElement(g.Box,{sx:{display:"flex",gap:2,width:"400px"}},me.default.createElement(ie.DatePicker,{label:"From Date",value:q,onChange:e=>$(e),slotProps:{textField:{size:"small",fullWidth:!0},field:{clearable:!0}}}),me.default.createElement(ie.DatePicker,{label:"To Date",value:O,onChange:e=>A(e),slotProps:{textField:{size:"small",fullWidth:!0},field:{clearable:!0}}}))):me.default.createElement(g.Box,{sx:{width:"400px"}},me.default.createElement(Rt,{items:S,selectedKeys:T,onChange:e=>R(e),inputValue:M,onInputChange:J,onInputChangeImmediate:Q,label:"Choose Values",placeholder:"Type to search...",loading:D,helperText:T.length>0?`${T.length} value(s) selected`:"Select at least one value",debounceMs:1e3})))})(),me.default.createElement(g.Box,{sx:{display:"flex",justifyContent:"flex-end",gap:2,mt:3}},me.default.createElement(g.Button,{variant:"outlined",onClick:L,sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",boxShadow:"none",borderColor:"#e0e0e0",color:"rgb(37, 37, 37)",textTransform:"none","&:hover":{backgroundColor:"#f5f5f5",borderColor:"#d0d0d0"}}},"Cancel"),me.default.createElement(g.Button,{variant:"contained",onClick:()=>{if(!w)return;const e=o.find(e=>e.fullPath===w);if(!e)return;const t=K(e.dimension);if(t){if(!q&&!O)return}else if(0===T.length)return;let a;t?(a={},q&&(a.gte=q.format("YYYY-MM-DD")),O&&(a.lte=O.format("YYYY-MM-DD"))):a=T;const n={dimension:e.dimension,relations:e.relations,providerPath:e.providerPath,relationNames:e.relationNames,dimensionKey:e.dimensionKey,dimensionTitle:e.dimensionTitle,fullPath:e.fullPath,values:a};r(e.fullPath,n),L()},disabled:(()=>{if(!w)return!0;const e=o.find(e=>e.fullPath===w);if(!e)return!0;return K(e.dimension)?!q&&!O:0===T.length})(),sx:{height:"40px",fontFamily:"system-ui",fontSize:"14px",fontWeight:500,borderRadius:"8px",boxShadow:"none",textTransform:"none",backgroundColor:"rgb(70, 134, 128)","&:hover":{backgroundColor:"rgb(50, 114, 108)",boxShadow:"none"}}},"Save Filter"))),X.length>0&&me.default.createElement(g.Box,{sx:{marginTop:0}},me.default.createElement(g.Typography,{variant:"h6",sx:{fontSize:"16px",fontWeight:600,marginBottom:1,color:"rgb(37, 37, 37)"}},"Saved Filters"),me.default.createElement(g.Box,{sx:{display:"flex",flexDirection:"column",gap:1}},X.map(([e,t])=>{const a=K(t.dimension),o=P===e,i=j===e;let c,f;a&&t.values&&"object"==typeof t.values&&!Array.isArray(t.values)?f=t.values.gte&&t.values.lte?`${t.values.gte} to ${t.values.lte}`:t.values.gte?`From ${t.values.gte}`:t.values.lte?`Until ${t.values.lte}`:"No dates":(c=t.values?.length||0,f=t.values?.join(", ")||"No values");const m=s[e]||d[e]||t.dimensionTitle,h=!!s[e];return me.default.createElement(g.Box,{key:e},me.default.createElement(g.Box,{sx:{display:"flex",alignItems:"center",width:"100%",gap:1,backgroundColor:"white",border:"1px solid #e0e0e0",borderRadius:2,padding:2,boxSizing:"border-box",transition:"box-shadow 0.2s ease","&:hover .hover-icons":{opacity:1}}},i?me.default.createElement(me.default.Fragment,null,me.default.createElement(g.TextField,{value:_,onChange:e=>W(e.target.value),onKeyDown:t=>((e,t)=>{"Enter"===e.key?Y(t):"Escape"===e.key&&H()})(t,e),size:"small",autoFocus:!0,placeholder:"Enter custom title",sx:{flex:1}}),me.default.createElement(g.Box,{sx:{display:"flex",gap:.5}},me.default.createElement(g.Tooltip,{title:"Save",arrow:!0},me.default.createElement(g.IconButton,{size:"small",onClick:()=>Y(e),color:"primary"},me.default.createElement(nt.default,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:"Cancel",arrow:!0},me.default.createElement(g.IconButton,{size:"small",onClick:H},me.default.createElement(rt.default,{fontSize:"small"}))),h&&me.default.createElement(g.Tooltip,{title:"Reset to default",arrow:!0},me.default.createElement(g.IconButton,{size:"small",onClick:()=>(e=>{u(e),N(null),W("")})(e),color:"warning"},me.default.createElement(lt.default,{fontSize:"small"}))))):me.default.createElement(me.default.Fragment,null,me.default.createElement(g.Box,{sx:{display:"flex",alignItems:"center",gap:1,flex:1,minWidth:0}},me.default.createElement(g.Typography,{variant:"h6",sx:{fontWeight:h?600:500,fontStyle:h?"italic":"normal",color:"#1a1a1a",fontSize:"14px"}},m),me.default.createElement(g.Box,{className:"hover-icons",sx:{display:"flex",gap:.5,opacity:0,transition:"opacity 0.2s"}},me.default.createElement(g.Tooltip,{title:"Rename filter",arrow:!0},me.default.createElement(g.IconButton,{size:"small",onClick:()=>((e,t)=>{N(e),W(s[e]||t||"")})(e,d[e]||t.dimensionTitle),disabled:o},me.default.createElement(Le.default,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:"Edit filter values",arrow:!0},me.default.createElement(g.IconButton,{size:"small",onClick:()=>(async(e,t)=>{p(!1),z(e),K(t.dimension)?t.values&&"object"==typeof t.values&&!Array.isArray(t.values)&&($(t.values.gte?ft.default(t.values.gte):null),A(t.values.lte?ft.default(t.values.lte):null)):(R(t.values||[]),await V(e))})(e,t),disabled:o},me.default.createElement(ct.default,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:"Remove filter",arrow:!0},me.default.createElement(g.IconButton,{size:"small",onClick:()=>l(e),sx:{color:"#ef5350"}},me.default.createElement(F.GridDeleteIcon,{fontSize:"small"}))),me.default.createElement(g.Tooltip,{title:me.default.createElement("div",null,me.default.createElement("div",null,me.default.createElement("strong",null,"Path:")," ",Z(t)," → ",d[e]||t.dimensionTitle),me.default.createElement("div",null,me.default.createElement("strong",null,"Full Path:")," ",e),me.default.createElement("div",null,me.default.createElement("strong",null,a?"Date Range":`Values (${c})`,":")," ",f)),arrow:!0,placement:"right"},me.default.createElement(g.IconButton,{size:"small",disabled:o},me.default.createElement(ut.default,{fontSize:"small",sx:{color:"#757575"}}))))))),o&&me.default.createElement(g.Paper,{elevation:0,sx:{p:2,mt:1,ml:2,border:"1px solid #e0e0e0",borderRadius:"8px",backgroundColor:"#fafafa"}},me.default.createElement(g.Typography,{variant:"subtitle2",sx:{marginBottom:1.5,fontWeight:600}},"Edit ",a?"Date Range":"Values"," for: ",d[e]||t.dimensionTitle),a?me.default.createElement(oe.LocalizationProvider,{dateAdapter:se.AdapterDayjs},me.default.createElement(g.Box,{sx:{display:"flex",gap:2,width:"400px",marginBottom:2}},me.default.createElement(ie.DatePicker,{label:"From Date",value:q,onChange:e=>$(e),slotProps:{textField:{size:"small",fullWidth:!0},field:{clearable:!0}}}),me.default.createElement(ie.DatePicker,{label:"To Date",value:O,onChange:e=>A(e),slotProps:{textField:{size:"small",fullWidth:!0},field:{clearable:!0}}}))):me.default.createElement(g.Box,{sx:{width:"400px",marginBottom:2}},me.default.createElement(Rt,{items:S,selectedKeys:T,onChange:e=>R(e),inputValue:M,onInputChange:J,onInputChangeImmediate:Q,label:"Choose Values",placeholder:"Type to search...",loading:D,helperText:T.length>0?`${T.length} value(s) selected`:"Select at least one value",debounceMs:1e3})),me.default.createElement(g.Box,{sx:{display:"flex",gap:1,justifyContent:"flex-end"}},me.default.createElement(g.Button,{variant:"outlined",size:"small",onClick:G,sx:{textTransform:"none",borderRadius:"6px"}},"Cancel"),me.default.createElement(g.Button,{variant:"contained",size:"small",onClick:()=>(e=>{const t=n[e];if(K(t.dimension)){if(!q&&!O)return;const a={};q&&(a.gte=q.format("YYYY-MM-DD")),O&&(a.lte=O.format("YYYY-MM-DD"));const n={...t,values:a};r(e,n)}else{if(0===T.length)return;const a={...t,values:T};r(e,a)}z(null),k([]),R([]),$(null),A(null)})(e),disabled:a?!q&&!O:0===T.length,sx:{textTransform:"none",borderRadius:"6px",backgroundColor:"rgb(70, 134, 128)",boxShadow:"none","&:hover":{backgroundColor:"rgb(50, 114, 108)",boxShadow:"none"}}},"Save Changes"))))}))))},Zt={currency:"0,0.00",integer:"0,0"},Xt=(e,t)=>{if(null==e)return"";const a=t?.format||Zt[t?.type];if(!a)return e;const n=ye.default(e).format(a);return t?.prefix?`${t.prefix} ${n}`:n},ea=e=>"integer"===e||"currency"===e,ta=({reportData:t,dimensions:a,metrics:n,loading:r,onPageChange:l,totalRows:o=0,titleOverrides:i={dimensions:{},metrics:{}}})=>{const[s,d]=e.useState({page:0,pageSize:50}),c=me.default.useMemo(()=>{const e=[];return a.forEach(t=>{let a,n;if(t.relations&&t.relations.length>0){const e=t.fullPath.split("."),n=e[0],r=e[1],l=n.split("_");l.shift();const o=l.join("_");a=o?`${o}_${r}`:r}else a=t.fullPath.replace(".","_");n=i.dimensions[t.fullPath]||t.dimensionTitle||a;const r=t.dimension;e.push({field:a,headerName:n,flex:1,minWidth:150,type:ea(r?.type)?"number":"string",valueFormatter:e=>Xt(e,r)})}),n.forEach(t=>{const a=t.metric;let n,r;if((t.fullPath.match(/\./g)||[]).length>=2)n=t.fullPath.replace(/\./g,"_");else if(t.relations&&t.relations.length>0){const e=t.fullPath.split("."),a=e[0],r=e[1],l=a.split("_");l.shift();const o=l.join("_");n=o?`${o}_${r}`:r}else n=t.metricName;r=i.metrics[t.fullPath]||t.metricTitle||n,e.push({field:n,headerName:r,flex:1,minWidth:150,type:ea(a?.type)?"number":"string",renderHeader:()=>me.default.createElement(g.Box,{sx:{display:"flex",alignItems:"center",gap:.5}},me.default.createElement(Ht,{source:a?.source}),me.default.createElement("span",null,r)),valueFormatter:e=>Xt(e,a)})}),e},[a,n,i]),u=me.default.useMemo(()=>t&&Array.isArray(t)?t.map((e,t)=>{const a={id:t};return Object.entries(e).forEach(([e,t])=>{a[e.replace(/\./g,"_")]=t}),a}):[],[t]);return r?me.default.createElement(g.Box,{display:"flex",justifyContent:"center",alignItems:"center",minHeight:400},me.default.createElement(g.CircularProgress,null)):t&&0!==t.length?me.default.createElement(g.Box,{sx:{height:600,width:"100%"}},me.default.createElement(F.DataGrid,{rows:u,columns:c,paginationModel:s,onPaginationModelChange:e=>{d(e),l&&e.page!==s.page&&l(e.page,e.pageSize)},pageSizeOptions:[10,25,50,100],paginationMode:"server",rowCount:o||u.length,loading:r,disableRowSelectionOnClick:!0,sx:{"& .MuiDataGrid-cell":{padding:"8px"},"& .MuiDataGrid-columnHeader":{backgroundColor:"#f5f5f5",fontWeight:"bold"}}})):me.default.createElement(g.Box,{display:"flex",justifyContent:"center",alignItems:"center",minHeight:400},me.default.createElement(g.Typography,{variant:"body1",color:"textSecondary"},"No data available. Run a report to see results."))};function aa({children:e,value:t,index:a}){return me.default.createElement("div",{role:"tabpanel",hidden:t!==a,id:`report-tabpanel-${a}`,"aria-labelledby":`report-tab-${a}`},t===a&&me.default.createElement(g.Box,{sx:{py:3}},e))}const na=({reportDefinitionId:t,cloneData:a,autoRun:n,onBackToList:r})=>{const l=Wt(),o=Ot(),[i,s]=e.useState(null),[d,c]=e.useState(""),[u,f]=e.useState(""),[m,p]=e.useState({dimensions:[],metrics:[],filters:{}}),[h,y]=e.useState({dimensions:{},metrics:{},filters:{}}),[x,b]=e.useState(null),[v,E]=e.useState(!1),[w,C]=e.useState(0),[S,k]=e.useState(0),[T,R]=e.useState(50),[D,B]=e.useState(0),[P,z]=e.useState(!1),[M,I]=e.useState(!1);e.useEffect(()=>{(async()=>{const e=await vt.getProviders();console.log({providers:e}),s(e)})()},[]),e.useEffect(()=>{t&&i&&$(t)},[t,i]),e.useEffect(()=>{a&&i&&O(a)},[a,i]),e.useEffect(()=>{n&&M&&d&&m.dimensions.length>0&&N()},[n,M]);const F=(e,t,a)=>{try{const[n,r]=e.split("."),l=n.split("_");let o=a;const i=[],s=[a],d=[];for(let e=1;e<l.length;e++){const a=l[e],n=t[o];if(!n||!n.relations)return console.warn(`Provider ${o} not found or has no relations`),null;const r=n.relations.find(e=>e.alias===a);if(!r)return console.warn(`Relation with alias ${a} not found in provider ${o}`),null;i.push(r),d.push(r.name),o=r.target,s.push(o)}const c=t[o];if(!c)return console.warn(`Final provider ${o} not found`),null;const u=c.default_alias;if(!c.dimensions||!c.dimensions[u])return console.warn(`Dimensions not found for alias ${u} in provider ${o}`),null;const f=c.dimensions[u][r];return f?{dimension:f,relations:i,providerPath:s,relationNames:d,dimensionKey:r,dimensionTitle:f.title||r,fullPath:e}:(console.warn(`Dimension ${r} not found in provider ${o}, alias ${u}`),null)}catch(t){return console.warn(`Error reconstructing dimension from path ${e}:`,t),null}},q=(e,t,a)=>{try{const n=e.indexOf("."),r=e.substring(0,n),l=e.substring(n+1),o=r.split("_");let i=a;const s=[],d=[a],c=[];for(let e=1;e<o.length;e++){const a=o[e],n=t[i];if(!n||!n.relations)return console.warn(`Provider ${i} not found or has no relations`),null;const r=n.relations.find(e=>e.alias===a);if(!r)return console.warn(`Relation with alias ${a} not found in provider ${i}`),null;s.push(r),c.push(r.name),i=r.target,d.push(i)}const u=t[i];if(!u)return console.warn(`Final provider ${i} not found`),null;if(!u.metrics)return console.warn(`Metrics not found in provider ${i}`),null;const f=u.metrics.find(e=>e.name===l);return f?{metric:f,relations:s,providerPath:d,relationNames:c,metricName:l,metricTitle:f.title||l,fullPath:e}:(console.warn(`Metric ${l} not found in provider ${i}`),null)}catch(t){return console.warn(`Error reconstructing metric from path ${e}:`,t),null}},$=async e=>{try{console.log("Loading report definition:",e);const t=await vt.getReportDefinition({id:e});console.log("Loaded report definition:",t),c(t.provider),f(t.title||"");const a=[],n={};if(t.definition?.doc?.query?.order_by)for(const e of t.definition.doc.query.order_by)!0===e.desc?n[e.name]="desc":n[e.name]="asc";if(t.definition?.doc?.query?.dimensions)for(const e of t.definition.doc.query.dimensions){const r=F(e,i,t.provider);r&&(r.sortOrder=n[e]||null,a.push(r))}const r=[];if(t.definition?.doc?.query?.metrics)for(const e of t.definition.doc.query.metrics){const a=q(e,i,t.provider);a&&r.push(a)}const l={dimensions:{},metrics:{},filters:{}};t.definition?.doc?.query?.titles&&(t.definition.doc.query.titles.dimensions&&(l.dimensions=t.definition.doc.query.titles.dimensions),t.definition.doc.query.titles.metrics&&(l.metrics=t.definition.doc.query.titles.metrics),t.definition.doc.query.titles.filters&&(l.filters=t.definition.doc.query.titles.filters));const o={};if(t.definition?.doc?.query?.filter){const e=t.definition.doc.query.filter;(e.and||e.or||[]).forEach(e=>{const[a,n]=Object.entries(e)[0],r=F(a,i,t.provider);r&&(o[a]={...r,values:n})})}p({dimensions:a,metrics:r,filters:o}),y(l),I(!0),console.log("Reconstructed report:",{dimensions:a,metrics:r,filters:o,titleOverrides:l})}catch(e){console.error("Error loading report definition:",e),l.error("Error loading report definition: "+(e.message||"Unknown error"))}},O=e=>{try{console.log("Loading cloned report:",e),c(e.provider),f(e.title||"");const t=[],a={};if(e.definition?.doc?.query?.order_by)for(const t of e.definition.doc.query.order_by)!0===t.desc?a[t.name]="desc":a[t.name]="asc";if(e.definition?.doc?.query?.dimensions)for(const n of e.definition.doc.query.dimensions){const r=F(n,i,e.provider);r&&(r.sortOrder=a[n]||null,t.push(r))}const n=[];if(e.definition?.doc?.query?.metrics)for(const t of e.definition.doc.query.metrics){const a=q(t,i,e.provider);a&&n.push(a)}const r={dimensions:{},metrics:{},filters:{}};e.definition?.doc?.query?.titles&&(e.definition.doc.query.titles.dimensions&&(r.dimensions=e.definition.doc.query.titles.dimensions),e.definition.doc.query.titles.metrics&&(r.metrics=e.definition.doc.query.titles.metrics),e.definition.doc.query.titles.filters&&(r.filters=e.definition.doc.query.titles.filters));const l={};if(e.definition?.doc?.query?.filter){const t=e.definition.doc.query.filter;(t.and||t.or||[]).forEach(t=>{const[a,n]=Object.entries(t)[0],r=F(a,i,e.provider);r&&(l[a]={...r,values:n})})}p({dimensions:t,metrics:n,filters:l}),y(r),console.log("Loaded cloned report:",{dimensions:t,metrics:n,filters:l,titleOverrides:r})}catch(e){console.error("Error loading cloned report:",e),l.error("Error loading cloned report: "+(e.message||"Unknown error"))}},A=(e=0,t=50)=>{const a=m.dimensions.map(e=>{const t={name:e.fullPath};return"desc"===e.sortOrder&&(t.desc=!0),t}),n=[];m.filters&&Object.keys(m.filters).length>0&&Object.entries(m.filters).forEach(([e,t])=>{t.values&&(Array.isArray(t.values)?t.values.length>0&&n.push({[e]:t.values}):"object"==typeof t.values&&n.push({[e]:t.values}))});const r=n.length>0?{and:n}:null,l={};Object.keys(h.dimensions).length>0&&(l.dimensions=h.dimensions),Object.keys(h.metrics).length>0&&(l.metrics=h.metrics),Object.keys(h.filters).length>0&&(l.filters=h.filters);const i={dimensions:m.dimensions.map(e=>e.fullPath),metrics:m.metrics.map(e=>e.fullPath),order_by:a,limit:t,offset:e*t};Object.keys(l).length>0&&(i.titles=l),r&&(i.filter=r);return{provider:d,doc:{query:i},parameters:o?.parameters||{base_currency:"EUR"}}},j=async(e,t)=>{try{E(!0);const a=A(e,t);console.log("Running report with:",a);const n=await vt.runAdHocReport({report:a});console.log("Report result:",n),b(n),n&&n.length<t?C(e*t+n.length):C((e+2)*t)}catch(e){console.error("Error running report:",e),l.error("Error running report: "+(e.message||"Unknown error")),b(null)}finally{E(!1)}},N=async()=>{k(0),await j(0,T),B(3)},_=d,W=d&&u.trim()&&(m.dimensions.length>0||m.metrics.length>0);return me.default.createElement(g.Box,{sx:{p:3,fontFamily:"system-ui"}},me.default.createElement(g.Box,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2,backgroundColor:"transparent",fontFamily:"system-ui"}},me.default.createElement("h1",null,t?"Edit Report":"Create New Report"),r&&me.default.createElement(g.Button,{variant:"outlined",startIcon:me.default.createElement(Je.default,null),onClick:r},"Back to List")),me.default.createElement(g.Box,{sx:{mt:2,p:3,backgroundColor:"white",borderRadius:"12px",border:"1px solid #e0e0e0",fontFamily:"system-ui",display:"flex",flexDirection:"column",gap:3,boxShadow:"0px 2px 4px rgba(0,0,0,0.02)"}},me.default.createElement(g.Box,{sx:{display:"flex",gap:4,alignItems:"flex-start",flexWrap:"wrap"}},me.default.createElement("div",null,me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1,color:"rgb(37, 37, 37)"}},"Report Title"),me.default.createElement(g.TextField,{value:u,onChange:e=>f(e.target.value),placeholder:"Enter report title",sx:{width:"400px",fontFamily:"system-ui","& .MuiOutlinedInput-root":{backgroundColor:"white",borderRadius:"8px"}},size:"small"})),me.default.createElement("div",null,me.default.createElement(g.Typography,{sx:{fontSize:"14px",fontWeight:600,mb:1,color:"rgb(37, 37, 37)"}},"Select Root Provider"),me.default.createElement(Pt,{items:i?Object.keys(i).filter(e=>!0===i[e].base).map(e=>({key:e,value:i[e].name||e})):[],value:d,onChange:e=>{c(e.target.value),p({dimensions:[],metrics:[],filters:{}}),y({dimensions:{},metrics:{},filters:{}}),console.log("Selected root provider:",e.target.value)},sx:{width:"300px",fontFamily:"system-ui"},disabled:!!t}))),me.default.createElement(g.Box,{sx:{display:"flex",gap:2,alignItems:"center"}},me.default.createElement(g.Button,{variant:"contained",onClick:N,disabled:!_,startIcon:me.default.createElement(He.default,null),sx:{height:"40px",fontFamily:"system-ui",borderRadius:"8px",boxShadow:"none",textTransform:"none",backgroundColor:"rgb(70, 134, 128)",fontWeight:500,padding:"0 20px","&:hover":{backgroundColor:"rgb(46, 102, 98)",boxShadow:"none"}}},"Run Report"),me.default.createElement(g.Button,{variant:"outlined",startIcon:me.default.createElement(Ze.default,null),onClick:async()=>{try{E(!0);const e=A();console.log("Downloading report with:",e);const t=(new Date).toISOString().split("T")[0],a=`${(u||"report").replace(/[^a-z0-9]/gi,"_").toLowerCase()}_${t}.csv`;await vt.downloadAdHocReport({report:e,filename:a}),l.success("Report downloaded successfully!")}catch(e){console.error("Error downloading report:",e),l.error("Error downloading report: "+(e.message||"Unknown error"))}finally{E(!1)}},disabled:!_||v,sx:{height:"40px",fontFamily:"system-ui",borderRadius:"8px",boxShadow:"none",textTransform:"none",color:"#9c27b0",borderColor:"#e1bee7",fontWeight:500,padding:"0 20px","&:hover":{borderColor:"#9c27b0",backgroundColor:"rgba(156, 39, 176, 0.04)"}}},"Download CSV"),me.default.createElement(g.Button,{variant:"outlined",startIcon:me.default.createElement(Qe.default,null),onClick:async()=>{if(d)if(u.trim())if(0!==m.dimensions.length||0!==m.metrics.length)try{z(!0);const e=m.dimensions.map(e=>{const t={name:e.fullPath};return"desc"===e.sortOrder&&(t.desc=!0),t}),a={};Object.keys(h.dimensions).length>0&&(a.dimensions=h.dimensions),Object.keys(h.metrics).length>0&&(a.metrics=h.metrics),Object.keys(h.filters).length>0&&(a.filters=h.filters);const n={dimensions:m.dimensions.map(e=>e.fullPath),metrics:m.metrics.map(e=>e.fullPath),order_by:e};if(Object.keys(a).length>0&&(n.titles=a),Object.keys(m.filters).length>0){const e=[];Object.entries(m.filters).forEach(([t,a])=>{a.values&&(Array.isArray(a.values)?a.values.length>0&&e.push({[t]:a.values}):"object"==typeof a.values&&e.push({[t]:a.values}))}),e.length>0&&(n.filter={and:e})}const o={query:n},i={provider:d,title:u.trim(),definition:{provider:d,doc:o,parameters:{base_currency:"EUR"}}};console.log("Saving report definition:",i),t?(await vt.updateReportDefinition({id:t,reportDefinition:i}),l.success("Report definition updated successfully!")):(await vt.createReportDefinition({reportDefinition:i}),l.success("Report definition created successfully!")),r&&r()}catch(e){console.error("Error saving report definition:",e),l.error("Error saving report definition: "+(e.message||"Unknown error"))}finally{z(!1)}else l.warning("Please add at least one dimension or metric");else l.warning("Please enter a report title");else l.warning("Please select a provider first")},disabled:!W||P,sx:{height:"40px",fontFamily:"system-ui",borderRadius:"8px",boxShadow:"none",textTransform:"none",color:"#2e7d32",borderColor:"#a5d6a7",fontWeight:500,padding:"0 20px","&:hover":{borderColor:"#2e7d32",backgroundColor:"rgba(46, 125, 50, 0.04)"}}},P?"Saving...":t?"Update Report":"Save Report"))),d&&me.default.createElement(g.Box,{sx:{mt:2,fontFamily:"system-ui",backgroundColor:"white",px:3,py:2,borderRadius:"8px"}},me.default.createElement(g.Box,{sx:{borderBottom:1,borderColor:"rgba(70, 134, 127, 0.27)"}},me.default.createElement(g.Tabs,{value:D,onChange:(e,t)=>{B(t)},"aria-label":"report builder tabs",sx:{"& .MuiTabs-indicator":{display:"flex",justifyContent:"center",backgroundColor:"rgb(70, 134, 128)"},"& .MuiTabs-indicatorSpan":{backgroundColor:"rgb(70, 134, 128)"}}},me.default.createElement(g.Tab,{label:me.default.createElement(g.Badge,{badgeContent:m.dimensions.length,sx:{"& .MuiBadge-badge":{backgroundColor:"rgb(70, 134, 128)",color:"#fff"}}},me.default.createElement("span",{style:{marginRight:m.dimensions.length>0?"12px":"0"}},"Dimensions")),id:"report-tab-0","aria-controls":"report-tabpanel-0",sx:{height:"41px",fontFamily:"system-ui",borderRadius:"0.5rem",boxShadow:"none",textTransform:"none",color:"rgb(37, 37, 37)","&.Mui-selected":{color:"rgb(70, 134, 128)"}}}),me.default.createElement(g.Tab,{label:me.default.createElement(g.Badge,{badgeContent:m.metrics.length,sx:{"& .MuiBadge-badge":{backgroundColor:"rgb(70, 134, 128)",color:"#fff"}}},me.default.createElement("span",{style:{marginRight:m.metrics.length>0?"12px":"0"}},"Metrics")),id:"report-tab-1","aria-controls":"report-tabpanel-1",sx:{height:"41px",fontFamily:"system-ui",borderRadius:"0.5rem",boxShadow:"none",textTransform:"none",color:"rgb(37, 37, 37)","&.Mui-selected":{color:"rgb(70, 134, 128)"}}}),me.default.createElement(g.Tab,{label:me.default.createElement(g.Badge,{badgeContent:Object.keys(m.filters).length,sx:{"& .MuiBadge-badge":{backgroundColor:"rgb(70, 134, 128)",color:"#fff"}}},me.default.createElement("span",{style:{marginRight:Object.keys(m.filters).length>0?"12px":"0"}},"Filters")),id:"report-tab-2","aria-controls":"report-tabpanel-2",sx:{height:"41px",fontFamily:"system-ui",borderRadius:"0.5rem",boxShadow:"none",textTransform:"none",color:"rgb(37, 37, 37)","&.Mui-selected":{color:"rgb(70, 134, 128)"}}}),me.default.createElement(g.Tab,{label:x?"Results":"Results (Run report first)",id:"report-tab-3","aria-controls":"report-tabpanel-3",disabled:!x,sx:{height:"41px",fontFamily:"system-ui",borderRadius:"0.5rem",boxShadow:"none",textTransform:"none",color:"rgb(37, 37, 37)","&.Mui-selected":{color:"rgb(70, 134, 128)"}}}))),me.default.createElement(aa,{value:D,index:0},me.default.createElement(Yt,{providersData:i,rootProvider:d,savedDimensions:m.dimensions,onSaveDimension:e=>{p(t=>{const a={...t,dimensions:[...t.dimensions,e]};return console.log("Dimension saved:",e),console.log("Complete report:",a),a})},onRemoveDimension:e=>{p(t=>({...t,dimensions:t.dimensions.filter((t,a)=>a!==e)}))},onReorderDimensions:e=>{p(t=>({...t,dimensions:e}))},titleOverrides:h.dimensions,onUpdateTitle:(e,t)=>{y(a=>({...a,dimensions:{...a.dimensions,[e]:t}}))},onResetTitle:e=>{y(t=>{const a={...t.dimensions};return delete a[e],{...t,dimensions:a}})},existingMetrics:m.metrics,existingFilters:m.filters})),me.default.createElement(aa,{value:D,index:1},me.default.createElement(Jt,{providersData:i,rootProvider:d,savedMetrics:m.metrics,onSaveMetric:e=>{p(t=>{const a={...t,metrics:[...t.metrics,e]};return console.log("Metric saved:",e),console.log("Complete report:",a),a})},onRemoveMetric:e=>{p(t=>({...t,metrics:t.metrics.filter((t,a)=>a!==e)}))},onReorderMetrics:e=>{p(t=>({...t,metrics:e}))},titleOverrides:h.metrics,onUpdateTitle:(e,t)=>{y(a=>({...a,metrics:{...a.metrics,[e]:t}}))},onResetTitle:e=>{y(t=>{const a={...t.metrics};return delete a[e],{...t,metrics:a}})},existingDimensions:m.dimensions,existingFilters:m.filters})),me.default.createElement(aa,{value:D,index:2},me.default.createElement(Qt,{providersData:i,rootProvider:d,savedFilters:m.filters,existingDimensions:m.dimensions,existingMetrics:m.metrics,onSaveFilter:(e,t)=>{p(a=>{const n={...a,filters:{...a.filters,[e]:t}};return console.log("Filter saved:",{fullPath:e,filterData:t}),console.log("Complete report:",n),n})},onRemoveFilter:e=>{p(t=>{const a={...t.filters};return delete a[e],{...t,filters:a}})},titleOverrides:h.filters,dimensionTitleOverrides:h.dimensions,onUpdateTitle:(e,t)=>{y(a=>({...a,filters:{...a.filters,[e]:t}}))},onResetTitle:e=>{y(t=>{const a={...t.filters};return delete a[e],{...t,filters:a}})}})),me.default.createElement(aa,{value:D,index:3},x&&me.default.createElement(ta,{reportData:x,dimensions:m.dimensions,metrics:m.metrics,loading:v,onPageChange:async(e,t)=>{k(e),t!==T&&R(t),await j(e,t)},totalRows:w,titleOverrides:h}))))},ra=()=>{const[t,a]=e.useState("list"),[n,r]=e.useState(null),[l,o]=e.useState(null),[i,s]=e.useState(!1),[d,c]=e.useState(0),u=e=>{r(e),o(null),s(!1),a("builder")},f=()=>{r(null),o(null),s(!1),a("builder")},m=e=>{r(e),o(null),s(!0),a("builder")},p=e=>{r(null),o(e),s(!1),a("builder")};return"list"===t?me.default.createElement(Ut,{onSelectReport:u,onAddNew:f,onCloneReport:p,onRunReport:m,refreshTrigger:d}):me.default.createElement(na,{reportDefinitionId:n,cloneData:l,autoRun:i,onBackToList:()=>{r(null),o(null),s(!1),a("list"),c(e=>e+1)}})};var la={Chart:Ft,Dashboard:function({id:t,api:a,params:n,onNavigate:r}){const l=t||"dynamic_dashboard",o=Ot(),i=a||o?.api||{},s=n||o?.parameters||{},[d,c]=me.default.useState(),[u]=me.default.useState(),[f,m]=me.default.useState([]),p=me.default.useRef({});e.useEffect(()=>{vt.setBaseUrl(i.base_url),vt.setToken(i.token)},[i]);const g=async e=>{const t=e?.doc?.rows||[],a=[],n=e=>{if(e?.override?.filter?.length){const t={};e.override.filter.forEach(e=>{e.hasOwnProperty("value")&&(t[e.field]=[e.value])}),e.filter=t}};for(let e=0;e<t.length;e++){const r=t[e];r.columns?.forEach(e=>{n(e),e.views?.forEach(n)}),a.push(r)}m(a)};return me.default.useEffect(()=>{(async()=>{vt.setBaseUrl(i.base_url),vt.setToken(i.token),await vt.loadDashboardMeta({dashboardId:l});const e=await vt.getDashboard({id:l});p.current[e?.id]=e,c(e),await g(e)})().catch(e=>console.error(e.message))},[l]),me.default.createElement(Me.default,{maxWidth:!1,disableGutters:!0},me.default.createElement(Be.default,{container:!0,spacing:3},f?.map((e,t)=>{const a=(e=>0===e?12:12/e)(e.columns.length);return me.default.createElement(me.default.Fragment,{key:t},1===t?me.default.createElement(Be.default,{size:{xs:12}},me.default.createElement(Be.default,{container:!0,spacing:3},e.columns.map((e,t)=>me.default.createElement(jt,{key:t,column:e,md:a,api:i,cache:p.current,dashboard:d,schema:u,params:s,onNavigate:r})))):e.columns.map((e,t)=>me.default.createElement(jt,{key:t,column:e,md:a,api:i,cache:p.current,dashboard:d,schema:u,params:s,onNavigate:r})))})))},ReportApp:({params:t,api:a})=>(vt._initialized||(vt.setBaseUrl(a.base_url),vt.setToken(a.token),vt._initialized=!0),e.useEffect(()=>{vt.setBaseUrl(a.base_url),vt.setToken(a.token)},[a]),me.default.createElement(_t,null,me.default.createElement($t,{defaultParameters:t,defaultApi:a},me.default.createElement(ce.ThemeProvider,{theme:ce.createTheme({palette:{primary:{main:"rgb(70, 134, 128)"}},components:{MuiButton:{styleOverrides:{root:{borderRadius:8,textTransform:"none",boxShadow:"none","&:hover":{boxShadow:"none"}}}},MuiTooltip:{styleOverrides:{tooltip:{fontSize:"0.875rem",backgroundColor:"rgba(97, 97, 97, 0.95)",maxWidth:500},arrow:{color:"rgba(97, 97, 97, 0.95)"}},defaultProps:{arrow:!0,enterDelay:300,leaveDelay:200}},MuiPopper:{defaultProps:{style:{zIndex:1500}}}}})},me.default.createElement(ra,null)))))};exports.default=la;
@@ -5181,6 +5181,20 @@ const Filters = ({
5181
5181
  }))));
5182
5182
  };
5183
5183
 
5184
+ // Default numeral.js formats applied when a dimension/metric definition has a
5185
+ // known type but no explicit `format` set on the provider.
5186
+ const DEFAULT_FORMATS_BY_TYPE = {
5187
+ currency: '0,0.00',
5188
+ integer: '0,0'
5189
+ };
5190
+ const formatValue = (value, def) => {
5191
+ if (value == null) return '';
5192
+ const format = def?.format || DEFAULT_FORMATS_BY_TYPE[def?.type];
5193
+ if (!format) return value;
5194
+ const formatted = numeral(value).format(format);
5195
+ return def?.prefix ? `${def.prefix} ${formatted}` : formatted;
5196
+ };
5197
+ const isNumericType = type => type === 'integer' || type === 'currency';
5184
5198
  const ReportDataGrid = ({
5185
5199
  reportData,
5186
5200
  dimensions,
@@ -5232,11 +5246,14 @@ const ReportDataGrid = ({
5232
5246
 
5233
5247
  // Check for title override, otherwise use the friendly dimension title from provider
5234
5248
  headerName = titleOverrides.dimensions[dim.fullPath] || dim.dimensionTitle || fieldName;
5249
+ const dimDef = dim.dimension;
5235
5250
  cols.push({
5236
5251
  field: fieldName,
5237
5252
  headerName: headerName,
5238
5253
  flex: 1,
5239
- minWidth: 150
5254
+ minWidth: 150,
5255
+ type: isNumericType(dimDef?.type) ? 'number' : 'string',
5256
+ valueFormatter: value => formatValue(value, dimDef)
5240
5257
  });
5241
5258
  });
5242
5259
 
@@ -5284,7 +5301,7 @@ const ReportDataGrid = ({
5284
5301
  headerName: headerName,
5285
5302
  flex: 1,
5286
5303
  minWidth: 150,
5287
- type: metricDef?.type === 'integer' || metricDef?.type === 'currency' ? 'number' : 'string',
5304
+ type: isNumericType(metricDef?.type) ? 'number' : 'string',
5288
5305
  renderHeader: () => /*#__PURE__*/React__default.createElement(Box$1, {
5289
5306
  sx: {
5290
5307
  display: 'flex',
@@ -5294,19 +5311,7 @@ const ReportDataGrid = ({
5294
5311
  }, /*#__PURE__*/React__default.createElement(MetricSourceIcon, {
5295
5312
  source: metricDef?.source
5296
5313
  }), /*#__PURE__*/React__default.createElement("span", null, headerName)),
5297
- valueFormatter: value => {
5298
- if (value == null) return '';
5299
-
5300
- // Format based on metric type
5301
- if (metricDef?.format) {
5302
- const formatted = numeral(value).format(metricDef.format);
5303
- if (metricDef?.prefix) {
5304
- return `${metricDef.prefix} ${formatted}`;
5305
- }
5306
- return formatted;
5307
- }
5308
- return value;
5309
- }
5314
+ valueFormatter: value => formatValue(value, metricDef)
5310
5315
  });
5311
5316
  });
5312
5317
  return cols;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bygd/nc-report-ui",
3
- "version": "0.1.37",
3
+ "version": "0.1.38",
4
4
  "files": [
5
5
  "dist/*",
6
6
  "fnet/input.yaml",