@openmrs/esm-report-builder 0.1.1-pre.97 → 0.1.1-pre.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/128.js +1 -1
- package/dist/128.js.map +1 -1
- package/dist/3378.js +1 -1
- package/dist/4171.js +11 -11
- package/dist/4171.js.map +1 -1
- package/dist/5132.js +1 -1
- package/dist/6686.js +1 -0
- package/dist/6686.js.map +1 -0
- package/dist/openmrs-esm-report-builder.js +2 -2
- package/dist/openmrs-esm-report-builder.js.buildmanifest.json +32 -32
- package/dist/routes.json +1 -1
- package/package.json +1 -1
- package/dist/6247.js +0 -1
- package/dist/6247.js.map +0 -1
package/dist/128.js
CHANGED
|
@@ -304,7 +304,7 @@ ORDER BY ag.sort_order, g.gender;
|
|
|
304
304
|
${a.slice(0,3).join("\n")}`}).join("\n\n");throw Error(`Failed to compile ${i.length} indicator(s). Please fix the following issues:
|
|
305
305
|
|
|
306
306
|
${e}`)}let o=l.filter(e=>!e.sql.compiled.trim()||"--"===e.sql.compiled.trim());if(o.length>0){let e=o.map(e=>`• ${e.name} (${e.code})`).join("\n");throw Error(`The following indicator(s) compiled to empty SQL:
|
|
307
|
-
${e}`)}console.log("✅ [Section] All indicators compiled successfully",{total:l.length,withWarnings:l.filter(e=>e.sql.compiled.includes("--"))});let d={version:1,name:u.name.trim(),description:u.description.trim()||void 0,disaggregation:n,indicators:l,exchangeMappings:{dhis2:{version:1,enabled:u.dhis2Enabled,datasetId:aT(u.dhis2DatasetId)||void 0,periodType:aT(u.dhis2PeriodType)||void 0,orgUnitStrategy:u.dhis2OrgUnitStrategy,mappingMode:"dataElement-categoryOptionCombo",indicatorMappings:u.selected.slice().sort((e,t)=>e.sortOrder-t.sortOrder).map(e=>({indicatorUuid:e.id,dataElementId:aT(u.dhis2IndicatorMap[e.id]?.dataElementId)||void 0,categoryOptionComboByDisagg:u.disaggEnabled&&u.disaggKeys.length?u.dhis2IndicatorMap[e.id]?.cocByDisagg??{}:void 0}))}},compiledAt:new Date().toISOString()},c={id:u.isEdit?s?.uuid:void 0,name:u.name.trim(),description:u.description.trim()||void 0,disaggregationEnabled:u.disaggEnabled,ageCategoryUuid:u.disaggEnabled?u.selectedAgeCategory?.uuid??null:null,ageCategoryCode:u.disaggEnabled?u.selectedAgeCategory?.code??null:null,genders:u.pickedGenders,indicators:l.map(e=>({id:e.indicatorUuid,type:e.kind,sortOrder:e.sortOrder,finalDisagg:e.disaggregation})),configJson:JSON.stringify(d,null,2)};a(c)}catch(e){E(e?.message??"Failed to build section config")}finally{_(!1)}}};return n().createElement(o.aFV,{open:t,onRequestClose:r,modalHeading:u.isEdit?"Edit Section":"Create Section",primaryButtonText:u.isEdit?"Save changes":"Create Section",secondaryButtonText:"Cancel",onRequestSubmit:b,primaryButtonDisabled:!f,size:"lg"},n().createElement(o.BJc,{gap:5},n().createElement("div",{style:{opacity:.8}},"Sections are groups of indicators with shared disaggregation options."),c?n().createElement(o.OuH,{description:"Loading age categories…"}):null,m?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Age categories",subtitle:m}):null,g?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Section",subtitle:g}):null,n().createElement(aw,{name:u.name,setName:u.setName,description:u.description,setDescription:u.setDescription}),n().createElement("hr",{style:{border:0,borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)"}}),n().createElement(aI,{disaggEnabled:u.disaggEnabled,setDisaggEnabled:u.setDisaggEnabled,ageCategories:d,selectedAgeCategory:u.selectedAgeCategory,setSelectedAgeCategory:u.setSelectedAgeCategory,genderF:u.genderF,setGenderF:u.setGenderF,genderM:u.genderM,setGenderM:u.setGenderM,pickedGenders:u.pickedGenders,disaggMissing:u.disaggMissing,idPrefix:u.isEdit?"edit":"create"}),n().createElement(ak,{q:u.q,setQ:u.setQ,available:u.available,selectedFull:u.selectedFull,selected:u.selected,isSelected:u.isSelected,toggleIndicator:u.toggleIndicator,moveSelected:u.moveSelected,idPrefix:u.isEdit?"edit":"create",dbSearching:u.dbSearching,dbSearchError:u.dbSearchError}),n().createElement(aA,{dhis2Enabled:u.dhis2Enabled,setDhis2Enabled:u.setDhis2Enabled,dhis2DatasetId:u.dhis2DatasetId,setDhis2DatasetId:u.setDhis2DatasetId,dhis2PeriodType:u.dhis2PeriodType,setDhis2PeriodType:u.setDhis2PeriodType,dhis2OrgUnitStrategy:u.dhis2OrgUnitStrategy,setDhis2OrgUnitStrategy:u.setDhis2OrgUnitStrategy,disaggEnabled:u.disaggEnabled,selectedAgeCategory:u.selectedAgeCategory,pickedGenders:u.pickedGenders,selectedFull:u.selectedFull,selected:u.selected,disaggKeys:u.disaggKeys,dhis2IndicatorMap:u.dhis2IndicatorMap,updateDhis2DataElement:u.updateDhis2DataElement,updateDhis2Coc:u.updateDhis2Coc}),p?n().createElement(o.OuH,{description:"Building section SQL…"}):null))}var aO=r(1672);async function aD(e,t){let{data:r}=await (0,aO.jX)((0,h.openmrsFetch)("/ws/rest/v1/reportbuilder/sectionpreview",{method:"POST",headers:{"Content-Type":"application/json"},body:e,signal:t}));return r}function ax(e){return String(e??"").trim().toLowerCase()}function aL(e){return e?e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'"):e}function aM(e){let t=(e.columns??[]).map(ax);return t.includes("age_group")&&t.includes("gender")&&t.includes("value")}function a$(e){let t=String(e??"").trim().toLowerCase().split("-")[0].replace("+","").trim(),r=t.match(/^(\d+)\s*(d|day|days|m|mo|mos|month|months|y|yr|yrs|year|years)?$/i);if(!r){let e=t.match(/\d+/);return e?365*Number(e[0]):1/0}let a=Number(r[1]),n=(r[2]??"y").toLowerCase();return"d"===n||"day"===n||"days"===n?a:"m"===n||"mo"===n||"mos"===n||"month"===n||"months"===n?30*a:365*a}function aP({open:e,onClose:t,section:r}){let[a,l]=n().useState(""),[i,s]=n().useState(""),[c,m]=n().useState(""),[u,p]=n().useState(200),[_,g]=n().useState(!1),[E,f]=n().useState(null),[b,y]=n().useState(null),[h,v]=n().useState({}),[S,T]=n().useState(!1),[C,w]=n().useState(0);n().useEffect(()=>{e&&(l(""),s(""),m(""),p(200),f(null),y(null),g(!1),v({}),w(0))},[e]),n().useEffect(()=>{1===C&&r&&b?.results&&b.results.forEach(e=>{e.indicatorUuid&&!h[e.indicatorUuid]&&I(e.indicatorUuid,r)})},[C,b,r]);let N=!!r?.uuid&&!_,I=(e,t)=>{if(!h[e]){T(!0);try{let r=((t.configJson?JSON.parse(t.configJson):{}).indicators||[]).find(t=>t.indicatorUuid===e);if(!r)return void v(t=>({...t,[e]:"-- Error: Indicator not found in section config"}));let a=r.sql?.compiled;if(!a)return void v(t=>({...t,[e]:"-- Error: No compiled SQL found for this indicator in section config"}));let n=a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/>=/g,">=").replace(/<=/g,"<=").replace(/>e;/g,">=").replace(/≥/g,">=").replace(/<e;/g,"<=").replace(/≤/g,"<=");v(t=>({...t,[e]:n}))}catch(t){v(r=>({...r,[e]:`-- Error extracting SQL from config: ${t?.message||"Unknown error"}`}))}finally{T(!1)}}},k=async()=>{if(!r?.uuid)return;if(!a||!i)return void f("Start date and End date are required.");let e=new AbortController;g(!0),f(null),y(null);try{let t=await aD({sectionUuid:r.uuid,indicatorUuid:c.trim()||void 0,startDate:a,endDate:i,maxRows:u,params:{}},e.signal);y(t)}catch(e){f(e?.message??"Failed to preview section")}finally{g(!1)}},A=b?.results??[],R=function(e){let t=e.filter(e=>!e.error&&aM(e)),r=(e,t)=>(e.columns??[]).findIndex(e=>ax(e)===t),a=new Set,n=new Set;for(let e of t){let t=r(e,"age_group"),l=r(e,"gender");if(!(t<0)&&!(l<0))for(let r of e.rows??[]){let e=r?.[t],i=r?.[l];null!=e&&a.add(String(e)),null!=i&&n.add(String(i))}}let l=Array.from(n);l.sort((e,t)=>{let r=e.toUpperCase(),a=t.toUpperCase(),n=e=>"F"===e?0:"M"===e?1:2,l=n(r),i=n(a);return l!==i?l-i:r.localeCompare(a)});let i=Array.from(a);i.sort((e,t)=>{let r=a$(e),a=a$(t);return r!==a?r-a:e.localeCompare(t)});let o=[];for(let e of i)for(let t of l){let r=`${e}__${t}`;o.push({key:r,header:`${e} ${t}`,age:e,gender:t})}let s=e.map((e,t)=>{let a={id:e.indicatorUuid||String(t),indicator:aL(e.name||e.code||e.indicatorUuid),kind:e.kind??"",error:e.error??""};for(let e of o)a[e.key]=0;if(!e.error&&aM(e)){let t=r(e,"age_group"),n=r(e,"gender"),l=r(e,"value");for(let r of e.rows??[]){let e=String(r?.[t]??""),i=String(r?.[n]??""),o=r?.[l],s=`${e}__${i}`;s in a&&(a[s]=o??0)}}return a});return{headers:[{key:"indicator",header:"Indicator"},{key:"kind",header:"Type"},...o.map(e=>({key:e.key,header:e.header})),{key:"error",header:"Error"}],rows:s,hasAnyDisagg:o.length>0}}(A),O=A.filter(e=>e.error||!aM(e));return n().createElement(o.aFV,{open:e,onRequestClose:t,modalHeading:r?`Preview Section: ${r.name}`:"Preview Section",primaryButtonText:"Close",secondaryButtonText:"Cancel",onRequestSubmit:t,size:"lg"},n().createElement(o.BJc,{gap:5},r?null:n().createElement(o.jeF,{kind:"warning",lowContrast:!0,title:"No section",subtitle:"Select a section first."}),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.75rem"}},n().createElement(o.ksK,{id:"section-preview-startdate","data-testid":"section-preview-startdate",labelText:"Start date",type:"date",value:a,onChange:e=>l(e.target.value),disabled:!r}),n().createElement(o.ksK,{id:"section-preview-enddate","data-testid":"section-preview-enddate",labelText:"End date",type:"date",value:i,onChange:e=>s(e.target.value),disabled:!r})),n().createElement(o.ksK,{id:"section-preview-indicatoruuid","data-testid":"section-preview-indicatoruuid",labelText:"Indicator UUID (optional)",value:c,onChange:e=>m(e.target.value),disabled:!r}),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr auto",gap:"0.75rem",alignItems:"end"}},n().createElement(o.ksK,{id:"section-preview-maxrows","data-testid":"section-preview-maxrows",labelText:"Max rows",value:String(u),onChange:e=>{let t=Number(e.target.value);p(Number.isFinite(t)&&t>0?t:200)},disabled:!r}),n().createElement(o.$nd,{"data-testid":"section-preview-run",kind:"primary",renderIcon:d.jG,disabled:!N,onClick:k},"Preview Section")),_?n().createElement(o.OuH,{description:"Running section preview…"}):null,E?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Preview",subtitle:E}):null,n().createElement(o.tUM,{selectedIndex:C,onChange:({selectedIndex:e})=>w(e),"aria-label":"Section preview tabs"},n().createElement(o.wbY,{"aria-label":"Section preview tab list"},n().createElement(o.ozo,null,"Results"),n().createElement(o.ozo,null,"SQL")),n().createElement(o.T2N,null,n().createElement(o.KpK,null,b?n().createElement(n().Fragment,null,R.hasAnyDisagg?n().createElement(o.K3K,{"data-testid":"section-preview-matrix",title:"Section preview matrix",description:"Indicators are rows; disaggregations are columns. Missing values show as 0."},n().createElement(o.bQt,{rows:R.rows,headers:R.headers,size:"md",useZebraStyles:!0},({rows:e,headers:t,getHeaderProps:r,getRowProps:a,getTableProps:l})=>n().createElement(o.XIK,l(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,t.map(e=>n().createElement(o.A0N,{key:e.key,...r({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id,...a({row:e})},e.cells.map(e=>n().createElement(o.nA6,{key:e.id},e.value)))))))):n().createElement(o.jeF,{kind:"info",lowContrast:!0,title:"No disaggregated results",subtitle:"No indicator returned (age_group, gender, value) rows for this preview."}),O.length?n().createElement(o.BJc,{gap:4},n().createElement("div",{style:{fontWeight:600,marginTop:"0.5rem"}},"Other results"),O.map((e,t)=>{var r,a;if(e.error)return n().createElement(o.jeF,{key:`${e.indicatorUuid}-${t}`,kind:"error",lowContrast:!0,title:`Indicator error: ${aL(e.name||e.code||e.indicatorUuid)}`,subtitle:e.error});let{headers:l,tableRows:i}=(r=e.columns??[],a=e.rows??[],{headers:r.map((e,t)=>({key:`${t}`,header:e})),tableRows:(a??[]).map((e,t)=>{let a={id:String(t)};return r.forEach((t,r)=>{a[`${r}`]=e?.[r]}),a})});return n().createElement(o.K3K,{key:`${e.indicatorUuid}-${t}`,title:aL(e.name||e.code||e.indicatorUuid),description:`Returned columns: ${(e.columns??[]).join(", ")}`},n().createElement(o.bQt,{rows:i,headers:l,size:"md",useZebraStyles:!0},({rows:e,headers:t,getHeaderProps:r,getRowProps:a,getTableProps:l})=>n().createElement(o.XIK,l(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,t.map(e=>n().createElement(o.A0N,{key:e.key,...r({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id,...a({row:e})},e.cells.map(e=>n().createElement(o.nA6,{key:e.id},e.value))))))))})):null):n().createElement("div",{style:{opacity:.6}},"Run the preview to see results.")),n().createElement(o.KpK,null,b&&0!==A.length?n().createElement("div",{style:{opacity:S?.6:1}},S&&n().createElement(o.OuH,{description:"Generating SQL preview…"}),n().createElement("div",{style:{fontSize:"0.875rem",color:"#666",marginBottom:"0.5rem"}},"Generated disaggregation SQL for each indicator in this section:"),A.map((e,t)=>{let r=h[e.indicatorUuid];return n().createElement("div",{key:e.indicatorUuid,style:{marginBottom:"1.5rem"}},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.25rem"}},t+1,". ",aL(e.name||e.code||e.indicatorUuid),e.kind?n().createElement("span",{style:{fontWeight:400,color:"#666",marginLeft:"0.5rem"}},"(",e.kind,")"):null),n().createElement("pre",{style:{background:"#f4f4f4",padding:"1rem",borderRadius:"4px",fontSize:"0.875rem",overflow:"auto",maxHeight:"400px",border:"1px solid #e0e0e0"}},r||"Loading SQL…"))})):n().createElement("div",{style:{opacity:.6}},"Run the preview first to generate SQL."))))))}let aU=()=>{let{t:e}=(0,A.useTranslation)(),{has:t}=v(),r=t(y.RB.SECTION_ADD,y.RB.SECTION_EDIT),a=t(y.RB.SQL_EXECUTE),[l,s]=n().useState(""),[d,c]=n().useState(!1),[u,p]=n().useState([]),[,_]=n().useState(!1),[g,E]=n().useState(null),[f,h]=n().useState([]),[,S]=n().useState(!1),[T,C]=n().useState(null),[w,N]=n().useState(!1),[I,k]=n().useState(null),[R,O]=n().useState(!1),[D,x]=n().useState(null),L=n().useMemo(()=>{let e=l.trim().toLowerCase();return u.filter(e=>!e.retired).filter(t=>!e||(t.name??"").toLowerCase().includes(e)||(t.code??"").toLowerCase().includes(e))},[l,u]),M=n().useMemo(()=>[{key:"name",header:e("name","Name")},{key:"indicators",header:e("indicators","Indicators")},{key:"actions",header:e("actions","Actions")}],[e]),$=n().useMemo(()=>L.map(e=>({id:e.uuid,name:e.name,indicators:String(function(e){try{if(!e?.configJson)return 0;let t=JSON.parse(e.configJson);return(Array.isArray(t?.indicators)?t.indicators:[]).length}catch{return 0}}(e)),actions:""})),[L]),P=n().useCallback(async()=>{let e=new AbortController;_(!0),E(null);try{let t=await tp({v:"default"},e.signal);p(t)}catch(e){E(e?.message??"Failed to load sections")}finally{_(!1)}return()=>e.abort()},[]);n().useEffect(()=>{P()},[P]),n().useEffect(()=>{let e=new AbortController;return S(!0),C(null),rp({v:"default",includeRetired:!1},e.signal).then(e=>{h(e.map(e=>({id:e.uuid,type:e.kind,code:e.code??"",name:e.name})))}).catch(e=>C(e?.message??"Failed to load indicators")).finally(()=>S(!1)),()=>e.abort()},[]);let U=async e=>{try{e.id?(await tE(e.id,{name:e.name,description:e.description,configJson:e.configJson}),O(!1),x(null)):(await tg({name:e.name,description:e.description,code:e.name?.trim?.()?e.name.trim().toUpperCase().replace(/[^A-Z0-9]+/g,"_").slice(0,60):void 0,configJson:e.configJson}),c(!1)),await P()}catch(e){console.error("Failed to save section",e)}},B=async e=>{try{let t=await t_(e,void 0,"full");k(t),N(!0)}catch(e){console.error("Failed to load section",e)}},F=async e=>{try{let t=await t_(e,void 0,"full");x(t),O(!0)}catch(e){console.error("Failed to load section for edit",e)}},z=(0,i.zy)();return n().useEffect(()=>{"1"===new URLSearchParams(z.search).get("create")&&c(!0)},[z.search]),n().createElement("div",{className:"-esm-report-builder__sections-page__page___W8CFE"},n().createElement(G,{title:e("reportSection","Manage Report Sections"),subtitle:e("sectionsSubtitle","Draft • Define sections and reuse them in reports"),status:{label:e("draft","Draft"),kind:"warning"}}),n().createElement("div",{className:"-esm-report-builder__sections-page__sectionsPage___QgtJD"},n().createElement("div",{className:"-esm-report-builder__sections-page__headerRow___1UsSW"},n().createElement("h3",{className:"-esm-report-builder__sections-page__title___MUNjM"},e("sections","Sections")),r&&n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:b.OM,onClick:()=>c(!0)},e("createSection","Create Section"))),n().createElement("div",{className:"-esm-report-builder__sections-page__surface___OYYi4"},n().createElement("div",{className:"-esm-report-builder__sections-page__toolbarRow___Nc9lf"},n().createElement(o.vji,{size:"lg",labelText:e("search","Search"),placeholder:e("search","Search"),value:l,onChange:e=>s(e.target.value)})),g?n().createElement("div",{style:{padding:"0.75rem"}},g):null,T?n().createElement("div",{style:{padding:"0.75rem"}},T):null,n().createElement(o.bQt,{rows:$,headers:M,size:"lg",useZebraStyles:!0},({rows:e,headers:t,getHeaderProps:l,getRowProps:i,getTableProps:s})=>n().createElement(o.XIK,s(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,n().createElement(o.A0N,{key:"_hash",style:{width:"3rem"}}),t.map(e=>n().createElement(o.A0N,{key:e.key,...l({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id,"data-testid":`section-row-${String(L.find(t=>t.uuid===e.id)?.name??e.id).replace(/\s+/g,"-")}`,...i({row:e})},n().createElement(o.nA6,null,n().createElement(m.vd,{size:16})),e.cells.map(t=>"actions"===t.info.header?n().createElement(o.nA6,{key:t.id},n().createElement(o.obU,{"data-testid":`section-actions-${e.id}`,size:"sm",ariaLabel:"Actions",flipped:!0},a&&n().createElement(o.XSD,{itemText:"Preview",onClick:()=>B(e.id)}),r&&n().createElement(o.XSD,{itemText:"Edit",onClick:()=>F(e.id)}))):"name"===t.info.header?n().createElement(o.nA6,{key:t.id},n().createElement("div",{style:{fontWeight:600}},t.value)):"indicators"===t.info.header?n().createElement(o.nA6,{key:t.id},n().createElement(o.vwO,{type:"gray",size:"sm"},t.value)):n().createElement(o.nA6,{key:t.id},t.value))))))))),n().createElement(aR,{open:d,onClose:()=>c(!1),onSubmit:U,indicators:f,mode:"create",initialSection:null}),n().createElement(aR,{open:R,onClose:()=>{O(!1),x(null)},onSubmit:U,indicators:f,mode:"edit",initialSection:D}),n().createElement(aP,{open:w,onClose:()=>{N(!1),k(null)},section:I}))},aB="-esm-report-builder__report-visualizer__explorerPanel___w0VjU",aF="-esm-report-builder__report-visualizer__panelHeader___UvhIe",az="-esm-report-builder__report-visualizer__panelTitle___gfz5J",aq="-esm-report-builder__report-visualizer__panelContent___F09Qx",aj="-esm-report-builder__report-visualizer__emptyState___AQyxI";var aH=r(2177),aJ=r(4353),aG=r.n(aJ);let aV=e=>(0,aO.jX)((0,h.openmrsFetch)(e));async function aW(e,t){let r=new URLSearchParams({startDate:e.startDate,endDate:e.endDate,uuid:e.uuid}),a=e.renderType||e.reportCategory?.renderType;return a&&r.set("renderType",a),e.reportCategory?.category==="cqi"&&e.reportingCohort&&r.set("cohortList",e.reportingCohort),e.parameters&&Object.entries(e.parameters).forEach(([e,t])=>{null!=t&&""!==t&&r.set(e,String(t))}),(0,aO.jX)((0,h.openmrsFetch)(`${h.restBaseUrl}/reportbuilder/reportingDefinition?${r.toString()}`,{signal:t}))}async function aK(e,t){let r=`${h.restBaseUrl}/sendreport?uuid=${e}`,a=new AbortController;return(0,aO.jX)((0,h.openmrsFetch)(r,{method:"POST",signal:a.signal,headers:{"Content-Type":"application/json"},body:{...t}}))}let aQ=e=>aG()(e).format("YYYY-MM-DD");function aY(e){if(!e.metaJson)return[];try{let t=JSON.parse(e.metaJson);if(Array.isArray(t.tags))return t.tags;if("string"==typeof t.tags)return t.tags.split(",").map(e=>e.trim()).filter(Boolean);return[]}catch{return[]}}let aX="reportVisualizer.preferences",aZ={explorerExpanded:!0,explorerWidth:350,rowsPerPage:25,lastActiveView:void 0},a0=({value:e,onChange:t,disabled:r})=>{let[l,i]=(0,a.useState)(e),s=(0,a.useRef)(null),[d,c]=(0,a.useState)(!1),m=(0,a.useMemo)(()=>{let e=null;return r=>{e&&clearTimeout(e),e=setTimeout(()=>{t(r)},200)}},[t]);(0,a.useEffect)(()=>{i(e)},[e]),(0,a.useEffect)(()=>{let e=e=>{(e.ctrlKey||e.metaKey)&&"k"===e.key&&(e.preventDefault(),s.current?.focus())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[]);let u=l.length>0,p=e.length>0;return n().createElement("div",{style:{position:"relative"}},n().createElement(o.ksK,{ref:s,id:"report-search-input",labelText:"",placeholder:"Search... (⌘K)",value:l,onChange:e=>{let t=e.target.value;i(t),m(t)},disabled:r,size:"sm",onFocus:()=>c(!0),onBlur:()=>c(!1),style:{borderColor:p||d?"#0f62fe":void 0,backgroundColor:p?"#f4f8ff":void 0}}),n().createElement("div",{style:{position:"absolute",left:"0.75rem",top:"50%",transform:"translateY(-50%)",color:p?"#0f62fe":"#666",pointerEvents:"none",transition:"color 0.15s ease"}},n().createElement(g.vj,{size:16})),u&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.bm,iconDescription:"Clear search",onClick:()=>{i(""),t(""),s.current?.focus()},style:{position:"absolute",right:"0.25rem",top:"50%",transform:"translateY(-50%)",padding:"0.25rem",minWidth:"auto",width:"28px",height:"28px"}}),p&&n().createElement("div",{style:{position:"absolute",left:"0",top:"0",bottom:"0",width:"3px",backgroundColor:"#0f62fe",borderRadius:"4px 0 0 4px"}}))},a1=({categories:e,selectedCategory:t,onSelect:r,disabled:a})=>n().createElement(o.l6P,{id:"report-category-filter",labelText:"Category",value:t||"all",onChange:e=>{let t=e.target.value;r("all"===t?void 0:t)},disabled:a,size:"sm"},n().createElement(o.ebT,{value:"all",text:"All report categories"}),e.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.display||e.name}))),a2=({availableTags:e,selectedTags:t,onChange:r,disabled:l})=>{let[i,s]=(0,a.useState)(""),d=(0,a.useMemo)(()=>e.filter(e=>!t.includes(e)).map(e=>({id:e,label:e,value:e})),[e,t]);return n().createElement("div",null,t.length>0&&n().createElement("div",{style:{marginBottom:"0.5rem",display:"flex",flexWrap:"wrap",gap:"0.5rem"}},t.map(e=>n().createElement(o.vwO,{key:e,type:"blue",style:{display:"flex",alignItems:"center",gap:"0.25rem"}},e,n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.bm,iconDescription:`Remove ${e}`,onClick:()=>{r(t.filter(t=>t!==e))},style:{marginLeft:"0.25rem",padding:"0"}})))),n().createElement(o.a32,{id:"report-tag-filter",titleText:"Tags",placeholder:"Add tag filter",items:d,value:i,itemToString:e=>e?.label||"",onChange:({selectedItem:e})=>{e&&e&&!t.includes(e.value)&&(r([...t,e.value]),s(""))},onInputChange:e=>s(e.target.value||""),disabled:l,size:"sm"}))},a5=({reports:e,selectedReportUuid:t,onSelect:r,loading:l,searchQuery:i=""})=>{let[o,s]=(0,a.useState)(null),[d,c]=(0,a.useState)(-1),m=(0,a.useRef)(null),u=(0,a.useRef)([]),p=(0,a.useCallback)(t=>{if(0!==e.length)switch(t.key){case"ArrowDown":t.preventDefault(),c(t=>{let r=Math.min(t+1,e.length-1);return u.current[r]?.scrollIntoView({block:"nearest"}),r});break;case"ArrowUp":t.preventDefault(),c(e=>{let t=Math.max(e-1,0);return u.current[t]?.scrollIntoView({block:"nearest"}),t});break;case"Enter":t.preventDefault(),d>=0&&d<e.length&&r(e[d]);break;case"Escape":t.preventDefault(),c(-1)}},[e,d,r]);return((0,a.useEffect)(()=>{c(-1),s(null)},[e.length,i]),(0,a.useEffect)(()=>{if(t){let r=e.findIndex(e=>e.uuid===t);r>=0&&c(r)}},[t,e]),l)?n().createElement("div",{style:{padding:"1rem"}},[1,2,3].map(e=>n().createElement("div",{key:e,style:{padding:"0.75rem",marginBottom:"0.5rem",backgroundColor:"#f5f5f5",borderRadius:"4px",animation:"pulse 1.5s ease-in-out infinite"}},n().createElement("div",{style:{height:"14px",width:"70%",backgroundColor:"#e0e0e0",borderRadius:"2px",marginBottom:"0.5rem"}}),n().createElement("div",{style:{height:"12px",width:"40%",backgroundColor:"#e0e0e0",borderRadius:"2px"}})))):0===e.length?n().createElement("div",{style:{padding:"2rem 1rem",textAlign:"center",color:"#666"}},i?n().createElement(n().Fragment,null,n().createElement(g.vj,{size:32,style:{marginBottom:"0.75rem",opacity:.4,color:"#999"}}),n().createElement("p",{style:{fontSize:"0.875rem",marginBottom:"0.25rem"}},'No reports match "',i,'"'),n().createElement("p",{style:{fontSize:"0.75rem",color:"#999"}},"Try adjusting your search or filters")):n().createElement(n().Fragment,null,n().createElement(es.yo,{size:32,style:{marginBottom:"0.75rem",opacity:.4}}),n().createElement("p",{style:{fontSize:"0.875rem",marginBottom:"0.25rem"}},"No reports available"),n().createElement("p",{style:{fontSize:"0.75rem",color:"#999"}},"Select a category to see reports"))):n().createElement("div",{ref:m,role:"listbox","aria-label":"Reports",onKeyDown:p,tabIndex:-1,style:{display:"flex",flexDirection:"column",gap:"0.25rem"}},e.map((e,a)=>{let l=e.uuid===t,i=a===d,c=a===o;return n().createElement("div",{key:e.uuid,ref:e=>u.current[a]=e,onClick:()=>r(e),onMouseEnter:()=>s(a),onMouseLeave:()=>s(null),role:"option","aria-selected":l,tabIndex:i?0:-1,style:{padding:"0.75rem",backgroundColor:l?"#e0f2ff":i?"#f4f8ff":c?"#fafafa":"#ffffff",border:l?"2px solid #0f62fe":i?"2px solid #8ca3f7":"1px solid #e0e0e0",borderRadius:"6px",cursor:"pointer",display:"flex",alignItems:"flex-start",justifyContent:"space-between",transition:"all 0.15s ease",transform:i?"translateX(2px)":"translateX(0)",boxShadow:i?"0 2px 8px rgba(15, 98, 254, 0.15)":l?"0 1px 4px rgba(15, 98, 254, 0.1)":"none"}},n().createElement("div",{style:{flex:1,minWidth:0}},n().createElement("div",{style:{fontWeight:l||i?600:500,color:"#161616",marginBottom:"0.25rem",fontSize:"0.875rem"}},e.name),e.code&&n().createElement("div",{style:{fontSize:"0.75rem",color:"#666",display:"inline-block",padding:"2px 6px",backgroundColor:"#f0f0f0",borderRadius:"3px",marginBottom:"0.25rem"}},e.code),e.description&&n().createElement("div",{style:{fontSize:"0.75rem",color:"#666",marginTop:"0.25rem",lineHeight:"1.4"}},e.description)),l&&n().createElement("div",{style:{backgroundColor:"#0f62fe",borderRadius:"50%",padding:"4px",flexShrink:0,marginLeft:"0.5rem",marginTop:"2px"}},n().createElement(U.MG,{size:12,style:{color:"#ffffff"}})))}))},a6=[{value:"TODAY",label:"Today"},{value:"YESTERDAY",label:"Yesterday"},{value:"THIS_WEEK",label:"This Week"},{value:"LAST_WEEK",label:"Last Week"},{value:"THIS_MONTH",label:"This Month"},{value:"LAST_MONTH",label:"Last Month"},{value:"THIS_QUARTER",label:"This Quarter"},{value:"LAST_QUARTER",label:"Last Quarter"},{value:"THIS_YEAR",label:"This Year"},{value:"LAST_YEAR",label:"Last Year"},{value:"LAST_7_DAYS",label:"Last 7 Days"},{value:"LAST_30_DAYS",label:"Last 30 Days"},{value:"LAST_90_DAYS",label:"Last 90 Days"}];function a3(e){let t=new Date;switch(e){case"TODAY":return{start:t,end:t};case"YESTERDAY":{let e=new Date(t);return e.setDate(t.getDate()-1),{start:e,end:e}}case"THIS_WEEK":{let e=new Date(t);e.setDate(t.getDate()-t.getDay());let r=new Date(t);return r.setDate(t.getDate()+(6-t.getDay())),{start:e,end:r}}case"LAST_WEEK":{let e=new Date(t);e.setDate(t.getDate()-t.getDay()-7);let r=new Date(t);return r.setDate(t.getDate()-t.getDay()-1),{start:e,end:r}}case"THIS_MONTH":return{start:new Date(t.getFullYear(),t.getMonth(),1),end:new Date(t.getFullYear(),t.getMonth()+1,0)};case"LAST_MONTH":return{start:new Date(t.getFullYear(),t.getMonth()-1,1),end:new Date(t.getFullYear(),t.getMonth(),0)};case"THIS_QUARTER":{let e=Math.floor(t.getMonth()/3);return{start:new Date(t.getFullYear(),3*e,1),end:new Date(t.getFullYear(),(e+1)*3,0)}}case"LAST_QUARTER":{let e=Math.floor(t.getMonth()/3);if(0===e)return{start:new Date(t.getFullYear()-1,9,1),end:new Date(t.getFullYear()-1,12,0)};return{start:new Date(t.getFullYear(),(e-1)*3,1),end:new Date(t.getFullYear(),3*e,0)}}case"THIS_YEAR":return{start:new Date(t.getFullYear(),0,1),end:new Date(t.getFullYear(),12,0)};case"LAST_YEAR":return{start:new Date(t.getFullYear()-1,0,1),end:new Date(t.getFullYear()-1,12,0)};case"LAST_7_DAYS":{let e=new Date(t);return e.setDate(t.getDate()-7),{start:e,end:t}}case"LAST_30_DAYS":{let e=new Date(t);return e.setDate(t.getDate()-30),{start:e,end:t}}case"LAST_90_DAYS":{let e=new Date(t);return e.setDate(t.getDate()-90),{start:e,end:t}}default:throw Error(`Unknown relative period: ${e}`)}}function a4(e){return aG()(e).format("YYYY-MM-DD")}let a8=({parameter:e,value:t,error:r,onChange:l})=>{let i=e.config,[s,d]=(0,a.useState)(null),c=(0,a.useRef)(!1),m=(0,a.useMemo)(()=>{if(!t)return null;let e=t.split("-");if(3===e.length){let[t,r,a]=e.map(Number);if(t&&void 0!==r&&void 0!==a&&!isNaN(t)&&!isNaN(r)&&!isNaN(a)){let e=new Date(t,r-1,a);if(!isNaN(e.getTime()))return e}}return null},[t]);return(0,a.useEffect)(()=>{console.log("DateParameterInput useEffect - syncing from parent:",{parameterName:e.name,parsedDate:m,internalValue:s,isUpdatingFromRef:c.current,value:t}),c.current||d(m),c.current=!1},[m]),n().createElement(o.lrV,{dateFormat:"Y-m-d",datePickerType:"single",minDate:i?.minDate?new Date(i.minDate):void 0,maxDate:i?.maxDate?new Date(i.maxDate):void 0,value:s,onChange:r=>{if(console.log("DateParameterInput handleDateChange called:",{date:r,parameterName:e.name,currentValue:t,internalValue:s,isUpdatingFromRef:c.current}),!r){c.current=!0,d(null),l("");return}let a=Array.isArray(r)?r[0]:r;if(a&&!isNaN(a.getTime())){c.current=!0,d(a);let e=a.getFullYear(),t=String(a.getMonth()+1).padStart(2,"0"),r=String(a.getDate()).padStart(2,"0"),n=`${e}-${t}-${r}`;console.log("Calling onChange with:",n),l(n)}}},n().createElement(o.tKA,{id:`${e.name}-input`,labelText:e.label,placeholder:e.label,invalid:!!r,invalidText:r,size:"sm"}))},a7=({parameter:e,value:t,error:r,onChange:a})=>{let l=e.config;return n().createElement(o.Q7x,{id:`report-param-${e.name}`,label:e.label,value:t,onChange:e=>{a(e.target.value)},invalid:!!r,invalidText:r,min:l?.min,max:l?.max,step:l?.step,size:"sm"})},a9=({parameter:e,value:t,onChange:r})=>{let a=e.config;return n().createElement(o.lMk,{id:`report-param-${e.name}`,labelA:a?.falseLabel||"No",labelB:a?.trueLabel||"Yes",toggled:!0===t||"true"===t,onToggle:e=>{r(e)}})},ne=({parameter:e,value:t,error:r,onChange:a})=>{let l=e.config,i=l?.options||[];return i.length<=5?n().createElement(o.l6P,{id:`report-param-${e.name}`,labelText:e.label,value:t,onChange:e=>{a(e.target.value)},invalid:!!r,invalidText:r,size:"sm"},n().createElement(o.ebT,{value:"",text:`Select ${e.label}`}),i.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))):n().createElement("div",null,n().createElement("label",{htmlFor:`report-param-${e.name}`,className:"cds--label"},e.label),n().createElement(o.a32,{id:`report-param-${e.name}`,titleText:e.label,items:i,itemToString:e=>e?.label||"",initialSelectedItem:i.find(e=>e.value===t),onChange:({selectedItem:e})=>{e?a(e.value):a("")},invalid:!!r,invalidText:r,size:"sm"}))};async function nt(e=!1,t,r){var a;let n=new URLSearchParams;n.append("v","full"),e&&n.append("includeAll","true"),t&&n.append("tag",t);let l=n.toString();return(a=await (0,W.wO)(`location?${l}`,r))?Array.isArray(a)?a:Array.isArray(a.results)?a.results:[]:[]}async function nr(e,t){var r;return e?.trim()?(r=await (0,W.wO)(`concept?q=${encodeURIComponent(e)}&v=full`,t))?Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]:[]:[]}async function na(e=!1,t){var r;return(r=await (0,W.wO)(`patientidentifiertype${e?"?includeAll=true&v=default":"?v=default"}`,t))?Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]:[]}async function nn(e=!1,t){var r;return(r=await (0,W.wO)(`personattributetype${e?"?includeAll=true&v=default":"?v=default"}`,t))?Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]:[]}let nl=({parameter:e,value:t,error:r,onChange:l,onSearchQueryChange:i})=>{let s=e.config,{locations:d}=function(e){let[t,r]=(0,a.useState)([]),[n,l]=(0,a.useState)(!1),[i,o]=(0,a.useState)(null);return(0,a.useEffect)(()=>{let t=!1;return(async()=>{l(!0),o(null);try{let a=await nt(!1,e);t||r(a)}catch(e){t||o(e instanceof Error?e.message:"Failed to load locations")}finally{t||l(!1)}})(),()=>{t=!0}},[e]),{locations:t,loading:n,error:i}}(s?.tagUuid),c=d.map(e=>({uuid:e.uuid,label:e.display||e.name})),m=c.find(e=>e.uuid===t),u=(0,a.useCallback)(e=>{i?.(e)},[i]),p=(0,a.useCallback)(({selectedItem:e})=>{e?l(e.uuid||""):l("")},[l]);return n().createElement("div",null,n().createElement("label",{htmlFor:`report-param-${e.name}`,className:"cds--label"},e.label),n().createElement(o.a32,{id:`report-param-${e.name}`,titleText:e.label,items:c,itemToString:e=>e?.label||"",initialSelectedItem:m,onInputChange:u,onChange:p,invalid:!!r,invalidText:r,placeholder:e.label,size:"sm"}))},ni=({parameter:e,value:t,error:r,onChange:l,searchQuery:i="",onSearchQueryChange:s})=>{let d=e.config,{results:c}=function(e,t){let[r,n]=(0,a.useState)([]),[l,i]=(0,a.useState)(!1),[o,s]=(0,a.useState)(null),d=(0,a.useRef)();return(0,a.useEffect)(()=>{if(d.current&&clearTimeout(d.current),!e?.trim()){n([]),i(!1),s(null);return}return d.current=setTimeout(async()=>{i(!0),s(null);try{let r=await nr(e),a=r;t&&t.length>0&&(a=r.filter(e=>t.includes(e.conceptClass?.uuid))),n(a)}catch(e){s(e instanceof Error?e.message:"Failed to search concepts"),n([])}finally{i(!1)}},300),()=>{d.current&&clearTimeout(d.current)}},[e,t]),{results:r,loading:l,error:o}}(i,d?.conceptClassUuids),m=c.map(e=>({uuid:e.uuid,label:e.display||e.name?.name||e.uuid})),u=m.find(e=>e.uuid===t),p=(0,a.useCallback)(e=>{s?.(e)},[s]),_=(0,a.useCallback)(({selectedItem:e})=>{e?l(e.uuid||""):l("")},[l]);return n().createElement("div",null,n().createElement("label",{htmlFor:`report-param-${e.name}`,className:"cds--label"},e.label),n().createElement(o.a32,{id:`report-param-${e.name}`,titleText:e.label,items:m,itemToString:e=>e?.label||"",initialSelectedItem:u,onInputChange:p,onChange:_,invalid:!!r,invalidText:r,placeholder:e.label,size:"sm"}))},no=({parameter:e,value:t,error:r,onChange:l})=>{let{identifierTypes:i}=function(e=!1){let[t,r]=(0,a.useState)([]),[n,l]=(0,a.useState)(!1),[i,o]=(0,a.useState)(null);return(0,a.useEffect)(()=>{let t=!1;return(async()=>{l(!0),o(null);try{let a=await na(e);t||r(a)}catch(e){t||o(e instanceof Error?e.message:"Failed to load identifier types")}finally{t||l(!1)}})(),()=>{t=!0}},[e]),{identifierTypes:t,loading:n,error:i}}(!0),s=i.map(e=>({uuid:e.uuid,label:e.display||e.name||e.uuid})),d=s.find(e=>e.uuid===t),c=(0,a.useCallback)(({selectedItem:e})=>{e?l(e.uuid||""):l("")},[l]);return n().createElement("div",null,n().createElement("label",{htmlFor:`report-param-${e.name}`,className:"cds--label"},e.label),n().createElement(o.a32,{id:`report-param-${e.name}`,titleText:e.label,items:s,itemToString:e=>e?.label||"",initialSelectedItem:d,onChange:c,invalid:!!r,invalidText:r,placeholder:e.label,size:"sm"}))},ns=({parameter:e,value:t,error:r,onChange:l})=>{let i=e.config,{attributeTypes:s}=function(e=!1,t){let[r,n]=(0,a.useState)([]),[l,i]=(0,a.useState)(!1),[o,s]=(0,a.useState)(null);return(0,a.useEffect)(()=>{let r=!1;return(async()=>{i(!0),s(null);try{let a=await nn(e),l=a;t&&(l=a.filter(e=>e.format===t)),r||n(l)}catch(e){r||s(e instanceof Error?e.message:"Failed to load attribute types")}finally{r||i(!1)}})(),()=>{r=!0}},[e,t]),{attributeTypes:r,loading:l,error:o}}(!1,i?.format),d=s.map(e=>({uuid:e.uuid,label:e.display||e.name||e.uuid})),c=d.find(e=>e.uuid===t),m=(0,a.useCallback)(({selectedItem:e})=>{e?l(e.uuid||""):l("")},[l]);return n().createElement("div",null,n().createElement("label",{htmlFor:`report-param-${e.name}`,className:"cds--label"},e.label),n().createElement(o.a32,{id:`report-param-${e.name}`,titleText:e.label,items:d,itemToString:e=>e?.label||"",initialSelectedItem:c,onChange:m,invalid:!!r,invalidText:r,placeholder:e.label,size:"sm"}))},nd=({parameter:e,value:t,error:r,onChange:l,onError:i})=>{let s=e.config,d=(0,a.useCallback)(e=>{let t=e.target.value;s?.minLength&&t.length<s.minLength?i?.(`Minimum ${s.minLength} characters required`):s?.maxLength&&t.length>s.maxLength?i?.(`Maximum ${s.maxLength} characters allowed`):s?.pattern&&!new RegExp(s.pattern).test(t)?i?.("Invalid format"):(i?.(void 0),l(t))},[s,l,i]);return n().createElement(o.ksK,{id:`report-param-${e.name}`,labelText:e.label,value:t,onChange:d,invalid:!!r,invalidText:r,placeholder:e.label,size:"sm"})},nc=({parameters:e,values:t,errors:r,onChange:l,onReset:i,disabled:s})=>{let[d,c]=(0,a.useState)("FIXED"),[m,p]=(0,a.useState)(void 0),_=(0,a.useMemo)(()=>e.filter(e=>"DATE"===e.type||"DATETIME"===e.type),[e]),g=(0,a.useMemo)(()=>_.some(e=>"startdate"===e.name.toLowerCase()||"start_date"===e.name.toLowerCase())&&_.some(e=>"enddate"===e.name.toLowerCase()||"end_date"===e.name.toLowerCase()),[_]);return 0===e.length?n().createElement("div",{style:{padding:"1rem",textAlign:"center",color:"#999"}},n().createElement("p",null,"Select a report to see its parameters")):n().createElement("div",null,n().createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"0.75rem"}},n().createElement("h4",{style:{margin:0,fontSize:"0.875rem",fontWeight:600,color:"#161616"}},"Available filters"),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:u.wM,onClick:i,disabled:s,hasIconOnly:!0,iconDescription:"Reset filters"},"Reset")),_.length>0&&n().createElement("div",{style:{marginBottom:"0.75rem"}},n().createElement("label",{className:"cds--label",style:{fontSize:"0.75rem",fontWeight:400,color:"#525252"}},"Date Selection Mode"),n().createElement(o.zWQ,{legendText:"",name:"date-mode",valueSelected:d,onChange:e=>{c(e),"FIXED"===e&&p(void 0)}},n().createElement(o.aaP,{id:"date-mode-fixed",labelText:"Specific dates",value:"FIXED"}),n().createElement(o.aaP,{id:"date-mode-relative",labelText:"Relative period",value:"RELATIVE"}))),"RELATIVE"===d&&g&&n().createElement("div",{style:{marginBottom:"0.75rem"}},n().createElement(o.l6P,{id:"relative-period-select",labelText:"Select reporting period",value:m,onChange:e=>(e=>{if(p(e),e&&g){let{start:r,end:a}=a3(e),n={...t};_.forEach((e,t)=>{0===t?n[e.name]=a4(r):1===t&&(n[e.name]=a4(a))}),l(n)}})(e.target.value),size:"sm"},n().createElement(o.ebT,{value:"",text:"Select period"}),a6.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label})))),n().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"0.75rem"}},e.map(e=>{if("RELATIVE"===d&&g){let t="startdate"===e.name.toLowerCase()||"start_date"===e.name.toLowerCase(),r="enddate"===e.name.toLowerCase()||"end_date"===e.name.toLowerCase();if(("DATE"===e.type||"DATETIME"===e.type)&&(t||r))return null}return n().createElement("div",{key:e.name,style:{marginBottom:0}},(e=>{let a=t[e.name]||"",i=r[e.name],o={parameter:e,value:a,error:i,onChange:r=>{var a;return a=e.name,void l({...t,[a]:r})}};switch(e.type){case"DATE":case"DATETIME":return n().createElement(a8,{key:e.name,...o});case"NUMBER":return n().createElement(a7,{key:e.name,...o});case"BOOLEAN":return n().createElement(a9,{key:e.name,...o});case"LIST":return n().createElement(ne,{key:e.name,...o});case"LOCATION":return n().createElement(nl,{key:e.name,...o});case"CONCEPT":return n().createElement(ni,{key:e.name,...o});case"IDENTIFIER_TYPE":return n().createElement(no,{key:e.name,...o});case"PERSON_ATTRIBUTE":return n().createElement(ns,{key:e.name,...o});default:return n().createElement(nd,{key:e.name,...o})}})(e))})))},nm=({disabled:e,loading:t,onClick:r,reportSelected:a})=>n().createElement("div",{style:{padding:"1rem",borderTop:"1px solid #e0e0e0",marginTop:"auto"}},n().createElement(o.$nd,{kind:"primary",size:"lg",renderIcon:a?d.jG:E.Qp,onClick:r,disabled:e||t||!a,style:{width:"100%"}},t?"Running...":a?"Run report":"Select a report")),nu=({icon:e,label:t,badge:r,disabled:a,onClick:l,isPrimaryAction:i})=>{let s=n().createElement(o.$nd,{kind:i?"primary":"ghost",size:"sm",hasIconOnly:!0,renderIcon:e,iconDescription:t,onClick:l,disabled:a,style:{margin:"0.25rem 0"}}),d="number"==typeof r?r>0:r;return n().createElement("div",{style:{position:"relative",display:"inline-block"}},s,d&&n().createElement(o.vwO,{size:"sm",type:i?"green":"blue",style:{position:"absolute",top:"-2px",right:"-2px",padding:"0 4px",minHeight:"16px",fontSize:"0.625rem",fontWeight:600}},"number"==typeof r?r:""))},np=({onExpand:e,onRunReport:t,searchActive:r,categoryCount:a,selectedTagCount:l,matchingReportCount:i,hasDateParams:s,hasLocationParams:c,hasOtherParams:u,hasSelectedReport:E})=>n().createElement("aside",{className:`${aB} -esm-report-builder__report-visualizer__collapsed___huSDN`,style:{width:48,alignItems:"center",padding:"0.5rem 0"}},n().createElement("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"0.5rem",width:"100%"}},n().createElement(o.m_M,{align:"right",direction:"right",label:"Show report explorer"},n().createElement(nu,{icon:U.c_,label:"Show report explorer",onClick:e})),void 0!==r&&n().createElement(o.m_M,{align:"right",direction:"right",label:r?"Search active":"Search reports"},n().createElement(nu,{icon:g.vj,label:"Search",badge:r})),void 0!==a&&n().createElement(o.m_M,{align:"right",direction:"right",label:`Category${1===a?"":"ies"}: ${a}`},n().createElement(nu,{icon:m.vd,label:"Category filter",badge:a})),void 0!==l&&l>0&&n().createElement(o.m_M,{align:"right",direction:"right",label:`${l} tag${1===l?"":"s"} selected`},n().createElement(nu,{icon:f.vw,label:"Tag filter",badge:l})),void 0!==i&&n().createElement(o.m_M,{align:"right",direction:"right",label:`${i} report${1===i?"":"s"} found`},n().createElement(nu,{icon:es.yo,label:"Reports",badge:i})),s&&n().createElement(o.m_M,{align:"right",direction:"right",label:"Date parameters"},n().createElement(nu,{icon:_.Vv,label:"Date parameters",badge:!0})),c&&n().createElement(o.m_M,{align:"right",direction:"right",label:"Location parameters"},n().createElement(nu,{icon:p.aZ,label:"Location parameters",badge:!0})),u&&n().createElement(o.m_M,{align:"right",direction:"right",label:"Other parameters"},n().createElement(nu,{icon:m.dJ,label:"Parameters",badge:!0})),n().createElement("div",{style:{flex:1}}),t&&n().createElement(o.m_M,{align:"right",direction:"right",label:E?"Run report":"Select a report first"},n().createElement(nu,{icon:d.jG,label:E?"Run report":"Select a report",onClick:t,disabled:!E,isPrimaryAction:!0})))),n_=({collapsed:e,width:t,onCollapse:r,onExpand:a,categories:l,availableTags:i,reports:s,searchQuery:d,selectedCategory:c,selectedTags:m,selectedReportUuid:u,reportParameters:p,parameterValues:_,parameterErrors:g,onSearchChange:E,onCategoryChange:f,onTagsChange:b,onReportSelect:y,onParameterChange:h,onParametersReset:v,onRunReport:S,loading:T,runningReport:C})=>{let w=d.trim().length>0,N=l.length,I=m.length,k=s.length,A=p.some(e=>"DATE"===e.type||"DATETIME"===e.type),R=p.some(e=>"LOCATION"===e.type),O=p.some(e=>!["DATE","DATETIME","LOCATION"].includes(e.type)),D=!!u;return e?n().createElement(np,{onExpand:a,onRunReport:S,searchActive:w,categoryCount:N,selectedTagCount:I,matchingReportCount:k,hasDateParams:A,hasLocationParams:R,hasOtherParams:O,hasSelectedReport:D}):n().createElement("aside",{className:`${aB}`,style:{width:t}},n().createElement("div",{className:aF},n().createElement("h3",{className:az},"Report Explorer"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.JG,iconDescription:"Hide report explorer",onClick:r})),n().createElement("div",{className:aq},n().createElement("div",{className:"-esm-report-builder__report-visualizer__filterSection___ld3qg",style:{display:"flex",flexDirection:"column",gap:"0.5rem",paddingBottom:"0.75rem",borderBottom:"1px solid #e0e0e0"}},n().createElement(a0,{value:d,onChange:E,disabled:T}),n().createElement(a1,{categories:l,selectedCategory:c,onSelect:f,disabled:T}),i.length>0&&n().createElement(a2,{availableTags:i,selectedTags:m,onChange:b,disabled:T})),u&&p.length>0&&n().createElement("div",{className:"-esm-report-builder__report-visualizer__parameterSection___lIv-6",style:{padding:"0.75rem 0",borderBottom:"1px solid #e0e0e0"}},n().createElement(nc,{parameters:p,values:_,errors:g,onChange:h,onReset:v,disabled:C}),n().createElement("div",{style:{marginTop:"0.75rem"}},n().createElement(nm,{reportSelected:!!u,loading:C,onClick:S}))),n().createElement("div",{className:"-esm-report-builder__report-visualizer__reportsListWrapper___-v6ha",style:{flex:1,overflow:"auto",paddingTop:"0.75rem"}},n().createElement("h4",{style:{margin:"0 0 0.5rem 0",fontSize:"0.875rem",fontWeight:600,color:"#161616"}},"Reports ",s.length>0&&`(${s.length})`),n().createElement(a5,{reports:s,selectedReportUuid:u,onSelect:y,loading:T}))))},ng=({capabilities:e,activeView:t,onViewChange:r,disabled:a})=>{let l=[...e.reportLayout?[{label:"Report Layout",value:"REPORT_LAYOUT",icon:es.yo}]:[],...e.pivot?[{label:"Pivot",value:"PIVOT",icon:c.eB}]:[],...e.chart?[{label:"Chart",value:"CHART",icon:_._C}]:[],...e.table?[{label:"Table",value:"TABLE",icon:f.XI}]:[]];if(0===l.length)return null;let i=l.findIndex(e=>e.value===t);return n().createElement(o.Tps,{selectedIndex:i,onChange:e=>{let t=l.find(t=>t.value===e.name);t&&r(t.value)},size:"sm"},l.map(e=>n().createElement(o.dOG,{key:e.value,name:e.value,text:e.label,disabled:a})))},nE=({onExport:e,disabled:t,loading:r})=>{let[l,i]=(0,a.useState)(!1),s=(0,a.useRef)(null),d=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=e=>{s.current&&!s.current.contains(e.target)&&d.current&&!d.current.contains(e.target)&&i(!1)};return l&&document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[l]);let c=(t,r)=>{r.stopPropagation(),i(!1),e(t)};return n().createElement("div",{style:{position:"relative",display:"inline-block"}},n().createElement(o.$nd,{ref:d,kind:"ghost",size:"sm",renderIcon:es.f5,iconDescription:"Export",onClick:()=>i(!l),disabled:t||r},"Export"),l&&n().createElement(o.Wdr,null,n().createElement("div",{ref:s,style:{position:"absolute",top:"100%",right:0,marginTop:"4px",backgroundColor:"white",border:"1px solid #e0e0e0",borderRadius:"4px",boxShadow:"0 2px 8px rgba(0,0,0,0.15)",minWidth:"200px",zIndex:9999},onClick:e=>e.stopPropagation()},n().createElement("div",{style:{padding:"0.5rem",cursor:"pointer",transition:"background-color 0.1s"},onMouseEnter:e=>{e.currentTarget.style.backgroundColor="#f3f3f3"},onMouseLeave:e=>{e.currentTarget.style.backgroundColor="transparent"},onClick:e=>c("CSV",e)},"Export as CSV"),n().createElement("div",{style:{padding:"0.5rem",cursor:"pointer",transition:"background-color 0.1s"},onMouseEnter:e=>{e.currentTarget.style.backgroundColor="#f3f3f3"},onMouseLeave:e=>{e.currentTarget.style.backgroundColor="transparent"},onClick:e=>c("XLSX",e)},"Export as Excel (XLSX)"),n().createElement("div",{style:{padding:"0.5rem",cursor:"pointer",transition:"background-color 0.1s"},onMouseEnter:e=>{e.currentTarget.style.backgroundColor="#f3f3f3"},onMouseLeave:e=>{e.currentTarget.style.backgroundColor="transparent"},onClick:e=>c("PDF",e)},"Export as PDF"))))},nf=({reportName:e,reportDescription:t,capabilities:r,activeView:a,onViewChange:l,onExport:i,onSendToDhis2:s,loading:d,hasResults:c=!1})=>n().createElement("div",{style:{display:"flex",alignItems:"flex-end",justifyContent:"space-between",gap:"1rem"}},n().createElement("div",{style:{flex:1,minWidth:0}},n().createElement("h3",{style:{margin:0,fontSize:"1rem",fontWeight:600,color:"#161616"}},e),t&&n().createElement("p",{style:{margin:"0.25rem 0 0",fontSize:"0.875rem",color:"#666"}},t)),n().createElement("div",{style:{flex:"0 0 auto"}},n().createElement(ng,{capabilities:r,activeView:a,onViewChange:l,disabled:d})),c&&n().createElement(o.Te$,null,s&&r.sendToDhis2&&n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:g.o0,onClick:s,disabled:d},"DHIS2"),n().createElement(nE,{onExport:i,disabled:d,loading:d})));var nb=r(5576);let ny=({rowCount:e,generatedTime:t,parameters:r})=>n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"1rem",flexWrap:"wrap"}},n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"}},n().createElement("span",{style:{fontSize:"0.875rem",color:"#333"}},new Intl.NumberFormat().format(e)," ",1===e?"record":"records")),n().createElement("span",{style:{color:"#999"}},"•"),n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.25rem",fontSize:"0.875rem",color:"#666"}},n().createElement(nb.gX,{size:14}),n().createElement("span",null,"Generated ",(e=>{let t=new Date,r=e.toDateString()===t.toDateString(),a=e.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!1});if(r)return`today ${a}`;let n=new Date(t);return(n.setDate(n.getDate()-1),e.toDateString()===n.toDateString())?`yesterday ${a}`:`${e.toLocaleDateString()} ${a}`})(t))),r&&Object.keys(r).length>0&&n().createElement(n().Fragment,null,n().createElement("span",{style:{color:"#999"}},"•"),n().createElement("div",{style:{display:"flex",gap:"0.25rem",flexWrap:"wrap"}},Object.entries(r).slice(0,3).map(([e,t])=>n().createElement(o.vwO,{key:e,size:"sm",type:"cool-gray"},e,": ",String(t))),Object.keys(r).length>3&&n().createElement(o.vwO,{size:"sm",type:"cool-gray"},"+",Object.keys(r).length-3," more")))),nh=({htmlContent:e,reportName:t})=>{let r=(0,a.useMemo)(()=>e.replace(/<style[^>]*>[\s\S]*?<\/style>/gi,""),[e]);return n().createElement("div",{className:"-esm-report-builder__report-visualizer__reportLayer___Tz8-+"},n().createElement("div",{className:"-esm-report-builder__report-visualizer__reportLayerContent___IfCz3",dangerouslySetInnerHTML:{__html:r},"data-report-name":t}))},nv={completed:"green",complete:"green",done:"green",finished:"green",success:"green",active:"green",open:"green",admitted:"green",started:"green",scheduled:"blue",pending:"blue",missed:"red","missed appointment":"red",failed:"red",error:"red",cancelled:"gray",canceled:"gray",closed:"gray",inactive:"gray","lost to follow-up":"red",lftu:"red",dead:"gray",deceased:"gray",died:"gray",rescheduled:"warm-gray",deferred:"warm-gray","on hold":"warm-gray",warning:"red",unknown:"cool-gray"},nS=({columns:e,hiddenColumns:t,onToggleColumn:r,onShowAll:l,onHideAll:i,disabled:s})=>{let[d,c]=(0,a.useState)(!1),m=(0,a.useRef)(null),u=(0,a.useRef)(null),p=e.length-t.size;(0,a.useEffect)(()=>{let e=e=>{m.current&&!m.current.contains(e.target)&&u.current&&!u.current.contains(e.target)&&c(!1)};return d&&document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[d]);let _=(e,t)=>{t&&t.stopPropagation(),r(e)};return n().createElement("div",{style:{position:"relative",display:"inline-block"}},n().createElement(o.$nd,{ref:u,kind:"ghost",size:"sm",renderIcon:tb.Ss,hasIconOnly:!0,iconDescription:"Column visibility",onClick:()=>c(!d),disabled:s},"Columns"),p>0&&n().createElement("span",{style:{position:"absolute",top:"-4px",right:"-4px",backgroundColor:"#0f62fe",color:"white",fontSize:"10px",minWidth:"16px",height:"16px",borderRadius:"8px",display:"flex",alignItems:"center",justifyContent:"center",padding:"0 4px"}},p),d&&n().createElement(o.Wdr,null,n().createElement("div",{ref:m,style:{position:"absolute",top:"100%",right:0,marginTop:"4px",backgroundColor:"white",border:"1px solid #e0e0e0",borderRadius:"4px",boxShadow:"0 2px 8px rgba(0,0,0,0.15)",minWidth:"250px",maxHeight:"400px",overflowY:"auto",zIndex:9999},onClick:e=>e.stopPropagation()},n().createElement("div",{style:{padding:"0.5rem"}},n().createElement("div",{style:{fontWeight:"bold",marginBottom:"0.5rem",fontSize:"0.875rem"}},"Column Visibility (",p," of ",e.length," shown)"),e.length>1&&n().createElement("div",{style:{marginBottom:"0.5rem",borderBottom:"1px solid #e0e0e0",paddingBottom:"0.5rem"}},l&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:e=>{e.stopPropagation(),l&&l(),c(!1)},style:{width:"100%",justifyContent:"flex-start",marginBottom:"0.25rem"}},"Show all"),i&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:e=>{e.stopPropagation(),i&&i(),c(!1)},style:{width:"100%",justifyContent:"flex-start"}},"Hide all")),n().createElement("div",{style:{maxHeight:"300px",overflowY:"auto"}},e.map(e=>n().createElement("div",{key:e,style:{padding:"0.5rem",display:"flex",alignItems:"center",gap:"0.5rem",cursor:"pointer",borderRadius:"4px",transition:"background-color 0.1s"},onMouseEnter:e=>{e.currentTarget.style.backgroundColor="#f3f3f3"},onMouseLeave:e=>{e.currentTarget.style.backgroundColor="transparent"},onClick:t=>_(e,t)},n().createElement(o.Sc0,{id:`col-${e}`,checked:!t.has(e),onChange:()=>_(e),labelText:e,style:{margin:0}}))))))))},nT=({data:e,columns:t,loading:r,onRefresh:l,title:i,description:s})=>{let[d,c]=(0,a.useState)(1),[m,p]=(0,a.useState)(25),[_,g]=(0,a.useState)(new Set),{paginatedData:E,totalPages:f}=(0,a.useMemo)(()=>{let t=(d-1)*m,r=e.slice(t,t+m),a=Math.ceil(e.length/m);return{paginatedData:r.map((e,r)=>({...e,id:`row-${t+r}`})),totalPages:a}},[e,d,m]),b=(0,a.useMemo)(()=>t.filter(e=>!_.has(e)),[t,_]),y=e=>{g(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},h=()=>{g(new Set)},v=()=>{g(new Set(t))};return r?n().createElement(o.FAs,{style:{width:"100%",minHeight:"200px",display:"flex",alignItems:"center",justifyContent:"center"}},"Loading data..."):0===e.length?n().createElement(o.FAs,{style:{width:"100%",minHeight:"200px"}},n().createElement("h4",null,"No results"),n().createElement("p",null,"No data found for the current parameters."),l&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:u.wM,onClick:l,style:{marginTop:"1rem"}},"Refresh")):n().createElement("div",{style:{width:"100%"}},n().createElement(o.bQt,{rows:E,headers:b.map(e=>({key:e,header:e})),render:({rows:a,headers:g,getHeaderProps:E,getRowProps:b,getTableProps:S})=>n().createElement(o.K3K,{title:i,description:s},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"1rem",flexWrap:"wrap",gap:"0.5rem"}},n().createElement("div",null,n().createElement("strong",null,e.length," total results")),n().createElement("div",{style:{display:"flex",gap:"0.5rem",alignItems:"center"}},t.length>1&&n().createElement(nS,{columns:t,hiddenColumns:_,onToggleColumn:y,onShowAll:h,onHideAll:v,disabled:r}),l&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:u.wM,iconDescription:"Refresh data",onClick:l,disabled:r},"Refresh"))),n().createElement(o.XIK,S(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,g.map(e=>n().createElement(o.A0N,E({header:e}),e.header)))),n().createElement(o.BFY,null,a.map(e=>n().createElement(o.Hjg,b({row:e}),e.cells.map(e=>{let t=e.info.header;return n().createElement(o.nA6,{key:e.id},((e,t)=>{let r;if(null==t)return"—";if(r=e.toLowerCase(),["status","state","result","outcome","condition","appointment","visit"].some(e=>r.includes(e))){let e={type:function(e){if(!e)return"cool-gray";let t=e.toLowerCase().trim();return nv[t]?nv[t]:t.includes("complet")||t.includes("success")?"green":t.includes("miss")||t.includes("fail")?"red":t.includes("resched")||t.includes("defer")?"warm-gray":t.includes("cancel")||t.includes("close")?"gray":t.includes("pend")||t.includes("sched")?"blue":"cool-gray"}(t)};return n().createElement(o.vwO,e,String(t))}if(t instanceof Date)return t.toLocaleDateString();if("object"==typeof t&&null!==t&&!Array.isArray(t)){let{year:e,month:r,day:a,date:n}=t;if("number"==typeof e&&"number"==typeof r){let t=new Date(e,r-1,a||n||1);if(!isNaN(t.getTime()))return t.toLocaleDateString()}}if(Array.isArray(t)&&t.length>=3){let[e,r,a]=t;if("number"==typeof e&&"number"==typeof r&&"number"==typeof a){let t=new Date(e,r-1,a);if(e>1e3&&!isNaN(t.getTime()))return t.toLocaleDateString()}}return String(t)})(t,e.value))}))))),f>1&&n().createElement(o.dKS,{page:d,pageSize:m,pageSizes:[10,25,50,100],totalItems:e.length,onChange:({page:e,pageSize:t})=>{c(e),t&&p(t)}}))}))},nC=({selectedReport:e,reportResults:t,runningReport:r,htmlContent:a,activeView:l="REPORT_LAYOUT",onViewChange:i,capabilities:s={table:!0,pivot:!1,chart:!1,reportLayout:!1,export:!0,sendToDhis2:!1},onExport:d,onSendToDhis2:c,parameterValues:m})=>{n().useEffect(()=>{console.log("ReportWorkspacePanel props:",{hasSelectedReport:!!e,hasReportResults:!!t,hasHtmlContent:!!a,runningReport:r,activeView:l,reportResultsDataLength:t?.data?.length,reportResultsColumnsLength:t?.columns?.length})},[e,t,a,r,l]);let u=()=>{console.log("Refreshing report")};return n().createElement("main",{className:"-esm-report-builder__report-visualizer__workspacePanel___DgBwB"},n().createElement("div",{className:aF},e?n().createElement(nf,{reportName:e.name,reportDescription:e.description,capabilities:s,activeView:l,onViewChange:e=>{i&&i(e)},onExport:e=>{d&&d(e)},onSendToDhis2:s.sendToDhis2?()=>{c&&c()}:void 0,loading:r,hasResults:!r&&(t||a)}):n().createElement("h3",{className:az},"Report Workspace")),n().createElement("div",{className:aq},r&&n().createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%"}},n().createElement(o.OuH,{style:{width:"auto"},description:"Running report..."})),!r&&!e&&n().createElement("div",{className:aj},n().createElement(es.yo,{size:48}),n().createElement("p",null,"Select a report to begin"),n().createElement("p",{style:{fontSize:"0.75rem",marginTop:"0.5rem"}},"Search and select a report from the explorer panel")),!r&&e&&!t&&!a&&n().createElement("div",{className:aj},n().createElement(o.OOb,{size:"lg"}),n().createElement("p",{style:{marginTop:"1rem"}},'Click "Run report" to generate results')),!r&&e&&(t||a)&&n().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"}},t?.rowCount!==void 0&&t?.generatedTime&&n().createElement(ny,{rowCount:t.rowCount,generatedTime:new Date(t.generatedTime),parameters:m}),"TABLE"===l&&t?.data&&t.data.length>0&&n().createElement(n().Fragment,null,!1,n().createElement(nT,{data:t.data,columns:t.columns||[],onRefresh:u,title:e.name})),"TABLE"===l&&t&&(!t.data||0===t.data.length)&&n().createElement("div",{style:{padding:"2rem",textAlign:"center",backgroundColor:"#f5f5f5",borderRadius:"4px"}},n().createElement("p",null,"No tabular data available for this report"),!1),"PIVOT"===l&&t?.data&&n().createElement("div",{style:{width:"100%"}},n().createElement("div",{style:{padding:"1rem",backgroundColor:"#f0f0f0",borderRadius:"4px",textAlign:"center"}},n().createElement("p",{style:{margin:0}},"Pivot View"),n().createElement("p",{style:{fontSize:"0.875rem",color:"#666",marginTop:"0.5rem"}},"Pivot table view will be implemented with react-pivottable integration")),n().createElement(nT,{data:t.data,columns:t.columns||[],onRefresh:u,title:e.name})),"CHART"===l&&t?.data&&n().createElement("div",{style:{width:"100%"}},n().createElement("div",{style:{padding:"1rem",backgroundColor:"#f0f0f0",borderRadius:"4px",textAlign:"center"}},n().createElement("p",{style:{margin:0}},"Chart View"),n().createElement("p",{style:{fontSize:"0.875rem",color:"#666",marginTop:"0.5rem"}},"Chart view will be implemented with react-plotly.js integration")),n().createElement(nT,{data:t.data,columns:t.columns||[],onRefresh:u,title:e.name})),"REPORT_LAYOUT"===l&&a&&n().createElement(nh,{htmlContent:a,reportName:e.name}),"REPORT_LAYOUT"===l&&!a&&t?.data&&n().createElement(nT,{data:t.data,columns:t.columns||[],onRefresh:u,title:e.name}))))},nw=()=>{let e,{preferences:t,setExplorerExpanded:r,setLastActiveView:l,isLoaded:i}=function(){let[e,t]=(0,a.useState)(aZ),[r,n]=(0,a.useState)(!1);(0,a.useEffect)(()=>{try{let e=localStorage.getItem(aX);if(e){let r=JSON.parse(e);t({...aZ,...r})}}catch(e){console.error("Failed to load preferences:",e)}finally{n(!0)}},[]),(0,a.useEffect)(()=>{if(r)try{localStorage.setItem(aX,JSON.stringify(e))}catch(e){console.error("Failed to save preferences:",e)}},[e,r]);let l=(0,a.useCallback)(e=>{t(t=>({...t,...e}))},[]),i=(0,a.useCallback)(()=>{t(aZ)},[]),o=(0,a.useCallback)(e=>{l({explorerExpanded:e})},[l]),s=(0,a.useCallback)(e=>{l({explorerWidth:e})},[l]),d=(0,a.useCallback)(e=>{l({rowsPerPage:e})},[l]),c=(0,a.useCallback)(e=>{l({lastActiveView:e})},[l]);return{preferences:e,updatePreferences:l,resetPreferences:i,setExplorerExpanded:o,setExplorerWidth:s,setRowsPerPage:d,setLastActiveView:c,isLoaded:r}}(),[o,s]=(0,a.useState)(!t.explorerExpanded),[d,c]=(0,a.useState)(t.explorerWidth),[m,u]=(0,a.useState)(!1),[p,_]=(0,a.useState)(""),[g,E]=(0,a.useState)(),[f,b]=(0,a.useState)([]),[y,v]=(0,a.useState)(),[S,T]=(0,a.useState)("REPORT_LAYOUT"),[C,w]=(0,a.useState)(!1),[N,I]=(0,a.useState)(null),[k,A]=(0,a.useState)({}),[R,O]=(0,a.useState)(""),{filteredReports:D,loading:x,getReportByUuid:L,availableTags:M}=function(e){let{searchQuery:t,selectedCategory:r,selectedTags:n}=e,{reportLibrary:l,isLoadingReportLibrary:i,isError:o,mutate:s}=function(){let e=`${h.restBaseUrl}/reportbuilder/reportlibrary?v=full`,{data:t,error:r,isLoading:a,mutate:n}=(0,aH.Ay)(e,aV);return{reportLibrary:t?.data?.results??[],isError:r,isLoadingReportLibrary:a,mutate:n}}(),d=(0,a.useMemo)(()=>{let e=l??[];if(t.trim()){let r=t.toLowerCase();e=e.filter(e=>{let t=e.name?.toLowerCase()||"",a=e.code?.toLowerCase()||"",n=e.description?.toLowerCase()||"";return t.includes(r)||a.includes(r)||n.includes(r)})}return r&&(e=e.filter(e=>e.category?.uuid===r)),n.length>0&&(e=e.filter(e=>{let t=aY(e);return n.every(e=>t.includes(e))})),e},[l,t,r,n]),c=(0,a.useMemo)(()=>{var e;let t;return e=l??[],t=new Set,e.forEach(e=>{aY(e).forEach(e=>t.add(e))}),Array.from(t).sort()},[l]),m=(0,a.useCallback)(e=>l?.find(t=>t.uuid===e),[l]);return{reports:l??[],filteredReports:d,availableTags:c,loading:i,error:o||null,refresh:()=>s(),getReportByUuid:m}}({searchQuery:p,selectedCategory:g,selectedTags:f}),{reportCategories:$,isLoadingReportCategories:P}=function(){let e=`${h.restBaseUrl}/reportbuilder/reportcategory?v=full`,{data:t,error:r,isLoading:a,mutate:n}=(0,aH.Ay)(e,aV);return{reportCategories:t?.data?.results??[],isError:r,isLoadingReportCategories:a,mutate:n}}(),U=y&&L(y)||null,{parameters:B,values:F,errors:z,setValues:q,validate:j,reset:H}=function(e){let{report:t}=e,r=(0,a.useMemo)(()=>{if(!t?.metaJson)return[];try{let e=JSON.parse(t.metaJson);if(e?.parameters&&Array.isArray(e.parameters))return e.parameters}catch(e){console.error("Failed to parse metaJson:",e)}return[]},[t?.metaJson]),n=(0,a.useMemo)(()=>r.filter(e=>e.required).length,[r]),l=r.length>0,i=(0,a.useMemo)(()=>{let e={},t=new Date().toISOString().split("T")[0];return r.forEach(r=>{void 0!==r.defaultValue?e[r.name]=r.defaultValue:("DATE"===r.type||"DATETIME"===r.type)&&("startDate"===r.name||"endDate"===r.name||r.name.toLowerCase().includes("date"))&&(e[r.name]=t)}),e},[r]),[o,s]=(0,a.useState)(i),[d,c]=(0,a.useState)({}),[m,u]=(0,a.useState)(null);(0,a.useMemo)(()=>{t?.uuid!==m&&(s(i),c({}),u(t?.uuid||null))},[t?.uuid,i,m]);let p=(0,a.useCallback)(e=>{s(e)},[]),_=(0,a.useCallback)(()=>{let e={};return r.forEach(t=>{let r=o[t.name];t.required&&(!r||""===r.toString().trim())&&(e[t.name]=`${t.label} is required`),r&&"NUMBER"===t.type&&isNaN(Number(r))&&(e[t.name]=`${t.label} must be a number`)}),c(e),0===Object.keys(e).length},[r,o]);return{parameters:r,values:o,errors:d,loading:!1,setValues:p,validate:_,reset:(0,a.useCallback)(()=>{s(i),c({})},[i]),clear:(0,a.useCallback)(()=>{s({}),c({})},[]),hasParameters:l,requiredParamsCount:n}}({report:U}),{capabilities:J}={capabilities:e=(0,a.useMemo)(()=>{if(!U)return{table:!1,pivot:!1,chart:!1,reportLayout:!1,export:!1,sendToDhis2:!1};let e={table:!0,pivot:!1,chart:!1,reportLayout:!1,export:!0,sendToDhis2:!1},t=U.reportType?.toLowerCase(),r=U.category?.name?.toLowerCase()||U.category?.display?.toLowerCase()||"";if("linelist"===t||"line_list"===t?(e.pivot=!0,e.chart=!0,e.reportLayout=!0):"aggregate"===t?(e.reportLayout=!0,e.chart=!0,e.sendToDhis2=!0):"indicator"===t&&(e.chart=!0),(r.includes("national")||r.includes("mer")||r.includes("donor")||r.includes("indicator report"))&&(e.sendToDhis2=!0,e.reportLayout=!0),U.metaJson)try{let t=JSON.parse(U.metaJson);t.capabilities&&(void 0!==t.capabilities.pivot&&(e.pivot=t.capabilities.pivot),void 0!==t.capabilities.chart&&(e.chart=t.capabilities.chart),void 0!==t.capabilities.reportLayout&&(e.reportLayout=t.capabilities.reportLayout),void 0!==t.capabilities.export&&(e.export=t.capabilities.export),void 0!==t.capabilities.sendToDhis2&&(e.sendToDhis2=t.capabilities.sendToDhis2)),(t.dhis2||t.dhis2Config)&&(e.sendToDhis2=!0)}catch(e){console.error("Failed to parse metaJson for capabilities:",e)}return e},[U]),canTable:e.table,canPivot:e.pivot,canChart:e.chart,canReportLayout:e.reportLayout,canExport:e.export,canSendToDhis2:e.sendToDhis2};(0,a.useEffect)(()=>{let e=e=>{if(m){let t=Math.max(280,Math.min(700,e.clientX));c(t),c(t)}},t=()=>{u(!1),document.body.style.cursor="default",document.body.style.userSelect=""};if(m)return document.addEventListener("mousemove",e),document.addEventListener("mouseup",t),document.body.style.cursor="col-resize",document.body.style.userSelect="none",()=>{document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",t),document.body.style.cursor="default",document.body.style.userSelect=""}},[m]);let G=(0,a.useCallback)(e=>{e.preventDefault(),u(!0)},[]),V=(0,a.useCallback)(()=>{s(!0),r(!1)},[r]),W=(0,a.useCallback)(()=>{s(!1),r(!0)},[r]),K=(0,a.useCallback)(e=>{_(e)},[]),Q=(0,a.useCallback)(e=>{E(e)},[]),Y=(0,a.useCallback)(e=>{b(e)},[]),X=(0,a.useCallback)(e=>{v(e.uuid),I(null),O(""),A({})},[]),Z=(0,a.useCallback)(e=>{q(e)},[q]),ee=(0,a.useCallback)(()=>{H()},[H]),et=(0,a.useCallback)(e=>{T(e),l(e)},[l]),er=(0,a.useCallback)(async()=>{if(console.log("handleRunReport called - user clicked Run Report button"),U){if(!j())return void(0,h.showNotification)({title:"Validation Error",kind:"error",critical:!1,description:"Please fill in all required parameters"});w(!0),I(null),O(""),A({});try{let e={uuid:U.reportDefinitionUuid||U.reportBuilderReportUuid||U.uuid,startDate:F.startDate||aQ(new Date),endDate:F.endDate||aQ(new Date),renderType:"html",parameters:F};console.log("Executing report:",U.name),console.log("Request params:",e);let t=await aW(e);if(200===t.status){let e=t.data;console.log("Report response data:",e),e._html&&e._html.length>0?O(e._html[0].html||""):e.html&&O(e.html||""),e.json&&A(e.json),I({rowCount:0,generatedTime:new Date().toISOString(),parameters:F}),console.log("Report HTML content set"),(0,h.showToast)({title:"Report executed successfully",kind:"success",critical:!1,description:""})}else throw Error(`Report execution failed with status ${t.status}`)}catch(e){console.error("Failed to run report:",e),(0,h.showNotification)({title:"Error executing report",kind:"error",critical:!0,description:e instanceof Error?e.message:"Unknown error"})}finally{w(!1)}}},[U,F,j]),ea=(0,a.useCallback)(async e=>{if(U)try{var t;let r,a,n=U.reportDefinitionUuid||U.uuid,l=await (t={uuid:n,startDate:F.startDate||aQ(new Date),endDate:F.endDate||aQ(new Date)},r=new AbortController,a=`${h.restBaseUrl}/reportbuilder/reportDownload?startDate=${t.startDate}&endDate=${t.endDate}&uuid=${t.uuid}`,"cqi"===t.reportCategory&&(a+=`&cohortList=${t.reportingCohort}`),(0,aO.jX)((0,h.openmrsFetch)(a,{signal:r.signal})));if(l.ok){let t=l.headers.get("Content-Disposition"),r=t?.match(/filename=(.+)/),a=r?r[1]:`${U.name}.${e.toLowerCase()}`,n=await l.blob(),i=window.URL.createObjectURL(n),o=document.createElement("a");o.href=i,o.download=a,o.click(),window.URL.revokeObjectURL(i),(0,h.showToast)({title:"Export successful",kind:"success",critical:!1,description:""})}else throw Error(`Export failed with status ${l.status}`)}catch(e){console.error("Failed to export report:",e),(0,h.showNotification)({title:"Error exporting report",kind:"error",critical:!0,description:e instanceof Error?e.message:"Unknown error"})}},[U,F]),en=(0,a.useCallback)(async()=>{if(!U)return;let e=(0,h.showModal)("confirm-modal",{close:()=>e(),submit:async()=>{try{let e=U.reportDefinitionUuid||U.uuid,t=await aK(e,k);if(200===t.status)(0,h.showToast)({title:"Report sent to DHIS2",kind:"success",critical:!0,description:`Report ${U.name} sent successfully`});else throw Error(`DHIS2 send failed with status ${t.status}`)}catch(e){console.error("Failed to send to DHIS2:",e),(0,h.showNotification)({title:"Error sending to DHIS2",kind:"error",critical:!0,description:e instanceof Error?e.message:"Unknown error"})}e()},report:U.name})},[U,k]);return n().createElement("div",{className:"-esm-report-builder__report-visualizer__page___umafn"},n().createElement("div",{className:"-esm-report-builder__report-visualizer__panels___fT5IU"},n().createElement(n_,{collapsed:o,width:d,onCollapse:V,onExpand:W,categories:$??[],availableTags:M,reports:D,searchQuery:p,selectedCategory:g,selectedTags:f,selectedReportUuid:y,reportParameters:B,parameterValues:F,parameterErrors:z,onSearchChange:K,onCategoryChange:Q,onTagsChange:Y,onReportSelect:X,onParameterChange:Z,onParametersReset:ee,onRunReport:er,loading:x||P||!i,runningReport:C}),!o&&n().createElement("div",{className:"-esm-report-builder__report-visualizer__resizeHandle___MHsWm",onMouseDown:G}),n().createElement(nC,{explorerCollapsed:o,selectedReport:U,reportResults:N,runningReport:C,htmlContent:R,activeView:S,onViewChange:et,capabilities:J,onExport:ea,onSendToDhis2:J.sendToDhis2?en:void 0,parameterValues:F})))},nN=[{key:"name",header:"Name"},{key:"code",header:"Code"},{key:"domain",header:"Domain"},{key:"description",header:"Description"},{key:"actions",header:""}];function nI({rows:e,onEdit:t,onDelete:r,canEdit:a=!0,canDelete:l=!0}){let i=n().useMemo(()=>(e??[]).map(e=>({id:e.uuid,name:e.name,code:e.code,domain:e.domain,description:e.description??"",actions:e.uuid})),[e]);return n().createElement(o.bQt,{rows:i,headers:nN},({rows:e,headers:i,getHeaderProps:s,getRowProps:d,getTableProps:c,getTableContainerProps:m})=>n().createElement(o.K3K,{title:"Data Themes",description:"Manage derived data themes used by the indicator builder.",...m()},n().createElement(o.e1U,null,n().createElement(o.VbH,null)),n().createElement(o.XIK,c(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,i.map(e=>n().createElement(o.A0N,{key:e.key,...s({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id,...d({row:e})},e.cells.map(i=>"actions"===i.info.header?n().createElement(o.nA6,{key:i.id},n().createElement(o.obU,{size:"sm",ariaLabel:"Theme actions"},a&&n().createElement(o.XSD,{itemText:"Edit",onClick:()=>t(e.id)}),l&&n().createElement(o.XSD,{hasDivider:!0,isDelete:!0,itemText:"Delete",onClick:()=>r(e.id)}))):n().createElement(o.nA6,{key:i.id},i.value))))))))}let nk=[{value:"DIAGNOSIS",text:"Diagnosis"},{value:"OBSERVATIONS",text:"Observations"},{value:"TEST_ORDERS",text:"Test Orders"},{value:"MEDICATION_ORDERS",text:"Medication Orders"},{value:"APPOINTMENTS",text:"Appointments"},{value:"MEDICATION_DISPENSE",text:"Medication Dispense"}];function nA({value:e,onChange:t}){return n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.75rem"}},"Basics"),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.75rem"}},n().createElement(o.ksK,{id:"theme-name",labelText:"Name",value:e.name,onChange:r=>t({...e,name:r.target.value})}),n().createElement(o.ksK,{id:"theme-code",labelText:"Code",helperText:"Short unique code (e.g. DX_OPD)",value:e.code,onChange:r=>t({...e,code:r.target.value})})),n().createElement("div",{style:{marginTop:"0.75rem"}},n().createElement(o.l6P,{id:"theme-domain",labelText:"Main domain",value:e.domain,onChange:r=>t({...e,domain:r.target.value})},nk.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.text})))),n().createElement("div",{style:{marginTop:"0.75rem"}},n().createElement(o.fs1,{id:"theme-desc",labelText:"Description",value:e.description??"",onChange:r=>t({...e,description:r.target.value})})))}function nR(e){return"string"==typeof e?{name:e}:{name:String(e?.name??e?.tableName??e?.table??""),type:e?.type,rows:"number"==typeof e?.rows?e.rows:"number"==typeof e?.tableRows?e.tableRows:null,updateTime:e?.updateTime??null,tableType:e?.tableType??e?.type??null}}async function nO(e){let t=[],r=new Set,a=null;for(let n=0;n<30;n++){if(e?.aborted)return[];let l=100*n,i=await (0,W.wO)(`/reportbuilder/schema?limit=100&startIndex=${l}&totalCount=true`,e),o=function(e){if(!e)return[];let t=[];return Array.isArray(e)?t=e:Array.isArray(e?.results)?t=e.results:Array.isArray(e?.tables)&&(t=e.tables),t.map(nR).filter(e=>!!e.name)}(i);for(let e of o)r.has(e.name)||(r.add(e.name),t.push(e));if(null===a&&(a="number"==typeof i?.totalCount?i.totalCount:null),o.length<100||null!==a&&t.length>=a)break}return t}function nD(e=[]){return e.map(e=>({name:e.name??e.columnName??"",type:e.type??e.dataType,nullable:e.nullable})).filter(e=>e.name.length>0)}async function nx(e,t){let r=await (0,W.wO)(`/etltablecolumn?table=${encodeURIComponent(e)}`,t);return Array.isArray(r)?nD(r):nD(r?.columns??r?.results??[])}function nL(e){return"string"==typeof e?String(e):e?.name??e?.table??e?.tableName??""}function nM({open:e,config:t,onChange:r}){let[a,l]=n().useState([]),[i,s]=n().useState(!1),[d,c]=n().useState(null),[m,u]=n().useState([]),[p,_]=n().useState(!1),[g,E]=n().useState(null);n().useEffect(()=>{if(!e){l([]),s(!1),c(null);return}let t=new AbortController;return s(!0),c(null),nO(t.signal).then(e=>l(e??[])).catch(e=>{e?.name!=="AbortError"&&c(e?.message??"Failed to load tables")}).finally(()=>s(!1)),()=>t.abort()},[e]),n().useEffect(()=>{if(!e){u([]),_(!1),E(null);return}let r=t?.sourceTable;if(!r){u([]),_(!1),E(null);return}let a=new AbortController;return _(!0),E(null),nx(r,a.signal).then(e=>u(e??[])).catch(e=>{e?.name!=="AbortError"&&E(e?.message??"Failed to load columns")}).finally(()=>_(!1)),()=>a.abort()},[e,t?.sourceTable]);let f=n().useMemo(()=>(m??[]).map(e=>e?.name).filter(Boolean),[m]),b=n().useMemo(()=>(a??[]).map(nL).filter(Boolean),[a]),y=e&&!i&&!d,h=e&&!!t.sourceTable&&!p&&!g;return n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.75rem"}},"Source"),n().createElement(o.a32,{id:"theme-source-table",titleText:"Source table/view",items:b,selectedItem:t.sourceTable||null,disabled:!y,placeholder:i?"Loading…":d?"Failed to load tables":"Type to search tables…",onChange:e=>{let a=e?.selectedItem??"";r({...t,sourceTable:a,patientIdColumn:"",dateColumn:"",locationColumn:"",fields:t.fields??[]})}}),n().createElement("div",{style:{marginTop:"0.5rem"}},i?n().createElement(o.OuH,{description:"Loading tables…"}):null,!i&&d?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},d):null),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:"0.75rem",marginTop:"0.75rem"}},n().createElement(o.l6P,{id:"theme-patient-id-col",labelText:"client_id column",value:t.patientIdColumn||"",disabled:!h,onChange:e=>r({...t,patientIdColumn:e.target.value})},n().createElement(o.ebT,{value:"",disabled:!0,text:p?"Loading…":"Select"}),f.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement(o.l6P,{id:"theme-date-col",labelText:"date column",value:t.dateColumn||"",disabled:!h,onChange:e=>r({...t,dateColumn:e.target.value})},n().createElement(o.ebT,{value:"",disabled:!0,text:p?"Loading…":"Select"}),f.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement(o.l6P,{id:"theme-location-col",labelText:"location column (optional)",value:t.locationColumn||"",disabled:!h,onChange:e=>r({...t,locationColumn:e.target.value})},n().createElement(o.ebT,{value:"",disabled:!0,text:p?"Loading…":"Select"}),f.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e})))),n().createElement("div",{style:{marginTop:"0.5rem"}},p?n().createElement(o.OuH,{description:"Loading columns…"}):null,!p&&g?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},g):null))}let n$=["string","number","date","datetime","boolean","coded","json"];function nP({config:e,onChange:t}){let r=e.fields??[],a=(a,n)=>{let l=r.map((e,t)=>t===a?{...e,...n}:e);t({...e,fields:l})};return n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.75rem"}},"Fields"),n().createElement("div",{style:{marginBottom:"0.75rem",opacity:.85,fontSize:"0.875rem"}},"Define the fields exposed by this theme. ",n().createElement("b",null,"expr")," can be a column name or a SQL expression."),0===r.length?n().createElement("div",{style:{marginBottom:"0.75rem",opacity:.8}},"No fields yet. Add at least one field."):null,n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1.2fr 1.2fr 2fr 1fr auto",gap:"0.75rem"}},n().createElement("div",{style:{fontWeight:600}},"Key"),n().createElement("div",{style:{fontWeight:600}},"Label"),n().createElement("div",{style:{fontWeight:600}},"Expression"),n().createElement("div",{style:{fontWeight:600}},"Type"),n().createElement("div",null),r.map((l,i)=>n().createElement(n().Fragment,{key:i},n().createElement(o.ksK,{id:`theme-field-key-${i}`,labelText:"",hideLabel:!0,value:l.key,placeholder:"field_key",onChange:e=>a(i,{key:e.target.value})}),n().createElement(o.ksK,{id:`theme-field-label-${i}`,labelText:"",hideLabel:!0,value:l.label,placeholder:"Field label",onBlur:()=>{!l.key&&l.label&&a(i,{key:(l.label??"").toLowerCase().trim().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,40)})},onChange:e=>a(i,{label:e.target.value})}),n().createElement(o.ksK,{id:`theme-field-expr-${i}`,labelText:"",hideLabel:!0,value:l.expr,placeholder:"column_name or SQL expression",onChange:e=>a(i,{expr:e.target.value})}),n().createElement(o.l6P,{id:`theme-field-type-${i}`,labelText:"",hideLabel:!0,value:l.type,onChange:e=>a(i,{type:e.target.value})},n$.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Remove field",renderIcon:P.zH,onClick:()=>{let a;return a=r.filter((e,t)=>t!==i),void t({...e,fields:a})}})))),n().createElement("div",{style:{marginTop:"1rem"}},n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:b.OM,onClick:()=>{let a={key:`field_${r.length+1}`,label:"",expr:"",type:"string"};t({...e,fields:[...r,a]})}},"Add field")))}let nU=["CONCEPT_SEARCH","QUESTION_ANSWER_CONCEPT_SEARCH","TEXT","NUMBER","DATE_RANGE","BOOLEAN","LOCATION_PICKER","CODED_LIST"],nB=["EQUALS","IN","NOT_IN","LIKE","BETWEEN","GTE","LTE","IS_NULL","IS_NOT_NULL"],nF=["conceptUuid","conceptId","string","number","date","datetime","boolean"];function nz(){return`${Date.now()}_${Math.random().toString(16).slice(2)}`}function nq(e,t){let r=(e??"").trim(),a=(t??"").trim();return r&&a?`QA(${r},${a})`:""}function nj(e,t){return(e??[]).map(e=>{let r,a,n=(r=(e.column??"").trim(),(a=/^QA\(([^,]+),([^)]+)\)$/.exec(r))?{questionCol:a[1].trim(),answerCol:a[2].trim()}:null);if(n)return{...e,_id:nz(),_columnMode:"qa",_qaQuestionCol:n.questionCol,_qaAnswerCol:n.answerCol};if("QUESTION_ANSWER_CONCEPT_SEARCH"===e.handler)return{...e,_id:nz(),_columnMode:"qa",_qaQuestionCol:"",_qaAnswerCol:""};let l=t.includes(e.column);return{...e,_id:nz(),_columnMode:l?"pick":"custom"}})}function nH({open:e,config:t,onChange:r,columns:a,loadingCols:l}){let i=n().useMemo(()=>(a??[]).map(e=>e?.name).filter(Boolean),[a]),s=n().useMemo(()=>i.map(e=>({id:e,label:e})),[i]),d=n().useMemo(()=>[{id:"__CUSTOM__",label:"Custom expression…"},{id:"__QA__",label:"Question + Answer…"},...s],[s]),c=n().useMemo(()=>s,[s]),m=n().useRef(""),[u,p]=n().useState(()=>nj(t.conditions,i)),_=n().useCallback(e=>{p(e);let a=e.map(e=>{let t={...e};return delete t._id,delete t._columnMode,delete t._qaQuestionCol,delete t._qaAnswerCol,t});m.current=JSON.stringify(a??[]),r({...t,conditions:a})},[t,r]);n().useEffect(()=>{if(!e)return;let r=JSON.stringify(t.conditions??[]);r!==m.current&&(m.current=r,p(nj(t.conditions,i)))},[e,t.conditions,i]),n().useEffect(()=>{e&&p(e=>(e??[]).map(e=>{if("QUESTION_ANSWER_CONCEPT_SEARCH"===e.handler){let t=e._qaQuestionCol??"",r=e._qaAnswerCol??"";return{...e,_columnMode:"qa",column:nq(t,r)}}return"pick"===e._columnMode&&e.column&&!i.includes(e.column)?{...e,_columnMode:"custom"}:e}))},[e,i]);let g=(e,t)=>_((u??[]).map(r=>r._id===e?{...r,...t}:r)),E=e&&!l;return n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.75rem"}},"Conditions"),n().createElement("div",{style:{marginBottom:"0.75rem",opacity:.85,fontSize:"0.875rem"}},"Define filterable fields for this theme. ",n().createElement("b",null,"Column/Expr")," should be a real column where possible; use custom only when needed."),0===u.length?n().createElement("div",{style:{marginBottom:"0.75rem",opacity:.8}},"No conditions yet."):null,n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1.2fr 1.4fr 1.2fr 2fr 1fr 1.1fr auto",gap:"0.75rem"}},n().createElement("div",{style:{fontWeight:600}},"Key"),n().createElement("div",{style:{fontWeight:600}},"Label"),n().createElement("div",{style:{fontWeight:600}},"Handler"),n().createElement("div",{style:{fontWeight:600}},"Column/Expr"),n().createElement("div",{style:{fontWeight:600}},"Operator"),n().createElement("div",{style:{fontWeight:600}},"Value type"),n().createElement("div",null),u.map(t=>{let r="custom"===t._columnMode?d.find(e=>"__CUSTOM__"===e.id)??null:"qa"===t._columnMode?d.find(e=>"__QA__"===e.id)??null:d.find(e=>e.id===t.column)??null,a=c.find(e=>e.id===(t._qaQuestionCol??""))??null,l=c.find(e=>e.id===(t._qaAnswerCol??""))??null;return n().createElement(n().Fragment,{key:t._id},n().createElement(o.ksK,{id:`theme-cond-key-${t._id}`,labelText:"",hideLabel:!0,value:t.key,disabled:!e,placeholder:"concept_id",onChange:e=>g(t._id,{key:e.target.value})}),n().createElement(o.ksK,{id:`theme-cond-label-${t._id}`,labelText:"",hideLabel:!0,value:t.label,disabled:!e,placeholder:"Diagnosis",onChange:e=>g(t._id,{label:e.target.value})}),n().createElement(o.l6P,{id:`theme-cond-handler-${t._id}`,labelText:"",hideLabel:!0,value:t.handler,disabled:!E,onChange:e=>{let r=e.target.value;"QUESTION_ANSWER_CONCEPT_SEARCH"===r?g(t._id,{handler:r,_columnMode:"qa",column:nq(t._qaQuestionCol??"",t._qaAnswerCol??"")}):g(t._id,{handler:r,_columnMode:"qa"===t._columnMode?"pick":t._columnMode,column:"qa"===t._columnMode?"":t.column})}},nU.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement("div",null,n().createElement(o.a32,{id:`theme-cond-col-${t._id}`,titleText:"",items:d,itemToString:e=>e?e.label:"",selectedItem:r,disabled:!E||"QUESTION_ANSWER_CONCEPT_SEARCH"===t.handler,onChange:({selectedItem:e})=>{let r=e?.id;"__CUSTOM__"===r?g(t._id,{_columnMode:"custom",column:""}):"__QA__"===r?g(t._id,{_columnMode:"qa",column:nq(t._qaQuestionCol??"",t._qaAnswerCol??"")}):"string"==typeof r&&r&&g(t._id,{_columnMode:"pick",column:r})}}),"custom"===t._columnMode&&"QUESTION_ANSWER_CONCEPT_SEARCH"!==t.handler?n().createElement(o.ksK,{id:`theme-cond-col-custom-${t._id}`,labelText:"",hideLabel:!0,value:t.column,disabled:!E,placeholder:"a.some_column",onChange:e=>g(t._id,{column:e.target.value}),style:{marginTop:"0.5rem"}}):null,"qa"===t._columnMode||"QUESTION_ANSWER_CONCEPT_SEARCH"===t.handler?n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.5rem",marginTop:"0.5rem"}},n().createElement(o.a32,{id:`theme-cond-qa-q-${t._id}`,titleText:"",items:c,itemToString:e=>e?e.label:"",selectedItem:a,disabled:!E,placeholder:"Question column",onChange:({selectedItem:e})=>{let r=e?.id??"",a=t._qaAnswerCol??"";g(t._id,{_qaQuestionCol:r,_columnMode:"qa",column:nq(String(r),a)})}}),n().createElement(o.a32,{id:`theme-cond-qa-a-${t._id}`,titleText:"",items:c,itemToString:e=>e?e.label:"",selectedItem:l,disabled:!E,placeholder:"Answer column",onChange:({selectedItem:e})=>{let r=e?.id??"",a=t._qaQuestionCol??"";g(t._id,{_qaAnswerCol:r,_columnMode:"qa",column:nq(a,String(r))})}})):null),n().createElement(o.l6P,{id:`theme-cond-op-${t._id}`,labelText:"",hideLabel:!0,value:t.operator,disabled:!E,onChange:e=>g(t._id,{operator:e.target.value})},nB.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement(o.l6P,{id:`theme-cond-vt-${t._id}`,labelText:"",hideLabel:!0,value:t.valueType,disabled:!E,onChange:e=>g(t._id,{valueType:e.target.value})},nF.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:P.zH,iconDescription:"Remove condition",disabled:!E,onClick:()=>{let e;return e=t._id,_((u??[]).filter(t=>t._id!==e))}}))})),n().createElement(o.BJc,{orientation:"horizontal",gap:3,style:{marginTop:"0.75rem"}},n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:b.OM,disabled:!E,onClick:()=>{var e;return _([...u??[],(e=u.length,{_id:nz(),_columnMode:"pick",key:`cond_${e+1}`,label:"",handler:"CONCEPT_SEARCH",column:"",operator:"IN",valueType:"conceptUuid"})])}},"Add condition")))}var nJ=r(810);let nG=[{key:"Report",label:"Report",Icon:u.pl},{key:"ChartColumn",label:"Chart",Icon:_.n5},{key:"Medication",label:"Medication",Icon:nJ.gG},{key:"Calendar",label:"Appointments",Icon:_.Vv},{key:"Hospital",label:"Facility",Icon:s.vg},{key:"Document",label:"Document",Icon:es.yo},{key:"Search",label:"Search",Icon:g.vj},{key:"Information",label:"Info",Icon:tw.$$},{key:"Warning",label:"Warning",Icon:tb.N5},{key:"CheckmarkFilled",label:"Check",Icon:U._j},{key:"List",label:"List",Icon:p.B8},{key:"Tag",label:"Tag",Icon:f.vw}],nV=["BASE","FINAL"];function nW(e,t="#0f62fe"){let r=(e??"").trim();if(!r)return t;let a=r.startsWith("#")?r:`#${r}`;if(/^#[0-9a-fA-F]{6}$/.test(a))return a.toLowerCase();if(/^#[0-9a-fA-F]{3}$/.test(a)){let e=a[1],t=a[2],r=a[3];return`#${e}${e}${t}${t}${r}${r}`.toLowerCase()}return t}function nK({value:e,onChange:t,open:r}){var a;let l=nW(e.color),i=(a=e.icon,nG.find(e=>e.key===a)?.Icon);return n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.75rem"}},"Metadata"),n().createElement("div",{style:{marginBottom:"0.75rem",opacity:.85,fontSize:"0.875rem"}},"Controls how this theme appears in the UI (icon, color, category, ordering, etc.). Stored as ",n().createElement("b",null,"metaJson"),"."),n().createElement(o.BJc,{gap:5},n().createElement("div",null,n().createElement(o.a32,{id:"theme-meta-icon",titleText:"Icon",items:[...nG],disabled:!r,itemToString:e=>e?e.label:"",selectedItem:nG.find(t=>t.key===e.icon)??null,placeholder:"Type to search icons…",onChange:r=>{let a=r?.selectedItem;t({...e,icon:a?.key??""})}}),i?n().createElement("div",{style:{marginTop:"0.5rem",display:"flex",alignItems:"center",gap:"0.5rem",opacity:.9}},n().createElement(i,{size:20}),n().createElement("span",{style:{fontSize:"0.875rem"}},e.icon)):null),n().createElement("div",null,n().createElement("div",{style:{fontSize:"0.875rem",marginBottom:"0.25rem"}},"Color"),n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"}},n().createElement("input",{id:"theme-meta-color-picker",type:"color",value:l,disabled:!r,onChange:r=>t({...e,color:nW(r.target.value)}),style:{width:"3rem",height:"2.5rem",padding:0,border:"1px solid var(--cds-border-subtle)",borderRadius:"4px",background:"transparent",cursor:r?"pointer":"not-allowed"}}),n().createElement(o.ksK,{id:"theme-meta-color-hex",labelText:"",hideLabel:!0,value:l,disabled:!r,onChange:r=>t({...e,color:nW(r.target.value)})}))),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.75rem"}},n().createElement(o.ksK,{id:"theme-meta-category",labelText:"Category",value:e.category??"",disabled:!r,placeholder:"e.g. Clinical",onChange:r=>t({...e,category:r.target.value})}),n().createElement(o.Q7x,{id:"theme-meta-order",label:"Order",value:Number.isFinite(e.order)?e.order:0,disabled:!r,min:0,step:1,onChange:(r,a)=>{let n=Number(a?.value);t({...e,order:Number.isFinite(n)?n:0})}})),n().createElement(o.Sc0,{id:"theme-meta-beta",labelText:"Beta",checked:!!e.beta,disabled:!r,onChange:(r,{checked:a})=>t({...e,beta:!!a})}),n().createElement(o.fs1,{id:"theme-meta-description-short",labelText:"Short description",value:e.descriptionShort??"",disabled:!r,placeholder:"e.g. Diagnosis-based indicators",onChange:r=>t({...e,descriptionShort:r.target.value})}),n().createElement(o.KFt,{id:"theme-meta-kinds",titleText:"Allowed indicator kinds",items:nV,disabled:!r,itemToString:e=>e?String(e):"",initialSelectedItems:e.allowedIndicatorKinds??[],onChange:r=>{let a=r?.selectedItems??[];t({...e,allowedIndicatorKinds:a})},label:"Select kinds"})))}function nQ({config:e,metaJson:t,onConfigJson:r}){let a=n().useMemo(()=>JSON.stringify(e,null,2),[e]);n().useEffect(()=>{r(a)},[a,r]);let l=({title:e,subtitle:t,value:r,copyLabel:a,textAreaId:l})=>n().createElement("div",{style:{background:"var(--cds-layer-01)",border:"1px solid var(--cds-border-subtle)",borderRadius:8,padding:"1rem"}},n().createElement("div",{style:{display:"flex",alignItems:"start",justifyContent:"space-between",gap:"1rem"}},n().createElement("div",null,n().createElement("div",{style:{fontWeight:600}},e),t?n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8,marginTop:"0.25rem"}},t):null),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:c.QR,iconDescription:a,onClick:()=>{r&&navigator.clipboard?.writeText(r).catch(()=>{})}},"Copy")),n().createElement("div",{style:{marginTop:"0.75rem"}},n().createElement(o.fs1,{id:l,labelText:"",hideLabel:!0,value:r,readOnly:!0,style:{minHeight:420,fontFamily:'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace'}})));return n().createElement("div",null,n().createElement("div",{style:{marginBottom:"0.75rem"}},n().createElement("div",{style:{fontWeight:600}},"Preview"),n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8}},"These are the exact JSON payloads that will be saved.")),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem",alignItems:"start"}},n().createElement(l,{title:"configJson",subtitle:"Data source + fields + conditions.",value:a,copyLabel:"Copy configJson",textAreaId:"theme-config-preview"}),n().createElement(l,{title:"metaJson",subtitle:"UI metadata (icon, color, category, ordering).",value:t,copyLabel:"Copy metaJson",textAreaId:"theme-meta-preview"})))}let nY={sourceTable:"",patientIdColumn:"",dateColumn:"",locationColumn:"",fields:[],conditions:[]},nX={icon:"",color:"#0f62fe",category:"",order:0,beta:!1,descriptionShort:"",allowedIndicatorKinds:["BASE","FINAL"]};function nZ(e){return(e??"").toUpperCase().replace(/[^A-Z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,30)}function n0(e,t){try{if(!e)return t;return JSON.parse(e)??t}catch{return t}}function n1(e){return JSON.stringify({metaJson:e},null,2)}function n2({open:e,mode:t,initial:r,onClose:a,onSave:l}){let[i,s]=n().useState("basics"),[d,c]=n().useState(""),[m,u]=n().useState(""),[p,_]=n().useState("OBSERVATIONS"),[g,E]=n().useState(""),[f,b]=n().useState(nY),[y,h]=n().useState(JSON.stringify(nY,null,2)),[v,S]=n().useState(nX),[T,C]=n().useState(n1(nX)),[,w]=n().useState([]),[N,I]=n().useState(!1),[k,A]=n().useState(null),[R,O]=n().useState([]),[D,x]=n().useState(!1),[L,M]=n().useState(null);n().useEffect(()=>{if(e)if(s("basics"),r){let e;c(r.name??""),u(r.code??""),_(r.domain??"OBSERVATIONS"),E(r.description??"");let t=function(e){let t=n0(e,nY),r=t&&"object"==typeof t&&t.configJson&&"object"==typeof t.configJson?t.configJson:t,a={...nY,...r??{}};Array.isArray(a.fields)||(a.fields=[]),Array.isArray(a.conditions)||(a.conditions=[]);let n=a.conditionColumns&&"object"==typeof a.conditionColumns,l=!Array.isArray(a.conditions)||0===a.conditions.length;if(n&&l){let e=Object.entries(a.conditionColumns);a.conditions=e.map(([e,t])=>{let r=e.toLowerCase().includes("concept");return{key:e,label:e.replace(/_/g," "),handler:r?"CONCEPT_SEARCH":"TEXT",column:t,operator:r?"IN":"EQUALS",valueType:r?"conceptId":"string"}})}return Array.isArray(a.conditions)||(a.conditions=[]),Array.isArray(a.fields)||(a.fields=[]),a}(r.configJson);b(t),h(JSON.stringify(t,null,2));let a=(e=n0(r.metaJson,nX))&&"object"==typeof e&&e.metaJson&&"object"==typeof e.metaJson?{...nX,...e.metaJson}:{...nX,...e};S(a),C(n1(a))}else c(""),u(""),_("OBSERVATIONS"),E(""),b(nY),h(JSON.stringify(nY,null,2)),S(nX),C(n1(nX))},[e,r]),n().useEffect(()=>{if(!e)return;let t=new AbortController;return I(!0),A(null),w([]),nO(t.signal).then(e=>w(e??[])).catch(e=>{e?.name!=="AbortError"&&A(e?.message??"Failed to load schema tables")}).finally(()=>I(!1)),()=>t.abort()},[e]),n().useEffect(()=>{if(!e)return;let t=f?.sourceTable;if(!t){O([]),M(null),x(!1);return}let r=new AbortController;return x(!0),M(null),O([]),nx(t,r.signal).then(e=>O(e??[])).catch(e=>{e?.name!=="AbortError"&&M(e?.message??"Failed to load table columns")}).finally(()=>x(!1)),()=>r.abort()},[e,f?.sourceTable]),n().useEffect(()=>{h(JSON.stringify(f??nY,null,2))},[f]),n().useEffect(()=>{C(n1(v??nX))},[v]);let $=e&&!N&&!k,P=$&&!!d.trim()&&!!(m.trim()||nZ(d)).trim()&&!!p&&!!f?.sourceTable&&!!f?.patientIdColumn&&!!f?.dateColumn;if(!e)return null;let U=({id:e,label:t})=>n().createElement(o.VxE,{isActive:i===e,onClick:()=>s(e)},t);return n().createElement(o.aFV,{open:e,modalHeading:"create"===t?"Create Data Theme":"Edit Data Theme",primaryButtonText:"create"===t?"Create":"Save",secondaryButtonText:"Cancel",onRequestClose:a,onRequestSubmit:()=>{if(!P)return;let e={...r?.uuid?{uuid:r.uuid}:{},name:d.trim(),code:(m.trim()||nZ(d)).trim(),domain:p,description:g.trim(),configJson:y,metaJson:T};l(e)},primaryButtonDisabled:!P,size:"lg"},n().createElement(o.BJc,{gap:6},N?n().createElement(o.OuH,{description:"Loading schema tables…"}):null,!N&&k?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},"Failed to load schema tables: ",k):null,$?n().createElement("div",{style:{display:"grid",gridTemplateColumns:"240px 1fr",gap:"1rem"}},n().createElement("div",null,n().createElement(o.f8J,{expanded:!0,isPersistent:!1,"aria-label":"Theme editor sections"},n().createElement(o.BC4,null,n().createElement(U,{id:"basics",label:"Basics"}),n().createElement(U,{id:"source",label:"Source"}),n().createElement(U,{id:"fields",label:"Fields"}),n().createElement(U,{id:"conditions",label:"Conditions"}),n().createElement(U,{id:"metadata",label:"Metadata"}),n().createElement(U,{id:"preview",label:"Preview"})))),n().createElement(o.UCW,{style:{padding:0}},"basics"===i?n().createElement(nA,{value:{name:d,code:m,domain:p,description:g},onChange:e=>{c(e.name),u(e.code),_(e.domain),E(e.description??"")}}):null,"source"===i?n().createElement(n().Fragment,null,n().createElement(nM,{open:e,config:f,onChange:b}),D?n().createElement(o.OuH,{description:"Loading columns…"}):null,!D&&L?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)",marginTop:"0.5rem"}},"Failed to load table columns: ",L):null):null,"fields"===i?n().createElement(nP,{config:f,onChange:b,open:e}):null,"conditions"===i?n().createElement(nH,{open:e,config:f,onChange:b,columns:R,loadingCols:D}):null,"metadata"===i?n().createElement(nK,{value:v,onChange:S,open:e}):null,"preview"===i?n().createElement(nQ,{config:f,metaJson:T,onConfigJson:h}):null)):null))}function n5(){let{t:e}=(0,A.useTranslation)(),{has:t}=v(),r=t(y.RB.THEME_ADD,y.RB.THEME_EDIT),a=t(y.RB.THEME_PURGE),[l,i]=n().useState(""),[s,d]=n().useState([]),[c,m]=n().useState(!1),[u,p]=n().useState(null),[_,g]=n().useState(!1),[E,f]=n().useState("create"),[h,S]=n().useState(null),T=n().useCallback(e=>(m(!0),p(null),tD(l,e).then(e=>{d((e??[]).map(e=>({uuid:e.uuid??"",name:e.name??"",code:e.code??"",domain:e.domain,description:e.description,retired:e.retired})).filter(e=>!!e.uuid))}).catch(e=>p(e?.message??"Failed to load themes")).finally(()=>m(!1))),[l]);n().useEffect(()=>{let e=new AbortController;return T(e.signal),()=>e.abort()},[T]);let C=async e=>{try{f("edit"),p(null),m(!0);let t=await tx(e);S(t),g(!0)}catch(e){p(e?.message??"Failed to load theme for editing")}finally{m(!1)}},w=async e=>{await t$(e,!1);let t=new AbortController;await T(t.signal)},N=async e=>{if("create"===E)await tL(e);else{if(!e.uuid)throw Error("Missing uuid for update");await tM(e.uuid,e)}g(!1);let t=new AbortController;await T(t.signal)};return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:e("dataTheme","Data Themes"),subtitle:e("dataThemeSubTitle"," Define reusable data sources (mamba_* tables/views) for indicators and reporting.")}),n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"end",gap:"1rem"}},n().createElement("div",null),r&&n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:b.OM,onClick:()=>{f("create"),S(null),g(!0)}},"Create Theme")),n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search themes…",value:l,onChange:e=>i(e.target.value)}),c?n().createElement("div",null,"Loading…"):null,!c&&u?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},u):null,n().createElement(nI,{rows:s,onEdit:C,onDelete:w,canEdit:r,canDelete:a}),n().createElement(n2,{open:_,mode:E,initial:h,onClose:()=>g(!1),onSave:N}))}let n6={minHeight:"10rem"};function n3(){let e=(0,i.Zp)(),{has:t}=v(),r=[{path:"/admin/report-library",title:"Report Library",body:"Catalog completed and legacy reports before full migration into the builder.",required:[y.RB.LIBRARY_VIEW]},{path:"/admin/themes",title:"Data Themes",body:"Manage reusable source configurations and table mappings.",required:[y.RB.THEME_VIEW]},{path:"/admin/etl-tasks",title:"ETL Tasks",body:"Configure and run scheduled ETL processes for data extraction and transformation.",required:[y.RB.PACKAGE_IMPORT]},{path:"/admin/etl-browser",title:"ETL Data Browser",body:"Explore ETL schemas, tables, columns, and sample records.",required:[y.RB.ETLSOURCE_VIEW]},{path:"/admin/dashboards",title:"Dashboards",body:"Configure dashboards composed of sections and widgets (ETL monitors, reports).",required:[y.RB.DASHBOARD_VIEW]}].filter(e=>t(...e.required));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Admin",subtitle:"Manage shared configuration, catalogues, and library references for the report builder."}),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(260px, 1fr))",gap:"1rem"}},r.map(t=>n().createElement(o.t3h,{key:t.path,style:n6,onClick:()=>e(t.path)},n().createElement("h4",null,t.title),n().createElement("p",null,t.body))),0===r.length&&n().createElement(o.jeF,{lowContrast:!0,kind:"info",title:"No access",subtitle:"You do not have access to any Report Builder administration features. Contact your administrator.",hideCloseButton:!0})))}let n4=[{key:"name",header:"Name"},{key:"description",header:"Description"},{key:"status",header:"Status"},{key:"actions",header:"Actions"}],n8={name:"",description:""},n7=()=>{let{has:e}=v(),t=e(y.RB.CATEGORY_ADD,y.RB.CATEGORY_EDIT),r=e(y.RB.CATEGORY_PURGE),[a,l]=n().useState(""),[i,s]=n().useState([]),[d,c]=n().useState(!1),[m,u]=n().useState(null),[p,_]=n().useState(!1),[g,E]=n().useState("create"),[f,h]=n().useState(null),[S,T]=n().useState(n8),[C,w]=n().useState(!1),N=n().useCallback(async e=>{c(!0),u(null);try{let t=await en(a,e);s(t)}catch(e){u(e?.message??"Failed to load report categories")}finally{c(!1)}},[a]);n().useEffect(()=>{let e=new AbortController;return N(e.signal),()=>e.abort()},[N]);let I=async()=>{if(S.name.trim()){w(!0),u(null);try{let e={name:S.name.trim(),description:S.description.trim()||void 0};"create"===g?await el(e):f?.uuid&&await ei(f.uuid,e),_(!1);let t=new AbortController;await N(t.signal)}catch(e){u(e?.message??"Failed to save report category")}finally{w(!1)}}},k=async e=>{if(e?.uuid&&window.confirm(`Retire report category "${e.name}"?`))try{await eo(e.uuid);let t=new AbortController;await N(t.signal)}catch(e){u(e?.message??"Failed to retire report category")}},A=i.map(e=>({id:e.uuid,name:e.name,description:e.description||"—",status:e.retired?"Retired":"Active",actions:""}));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Report Categories",subtitle:"Manage shared categories used to classify reports across the builder.",actions:t?n().createElement(o.$nd,{size:"sm",renderIcon:b.OM,onClick:()=>{E("create"),h(null),T(n8),_(!0)}},"New Category"):void 0}),n().createElement("div",{style:{padding:"0 1rem 1rem",display:"grid",gap:"1rem"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search report categories…",value:a,onChange:e=>l(e.target.value)}),m?n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:m}):null,d?n().createElement(o.OOb,{rowCount:5,columnCount:4,showHeader:!1,showToolbar:!1}):n().createElement(o.bQt,{rows:A,headers:n4},({rows:e,headers:a,getHeaderProps:l,getRowProps:s})=>n().createElement(o.K3K,null,n().createElement(o.XIK,{useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,a.map(e=>n().createElement(o.A0N,{key:e.key,...l({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>{let a=i.find(t=>t.uuid===e.id);return n().createElement(o.Hjg,{key:e.id,...s({row:e})},n().createElement(o.nA6,null,a?.name),n().createElement(o.nA6,null,a?.description||"—"),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:a?.retired?"gray":"green"},a?.retired?"Retired":"Active")),n().createElement(o.nA6,null,n().createElement("div",{style:{display:"flex",gap:"0.5rem"}},t&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:es.ff,iconDescription:"Edit",onClick:()=>a&&void(E("edit"),h(a),T({name:a.name??"",description:a.description??""}),_(!0))},"Edit"),r&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:P.zH,iconDescription:"Retire",onClick:()=>a&&k(a)},"Retire"))))})))))),n().createElement(o.aFV,{open:p,modalHeading:"create"===g?"Create Report Category":"Edit Report Category",primaryButtonText:C?"Saving…":"create"===g?"Create":"Save",secondaryButtonText:"Cancel",onRequestClose:()=>!C&&_(!1),onRequestSubmit:I,primaryButtonDisabled:C||!S.name.trim()},n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"report-category-name",labelText:"Name",value:S.name,onChange:e=>T(t=>({...t,name:e.target.value}))}),n().createElement(o.fs1,{id:"report-category-description",labelText:"Description",rows:4,value:S.description,onChange:e=>T(t=>({...t,description:e.target.value}))}))))},n9=()=>{let[e,t]=n().useState(""),[r,a]=n().useState([]),[l,i]=n().useState(!1),[s,d]=n().useState(null);n().useEffect(()=>{let e=new AbortController;return i(!0),d(null),rL(e.signal).then(a).catch(e=>d(e?.message??"Failed to load age categories")).finally(()=>i(!1)),()=>e.abort()},[]);let c=r.filter(t=>{let r=e.trim().toLowerCase();return!r||[t.name,t.code,t.description||"",t.label].join(" ").toLowerCase().includes(r)});return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Age Categories",subtitle:"Review reusable age disaggregation structures used by indicators and sections."}),n().createElement("div",{style:{padding:"0 1rem 1rem",display:"grid",gap:"1rem"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search age categories…",value:e,onChange:e=>t(e.target.value)}),s?n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:s}):null,l?n().createElement("div",null,"Loading…"):null,l||s?null:n().createElement(o.nD3,null,c.map(e=>n().createElement(o.AsP,{key:e.uuid,title:n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",flexWrap:"wrap"}},n().createElement("span",{style:{fontWeight:600}},e.name),n().createElement(o.vwO,{type:"blue"},e.code),n().createElement(o.vwO,{type:"green"},e.ageGroups.length," age groups"))},n().createElement(o.FAs,null,n().createElement("div",{style:{display:"grid",gap:"0.75rem"}},n().createElement("div",null,n().createElement("strong",null,"Description:")," ",e.description||"—"),n().createElement("div",null,n().createElement("strong",null,"UUID:")," ",e.uuid),n().createElement("div",null,n().createElement("strong",null,"Groups:"),n().createElement("div",{style:{display:"grid",gap:"0.5rem",marginTop:"0.75rem"}},e.ageGroups.map(e=>n().createElement("div",{key:e.id,style:{display:"grid",gridTemplateColumns:"2fr 1fr 1fr 1fr",gap:"0.75rem",padding:"0.75rem",border:"1px solid var(--cds-border-subtle, #e0e0e0)"}},n().createElement("span",null,e.label),n().createElement("span",null,"Min days: ",e.minAgeDays),n().createElement("span",null,"Max days: ",e.maxAgeDays),n().createElement("span",null,"Sort: ",e.sortOrder))))))))))))},le=[{key:"label",header:"Label"},{key:"category",header:"Category"},{key:"range",header:"Range (days)"},{key:"sortOrder",header:"Sort Order"},{key:"status",header:"Status"}],lt=()=>{let[e,t]=n().useState(""),[r,a]=n().useState([]),[l,i]=n().useState(!1),[s,d]=n().useState(null);n().useEffect(()=>{let e=new AbortController;return i(!0),d(null),rL(e.signal).then(e=>{a(e.flatMap(e=>(e.ageGroups??[]).map(t=>({id:`${e.uuid}-${t.id}`,categoryName:e.name,categoryCode:e.code,label:t.label,minAgeDays:t.minAgeDays,maxAgeDays:t.maxAgeDays,sortOrder:t.sortOrder,active:t.active}))))}).catch(e=>d(e?.message??"Failed to load age groups")).finally(()=>i(!1)),()=>e.abort()},[]);let c=r.filter(t=>{let r=e.trim().toLowerCase();return!r||[t.label,t.categoryName,t.categoryCode].join(" ").toLowerCase().includes(r)}),m=c.map(e=>({id:e.id,label:e.label,category:`${e.categoryName} (${e.categoryCode})`,range:`${e.minAgeDays} - ${e.maxAgeDays}`,sortOrder:String(e.sortOrder),status:e.active?"Active":"Inactive"}));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Age Groups",subtitle:"Inspect age group ranges, ordering and category membership across the builder."}),n().createElement("div",{style:{padding:"0 1rem 1rem",display:"grid",gap:"1rem"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search age groups…",value:e,onChange:e=>t(e.target.value)}),s?n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:s}):null,l?n().createElement(o.OOb,{rowCount:8,columnCount:5,showHeader:!1,showToolbar:!1}):n().createElement(o.bQt,{rows:m,headers:le},({rows:e,headers:t,getHeaderProps:r,getRowProps:a})=>n().createElement(o.K3K,null,n().createElement(o.XIK,{useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,t.map(e=>n().createElement(o.A0N,{key:e.key,...r({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>{let t=c.find(t=>t.id===e.id);return n().createElement(o.Hjg,{key:e.id,...a({row:e})},n().createElement(o.nA6,null,t?.label),n().createElement(o.nA6,null,t?`${t.categoryName} (${t.categoryCode})`:"—"),n().createElement(o.nA6,null,t?`${t.minAgeDays} - ${t.maxAgeDays}`:"—"),n().createElement(o.nA6,null,t?.sortOrder),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:t?.active?"green":"gray"},t?.active?"Active":"Inactive")))})))))))},lr="/reportbuilder/reportlibrary";async function la(e,t){var r;let a=new URLSearchParams;return a.set("v","full"),e?.trim()&&a.set("q",e.trim()),(!(r=await (0,W.wO)(`${lr}?${a.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid)}async function ln(e,t){return(0,W.oV)(lr,e,t)}async function ll(e,t,r){return(0,W.oV)(`${lr}/${encodeURIComponent(e)}`,t,r)}async function li(e,t="Retired from report library",r){return(0,W.hI)(`${lr}/${encodeURIComponent(e)}?reason=${encodeURIComponent(t)}`,r)}let lo=[{key:"name",header:"Name"},{key:"sourceType",header:"Source"},{key:"reportType",header:"Type"},{key:"category",header:"Category"},{key:"migration",header:"Migration"},{key:"status",header:"Status"},{key:"actions",header:"Actions"}],ls={name:"",description:"",code:"",sourceType:"LEGACY",reportType:"AGGREGATE",reportDefinitionUuid:"",reportBuilderReportUuid:"",category:"",migrated:!1,metaJson:"{}"};function ld(e){return e?"string"==typeof e?e:e.uuid??"":""}function lc(e){return e?"string"==typeof e?e:e.name??e.uuid??"—":"—"}function lm(){let{has:e}=v(),t=e(y.RB.LIBRARY_ADD,y.RB.LIBRARY_EDIT),r=e(y.RB.LIBRARY_PURGE),[a,l]=n().useState(""),[i,s]=n().useState([]),[d,c]=n().useState([]),[m,u]=n().useState(!1),[p,_]=n().useState(null),[g,E]=n().useState(!1),[f,h]=n().useState("create"),[S,T]=n().useState(null),[C,w]=n().useState(ls),[N,I]=n().useState(!1),[k,A]=n().useState(""),[R,O]=n().useState(""),[D,x]=n().useState(""),[L,M]=n().useState(""),[$,U]=n().useState(""),B=n().useCallback(e=>(u(!0),_(null),Promise.all([la(void 0,e),en(void 0,e)]).then(([e,t])=>{s(e),c(t.filter(e=>!e.retired))}).catch(e=>_(e?.message??"Failed to load report library")).finally(()=>u(!1))),[]);n().useEffect(()=>{let e=new AbortController;return B(e.signal),()=>e.abort()},[B]);let F=async()=>{if(C.name.trim()){I(!0),_(null);try{let e={name:C.name.trim(),description:C.description.trim()||void 0,code:C.code.trim()||void 0,sourceType:C.sourceType,reportType:C.reportType,reportDefinitionUuid:C.reportDefinitionUuid.trim()||void 0,reportBuilderReportUuid:C.reportBuilderReportUuid.trim()||void 0,category:C.category||void 0,migrated:C.migrated,metaJson:C.metaJson.trim()||void 0};"create"===f?await ln(e):S?.uuid&&await ll(S.uuid,e),E(!1);let t=new AbortController;await B(t.signal)}catch(e){_(e?.message??"Failed to save report library entry")}finally{I(!1)}}},z=async e=>{if(e?.uuid&&window.confirm(`Retire report library entry "${e.name}"?`))try{await li(e.uuid);let t=new AbortController;await B(t.signal)}catch(e){_(e?.message??"Failed to retire report library entry")}},q=n().useMemo(()=>{let e=a.trim().toLowerCase();return i.filter(t=>{let r=!e||t.name?.toLowerCase().includes(e)||t.description?.toLowerCase().includes(e)||t.code?.toLowerCase().includes(e)||lc(t.category).toLowerCase().includes(e),a=!k||t.sourceType===k,n=!R||t.reportType===R,l=!D||ld(t.category)===D,i=!L||"ACTIVE"===L&&!t.retired||"RETIRED"===L&&!!t.retired,o=!$||"MIGRATED"===$&&!!t.migrated||"PENDING"===$&&!t.migrated;return r&&a&&n&&l&&i&&o})},[i,a,k,R,D,L,$]),j=q.map(e=>({id:e.uuid,name:e.name,sourceType:e.sourceType??"LEGACY",reportType:e.reportType??"AGGREGATE",category:lc(e.category),migration:e.migrated?"Migrated":"Pending",status:e.retired?"Retired":"Active",actions:""}));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Report Library",subtitle:"Catalog legacy and completed reports before and during migration into the report builder."}),n().createElement("div",{style:{display:"grid",gap:"1rem"}},n().createElement("div",{style:{display:"grid",gridTemplateColumns:"minmax(18rem, 2fr) repeat(5, minmax(10rem, 1fr)) auto auto",gap:"1rem",alignItems:"end"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search report library…",value:a,onChange:e=>l(e.target.value)}),n().createElement(o.l6P,{id:"filter-source",labelText:"Source",value:k,onChange:e=>A(e.target.value)},n().createElement(o.ebT,{value:"",text:"All sources"}),n().createElement(o.ebT,{value:"LEGACY",text:"LEGACY"}),n().createElement(o.ebT,{value:"BUILDER",text:"BUILDER"})),n().createElement(o.l6P,{id:"filter-type",labelText:"Type",value:R,onChange:e=>O(e.target.value)},n().createElement(o.ebT,{value:"",text:"All types"}),n().createElement(o.ebT,{value:"AGGREGATE",text:"AGGREGATE"}),n().createElement(o.ebT,{value:"LINE_LIST",text:"LINE_LIST"})),n().createElement(o.l6P,{id:"filter-category",labelText:"Category",value:D,onChange:e=>x(e.target.value)},n().createElement(o.ebT,{value:"",text:"All categories"}),d.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.name}))),n().createElement(o.l6P,{id:"filter-status",labelText:"Status",value:L,onChange:e=>M(e.target.value)},n().createElement(o.ebT,{value:"",text:"All statuses"}),n().createElement(o.ebT,{value:"ACTIVE",text:"Active"}),n().createElement(o.ebT,{value:"RETIRED",text:"Retired"})),n().createElement(o.l6P,{id:"filter-migration",labelText:"Migration",value:$,onChange:e=>U(e.target.value)},n().createElement(o.ebT,{value:"",text:"All"}),n().createElement(o.ebT,{value:"MIGRATED",text:"Migrated"}),n().createElement(o.ebT,{value:"PENDING",text:"Pending"})),n().createElement(o.$nd,{kind:"tertiary",size:"md",onClick:()=>{l(""),A(""),O(""),x(""),M(""),U("")}},"Clear"),t&&n().createElement(o.$nd,{size:"md",renderIcon:b.OM,onClick:()=>{h("create"),T(null),w(ls),E(!0)}},"New Library Entry")),p?n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:p}):null,m?n().createElement(o.OOb,{rowCount:6,columnCount:7,showHeader:!1,showToolbar:!1}):n().createElement(o.bQt,{rows:j,headers:lo},({rows:e,headers:a,getHeaderProps:l,getRowProps:i})=>n().createElement(o.K3K,null,n().createElement(o.XIK,{useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,a.map(e=>n().createElement(o.A0N,{key:e.key,...l({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>{let a=q.find(t=>t.uuid===e.id);return n().createElement(o.Hjg,{key:e.id,...i({row:e})},n().createElement(o.nA6,null,a?.name),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:a?.sourceType==="BUILDER"?"blue":"purple"},a?.sourceType??"LEGACY")),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:a?.reportType==="LINE_LIST"?"teal":"cyan"},a?.reportType??"AGGREGATE")),n().createElement(o.nA6,null,lc(a?.category)),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:a?.migrated?"green":"warm-gray"},a?.migrated?"Migrated":"Pending")),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:a?.retired?"gray":"green"},a?.retired?"Retired":"Active")),n().createElement(o.nA6,null,n().createElement("div",{style:{display:"flex",gap:"0.5rem"}},t&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:es.ff,onClick:()=>a&&void(h("edit"),T(a),w({name:a.name??"",description:a.description??"",code:a.code??"",sourceType:a.sourceType??"LEGACY",reportType:a.reportType??"AGGREGATE",reportDefinitionUuid:a.reportDefinitionUuid??"",reportBuilderReportUuid:a.reportBuilderReportUuid??"",category:ld(a.category),migrated:!!a.migrated,metaJson:a.metaJson?.trim()||"{}"}),E(!0))},"Edit"),r&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:P.zH,onClick:()=>a&&z(a)},"Retire"))))})))))),n().createElement(o.aFV,{open:g,modalHeading:"create"===f?"New Report Library Entry":"Edit Report Library Entry",primaryButtonText:N?"Saving…":"create"===f?"Create":"Save",secondaryButtonText:"Cancel",primaryButtonDisabled:N||!C.name.trim(),onRequestSubmit:F,onRequestClose:()=>!N&&E(!1)},n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"rl-name",labelText:"Name",value:C.name,onChange:e=>w(t=>({...t,name:e.target.value}))}),n().createElement(o.ksK,{id:"rl-code",labelText:"Code",value:C.code,onChange:e=>w(t=>({...t,code:e.target.value}))}),n().createElement(o.fs1,{id:"rl-description",labelText:"Description",value:C.description,onChange:e=>w(t=>({...t,description:e.target.value}))}),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(o.l6P,{id:"rl-sourceType",labelText:"Source Type",value:C.sourceType,onChange:e=>w(t=>({...t,sourceType:e.target.value}))},n().createElement(o.ebT,{value:"LEGACY",text:"LEGACY"}),n().createElement(o.ebT,{value:"BUILDER",text:"BUILDER"})),n().createElement(o.l6P,{id:"rl-reportType",labelText:"Report Type",value:C.reportType,onChange:e=>w(t=>({...t,reportType:e.target.value}))},n().createElement(o.ebT,{value:"AGGREGATE",text:"AGGREGATE"}),n().createElement(o.ebT,{value:"LINE_LIST",text:"LINE_LIST"}))),n().createElement(o.l6P,{id:"rl-category",labelText:"Category",value:C.category,onChange:e=>w(t=>({...t,category:e.target.value}))},n().createElement(o.ebT,{value:"",text:"None"}),d.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.name}))),n().createElement(o.ksK,{id:"rl-rd",labelText:"Legacy Report Definition UUID",value:C.reportDefinitionUuid,onChange:e=>w(t=>({...t,reportDefinitionUuid:e.target.value}))}),n().createElement(o.ksK,{id:"rl-rbr",labelText:"Builder Report UUID",value:C.reportBuilderReportUuid,onChange:e=>w(t=>({...t,reportBuilderReportUuid:e.target.value}))}),n().createElement(o.Sc0,{id:"rl-migrated",labelText:"Migrated",checked:C.migrated,onChange:(e,{checked:t})=>w(e=>({...e,migrated:!!t}))}),n().createElement(o.fs1,{id:"rl-meta",labelText:"Meta JSON",value:C.metaJson,onChange:e=>w(t=>({...t,metaJson:e.target.value})),rows:6}))))}let lu="/reportbuilder/etlsource";async function lp(e,t){var r;let a=new URLSearchParams;return a.set("v","custom:(uuid,name,code,description,tablePatterns,schemaName,sourceType,active,retired)"),e?.trim()&&a.set("q",e.trim()),(!(r=await (0,W.wO)(`${lu}?${a.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid)}async function l_(e,t){return(0,W.oV)(lu,e,t)}async function lg(e,t,r){return(0,W.oV)(`${lu}/${encodeURIComponent(e)}`,t,r)}async function lE(e,t="Retired from Report Builder Admin",r){let a=new URLSearchParams;return a.set("reason",t),(0,W.hI)(`${lu}/${encodeURIComponent(e)}?${a.toString()}`,r)}let lf=[{key:"name",header:"Name"},{key:"code",header:"Code"},{key:"schemaName",header:"Schema"},{key:"sourceType",header:"Source Type"},{key:"status",header:"Status"},{key:"actions",header:"Actions"}],lb={name:"",code:"",description:"",tablePatterns:"",schemaName:"",sourceType:"",active:!0};function ly(){let{has:e}=v(),t=e(y.RB.ETLSOURCE_ADD,y.RB.ETLSOURCE_EDIT),r=e(y.RB.ETLSOURCE_PURGE),[a,l]=n().useState(""),[i,s]=n().useState([]),[d,c]=n().useState(!1),[m,u]=n().useState(null),[p,_]=n().useState(!1),[g,E]=n().useState("create"),[f,h]=n().useState(null),[S,T]=n().useState(lb),[C,w]=n().useState(!1),N=n().useCallback(async e=>{c(!0),u(null);try{let t=await lp(a,e);s(t)}catch(e){u(e?.message??"Failed to load ETL sources")}finally{c(!1)}},[a]);n().useEffect(()=>{let e=new AbortController;return N(e.signal),()=>e.abort()},[N]);let I=async()=>{if(S.name.trim()){w(!0),u(null);try{let e={name:S.name.trim(),code:S.code.trim()||void 0,description:S.description.trim()||void 0,tablePatterns:S.tablePatterns.trim()||void 0,schemaName:S.schemaName.trim()||void 0,sourceType:S.sourceType.trim()||void 0,active:S.active};"create"===g?await l_(e):f?.uuid&&await lg(f.uuid,e),_(!1);let t=new AbortController;await N(t.signal)}catch(e){u(e?.message??"Failed to save ETL source")}finally{w(!1)}}},k=async e=>{if(e?.uuid&&window.confirm(`Retire ETL source "${e.name}"?`))try{await lE(e.uuid);let t=new AbortController;await N(t.signal)}catch(e){u(e?.message??"Failed to retire ETL source")}},A=i.map(e=>({id:e.uuid,name:e.name,code:e.code||"—",schemaName:e.schemaName||"—",sourceType:e.sourceType||"—",status:!1===e.active||e.voided?"Inactive":"Active",actions:""}));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"ETL Sources",subtitle:"Manage ETL source definitions used by the report builder.",actions:t?n().createElement(o.$nd,{"data-testid":"etl-source-new",size:"sm",renderIcon:b.OM,onClick:()=>{E("create"),h(null),T(lb),_(!0)}},"New ETL Source"):void 0}),n().createElement("div",{style:{padding:"0 1rem 1rem",display:"grid",gap:"1rem"}},n().createElement(o.vji,{"data-testid":"etl-source-search",size:"lg",labelText:"Search",placeholder:"Search ETL sources…",value:a,onChange:e=>l(e.target.value)}),m?n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:m}):null,d?n().createElement(o.OOb,{rowCount:5,columnCount:6,showHeader:!1,showToolbar:!1}):n().createElement(o.bQt,{rows:A,headers:lf},({rows:e,headers:a,getHeaderProps:l,getRowProps:s})=>n().createElement(o.K3K,null,n().createElement(o.XIK,{useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,a.map(e=>n().createElement(o.A0N,{key:e.key,...l({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>{let a=i.find(t=>t.uuid===e.id);return n().createElement(o.Hjg,{key:e.id,...s({row:e})},n().createElement(o.nA6,null,e.cells[0].value),n().createElement(o.nA6,null,e.cells[1].value),n().createElement(o.nA6,null,e.cells[2].value),n().createElement(o.nA6,null,e.cells[3].value),n().createElement(o.nA6,null,a?.active===!1||a?.voided?n().createElement(o.vwO,{type:"gray"},"Inactive"):n().createElement(o.vwO,{type:"green"},"Active")),n().createElement(o.nA6,null,n().createElement("div",{style:{display:"flex",gap:"0.5rem"}},t&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:es.ff,iconDescription:"Edit",hasIconOnly:!0,onClick:()=>a&&void(E("edit"),h(a),T({name:a.name??"",code:a.code??"",description:a.description??"",tablePatterns:a.tablePatterns??"",schemaName:a.schemaName??"",sourceType:a.sourceType??"",active:a.active??!0}),_(!0))}),r&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:P.zH,iconDescription:"Retire",hasIconOnly:!0,onClick:()=>a&&k(a)}))))})))))),n().createElement(o.aFV,{open:p,modalHeading:"create"===g?"New ETL Source":"Edit ETL Source","data-testid":"etl-source-modal",primaryButtonText:C?"Saving…":"Save",secondaryButtonText:"Cancel",onRequestClose:()=>!C&&_(!1),onRequestSubmit:I,primaryButtonDisabled:C||!S.name.trim()},n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"etl-source-name","data-testid":"etl-source-name",labelText:"Name",value:S.name,onChange:e=>T(t=>({...t,name:e.target.value}))}),n().createElement(o.ksK,{id:"etl-source-code","data-testid":"etl-source-code",labelText:"Code",value:S.code,onChange:e=>T(t=>({...t,code:e.target.value}))}),n().createElement(o.ksK,{id:"etl-source-schema","data-testid":"etl-source-schema",labelText:"Schema Name",value:S.schemaName,onChange:e=>T(t=>({...t,schemaName:e.target.value}))}),n().createElement(o.ksK,{id:"etl-source-type","data-testid":"etl-source-type",labelText:"Source Type",value:S.sourceType,onChange:e=>T(t=>({...t,sourceType:e.target.value}))}),n().createElement(o.fs1,{id:"etl-source-description","data-testid":"etl-source-description",labelText:"Description",rows:3,value:S.description,onChange:e=>T(t=>({...t,description:e.target.value}))}),n().createElement(o.fs1,{id:"etl-source-table-patterns","data-testid":"etl-source-table-patterns",labelText:"Table Patterns",helperText:"Store table matching patterns as text.",rows:4,value:S.tablePatterns,onChange:e=>T(t=>({...t,tablePatterns:e.target.value}))}),n().createElement(o.lMk,{id:"etl-source-active",labelText:"Active",toggled:S.active,onToggle:e=>T(t=>({...t,active:e}))}))))}var lh=r(6942),lv=r.n(lh);async function lS(e){try{let t=await (0,aO.jX)((0,h.openmrsFetch)("/ws/rest/v1/taskdefinition?v=custom:(uuid,name,description,taskClass,started,lastExecutionTime,repeatInterval)",{signal:e}));return(await t.json()).results||[]}catch(e){throw console.error("Error fetching task definitions:",e),e}}async function lT(e,t){let r=e.map(e=>"string"==typeof e?e.trim():"").filter(e=>e);if(0===r.length)return{tasks:[],unknownNames:[]};let a=await lS(t),n=new Set,l=[];for(let e of a)r.includes(e.name)&&(l.push(e),n.add(e.name));return{tasks:l,unknownNames:r.filter(e=>!n.has(e))}}async function lC(e){try{let t=await (0,aO.jX)((0,h.openmrsFetch)("/ws/rest/v1/taskaction",{method:"POST",headers:{"Content-Type":"application/json"},body:{action:"runtask",tasks:[e]}}));if(201!==t.status)throw Error(`Task execution failed with status ${t.status}`);return{status:t.status,message:"Task executed successfully"}}catch(e){throw console.error("Error executing ETL task:",e),e}}let lw=["password","secret","token","authorization","cookie","session","sessionid","jsessionid","apikey","api_key","apikey","auth","credentials","private","key"];async function lN(e,t){let r=Date.now(),a=[];if(!e.endpoint?.url)return{success:!1,error:"URL is required",testedAt:new Date().toISOString()};let n=e.endpoint.url;n.startsWith("/")&&(n=`${h.restBaseUrl}${n}`);let l={"Content-Type":"application/json"},i=e.endpoint.auth;"BASIC"===i.type&&i.username&&i.password?l.Authorization=`Basic ${btoa(`${i.username}:${i.password}`)}`:"BEARER_TOKEN"===i.type&&i.token?l.Authorization=`Bearer ${i.token}`:"API_KEY"===i.type&&i.headerName&&i.apiKey&&(l[i.headerName]=i.apiKey);try{let i=await (0,h.openmrsFetch)(n,{method:e.endpoint.method||"GET",headers:l,body:e.requestBody?JSON.stringify(e.requestBody):void 0,signal:t}),o=Date.now()-r,s=i.data,d=function e(t,r=0){if(r>10||null==t)return t;if(Array.isArray(t))return t.map(t=>e(t,r+1));if("object"==typeof t){let a={};for(let[n,l]of Object.entries(t))!function(e){let t=e.toLowerCase();return lw.some(e=>t.includes(e))}(n)?"object"==typeof l&&null!==l?a[n]=e(l,r+1):"string"==typeof l&&l.length>1e3?a[n]=l.substring(0,1e3)+"...[TRUNCATED]":a[n]=l:a[n]="[REDACTED]";return a}return t}(function e(t,r=50,a=5){if(a<=0)return"[MAX_DEPTH_REACHED]";if(Array.isArray(t))return t.slice(0,100).map(t=>e(t,r,a-1));if("object"==typeof t&&null!==t){let n=Object.entries(t).slice(0,r),l={};for(let[t,i]of n)l[t]=e(i,r,a-1);return l}return t}(s));return o>5e3&&a.push("Response time is slow (>5s)"),{success:!0,httpStatus:i.status||200,durationMs:o,contentType:i.headers?.get("content-type")||void 0,contentLength:JSON.stringify(s).length,data:d,sanitizedData:d,testedAt:new Date().toISOString(),warnings:a}}catch(t){let e=Date.now()-r;if("AbortError"===t.name)return{success:!1,error:"Request was cancelled",errorCode:"ABORTED",durationMs:e,testedAt:new Date().toISOString()};return{success:!1,error:t.message||"Connection test failed",errorCode:t.code||"CONNECTION_ERROR",durationMs:e,testedAt:new Date().toISOString()}}}function lI(e){return e?Array.isArray(e)?e:Array.isArray(e.results)?e.results:[]:[]}let lk="/reportbuilder/etl-monitor";async function lA(e,t){let r=new URLSearchParams;return r.set("v","full"),e?.trim()&&r.set("q",e.trim()),lI(await (0,W.wO)(`${lk}?${r.toString()}`,t)).filter(e=>!!e?.uuid)}async function lR(e){let t=new URLSearchParams;return t.set("v","full"),t.set("activeOnly","true"),lI(await (0,W.wO)(`${lk}?${t.toString()}`,e)).filter(e=>!!e?.uuid)}async function lO(e,t){let r=new URLSearchParams;return r.set("v","full"),(0,W.wO)(`${lk}/${encodeURIComponent(e)}?${r.toString()}`,t)}async function lD(e,t){return(0,W.oV)(lk,e,t)}async function lx(e,t,r){return(0,W.oV)(`${lk}/${encodeURIComponent(e)}`,t,r)}async function lL(e,t="Retired from Report Builder Admin",r){let a=new URLSearchParams;return a.set("reason",t),(0,W.hI)(`${lk}/${encodeURIComponent(e)}?${a.toString()}`,r)}async function lM(e,t){let r=await lO(e,t);if(!r||!r.configJson)throw Error("Monitor configuration not found");let a=JSON.parse(r.configJson).apiEndpoint;if(!a||!a.url)throw Error("ETL endpoint URL not configured");let n=a.url;n.startsWith("/")&&(n=`${h.restBaseUrl}${n}`);let l={},i="POST"===a.method&&a.requestBody?JSON.stringify(a.requestBody):void 0;if(a.headers&&Object.entries(a.headers).forEach(([e,t])=>{l[e]=String(t)}),"BASIC"===a.authType&&a.authConfig){let e=btoa(`${a.authConfig.username}:${a.authConfig.password}`);l.Authorization=`Basic ${e}`}else if("BEARER_TOKEN"===a.authType&&a.authConfig?.token)l.Authorization=`Bearer ${a.authConfig.token}`;else if("API_KEY"===a.authType&&a.authConfig){let{headerName:e,apiKey:t}=a.authConfig;e&&t&&(l[e]=t)}let o=await (0,h.openmrsFetch)(n,{method:a.method||"GET",headers:l,body:i,signal:t}),s=function(e,t){if(!e)return[];if(!t)return Array.isArray(e)?e:Object.entries(e).map(([e,t])=>({key:e,header:e,value:t}));try{return(JSON.parse(t).columns||[]).map(t=>{var r,a;let n=function(e,t){if(!t||!e)return;let r=(t.startsWith("$.")?t.slice(2):t).split(".").flatMap(e=>{let t=e.match(/^(\w+)\[(\d+)\]$/);return t?[t[1],parseInt(t[2],10)]:[e]}),a=e;for(let e of r){if(null==a)return;a=a[e]}return a}(e,t.jsonPath);return{key:t.key,header:t.header,value:n??t.defaultValue,displayValue:t.format?(r=n,a=t.format,null==r?"":a.includes("%")?String(Math.round(Number(r)||0))+"%":a.includes("s")?String(r)+"s":"0.0"===a?String(Math.round(10*Number(r))/10):String(r)):void 0,rawValue:n}})}catch(e){return console.error("Failed to parse display config JSON",e),[]}}(o.data,r.displayConfigJson);return{uuid:r.uuid,code:r.code||"",timestamp:new Date().toISOString(),success:!0,data:s,rawResponse:o.data}}var l$=r(4676);let lP=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function lU(e){if(null==e||""===e)return null;if(e instanceof Date)return isNaN(e.getTime())?null:e;if("number"==typeof e)return isNaN(e)?null:new Date(e);if("string"!=typeof e)return null;let t=new Date(e.trim().replace(/([+-]\d{2})(\d{2})$/,"$1:$2"));return isNaN(t.getTime())?null:t}function lB(e,t=new Date){let r,a=String(e.getHours()).padStart(2,"0"),n=String(e.getMinutes()).padStart(2,"0"),l=`${a}:${n}`,i=Math.round(((r=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime())(e)-r(t))/864e5);return 0===i?`Today, ${l}`:-1===i?`Yesterday, ${l}`:`${e.getDate()} ${lP[e.getMonth()]}, ${l}`}function lF(e){let t=lU(e);return t?lB(t):null==e||""===e?"—":String(e)}function lz(e,t){let r=lU(e);return r&&"number"==typeof t&&isFinite(t)&&!(t<=0)?new Date(r.getTime()+1e3*t):null}function lq(e){return e?lB(e):"Not scheduled"}let lj=/duration|elapsed|runtime/i,lH=/sec/i,lJ=/milli|_ms\b|ms$/i;function lG(e,t){return lJ.test(t)?e:lH.test(t)||e<1e3?1e3*e:e}let lV=/^(status|state)$/i;function lW(e,t){let r;for(let a of e){let e=function(e,t){let r;if(null==e||"object"!=typeof e)return;let a=new WeakSet,n=(e,l)=>{if(!(null==e||l>3||"object"!=typeof e||a.has(e)))for(let[i,o]of(a.add(e),Array.isArray(e)?e.map(e=>["",e]):Object.entries(e)))"number"==typeof o&&isFinite(o)&&t.test(i)?r=(r??0)+o:lV.test(i)&&"string"==typeof o&&t.test(o)?r=(r??0)+1:"object"==typeof o&&null!==o&&n(o,l+1)};return n(e,0),r}(a,t);void 0!==e&&(r=(r??0)+e)}return r}let lK={TEXT:"TEXT",STRING:"STRING",NUMBER:"NUMBER",INTEGER:"INTEGER",DECIMAL:"DECIMAL",PERCENTAGE:"PERCENTAGE",PROGRESS_BAR:"PERCENTAGE",STATUS_BADGE:"STATUS",TIMESTAMP:"TIMESTAMP",DURATION:"DURATION",BOOLEAN:"BOOLEAN",ICON:"TEXT",LINK:"TEXT"},lQ={green:"success",success:"success",blue:"info",info:"info",yellow:"warning",warning:"warning",orange:"warning",red:"critical",error:"critical",critical:"critical",gray:"neutral",grey:"neutral",neutral:"neutral","cool-gray":"neutral",running:"info"},lY={STATUS_CARD:"STATUS_CARD",PROGRESS_BAR:"PROGRESS",DATA_TABLE:"TABLE",TIME_SERIES:"TABLE",ERROR_LOG:"TABLE",METRICS_GRID:"METRICS_GRID"};function lX(e,t){let r,a,n;if(!e)return null;if("string"==typeof e)try{r=JSON.parse(e)}catch{return console.error("Failed to parse legacy display config JSON"),null}else r=e;if(!r||"object"!=typeof r)return null;let l=t&&lY[t]||"SUMMARY_CARD",i={schemaVersion:2,component:l,fields:[]};if(i.layout=(a={STATUS_CARD:{section:"overview",span:{sm:4,md:4,lg:4},priority:1},SUMMARY_CARD:{section:"overview",span:{sm:4,md:4,lg:4},priority:2},METRICS_GRID:{section:"execution",span:{sm:4,md:8,lg:8},priority:1},PROGRESS:{section:"execution",span:{sm:4,md:8,lg:8},priority:2},TABLE:{section:"history",span:{sm:4,md:8,lg:16},priority:1},DATA_TABLE:{section:"history",span:{sm:4,md:8,lg:16},priority:1},DETAILS:{section:"configuration",span:{sm:4,md:4,lg:4},priority:1},ERROR_LOG:{section:"errors",span:{sm:4,md:8,lg:16},priority:1},LOG:{section:"history",span:{sm:4,md:8,lg:8},priority:2},TIME_SERIES:{section:"history",span:{sm:4,md:8,lg:12},priority:2}})[l]||a.SUMMARY_CARD,i.emptyState=(n={STATUS_CARD:{title:"No status data available",tone:"neutral"},SUMMARY_CARD:{title:"No data available",tone:"neutral"},METRICS_GRID:{title:"No metrics available",tone:"neutral"},PROGRESS:{title:"No active process",description:"No process is currently running",tone:"neutral"},TABLE:{title:"No data available",description:"There are no records to display",tone:"neutral"},DATA_TABLE:{title:"No data available",description:"There are no records to display",tone:"neutral"},DETAILS:{title:"No configuration available",tone:"neutral"},ERROR_LOG:{title:"No errors reported",description:"There are no errors to display",tone:"success"},LOG:{title:"No activity",description:"No events have been recorded yet",tone:"neutral"},TIME_SERIES:{title:"No data available",description:"There is no time series data to display",tone:"neutral"}})[l]||n.SUMMARY_CARD,r.columns&&Array.isArray(r.columns)){if(i.fields=r.columns.map((e,t)=>{var r,a,n;let l;return r=e,a=t,l={key:r.key||`field-${a}`,label:r.header||r.key||"Field",path:r.jsonPath||r.path||`$.${r.key}`,type:(n=r.columnType||r.type)&&lK[n.toUpperCase()]||"TEXT",primary:!1,order:a},void 0!==r.defaultValue&&(l.defaultValue=r.defaultValue),void 0!==r.sortable&&(l.sortable=r.sortable),void 0!==r.width&&(l.width=r.width),"STATUS"===l.type&&r.colorMap&&(l.statusMap=function(e){let t={};for(let[a,n]of Object.entries(e)){var r;let e=lQ[n.toLowerCase()]||"neutral";t[a]={label:({true:"Running",false:"Stopped",UP:"Healthy",DOWN:"Unavailable",ACTIVE:"Active",INACTIVE:"Inactive",RUNNING:"Running",STOPPED:"Stopped",SUCCESS:"Success",FAILURE:"Failed",COMPLETED:"Completed",FAILED:"Failed",PENDING:"Pending",IN_PROGRESS:"In Progress"})[(r=a).toUpperCase()]||r,tone:e}}return t}(r.colorMap)),r.format&&(l.format=function(e,t){if(e)switch(t){case"TIMESTAMP":return{timestamp:{display:e.includes("relative")?"relative":"datetime",relative:e.includes("relative")}};case"DURATION":return{duration:{display:e.includes("human")?"human":"seconds"}};case"PERCENTAGE":return{percentage:{decimals:e.includes(".0")||e.includes(".1")?1:0,suffix:"%"}};case"NUMBER":return{number:{decimals:e.includes(".0")?0:e.includes(".1")?1:e.includes(".2")?2:void 0}};default:return}}(r.format,l.type)),l}),"STATUS_CARD"===l&&i.fields.length>0){let e=i.fields.find(e=>"STATUS"===e.type);e?(e.primary=!0,i.componentConfig={statusFieldKey:e.key}):i.fields[0]&&(i.fields[0].primary=!0)}"METRICS_GRID"===l&&(i.componentConfig={labelsAbove:!1}),"PROGRESS"===l&&i.fields.find(e=>"PERCENTAGE"===e.type||"NUMBER"===e.type)&&(i.componentConfig={progressMin:0,progressMax:100}),"TABLE"===l&&(i.data={rootPath:"$"},i.componentConfig={selectable:!1,maxRows:50})}return i}function lZ(e){if(!e)return{version:"unknown",config:null};try{let t=JSON.parse(e);if(t&&"object"==typeof t&&2===t.schemaVersion)return{version:2,config:t};return t&&"object"==typeof t&&(t.columns&&Array.isArray(t.columns)&&!t.schemaVersion||t.schemaVersion),{version:1,config:t}}catch(e){return{version:"unknown",config:null,error:e instanceof Error?e.message:"Failed to parse JSON"}}}var l0=r(6434);function l1({children:e,loading:t=!1,onRefresh:r,actions:a}){return n().createElement("div",{className:"-esm-report-builder__monitor-widget-card__monitor-widget-card___fr5Gr"},n().createElement("div",{className:"-esm-report-builder__monitor-widget-card__monitor-widget-card__actions___Wd0dV"},r&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:u.wM,iconDescription:"Refresh",onClick:r,disabled:t}),a&&a.length>0&&n().createElement(o.obU,{flipped:!0,ariaLabel:"Monitor actions"},a.map(e=>n().createElement(o.XSD,{key:e.label,itemText:e.label,onClick:e.onClick})))),e)}let l2={"etl-monitor-card-shell":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell___Vk6Rm","etl-monitor-card-shell__header":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__header___GFyuz","etl-monitor-card-shell__status":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__status___kTliF","etl-monitor-card-shell__status-dot":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__status-dot___kDt5h","etl-monitor-card-shell__status-dot--active":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__status-dot--active___dcVa1","etl-monitor-card-shell__status-dot--inactive":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__status-dot--inactive___Qg3L-","etl-monitor-card-shell__status-dot--error":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__status-dot--error___99+Je","etl-monitor-card-shell__status-dot--warning":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__status-dot--warning___WTw+2","etl-monitor-card-shell__content":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__content___hfukv","etl-monitor-card-shell__footer":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__footer___Q5u07","etl-monitor-card-shell__actions":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__actions___4ykJv"};function l5({title:e,children:t,loading:r=!1,error:a,onRefresh:l,refreshDisabled:i=!1,extraActions:s,onEdit:d,size:c="md"}){let[m,p]=n().useState(!1),_=async()=>{if(l&&!m&&!i){p(!0);try{await l()}finally{p(!1)}}};return n().createElement(o.FAs,{className:`${l2["etl-monitor-card-shell"]} ${l2[`etl-monitor-card-shell--${c}`]}`},n().createElement("div",{className:l2["etl-monitor-card-shell__header"]},n().createElement("h4",{className:l2["etl-monitor-card-shell__title"]},e),n().createElement("div",{className:l2["etl-monitor-card-shell__actions"]},s,l&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:u.wM,iconDescription:"Refresh",hasIconOnly:!0,onClick:_,disabled:i||m||r}),d&&n().createElement(o.obU,{flipped:!0,ariaLabel:"Monitor actions",size:"sm"},n().createElement(o.XSD,{itemText:"Edit monitor",onClick:d})))),n().createElement("div",{className:l2["etl-monitor-card-shell__content"]},r&&n().createElement("div",{className:l2["etl-monitor-card-shell__loading"]},n().createElement(o.OuH,{description:"Loading..."})),!r&&a&&n().createElement("div",{className:l2["etl-monitor-card-shell__error"]},n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:a,hideCloseButton:!0}),l&&n().createElement(o.$nd,{size:"sm",kind:"secondary",renderIcon:u.wM,onClick:_,style:{marginTop:"1rem"}},"Retry")),!r&&!a&&t))}function l6({icon:e,message:t,description:r}){return n().createElement("div",{className:l2["etl-monitor-card-shell__empty"]},e||n().createElement(tb.BF,{size:32}),n().createElement("p",{className:l2["etl-monitor-card-shell__empty-message"]},t),r&&n().createElement("p",{className:l2["etl-monitor-card-shell__empty-description"]},r))}function l3({monitor:e,data:t,error:r,loading:a,onRefresh:l,position:o,title:s,editBaseUrl:d="/admin/etl-monitors/builder"}){let c=(0,i.Zp)(),m=`${"number"==typeof o?`${o}. `:""}${s??e.name}`,u=n().useMemo(()=>{let t=lZ(e.displayConfigJson),r=2===t.version?t.config:lX(e.displayConfigJson,e.monitorType);return r?{...r,presentation:{...r.presentation||{},title:m,description:e.description}}:null},[e.displayConfigJson,e.monitorType,e.description,m]);return u?n().createElement(l1,{loading:a,onRefresh:l,actions:[{label:"Edit monitor",onClick:()=>c(`${d}?mode=edit&monitor=${e.uuid}`)}]},n().createElement(l0.MonitorRenderer,{config:u,data:t?.rawResponse,loading:a,error:r??null})):n().createElement(l5,{title:m,loading:a,error:r,onRefresh:l,size:"lg"},n().createElement(l6,{message:"Invalid monitor configuration"}))}let l4={page:"-esm-report-builder__etl-tasks-page-component__page___Mt7Wf",kpiGrid:"-esm-report-builder__etl-tasks-page-component__kpiGrid___qW4n-",kpiCard:"-esm-report-builder__etl-tasks-page-component__kpiCard___AObBu",kpiIcon:"-esm-report-builder__etl-tasks-page-component__kpiIcon___QCqkF",kpiIconhealthy:"-esm-report-builder__etl-tasks-page-component__kpiIconhealthy___emXSD",kpiIconinfo:"-esm-report-builder__etl-tasks-page-component__kpiIconinfo___jVX2a",kpiIcondanger:"-esm-report-builder__etl-tasks-page-component__kpiIcondanger___5lv2-",kpiIconneutral:"-esm-report-builder__etl-tasks-page-component__kpiIconneutral___zQVWI",kpiText:"-esm-report-builder__etl-tasks-page-component__kpiText___IyEGI",kpiLabel:"-esm-report-builder__etl-tasks-page-component__kpiLabel___AfHvE",kpiValue:"-esm-report-builder__etl-tasks-page-component__kpiValue___aLYxV",kpiSubtext:"-esm-report-builder__etl-tasks-page-component__kpiSubtext___78GC8",toolbarControls:"-esm-report-builder__etl-tasks-page-component__toolbarControls___+e7Kv",searchBox:"-esm-report-builder__etl-tasks-page-component__searchBox___PZ7do",filterTabs:"-esm-report-builder__etl-tasks-page-component__filterTabs___G8QWn",filterTab:"-esm-report-builder__etl-tasks-page-component__filterTab___OEeyn",filterTabActive:"-esm-report-builder__etl-tasks-page-component__filterTabActive___8aeVs",countChip:"-esm-report-builder__etl-tasks-page-component__countChip___GXC6i",liveEmpty:"-esm-report-builder__etl-tasks-page-component__liveEmpty___32mxd",liveEmptyTitle:"-esm-report-builder__etl-tasks-page-component__liveEmptyTitle___mmicJ",liveEmptyHint:"-esm-report-builder__etl-tasks-page-component__liveEmptyHint___Pxmgr",sectionHeading:"-esm-report-builder__etl-tasks-page-component__sectionHeading___aEFpc",monitorsGrid:"-esm-report-builder__etl-tasks-page-component__monitorsGrid___UEM3s",monitorMissingCard:"-esm-report-builder__etl-tasks-page-component__monitorMissingCard___6DPX2",monitorMissingTitle:"-esm-report-builder__etl-tasks-page-component__monitorMissingTitle___JxNCB",monitorMissingHint:"-esm-report-builder__etl-tasks-page-component__monitorMissingHint___pizBc",toolbar:"-esm-report-builder__etl-tasks-page-component__toolbar___dLl7k",toolbarHeading:"-esm-report-builder__etl-tasks-page-component__toolbarHeading___JimFz",toolbarSubtext:"-esm-report-builder__etl-tasks-page-component__toolbarSubtext___VRe-A",tasksGrid:"-esm-report-builder__etl-tasks-page-component__tasksGrid___AHLKY",taskCard:"-esm-report-builder__etl-tasks-page-component__taskCard___94a2R",cardHead:"-esm-report-builder__etl-tasks-page-component__cardHead___ws1j6",cardIcon:"-esm-report-builder__etl-tasks-page-component__cardIcon___3uSJw",cardIconMuted:"-esm-report-builder__etl-tasks-page-component__cardIconMuted___6T82f",cardHeadText:"-esm-report-builder__etl-tasks-page-component__cardHeadText___UVEvu",cardTitle:"-esm-report-builder__etl-tasks-page-component__cardTitle___CerTU",cardDescription:"-esm-report-builder__etl-tasks-page-component__cardDescription___4lyXO",statusPill:"-esm-report-builder__etl-tasks-page-component__statusPill___rZDjR",statusPillActive:"-esm-report-builder__etl-tasks-page-component__statusPillActive___wzlTk",statusPillInactive:"-esm-report-builder__etl-tasks-page-component__statusPillInactive___V1wUN",statusPillUnknown:"-esm-report-builder__etl-tasks-page-component__statusPillUnknown___Lwq55",metaRow:"-esm-report-builder__etl-tasks-page-component__metaRow___tpiie",metaItem:"-esm-report-builder__etl-tasks-page-component__metaItem___6u4FS",metaLabel:"-esm-report-builder__etl-tasks-page-component__metaLabel___Z3qOo",metaValue:"-esm-report-builder__etl-tasks-page-component__metaValue___t7QLs",cardActions:"-esm-report-builder__etl-tasks-page-component__cardActions___GNIrw",monitorMissing:"-esm-report-builder__etl-tasks-page-component__monitorMissing___jOpIf",executingStatus:"-esm-report-builder__etl-tasks-page-component__executingStatus___k2gU5",emptyState:"-esm-report-builder__etl-tasks-page-component__emptyState___1YrRv",emptyStateIcon:"-esm-report-builder__etl-tasks-page-component__emptyStateIcon___3aFAn"},l8=/running|in.?progress|processing/i,l7=/fail|error/i,l9="All types";function ie(e){return e?.name==="AbortError"||/abort/i.test(String(e?.message))}function it(e){let t=(e??"").toLowerCase();return t.includes("upgrade")?"Upgrade":t.includes("sync")?"Sync":t.includes("download")?"Download":t.includes("initializ")?"Initialize":t.includes("update")?"Update":t.includes("report")?"Report":t.includes("etl")||t.includes("extract")||t.includes("flatten")||t.includes("mamba")?"ETL":"Task"}function ir({label:e,value:t}){return n().createElement("div",{className:l4.metaItem},n().createElement("span",{className:l4.metaLabel},e),n().createElement("span",{className:l4.metaValue,title:t},t))}function ia({icon:e,iconTone:t,label:r,value:a,subtext:l}){return n().createElement(o.FAs,{className:l4.kpiCard},n().createElement("span",{className:lv()(l4.kpiIcon,l4[`kpiIcon${t}`])},e),n().createElement("div",{className:l4.kpiText},n().createElement("span",{className:l4.kpiLabel},r),n().createElement("span",{className:l4.kpiValue},a),n().createElement("span",{className:l4.kpiSubtext},l)))}function il({tab:e,label:t,count:r,activeTab:a,onSelect:l}){return n().createElement("button",{type:"button",className:lv()(l4.filterTab,a===e&&l4.filterTabActive),onClick:()=>l(e)},t,n().createElement("span",{className:l4.countChip},r))}function ii(){let{t:e}=(0,A.useTranslation)(),t=(0,h.useConfig)(),r=(0,a.useMemo)(()=>(t.etlTasks?.tasks??[]).filter(e=>"string"==typeof e&&e.trim().length>0),[t.etlTasks?.tasks]),l=(0,a.useMemo)(()=>(t.etlTasks?.progressMonitors??[]).filter(e=>"string"==typeof e),[t.etlTasks?.progressMonitors]),[i,s]=(0,a.useState)([]),[m,p]=(0,a.useState)([]),[E,f]=(0,a.useState)([]),[b,y]=(0,a.useState)(null),[v,S]=(0,a.useState)(!0),[T,C]=(0,a.useState)(null),[w,N]=(0,a.useState)(null),[I,k]=(0,a.useState)({}),[R,O]=(0,a.useState)({}),[D,x]=(0,a.useState)({}),[L,M]=(0,a.useState)(""),[$,P]=(0,a.useState)("all"),[B,F]=(0,a.useState)(l9),z=(0,a.useRef)(null),q=(0,a.useCallback)(async e=>{S(!0),C(null),y(null);try{if(0===r.length&&0===l.length){s([]),p([]),f([]);return}let[t,a]=await Promise.all([r.length>0?lT(r,e):Promise.resolve({tasks:[],unknownNames:[]}),l.length>0?lA(void 0,e).catch(e=>(ie(e)||y(e?.message??"Failed to load ETL monitors"),[])):Promise.resolve([])]);if(e?.aborted)return;s(t.tasks),p(t.unknownNames),f(a)}catch(e){ie(e)||C(e?.message??"Failed to load ETL tasks")}finally{e?.aborted||S(!1)}},[r,l]);(0,a.useEffect)(()=>{let e=new AbortController;return q(e.signal),()=>e.abort()},[q]);let j=(0,a.useMemo)(()=>(function(e,t){if(!t||0===t.length)return[];let r=new Set,a=[];for(let n of t){if("string"!=typeof n||!n.trim())continue;let t=function(e,t){if(!e||0===e.length||"string"!=typeof t||!t.trim())return;let r=t.trim();return e.find(e=>e?.uuid===r)??e.find(e=>e?.uuid?.toLowerCase()===r.toLowerCase())??e.find(e=>e?.code?.toLowerCase()===r.toLowerCase())}(e,n);if(t){if(r.has(t.uuid))continue;r.add(t.uuid)}a.push({ref:n.trim(),monitor:t})}return a})(E,l),[E,l]),H=(0,a.useMemo)(()=>j.filter(e=>!!e.monitor),[j]),J=(0,a.useCallback)(async(e,t)=>{O(t=>({...t,[e]:!0}));try{let r=await lM(e,t);k(t=>({...t,[e]:r})),x(t=>{let r={...t};return delete r[e],r})}catch(t){ie(t)||x(r=>({...r,[e]:t?.message??"Failed to load monitor data"}))}finally{t?.aborted||O(t=>({...t,[e]:!1}))}},[]),V=(0,a.useRef)(()=>{}),W=H.map(e=>e.monitor.uuid).sort().join(",");(0,a.useEffect)(()=>{if(0===H.length)return;let e={current:new AbortController},t=()=>{e.current?.abort(),e.current=new AbortController,H.forEach(t=>J(t.monitor.uuid,e.current.signal))};V.current=t,t();let r=setInterval(t,1e3*Math.max(5,Math.min(...H.map(e=>e.monitor.refreshInterval&&e.monitor.refreshInterval>0?e.monitor.refreshInterval:30))));return()=>{clearInterval(r),e.current?.abort(),V.current=()=>{}}},[W,J]);let K=(0,a.useMemo)(()=>{let e=new Map(i.map(e=>[e.name,e]));return r.map(t=>{let r=e.get(t);return{name:t,definition:r,unknown:!r}})},[r,i]),Q=(0,a.useMemo)(()=>H.map(e=>e.monitor.uuid),[H]),Y=(0,a.useMemo)(()=>Q.map(e=>I[e]?.rawResponse),[Q,I]),X=(0,a.useMemo)(()=>Q.length>0?lW(Y,l8):void 0,[Q,Y]),Z=(0,a.useMemo)(()=>Q.length>0?lW(Y,l7):void 0,[Q,Y]),ee=(0,a.useMemo)(()=>i.filter(e=>!0===e.started).length,[i]),et=(0,a.useMemo)(()=>0===Q.length?"unknown":Q.some(e=>D[e])?"down":Q.some(e=>I[e])?"healthy":"unknown",[Q,D,I]),er=(0,a.useMemo)(()=>{let e=Q.map(e=>I[e]?.timestamp).filter(e=>!!e).sort();return e.length>0?e[e.length-1]:null},[Q,I]),ea=(0,a.useMemo)(()=>{let e=null;for(let t of i){let r=lz(t.lastExecutionTime,t.repeatInterval);r&&(!e||r<e.date)&&(e={name:t.name,date:r})}return e},[i]),en=(0,a.useMemo)(()=>Array.from(new Set(i.map(e=>it(e.taskClass)))).sort(),[i]),el=(0,a.useMemo)(()=>K.filter(e=>{if("all"!==$){if(e.unknown)return!1;let t=e.definition?.started===!0;if("active"===$&&!t||"inactive"===$&&t)return!1}if(B!==l9&&!e.unknown&&it(e.definition?.taskClass)!==B)return!1;let t=L.trim().toLowerCase();return(!t||!!`${e.name} ${e.definition?.description??""}`.toLowerCase().includes(t))&&!0}),[K,$,B,L]),ei=K.filter(e=>!e.unknown&&e.definition?.started===!0).length,eo=K.filter(e=>!e.unknown&&e.definition?.started!==!0).length,ed=(0,a.useCallback)(async()=>{await q(new AbortController().signal),(0,h.showToast)({title:e("refreshSuccess","Refresh Successful"),kind:"success",description:e("tasksRefreshed","ETL tasks have been refreshed")})},[q,e]),ec=(0,a.useCallback)(async t=>{N(t.name);try{await lC(t.name),(0,h.showToast)({critical:!0,title:e("taskExecutionSuccess","Execution Successful"),kind:"success",description:e("taskExecutedSuccessfully","Task {{name}} executed successfully",{name:t.name})}),q(new AbortController().signal),V.current()}catch(t){(0,h.showNotification)({title:e("taskExecutionFailed","Task Execution Failed"),kind:"error",critical:!0,description:t?.message??"Task execution failed"})}finally{N(null)}},[q,e]),em=(0,a.useCallback)(()=>{z.current?.scrollIntoView({behavior:"smooth",block:"start"})},[]),eu=0===r.length,ep=l.length>0,e_=1===H.length?H[0].monitor.uuid:void 0;return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:e("etlTasks","ETL Tasks"),subtitle:e("etlTasksSubtitle","Manage, run, and monitor ETL tasks for data extraction, transformation, and loading.")}),n().createElement("div",{className:l4.page},T&&n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:T}),b&&n().createElement(o.jeF,{lowContrast:!0,kind:"warning",title:e("monitorDataUnavailable","Monitor data unavailable"),subtitle:b}),n().createElement("div",{className:l4.kpiGrid},n().createElement(ia,{icon:n().createElement(U._j,{size:22}),iconTone:"down"===et?"danger":"healthy"===et?"healthy":"neutral",label:e("etlService","ETL Service"),value:"healthy"===et?e("serviceHealthy","Healthy"):"down"===et?e("serviceDown","Down"):e("serviceUnknown","Unknown"),subtext:er?e("lastChecked","Last checked: {{value}}",{value:lF(er)}):e("noMonitorsHint","No monitors configured")}),n().createElement(ia,{icon:n().createElement(d.jG,{size:22}),iconTone:"info",label:e("runningTasks","Running tasks"),value:void 0===X?e("dash","—"):String(X),subtext:void 0===X?e("noRunningData","No monitor data"):0===X?e("noTasksRunning","No tasks running"):e("tasksInProgress","Tasks in progress")}),n().createElement(ia,{icon:n().createElement(c.EN,{size:22}),iconTone:"info",label:e("activeTasks","Active tasks"),value:String(ee),subtext:e("outOfTotal","Out of {{count}}",{count:i.length})}),n().createElement(ia,{icon:n().createElement(es.x,{size:22}),iconTone:Z?"danger":"neutral",label:e("failedToday","Failed today"),value:void 0===Z?e("dash","—"):String(Z),subtext:void 0===Z?e("noFailureData","No failure data"):0===Z?e("noFailedRuns","No failed runs"):e("failedRuns","Failed runs")}),n().createElement(ia,{icon:n().createElement(nb.gX,{size:22}),iconTone:"info",label:e("nextScheduledRun","Next scheduled run"),value:ea?lq(ea.date):e("dash","—"),subtext:ea?.name??e("notScheduled","Not scheduled")})),n().createElement("section",null,n().createElement("div",{className:l4.toolbar},n().createElement("div",null,n().createElement("h4",{className:l4.toolbarHeading},e("configuredTasks","Configured Tasks")),n().createElement("p",{className:l4.toolbarSubtext},eu?e("noConfigHint","No ETL tasks configured. Configure via frontend config: etlTasks.tasks"):e("tasksConfiguredForExecution","{{count}} task(s) configured for ETL execution.",{count:K.length}))),n().createElement("div",{className:l4.toolbarControls},n().createElement(o.vji,{size:"sm",placeholder:e("searchTasks","Search tasks..."),labelText:e("searchTasksLabel","Search tasks"),value:L,onChange:e=>M(e.target.value),className:l4.searchBox}),n().createElement(o.msM,{id:"etl-task-type-filter",size:"sm",type:"inline",titleText:e("filter","Filter"),label:B,items:[l9,...en],selectedItem:B,onChange:({selectedItem:e})=>F(e??l9)}),n().createElement(o.$nd,{kind:"primary",size:"sm",renderIcon:u.wM,onClick:ed,disabled:v||null!==w},v?e("loading","Loading..."):e("refresh","Refresh")))),n().createElement("div",{className:l4.filterTabs},n().createElement(il,{tab:"all",label:e("all","All"),count:K.length,activeTab:$,onSelect:P}),n().createElement(il,{tab:"active",label:e("active","Active"),count:ei,activeTab:$,onSelect:P}),n().createElement(il,{tab:"inactive",label:e("inactive","Inactive"),count:eo,activeTab:$,onSelect:P})),v&&0===i.length&&0===m.length?n().createElement(o.OuH,{description:e("loadingETLTasks","Loading ETL tasks...")}):eu?n().createElement(o.FAs,{className:l4.emptyState},n().createElement(g.wB,{size:48,className:l4.emptyStateIcon}),n().createElement("h3",null,e("noConfig","No Configuration")),n().createElement("p",null,e("noConfigDesc",'No ETL tasks have been configured. Configure the frontend config option "etlTasks.tasks" with an array of task names.'))):0===K.length?n().createElement(o.FAs,{className:l4.emptyState},n().createElement(g.wB,{size:48,className:l4.emptyStateIcon}),n().createElement("h3",null,e("noTasksFound","No Tasks Found")),n().createElement("p",null,e("noTasksFoundDesc","No ETL tasks found for the configured task names. Verify the task names match existing OpenMRS task definitions."))):0===el.length?n().createElement(o.FAs,{className:l4.emptyState},n().createElement(g.wB,{size:48,className:l4.emptyStateIcon}),n().createElement("h3",null,e("noMatchingTasks","No Matching Tasks")),n().createElement("p",null,e("noMatchingTasksDesc","No tasks match the current search, status, or type filters."))):n().createElement("div",{className:l4.tasksGrid},el.map(t=>{var r;let a,l;if(t.unknown)return n().createElement(o.FAs,{key:t.name,className:l4.taskCard},n().createElement("div",{className:l4.cardHead},n().createElement("span",{className:lv()(l4.cardIcon,l4.cardIconMuted)},n().createElement(_._C,{size:20})),n().createElement("div",{className:l4.cardHeadText},n().createElement("h4",{className:l4.cardTitle},t.name),n().createElement("p",{className:l4.cardDescription},e("unknownTaskDescription","Configured in etlTasks.tasks but no matching OpenMRS task definition was found."))),n().createElement("span",{className:lv()(l4.statusPill,l4.statusPillUnknown)},e("unknown","Unknown"))),n().createElement("div",{className:l4.metaRow},n().createElement(ir,{label:e("lastRun","Last run"),value:"—"}),n().createElement(ir,{label:e("duration","Duration"),value:"—"}),n().createElement(ir,{label:e("nextRun","Next run"),value:e("notScheduled","Not scheduled")})),n().createElement("div",{className:l4.cardActions},n().createElement(o.$nd,{kind:"primary",size:"sm",renderIcon:d.jG,disabled:!0},e("runNow","Run Now"))));let i=t.definition?.started===!0,s=lz(t.definition?.lastExecutionTime,t.definition?.repeatInterval),c=e_?(r=I[e_]?.rawResponse,a=new WeakSet,(l=(e,t,r)=>{if(null==e||r>3)return null;if(lj.test(t)){let r=function(e,t){if(null==t||""===t)return null;if("number"==typeof t&&isFinite(t))return(0,l$.a3)(lG(t,e));if("string"==typeof t){let r=t.trim();if(!r)return null;let a=Number(r);return isNaN(a)||""===r?r:(0,l$.a3)(lG(a,e))}return null}(t,e);if(null!==r)return r}if("object"!=typeof e||a.has(e))return null;for(let[t,n]of(a.add(e),Array.isArray(e)?e.map((e,t)=>[String(t),e]):Object.entries(e))){let e=l(n,t,r+1);if(null!==e)return e}return null})(r,"",0)??e("dash","—")):e("dash","—"),m=w===t.name;return n().createElement(o.FAs,{key:t.name,className:l4.taskCard},n().createElement("div",{className:l4.cardHead},n().createElement("span",{className:l4.cardIcon},n().createElement(_._C,{size:20})),n().createElement("div",{className:l4.cardHeadText},n().createElement("h4",{className:l4.cardTitle,title:t.name},t.name),n().createElement("p",{className:l4.cardDescription,title:t.definition?.description||t.definition?.taskClass},t.definition?.description||t.definition?.taskClass)),n().createElement("span",{className:lv()(l4.statusPill,i?l4.statusPillActive:l4.statusPillInactive)},i?e("active","Active"):e("inactive","Inactive"))),n().createElement("div",{className:l4.metaRow},n().createElement(ir,{label:e("lastRun","Last run"),value:lF(t.definition?.lastExecutionTime)}),n().createElement(ir,{label:e("duration","Duration"),value:c}),n().createElement(ir,{label:e("nextRun","Next run"),value:lq(s)})),n().createElement("div",{className:l4.cardActions},n().createElement(o.$nd,{kind:"primary",size:"sm",renderIcon:m?u.wM:d.jG,onClick:()=>ec(t),disabled:null!==w},m?e("executing","Executing..."):null!==w?e("pleaseWait","Please Wait"):e("runNow","Run Now")),ep&&n().createElement(o.$nd,{kind:"tertiary",size:"sm",onClick:em},e("viewDetails","View details")),ep&&0===H.length&&n().createElement("span",{className:l4.monitorMissing},e("monitorNotFound","Monitor not found"))),m&&n().createElement("div",{className:l4.executingStatus},n().createElement(o.OuH,{description:e("executingTask","Executing task...")})))}))),n().createElement("section",{ref:z},n().createElement("div",{className:l4.sectionHeading},n().createElement("h4",{className:l4.toolbarHeading},e("liveExecution","Live Execution")),n().createElement("p",{className:l4.toolbarSubtext},e("liveExecutionHint","Monitor progress and status for currently running ETL tasks."))),ep?n().createElement("div",{className:l4.monitorsGrid},j.map(t=>t.monitor?n().createElement(l3,{key:t.monitor.uuid,monitor:t.monitor,data:I[t.monitor.uuid],error:D[t.monitor.uuid]??null,loading:!!R[t.monitor.uuid],onRefresh:()=>J(t.monitor.uuid),title:t.monitor.name}):n().createElement(o.FAs,{key:t.ref,className:l4.monitorMissingCard},n().createElement("p",{className:l4.monitorMissingTitle},t.ref),n().createElement("p",{className:l4.monitorMissingHint},e("monitorRefNotFound","No monitor matches this code or UUID. Check etlTasks.progressMonitors or create the monitor under Admin → ETL Monitors."))))):n().createElement("div",{className:l4.liveEmpty},n().createElement(g.wB,{size:40,className:l4.emptyStateIcon}),n().createElement("p",{className:l4.liveEmptyTitle},e("noTaskRunning","No ETL task currently running")),n().createElement("p",{className:l4.liveEmptyHint},ea?n().createElement(n().Fragment,null,e("nextScheduledIs","The next scheduled task is")," ",n().createElement("strong",null,ea.name," — ",lq(ea.date)),"."):e("liveExecutionConfigureHint","Configure etlTasks.progressMonitors to see live progress from your ETL monitors here."))))))}function io(e){let[t,r]=n().useState([]),[a,l]=n().useState(!1),[i,o]=n().useState(null);return n().useEffect(()=>{if(!e){r([]),l(!1),o(null);return}let t=new AbortController;return l(!0),o(null),nO(t.signal).then(e=>{let t=(e??[]).map(e=>e?.name??e?.table??e?.tableName??e?.view??e?.value??"").map(e=>e.trim()).filter(Boolean),a=[],n=new Set;for(let e of t)n.has(e)||(n.add(e),a.push(e));r(a)}).catch(e=>{e?.name!=="AbortError"&&o(e?.message??"Failed to load tables")}).finally(()=>l(!1)),()=>t.abort()},[e]),{tables:t,loading:a,error:i}}function is(e,t=!0){let[r,a]=n().useState([]),[l,i]=n().useState(!1),[o,s]=n().useState(null);return n().useEffect(()=>{if(!t||!e){a([]),i(!1),s(null);return}let r=new AbortController;return i(!0),s(null),nx(e,r.signal).then(e=>a(Array.isArray(e)?e:[])).catch(e=>{e?.name!=="AbortError"&&s(e?.message??"Failed to load columns")}).finally(()=>i(!1)),()=>r.abort()},[e,t]),{columns:r,loading:l,error:o}}var id=r(4213);function ic(e){if(null==e)return"";let t="object"==typeof e?JSON.stringify(e):String(e);return/^[=+@]/.test(t)&&(t=`'${t}`),/[",\n\r]/.test(t)&&(t=`"${t.replace(/"/g,'""')}"`),t}let im={browserGrid:"-esm-report-builder__etl-browser-component__browserGrid___m2X6e",paneWrap:"-esm-report-builder__etl-browser-component__paneWrap___RjVhg",pane:"-esm-report-builder__etl-browser-component__pane___jTPem",detailPane:"-esm-report-builder__etl-browser-component__detailPane___Z061T",resizeHandle:"-esm-report-builder__etl-browser-component__resizeHandle___5bVeh",paneHeader:"-esm-report-builder__etl-browser-component__paneHeader___gpmKg",paneTitle:"-esm-report-builder__etl-browser-component__paneTitle___UxNrg",paneActions:"-esm-report-builder__etl-browser-component__paneActions___P3xr9",paneSearch:"-esm-report-builder__etl-browser-component__paneSearch___O-hHb",paneBody:"-esm-report-builder__etl-browser-component__paneBody___DewaH",iconAction:"-esm-report-builder__etl-browser-component__iconAction___o4p0Q",sourceList:"-esm-report-builder__etl-browser-component__sourceList___FhFvp",tableList:"-esm-report-builder__etl-browser-component__tableList___LD6CT",sourceRow:"-esm-report-builder__etl-browser-component__sourceRow___2ygFc",sourceRowSelected:"-esm-report-builder__etl-browser-component__sourceRowSelected___haNZm",sourceRowIcon:"-esm-report-builder__etl-browser-component__sourceRowIcon___Svjp4",sourceRowName:"-esm-report-builder__etl-browser-component__sourceRowName___CpQKN",treeEmpty:"-esm-report-builder__etl-browser-component__treeEmpty___Ph4NL",tableRow:"-esm-report-builder__etl-browser-component__tableRow___MT3No",tableRowSelected:"-esm-report-builder__etl-browser-component__tableRowSelected___8hDhw",tableRowIcon:"-esm-report-builder__etl-browser-component__tableRowIcon___AC6oj",tableRowText:"-esm-report-builder__etl-browser-component__tableRowText___Gv4ib",tableName:"-esm-report-builder__etl-browser-component__tableName___I7qu0",tableMeta:"-esm-report-builder__etl-browser-component__tableMeta___hhHd0",detailHeader:"-esm-report-builder__etl-browser-component__detailHeader___Am4IY",detailIcon:"-esm-report-builder__etl-browser-component__detailIcon___iaD0D",detailHeaderText:"-esm-report-builder__etl-browser-component__detailHeaderText___OBt1N",detailTitle:"-esm-report-builder__etl-browser-component__detailTitle___eoG+P",detailMeta:"-esm-report-builder__etl-browser-component__detailMeta___aZTJ8",detailActions:"-esm-report-builder__etl-browser-component__detailActions___MOlLQ",detailBody:"-esm-report-builder__etl-browser-component__detailBody___0saoj",toolbar:"-esm-report-builder__etl-browser-component__toolbar___ljMnG",toolbarSpacer:"-esm-report-builder__etl-browser-component__toolbarSpacer___s8Trg",rowSearch:"-esm-report-builder__etl-browser-component__rowSearch___83Hx3",truncateNote:"-esm-report-builder__etl-browser-component__truncateNote___nXM+f",gridScroll:"-esm-report-builder__etl-browser-component__gridScroll___VI+L+",emptyState:"-esm-report-builder__etl-browser-component__emptyState___srSg0",metadataFacts:"-esm-report-builder__etl-browser-component__metadataFacts___9JAuY",metadataHeading:"-esm-report-builder__etl-browser-component__metadataHeading___AcxwJ",metadataTypes:"-esm-report-builder__etl-browser-component__metadataTypes___mqq-4",infoStrip:"-esm-report-builder__etl-browser-component__infoStrip___bwFMl",infoCell:"-esm-report-builder__etl-browser-component__infoCell___7xF6k",infoLabel:"-esm-report-builder__etl-browser-component__infoLabel___g4Yz0",infoValue:"-esm-report-builder__etl-browser-component__infoValue___J5r4+"};function iu({groups:e,other:t,selectedSourceId:r,searchValue:a,loading:l,error:i,collapsed:s=!1,onToggleCollapsed:d,onSearchChange:m,onSelectSource:u}){let p=a.trim().toLowerCase(),g=[...e,...t.tables.length>0?[t]:[]],E=p?g.filter(e=>e.name.toLowerCase().includes(p)):g;return n().createElement("div",{className:im.pane},n().createElement("div",{className:im.paneHeader},!s&&n().createElement(n().Fragment,null,n().createElement("span",{className:im.paneTitle},"Data Sources"),n().createElement("span",{className:im.paneActions},d&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:_.ZK,iconDescription:"Collapse panel",onClick:d}))),s&&d&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:_.K3,iconDescription:"Expand panel",onClick:d})),!s&&n().createElement(n().Fragment,null,n().createElement("div",{className:im.paneSearch},n().createElement(o.vji,{size:"sm",placeholder:"Search sources...",labelText:"Search sources",value:a,onChange:e=>m(e.target.value)})),n().createElement("div",{className:im.paneBody},l&&n().createElement(o.OuH,{description:"Loading sources..."}),i&&n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:i}),!l&&!i&&0===E.length&&n().createElement("p",{className:im.treeEmpty},"No sources match"),E.length>0&&n().createElement("ul",{className:im.sourceList},E.map(e=>n().createElement("li",{key:e.id},n().createElement("button",{type:"button",className:lv()(im.sourceRow,r===e.id&&im.sourceRowSelected),onClick:()=>u(e.id)},n().createElement("span",{className:im.sourceRowIcon},n().createElement(c.EN,{size:16})),n().createElement("span",{className:im.sourceRowName},e.name),n().createElement(o.vwO,{size:"sm",type:"gray"},e.tables.length))))))))}function ip({title:e,tables:t,selectedTable:r,searchValue:a,loading:l,error:i,collapsed:s=!1,onToggleCollapsed:d,onResetFilter:c,onSearchChange:m,onSelectTable:u}){let p=a.trim().toLowerCase(),g=p?t.filter(e=>e.name.toLowerCase().includes(p)):t;return n().createElement("div",{className:im.pane},n().createElement("div",{className:im.paneHeader},!s&&n().createElement(n().Fragment,null,n().createElement("span",{className:im.paneTitle},e),n().createElement("span",{className:im.paneActions},c&&n().createElement("button",{type:"button",className:im.iconAction,title:"Show all sources",onClick:c},"All sources"),n().createElement(o.vwO,{size:"sm",type:"cool-gray"},t.length),d&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:_.ZK,iconDescription:"Collapse panel",onClick:d}))),s&&d&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:_.K3,iconDescription:"Expand panel",onClick:d})),!s&&n().createElement(n().Fragment,null,n().createElement("div",{className:im.paneSearch},n().createElement(o.vji,{size:"sm",placeholder:"Search tables...",labelText:"Search tables",value:a,onChange:e=>m(e.target.value)})),n().createElement("div",{className:im.paneBody},l&&n().createElement(o.OuH,{description:"Loading tables..."}),i&&n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:i}),!l&&!i&&0===g.length&&n().createElement("p",{className:im.treeEmpty},"No tables match"),g.length>0&&n().createElement("ul",{className:im.tableList},g.map(e=>{let t,a;return n().createElement("li",{key:e.name},n().createElement("button",{type:"button",className:lv()(im.tableRow,r===e.name&&im.tableRowSelected),onClick:()=>u(e.name)},n().createElement("span",{className:im.tableRowIcon},n().createElement(f.vx,{size:18})),n().createElement("span",{className:im.tableRowText},n().createElement("span",{className:im.tableName},e.name),n().createElement("span",{className:im.tableMeta},(t="number"==typeof e.rows?`${e.rows.toLocaleString()} rows`:"rows unknown",a=e.updateTime?(0,l$.fw)(e.updateTime,{pastOnly:!0}):"—",`${t} • ${a}`)))))})))))}let i_=[{key:"name",header:"Column"},{key:"type",header:"Data type"}];function ig({columns:e,loading:t,error:r}){if(t)return n().createElement(o.OuH,{description:"Loading columns..."});if(r)return n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:r});if(0===e.length)return n().createElement(o.FAs,{className:im.emptyState},n().createElement("h5",null,"No columns returned"),n().createElement("p",null,"The backend returned no column metadata for this table."));let a=e.map(e=>({id:e.name,name:e.name,type:e.type??"—"}));return n().createElement("div",null,n().createElement("div",{className:im.toolbar},n().createElement(o.vwO,{size:"sm",type:"cool-gray"},e.length," columns")),n().createElement(o.bQt,{rows:a,headers:i_,size:"sm"},({rows:e,headers:t,getHeaderProps:r,getRowProps:a,getTableProps:l})=>n().createElement(o.K3K,{className:im.gridScroll},n().createElement(o.XIK,l(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,t.map(e=>n().createElement(o.A0N,{key:e.key,...r({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id,...a({row:e})},e.cells.map(e=>n().createElement(o.nA6,{key:e.id},e.value)))))))))}function iE({table:e,source:t,columns:r}){var a,l;let i=function(e){let t=new Map;for(let r of e??[]){let e=r?.type?.trim()||"unknown";t.set(e,(t.get(e)??0)+1)}let r=Array.from(t.entries()).map(([e,t])=>({type:e,count:t})).sort((e,t)=>t.count-e.count||e.type.localeCompare(t.type));return{total:e?.length??0,byType:r}}(r),s=[{label:"Source",value:t?.name??"—"},{label:"Schema",value:t?.schemaName??"—"},{label:"Type",value:"VIEW"===e.tableType?"View":"Table"},{label:"Rows",value:"number"==typeof(a=e.rows)?`${a.toLocaleString()} (approximate)`:"—"},{label:"Last refreshed",value:(l=e.updateTime)?(0,l$.fw)(l,{pastOnly:!0}):"—"},{label:"Columns",value:r.length?String(r.length):"—"}];return n().createElement("div",null,n().createElement("div",{className:im.metadataFacts},s.map(e=>n().createElement("div",{key:e.label,className:im.infoCell},n().createElement("span",{className:im.infoLabel},e.label),n().createElement("span",{className:im.infoValue},e.value)))),n().createElement("h6",{className:im.metadataHeading},"Column types"),0===i.byType.length?n().createElement("p",{className:im.truncateNote},"Column metadata not loaded yet."):n().createElement("div",{className:im.metadataTypes},i.byType.map(e=>n().createElement(o.vwO,{key:e.type,size:"sm",type:"cool-gray"},e.type,": ",e.count))))}let ib=[10,25,50,100];function iy({table:e,data:t,loading:r,error:l,onRefresh:i}){let[s,d]=(0,a.useState)(""),[c,m]=(0,a.useState)(1),[p,_]=(0,a.useState)(10);(0,a.useEffect)(()=>{d(""),m(1)},[e,t]);let g=(0,a.useMemo)(()=>{if(!t)return[];let e=s.trim().toLowerCase();return e?t.rows.filter(t=>t.some(t=>String(t??"").toLowerCase().includes(e))):t.rows},[t,s]),E=Math.min(c,Math.max(1,Math.ceil(g.length/p))),f=(E-1)*p,b=g.slice(f,f+p),y=!!(t&&(t.truncated||t.rows.length>=1e3)),h=(t?.columns??[]).map(e=>({key:e,header:e})),v=b.map((e,r)=>{let a={id:String(f+r)};return t?.columns.forEach((t,r)=>{let n=e[r];a[t]=null==n?"":String(n)}),a});return r?n().createElement(o.OuH,{description:`Loading preview of ${e}...`}):l?n().createElement("div",null,n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Preview failed",subtitle:l}),n().createElement("div",{className:im.toolbar},n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:u.wM,onClick:i},"Retry")),n().createElement("p",{className:im.truncateNote},'Preview needs the "sql.execute" privilege and a valid table name.')):t?n().createElement("div",null,n().createElement("div",{className:im.toolbar},n().createElement(o.vji,{size:"sm",className:im.rowSearch,placeholder:"Search rows...",labelText:"Search rows",value:s,onChange:e=>d(e.target.value)}),n().createElement(o.vwO,{size:"sm",type:"cool-gray"},t.rowCount.toLocaleString()," rows in preview"),n().createElement("span",{className:im.toolbarSpacer}),n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:u.wM,onClick:i},"Refresh"),n().createElement(o.$nd,{kind:"tertiary",size:"sm",onClick:()=>{var r;let a,n;return r=`${e}-preview`,a=new Blob([function(e,t){let r=[e.map(ic).join(",")];for(let e of t??[])r.push(e.map(ic).join(","));return r.join("\n")}(t.columns,t.rows)],{type:"text/csv;charset=utf-8"}),n=`${r}_${new Date().toISOString().replace(/:/g,"-")}.csv`,void(0,id.saveAs)(a,n)},disabled:0===t.rows.length},"Export CSV")),y&&n().createElement("p",{className:im.truncateNote},"Preview shows the first ",1e3.toLocaleString()," rows — use the search or export to work with more."),0===t.rows.length?n().createElement(o.FAs,{className:im.emptyState},n().createElement("h5",null,"This table has no rows"),n().createElement("p",null,"The table may be empty, or it is a view that currently returns no rows.")):n().createElement(n().Fragment,null,n().createElement(o.bQt,{rows:v,headers:h,size:"sm",isSortable:!0},({rows:e,headers:t,getHeaderProps:r,getRowProps:a,getTableProps:l})=>n().createElement(o.K3K,{className:im.gridScroll},n().createElement(o.XIK,{...l(),useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,t.map(e=>n().createElement(o.A0N,{key:e.key,...r({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id,...a({row:e})},e.cells.map(e=>n().createElement(o.nA6,{key:e.id},e.value)))))))),n().createElement(o.dKS,{page:E,pageSize:p,pageSizes:ib,totalItems:g.length,onChange:({page:e,pageSize:t})=>{_(t),m(e)}}))):null}function ih(){return n().createElement("div",{className:im.emptyState},n().createElement(tw.$$,{size:28}),n().createElement("h5",null,"Relationships aren't available yet"),n().createElement("p",null,"The report builder API doesn't expose foreign-key metadata for ETL tables. Column-level hints (e.g. columns ending in ",n().createElement("code",null,"_id"),") may still be visible in the Columns tab."))}function iv({source:e,table:t}){if(!t)return null;let r=[{label:"Source",value:e?.name??"—"},{label:"Schema",value:e?.schemaName??"—"},{label:"Table",value:t.name},{label:"Type",value:"VIEW"===t.tableType?"View":"Table"},{label:"Rows",value:"number"==typeof t.rows?n().createElement("strong",null,t.rows.toLocaleString()):"—"},{label:"Last refreshed",value:t.updateTime?(0,l$.fw)(t.updateTime,{pastOnly:!0}):"—"}];return n().createElement("div",{className:im.infoStrip},r.map(e=>n().createElement("div",{key:e.label,className:im.infoCell},n().createElement("span",{className:im.infoLabel},e.label),n().createElement("span",{className:im.infoValue},e.value))))}let iS=["data","columns","metadata","relationships"];function iT({table:e,source:t,columns:r,columnsLoading:a,columnsError:l,activeTab:i,onTabChange:s}){let d=function(e){let[t,r]=n().useState({status:"idle"}),[a,l]=n().useState(0);return n().useEffect(()=>{if(!e)return void r({status:"idle"});r({status:"loading"});let t=new AbortController;return rU({sql:`SELECT * FROM ${function(e){let t=e?.trim();if(!t)throw Error("Table name is required");return"`"+t.replace(/`/g,"``")+"`"}(e)}`,maxRows:1e3},t.signal).then(e=>{t.signal.aborted||r({status:"ready",data:e})}).catch(e=>{e?.name!=="AbortError"&&r({status:"error",error:e?.message??"Failed to load preview"})}),()=>t.abort()},[e,a]),{...t,refresh:()=>l(e=>e+1)}}(e.name),c=[`Source: ${t?.name??"—"}`,`Schema: ${t?.schemaName??"—"}`,`Type: ${"VIEW"===e.tableType?"View":"Table"}`,`Rows: ${"number"==typeof e.rows?e.rows.toLocaleString():"—"}`,`Last refreshed: ${e.updateTime?(0,l$.fw)(e.updateTime,{pastOnly:!0}):"—"}`];return n().createElement("div",{className:`${im.pane} ${im.detailPane}`},n().createElement("div",{className:im.detailHeader},n().createElement("span",{className:im.detailIcon},n().createElement(f.vx,{size:22})),n().createElement("div",{className:im.detailHeaderText},n().createElement("h4",{className:im.detailTitle,title:e.name},"Table: ",e.name),n().createElement("p",{className:im.detailMeta},c.join(" "))),n().createElement("div",{className:im.detailActions},n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:u.wM,onClick:d.refresh},"Refresh"))),n().createElement("div",{className:im.detailBody},n().createElement(o.tUM,{selectedIndex:iS.indexOf(i),onChange:({selectedIndex:e})=>s(iS[e]??"data")},n().createElement(o.wbY,{"aria-label":"Table detail tabs"},n().createElement(o.ozo,null,"Data"),n().createElement(o.ozo,null,"Columns"),n().createElement(o.ozo,null,"Metadata"),n().createElement(o.ozo,null,"Relationships")),n().createElement(o.T2N,null,n().createElement(o.KpK,null,n().createElement(iy,{table:e.name,data:d.data,loading:"loading"===d.status,error:d.error,onRefresh:d.refresh})),n().createElement(o.KpK,null,n().createElement(ig,{columns:r,loading:a,error:l})),n().createElement(o.KpK,null,n().createElement(iE,{table:e,source:t,columns:r})),n().createElement(o.KpK,null,n().createElement(ih,null)))),n().createElement(iv,{source:t,table:e})))}function iC(){return n().createElement("div",{className:`${im.pane} ${im.detailPane}`},n().createElement(o.FAs,{className:im.emptyState},n().createElement(f.vx,{size:32}),n().createElement("h5",null,"No table selected"),n().createElement("p",null,"Select a table from the list to explore its columns and preview its data.")))}function iw(){let{t:e}=(0,A.useTranslation)(),[t,r]=(0,a.useState)([]),[i,s]=(0,a.useState)(!0),[d,c]=(0,a.useState)(null),{tables:m,loading:u,error:p}=function(e){let[t,r]=n().useState([]),[a,l]=n().useState(!1),[i,o]=n().useState(null);return n().useEffect(()=>{if(!e){r([]),l(!1),o(null);return}let t=new AbortController;return l(!0),o(null),nO(t.signal).then(e=>r(e??[])).catch(e=>{e?.name!=="AbortError"&&o(e?.message??"Failed to load tables")}).finally(()=>l(!1)),()=>t.abort()},[e]),{tables:t,loading:a,error:i}}(!0),[_,g]=(0,a.useState)(""),[E,f]=(0,a.useState)(""),[b,y]=(0,a.useState)("all"),[h,v]=(0,a.useState)(null),[S,T]=(0,a.useState)("data"),[C,w]=(0,l.ok)(),[N,I]=(0,a.useState)(!1),[k,R]=(0,a.useState)(260),[O,D]=(0,a.useState)(!1),[x,L]=(0,a.useState)(300),[M,$]=(0,a.useState)(!1),[P,U]=(0,a.useState)(!1);(0,a.useEffect)(()=>{let e=e=>{let t=document.querySelector(`.${im.browserGrid}`)?.getBoundingClientRect();if(t&&(M&&R(Math.max(200,Math.min(500,e.clientX-t.left))),P)){let r=(N?48:k)+t.left;L(Math.max(240,Math.min(600,e.clientX-r)))}},t=()=>{$(!1),U(!1),document.body.style.cursor="default",document.body.style.userSelect=""};if(M||P)return document.addEventListener("mousemove",e),document.addEventListener("mouseup",t),document.body.style.cursor="col-resize",document.body.style.userSelect="none",()=>{document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",t),document.body.style.cursor="default",document.body.style.userSelect=""}},[M,P,k,N]);let B=(0,a.useCallback)(e=>{e.preventDefault(),$(!0)},[]),F=(0,a.useCallback)(e=>{e.preventDefault(),U(!0)},[]);(0,a.useEffect)(()=>{let e=new AbortController;return s(!0),c(null),lp(void 0,e.signal).then(t=>{e.signal.aborted||r(t)}).catch(e=>{e?.name!=="AbortError"&&c(e?.message??"Failed to load ETL sources")}).finally(()=>{e.signal.aborted||s(!1)}),()=>e.abort()},[]);let{groups:z,other:q}=(0,a.useMemo)(()=>(function(e,t){let r=t.filter(e=>e?.active!==!1&&e?.voided!==!0),a=r.map(e=>({id:e.uuid,name:e.name,sourceUuid:e.uuid,schemaName:e.schemaName,tables:[]})),n={id:"other",name:"Other",tables:[]};for(let t of e){let e=a.find(e=>{let a=r.find(t=>t.uuid===e.id);return(a?.tablePatterns??"").split(",").map(e=>e.trim()).filter(Boolean).some(e=>(function(e,t){let r=t?.trim();if(!r||!e)return!1;let a=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/%/g,"[\\s\\S]*").replace(/_/g,".");return RegExp(`^${a}`,"i").test(e)})(t.name,e))});e?e.tables.push(t):n.tables.push(t)}return{groups:a,other:n}})(m,t),[m,t]),j=(0,a.useMemo)(()=>[...z,...q.tables.length>0?[q]:[]],[z,q]),H=(0,a.useMemo)(()=>new Map(m.map(e=>[e.name,e])),[m]),J=(0,a.useMemo)(()=>{let e=new Map;for(let t of j)for(let r of t.tables)e.set(r.name,t);return e},[j]);(0,a.useEffect)(()=>{if(u||0===m.length)return;let e=C.get("table");if(!e||!H.has(e))return;v(e);let t=J.get(e);t&&y(t.id);let r=C.get("source");r&&y(r)},[u,m]);let V=(0,a.useCallback)((e,t)=>{w(r=>{let a=new URLSearchParams(r);return e?a.set("table",e):a.delete("table"),t&&"all"!==t?a.set("source",t):a.delete("source"),a},{replace:!0})},[w]),W=(0,a.useCallback)(e=>{y(e),V(h,e)},[h,V]),K=(0,a.useCallback)(e=>{v(e),T("data");let t=J.get(e)?.id??b;y(t),V(e,t)},[J,b,V]),Q=(0,a.useCallback)(()=>{y("all"),V(h,"all")},[h,V]),Y=h?H.get(h):void 0,X=Y?J.get(Y.name):void 0,Z=z.find(e=>e.id===X?.id),ee=(0,a.useMemo)(()=>"all"===b?m:"other"===b?q.tables:z.find(e=>e.id===b)?.tables??m,[b,m,z,q]),et="all"===b?e("etlBrowserAllTables","All tables"):e("etlBrowserTablesIn","Tables in {{name}}",{name:j.find(e=>e.id===b)?.name??""}),er=is(h??void 0,!!h);return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:e("etlBrowser","ETL Data Browser"),subtitle:e("etlBrowserSubtitle","Explore ETL schemas, tables, columns, and sample records.")}),n().createElement("div",{className:im.browserGrid},n().createElement("aside",{className:im.paneWrap,style:{width:N?48:k}},n().createElement(iu,{groups:z,other:q,selectedSourceId:b,searchValue:_,loading:i,error:d,collapsed:N,onToggleCollapsed:()=>I(e=>!e),onSearchChange:g,onSelectSource:W})),n().createElement("div",{className:im.resizeHandle,role:"separator","aria-orientation":"vertical",onMouseDown:B}),n().createElement("aside",{className:im.paneWrap,style:{width:O?48:x}},n().createElement(ip,{title:et,tables:ee,selectedTable:h,searchValue:E,loading:u,error:p,collapsed:O,onToggleCollapsed:()=>D(e=>!e),onResetFilter:"all"!==b?Q:void 0,onSearchChange:f,onSelectTable:e=>K(e)})),n().createElement("div",{className:lv()(im.resizeHandle,im.resizeHandleBeforeDetail),role:"separator","aria-orientation":"vertical",onMouseDown:F}),Y?n().createElement(iT,{table:Y,source:Z,columns:er.columns,columnsLoading:er.loading,columnsError:er.error,activeTab:S,onTabChange:T}):n().createElement(iC,null)))}function iN(e="create"){return{mode:e,currentStep:"general",general:{name:"",code:"",description:"",category:"",refreshInterval:30,timeout:10,active:!0},endpoint:{url:"",method:"GET",auth:{type:"NONE"}},fields:[],componentConfig:{labelsAbove:!1,selectable:!1,maxRows:50},density:"compact",validation:{isValid:!1,errors:[],warnings:[],validatedSteps:new Set},stepValidation:{general:{},"data-source":{},design:{},fields:{},preview:{}},isDirty:!1,isSaving:!1}}let iI=["general","data-source","design","fields","preview"];function ik(e){let t=iI.indexOf(e);return -1===t||t===iI.length-1?null:iI[t+1]}function iA(e){let t=iI.indexOf(e);return t<=0?null:iI[t-1]}function iR(e,t){let{validation:r,stepValidation:a}=t;switch(e){case"general":return!0===a.general.nameValid&&!0===a.general.codeValid&&!1!==a.general.codeUnique&&!0===a.general.refreshIntervalValid&&!0===a.general.timeoutValid;case"data-source":return!0===a["data-source"].endpointTested&&!0===a["data-source"].endpointValid;case"design":return!0===a.design.componentSelected;case"fields":return t.fields.length>0&&!0===a.fields.requiredFieldsMapped&&!1!==a.fields.jsonPathsValid;case"preview":return!0===r.isValid;default:return!1}}var iO=r(8159);let iD=(0,a.createContext)(null);function ix(e,t){switch(t.type){case"SET_GENERAL_CONFIG":return{...e,general:{...e.general,...t.payload},isDirty:!0};case"SET_ENDPOINT_CONFIG":return{...e,endpoint:{...e.endpoint,...t.payload},isDirty:!0};case"SET_TEST_RESULT":return{...e,testResult:t.payload,isDirty:!0};case"SET_DETECTED_SCHEMA":return{...e,detectedSchema:t.payload,isDirty:!0};case"SET_COMPONENT_TYPE":return{...e,componentType:t.payload,isDirty:!0};case"SET_FIELDS":return{...e,fields:t.payload,isDirty:!0};case"ADD_FIELD":return{...e,fields:[...e.fields,t.payload],isDirty:!0};case"UPDATE_FIELD":return{...e,fields:e.fields.map(e=>e.key===t.payload.key?{...e,...t.payload.updates}:e),isDirty:!0};case"REMOVE_FIELD":return{...e,fields:e.fields.filter(e=>e.key!==t.payload),isDirty:!0};case"SET_COMPONENT_CONFIG":return{...e,componentConfig:{...e.componentConfig,...t.payload},isDirty:!0};case"SET_LAYOUT":return{...e,layout:t.payload,isDirty:!0};case"SET_DENSITY":return{...e,density:t.payload,isDirty:!0};case"SET_EMPTY_STATE":return{...e,emptyState:t.payload,isDirty:!0};case"SET_CURRENT_STEP":return{...e,currentStep:t.payload};case"VALIDATE_STEP":return function(e,t){let r=new Set(e.validation.validatedSteps);r.add(t);let a={...e.stepValidation};switch(t){case"general":{let t=(0,iO.zK)(e.general);a.general={nameValid:0===t.errors.filter(e=>e.includes("Name")).length,codeValid:0===t.errors.filter(e=>e.includes("Code")).length,codeUnique:!0,categoryValid:!0,refreshIntervalValid:0===t.errors.filter(e=>e.includes("Refresh")).length,timeoutValid:0===t.errors.filter(e=>e.includes("Timeout")).length};break}case"data-source":{let t=(0,iO.Km)(e.endpoint,e.testResult,"edit"===e.mode);a["data-source"]={endpointTested:!!e.testResult,endpointValid:t.valid,urlValid:0===t.errors.filter(e=>e.includes("URL")).length,authValid:!0};break}case"design":{let t=(0,iO.X0)(e.componentType);a.design={componentSelected:t.valid,componentValid:t.valid};break}case"fields":{let t=(0,iO.Kk)(e.fields,e.componentType,e.testResult?.data,e.detectedSchema?.arrayPath);a.fields={requiredFieldsMapped:0===t.errors.filter(e=>e.includes("required")).length,primaryFieldSet:e.fields.some(e=>e.primary),jsonPathsValid:0===t.errors.filter(e=>e.includes("path")).length};break}case"preview":{let t=(0,iO.lp)(e);a.preview={configValid:t.valid,previewRenderable:t.valid}}}return{...e,validation:{...e.validation,validatedSteps:r,isValid:5===r.size},stepValidation:a}}(e,t.payload);case"SET_SAVING":return{...e,isSaving:t.payload};case"RESET":return iN(e.mode);case"LOAD_MONITOR":return function(e){let t,r=iN("edit");r.initialMonitor=e;let a={},n={},l=!1;try{e.configJson&&(a=JSON.parse(e.configJson))}catch(e){console.error("Failed to parse monitor configJson:",e),l=!0,r.parseError="configJson"}try{e.displayConfigJson&&(n=JSON.parse(e.displayConfigJson))}catch(e){console.error("Failed to parse monitor displayConfigJson:",e),l=!0,r.parseError=r.parseError?`${r.parseError}, displayConfigJson`:"displayConfigJson"}l&&console.warn("Monitor configuration parsing failed, builder may not function correctly:",e.code);let i=a.apiEndpoint||{};if(i.auth&&"object"==typeof i.auth)t={type:i.auth.type||i.authType||"NONE",useSession:i.auth.useSession||!0===i.useSession,username:i.auth.username||"",password:i.auth.password||"",headerName:i.auth.headerName||"",apiKey:i.auth.apiKey||"",token:i.auth.token||""};else{let e=i.authType||i.auth?.type||"NONE",r=i.authConfig||i.authConfig||{};t={type:e,useSession:"OPENMRS"===e||"true"===r.useSession||!0===r.useSession,username:r.username||"",password:r.password||"",headerName:r.headerName||"X-API-Key",apiKey:r.apiKey||"",token:r.token||""}}return r.endpoint={url:i.url||"",method:i.method||"GET",auth:t},r.general={name:e.name||"",code:e.code||"",description:e.description||"",category:e.category||"",refreshInterval:e.refreshInterval||30,timeout:e.timeout||10,active:!1!==e.active},2===n.schemaVersion?(r.componentType=n.component,r.fields=n.fields?n.fields.map(e=>({...e,statusMappings:e.statusMap?Object.entries(e.statusMap).map(([e,t])=>({rawValue:e,label:t.label,tone:t.tone})):e.statusMappings||[]})):[],r.componentConfig=n.componentConfig?{...n.componentConfig}:{},r.layout=n.layout?{...n.layout}:void 0,r.emptyState=n.emptyState?{...n.emptyState}:void 0,r.density=n.presentation?.density||"compact"):(n.columns&&Array.isArray(n.columns)&&n.columns.length>0?(console.log("Converting V1 monitor format to V2 for editing:",e.code),r.componentType="TABLE",r.fields=n.columns.map(iL)):(console.warn("No valid display configuration found for monitor:",e.code),r.componentType="SUMMARY_CARD",r.fields=[]),r.componentConfig={}),r}(t.payload);default:return e}}function iL(e){let t={key:e.key,label:e.header||e.key,path:e.jsonPath||`$.${e.key}`,type:"TEXT",primary:!1,hidden:!1,order:0};switch(e.columnType){case"STATUS_BADGE":t.type="STATUS",e.colorMap&&"object"==typeof e.colorMap&&(t.statusMappings=Object.entries(e.colorMap).map(([e,t])=>{var r;return{rawValue:e,label:e,tone:(r=String(t),({green:"success",red:"critical",yellow:"warning",blue:"info",gray:"neutral",grey:"neutral",success:"success",error:"critical",warning:"warning",info:"info",neutral:"neutral"})[r?.toLowerCase()||""]||"neutral")}}));break;case"TIMESTAMP":t.type="TIMESTAMP";break;case"NUMBER":t.type="NUMBER";break;case"PERCENTAGE":t.type="PERCENTAGE";break;case"DURATION":t.type="DURATION";break;case"BOOLEAN":t.type="BOOLEAN";break;default:t.type="TEXT"}return void 0!==e.defaultValue&&(t.defaultValue=e.defaultValue),t}function iM({children:e,mode:t,monitorId:l}){let[i,o]=(0,a.useReducer)(ix,iN("create")),[s,d]=n().useState(null),[c,m]=n().useState(!1);n().useEffect(()=>{let e=!0,r=new AbortController;return"edit"===t&&l&&(m(!0),lO(l,r.signal).then(t=>{e&&(d(t),o({type:"LOAD_MONITOR",payload:t}),m(!1))}).catch(t=>{e&&"AbortError"!==t.name&&(console.error("Failed to load monitor:",t),m(!1))})),()=>{e=!1,r.abort()}},[t,l]);let u=(0,a.useCallback)(e=>{e.general&&o({type:"SET_GENERAL_CONFIG",payload:e.general}),e.endpoint&&o({type:"SET_ENDPOINT_CONFIG",payload:e.endpoint}),void 0!==e.testResult&&o({type:"SET_TEST_RESULT",payload:e.testResult}),void 0!==e.detectedSchema&&o({type:"SET_DETECTED_SCHEMA",payload:e.detectedSchema}),void 0!==e.componentType&&o({type:"SET_COMPONENT_TYPE",payload:e.componentType}),void 0!==e.fields&&o({type:"SET_FIELDS",payload:e.fields}),void 0!==e.componentConfig&&o({type:"SET_COMPONENT_CONFIG",payload:e.componentConfig}),void 0!==e.layout&&o({type:"SET_LAYOUT",payload:e.layout}),void 0!==e.density&&o({type:"SET_DENSITY",payload:e.density}),void 0!==e.emptyState&&o({type:"SET_EMPTY_STATE",payload:e.emptyState}),void 0!==e.currentStep&&o({type:"SET_CURRENT_STEP",payload:e.currentStep})},[]),p=(0,a.useCallback)(e=>iR(e,i),[i]),_=(0,a.useCallback)(e=>iR(e,i),[i]),g=(0,a.useCallback)(()=>(0,iO.fz)(i),[i]),E=(0,a.useCallback)(async()=>{o({type:"SET_SAVING",payload:!0});try{let e,{stateToSavePayload:a}=await Promise.resolve().then(r.bind(r,8159)),n=a(i);return e="edit"===t&&s?.uuid?await lx(s.uuid,n):await lD(n),o({type:"SET_SAVING",payload:!1}),e}catch(e){throw o({type:"SET_SAVING",payload:!1}),e}},[i,t,s]),f=(0,a.useCallback)(()=>{o({type:"RESET"})},[]),b=n().useMemo(()=>({state:i,dispatch:o,updateState:u,validateStep:p,canAdvance:_,generateConfig:g,saveMonitor:E,cancel:f}),[i,u,p,_,g,E,f]);return c?n().createElement(iD.Provider,{value:b},n().createElement("div",{style:{padding:"2rem",textAlign:"center"}},n().createElement("p",null,"Loading monitor configuration..."))):(i.parseError&&"edit"===t&&console.warn("Monitor configuration had parsing errors:",i.parseError),n().createElement(iD.Provider,{value:b},e))}function i$(){let e=(0,a.useContext)(iD);if(!e)throw Error("useBuilderContext must be used within BuilderProvider");return e}function iP(){let{updateState:e}=i$();return e}function iU(){let{state:e,dispatch:t,canAdvance:r}=i$(),l=(0,a.useCallback)(a=>{let n=iI.indexOf(e.currentStep),l=iI.indexOf(a);if(1>=Math.abs(l-n))t({type:"SET_CURRENT_STEP",payload:a});else{let e=!0;for(let t=Math.min(n,l);t<Math.max(n,l);t++)if(!r(iI[t])){e=!1;break}e&&t({type:"SET_CURRENT_STEP",payload:a})}},[e.currentStep,r,t]),i=(0,a.useCallback)(()=>{let t=ik(e.currentStep);t&&l(t)},[e.currentStep,l]),o=(0,a.useCallback)(()=>{let t=iA(e.currentStep);t&&l(t)},[e.currentStep,l]);return n().useMemo(()=>({currentStep:e.currentStep,goToStep:l,goToNextStep:i,goToPreviousStep:o,canGoNext:!!ik(e.currentStep),canGoPrevious:!!iA(e.currentStep)}),[e.currentStep,l,i,o])}let iB={"etl-monitor-builder-page":"-esm-report-builder__etl-monitor-builder-page__etl-monitor-builder-page___Kli-X","builder-header":"-esm-report-builder__etl-monitor-builder-page__builder-header___vPlRP","builder-header__breadcrumb":"-esm-report-builder__etl-monitor-builder-page__builder-header__breadcrumb___rs3vf","builder-header__category":"-esm-report-builder__etl-monitor-builder-page__builder-header__category___vFQO2","builder-header__separator":"-esm-report-builder__etl-monitor-builder-page__builder-header__separator___AgfXN","builder-header__name":"-esm-report-builder__etl-monitor-builder-page__builder-header__name___wV8Yi","builder-header__title":"-esm-report-builder__etl-monitor-builder-page__builder-header__title___RJ4yj","builder-header__actions":"-esm-report-builder__etl-monitor-builder-page__builder-header__actions___ZFC7A","builder-content":"-esm-report-builder__etl-monitor-builder-page__builder-content___qweI7","builder-grid":"-esm-report-builder__etl-monitor-builder-page__builder-grid___5vUmZ","builder-sidebar":"-esm-report-builder__etl-monitor-builder-page__builder-sidebar___rkuoX","builder-steps-nav":"-esm-report-builder__etl-monitor-builder-page__builder-steps-nav___b24Da","builder-steps-list":"-esm-report-builder__etl-monitor-builder-page__builder-steps-list___sBIY6","builder-step-item":"-esm-report-builder__etl-monitor-builder-page__builder-step-item___YcqOI","builder-step-item--completed":"-esm-report-builder__etl-monitor-builder-page__builder-step-item--completed___vMtDh","builder-step-button":"-esm-report-builder__etl-monitor-builder-page__builder-step-button___vJ1cm","builder-step-number":"-esm-report-builder__etl-monitor-builder-page__builder-step-number___y6htw","builder-step-item--current":"-esm-report-builder__etl-monitor-builder-page__builder-step-item--current___YYTAr","builder-step-label":"-esm-report-builder__etl-monitor-builder-page__builder-step-label___nhFir","builder-step-sublabel":"-esm-report-builder__etl-monitor-builder-page__builder-step-sublabel___ozQ7V","builder-step-item--upcoming":"-esm-report-builder__etl-monitor-builder-page__builder-step-item--upcoming___KQDmu","builder-step-content":"-esm-report-builder__etl-monitor-builder-page__builder-step-content___etYhB","builder-help-section":"-esm-report-builder__etl-monitor-builder-page__builder-help-section___knpIC","builder-help-icon":"-esm-report-builder__etl-monitor-builder-page__builder-help-icon___rThNo","builder-help-content":"-esm-report-builder__etl-monitor-builder-page__builder-help-content___lXEwK","builder-help-label":"-esm-report-builder__etl-monitor-builder-page__builder-help-label___TFWGe","builder-help-link":"-esm-report-builder__etl-monitor-builder-page__builder-help-link___mV22v","builder-main":"-esm-report-builder__etl-monitor-builder-page__builder-main___+i8dk","builder-preview":"-esm-report-builder__etl-monitor-builder-page__builder-preview___-q45n","builder-preview-panel":"-esm-report-builder__etl-monitor-builder-page__builder-preview-panel___tp8Mi","builder-preview-header":"-esm-report-builder__etl-monitor-builder-page__builder-preview-header___hgCeO","builder-preview-description":"-esm-report-builder__etl-monitor-builder-page__builder-preview-description___fr-qO","builder-preview-content":"-esm-report-builder__etl-monitor-builder-page__builder-preview-content___OnP3u","monitor-preview-wrapper":"-esm-report-builder__etl-monitor-builder-page__monitor-preview-wrapper___LsG7m","builder-preview-settings":"-esm-report-builder__etl-monitor-builder-page__builder-preview-settings___XVQOU","builder-preview-settings-header":"-esm-report-builder__etl-monitor-builder-page__builder-preview-settings-header___0cBXe","builder-preview-settings-content":"-esm-report-builder__etl-monitor-builder-page__builder-preview-settings-content___DwyPk","builder-preview-settings-setting":"-esm-report-builder__etl-monitor-builder-page__builder-preview-settings-setting___2xgqF","builder-preview-settings-note":"-esm-report-builder__etl-monitor-builder-page__builder-preview-settings-note___T1XA2","builder-preview-card":"-esm-report-builder__etl-monitor-builder-page__builder-preview-card___LaRZJ","builder-preview-card-header":"-esm-report-builder__etl-monitor-builder-page__builder-preview-card-header___u4MhD","builder-preview-card-body":"-esm-report-builder__etl-monitor-builder-page__builder-preview-card-body___xgHxd","builder-preview-status":"-esm-report-builder__etl-monitor-builder-page__builder-preview-status___nzToM","builder-preview-dot":"-esm-report-builder__etl-monitor-builder-page__builder-preview-dot___WNC3y",pulse:"-esm-report-builder__etl-monitor-builder-page__pulse___0vx4K","builder-preview-fields":"-esm-report-builder__etl-monitor-builder-page__builder-preview-fields___WBu3f","builder-preview-field":"-esm-report-builder__etl-monitor-builder-page__builder-preview-field___llrcr","builder-preview-field-label":"-esm-report-builder__etl-monitor-builder-page__builder-preview-field-label___TOdl0","builder-preview-field-value":"-esm-report-builder__etl-monitor-builder-page__builder-preview-field-value___Xnols","builder-preview-config":"-esm-report-builder__etl-monitor-builder-page__builder-preview-config___qyMz3","builder-preview-config-header":"-esm-report-builder__etl-monitor-builder-page__builder-preview-config-header___Wrso6","builder-preview-config-tabs":"-esm-report-builder__etl-monitor-builder-page__builder-preview-config-tabs___JdrA7",active:"-esm-report-builder__etl-monitor-builder-page__active___6EQYj","builder-preview-json":"-esm-report-builder__etl-monitor-builder-page__builder-preview-json___Co-2E","builder-preview-empty":"-esm-report-builder__etl-monitor-builder-page__builder-preview-empty___IOlVB","component-preview":"-esm-report-builder__etl-monitor-builder-page__component-preview___aoMN3",selected:"-esm-report-builder__etl-monitor-builder-page__selected___7mWjn","component-preview__header":"-esm-report-builder__etl-monitor-builder-page__component-preview__header___Rk3x+","component-preview__preview":"-esm-report-builder__etl-monitor-builder-page__component-preview__preview___1ldPz","component-preview__fields":"-esm-report-builder__etl-monitor-builder-page__component-preview__fields___9X6My","component-preview__field":"-esm-report-builder__etl-monitor-builder-page__component-preview__field___ye8+H","component-preview__field-label":"-esm-report-builder__etl-monitor-builder-page__component-preview__field-label___Mc8gF","component-preview__field-value":"-esm-report-builder__etl-monitor-builder-page__component-preview__field-value___JmIDs","component-preview__field-value--status":"-esm-report-builder__etl-monitor-builder-page__component-preview__field-value--status___TFqbk","component-preview__description":"-esm-report-builder__etl-monitor-builder-page__component-preview__description___eISPl","builder-form-section":"-esm-report-builder__etl-monitor-builder-page__builder-form-section___JZunw","builder-form-section__title":"-esm-report-builder__etl-monitor-builder-page__builder-form-section__title___nVsHC","builder-form-section__fields":"-esm-report-builder__etl-monitor-builder-page__builder-form-section__fields___jrhjH","builder-form-row":"-esm-report-builder__etl-monitor-builder-page__builder-form-row___01mZX","full-width":"-esm-report-builder__etl-monitor-builder-page__full-width___jjWxp","builder-form-group":"-esm-report-builder__etl-monitor-builder-page__builder-form-group___P5kNe","builder-form-group__label":"-esm-report-builder__etl-monitor-builder-page__builder-form-group__label___AaJH9","builder-form-group__description":"-esm-report-builder__etl-monitor-builder-page__builder-form-group__description___dwDLU","endpoint-test-result":"-esm-report-builder__etl-monitor-builder-page__endpoint-test-result___tdTKS","endpoint-test-result--success":"-esm-report-builder__etl-monitor-builder-page__endpoint-test-result--success___PuZsE","endpoint-test-result--error":"-esm-report-builder__etl-monitor-builder-page__endpoint-test-result--error___rpQCp","endpoint-test-result__header":"-esm-report-builder__etl-monitor-builder-page__endpoint-test-result__header___VGRHl",success:"-esm-report-builder__etl-monitor-builder-page__success___T+spt",error:"-esm-report-builder__etl-monitor-builder-page__error___yk6x2","endpoint-test-result__content":"-esm-report-builder__etl-monitor-builder-page__endpoint-test-result__content___jPfLd","detected-fields-table":"-esm-report-builder__etl-monitor-builder-page__detected-fields-table___OCESb","builder-footer":"-esm-report-builder__etl-monitor-builder-page__builder-footer___AgXEu"};function iF({state:e}){let t=(0,iO.fz)(e),r=e.testResult?.data||function(e,t){let{fields:r,componentType:a}=e;if(!r||0===r.length)return{};let n={};if(r.forEach(e=>{let t=e.path;t.startsWith("$.")?n[t.slice(2)]=iz(e):n[e.key]=iz(e)}),"DATA_TABLE"===a||"TABLE"===a||"ERROR_LOG"===a){let e=t.data?.arrayPath||"$.data";n[e.startsWith("$.")?e.slice(2):"data"]=[iq(r,0),iq(r,1,{status:"COMPLETED",result:"SUCCESS"}),iq(r,2,{status:"FAILED",result:"ERROR"})]}return n}(e,t);return n().createElement(l0.MonitorRenderer,{config:t,data:r,loading:!1,error:null})}function iz(e,t=0){switch(e.type){case"STATUS":if(e.statusMappings&&e.statusMappings.length>0)return e.statusMappings[0].rawValue||"UP";return"UP";case"TIMESTAMP":return Date.now()-36e5*t;case"DURATION":return 1e3+500*t;case"BOOLEAN":return t%2==0;case"NUMBER":case"INTEGER":case"DECIMAL":return Math.floor(1e3*Math.random())+100+100*t;case"PERCENTAGE":return Math.max(0,Math.min(100,80-20*t));case"DATE":return new Date(Date.now()-864e5*t).toISOString().split("T")[0];case"TIME":return new Date(Date.now()-36e5*t).toTimeString().split(" ")[0];default:return`Sample ${e.label} ${t+1}`}}function iq(e,t,r={}){let a={_id:t+1};return e.forEach(e=>{let n,l=e.path;void 0!==r[n=l.startsWith("$.")?l.slice(2):l.includes(".")?l.split(".").pop():e.key]?a[n]=r[n]:a[n]=iz(e,t)}),a}let ij="-esm-report-builder__generated-config-panel__generated-config-panel__tab___8Gn1P",iH="-esm-report-builder__generated-config-panel__generated-config-panel__tab--active___J75Iw",iJ=/("(?:\\.|[^"\\])*")(\s*:)?|\b(true|false|null)\b|(-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)/g;function iG(){let{state:e}=i$(),[t,r]=(0,a.useState)("json"),[l,i]=(0,a.useState)(!1),s=(0,a.useMemo)(()=>(0,iO.fz)(e),[e]),d=(0,a.useMemo)(()=>JSON.stringify(s,null,2),[s]),m=(0,a.useMemo)(()=>(function(e){let t,r=[],a=0,l=0;for(iJ.lastIndex=0;t=iJ.exec(e);)t.index>a&&r.push(e.slice(a,t.index)),void 0!==t[1]?(r.push(n().createElement("span",{key:l++,className:t[2]?"-esm-report-builder__generated-config-panel__json-key___JiqP2":"-esm-report-builder__generated-config-panel__json-string___lQCaZ"},t[1])),t[2]&&r.push(t[2])):void 0!==t[3]?r.push(n().createElement("span",{key:l++,className:"-esm-report-builder__generated-config-panel__json-boolean___HjUcS"},t[3])):void 0!==t[4]&&r.push(n().createElement("span",{key:l++,className:"-esm-report-builder__generated-config-panel__json-number___DL0+H"},t[4])),a=iJ.lastIndex;return a<e.length&&r.push(e.slice(a)),r})(d),[d]),u=(0,a.useMemo)(()=>(0,iO.yn)(e),[e]),p=(0,a.useMemo)(()=>(0,iO.lp)(e),[e]),_=0===u.length&&p.valid,g=async()=>{try{await navigator.clipboard.writeText(d),i(!0),window.setTimeout(()=>i(!1),2e3)}catch{}};return n().createElement("div",{className:"-esm-report-builder__generated-config-panel__generated-config-panel___nR3Io"},n().createElement("div",{className:"-esm-report-builder__generated-config-panel__generated-config-panel__header___uVGqn"},n().createElement("h4",null,"Generated Configuration")),n().createElement("div",{className:"-esm-report-builder__generated-config-panel__generated-config-panel__tabs___lvp75",role:"tablist"},n().createElement("button",{type:"button",role:"tab","aria-selected":"visual"===t,className:[ij,"visual"===t&&iH].filter(Boolean).join(" "),onClick:()=>r("visual")},"Visual"),n().createElement("button",{type:"button",role:"tab","aria-selected":"json"===t,className:[ij,"json"===t&&iH].filter(Boolean).join(" "),onClick:()=>r("json")},"JSON")),n().createElement("div",{className:"-esm-report-builder__generated-config-panel__generated-config-panel__content___7Ko+W"},"visual"===t?n().createElement(iF,{state:e}):n().createElement("div",{className:"-esm-report-builder__generated-config-panel__generated-config-panel__json-wrap___UqTf4"},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:l?U.MG:c.QR,iconDescription:l?"Copied!":"Copy JSON",className:"-esm-report-builder__generated-config-panel__generated-config-panel__copy___r1QU2",onClick:g}),n().createElement("pre",{className:"-esm-report-builder__generated-config-panel__generated-config-panel__json___FhyBN"},m))),n().createElement("div",{className:["-esm-report-builder__generated-config-panel__generated-config-panel__banner___BycCH",_?"-esm-report-builder__generated-config-panel__generated-config-panel__banner--ready___SVozm":"-esm-report-builder__generated-config-panel__generated-config-panel__banner--blocked___Iefko"].join(" ")},_?n().createElement(U._j,{size:18}):n().createElement(es.$D,{size:18}),n().createElement("span",null,_?"Ready to publish — this monitor will appear immediately on the dashboard after saving.":`Configuration incomplete — fix ${u.length} error${1===u.length?"":"s"} before saving.`)))}let iV=[{value:"uganda-etl",label:"Uganda ETL"},{value:"etl-status",label:"ETL Status"},{value:"data-quality",label:"Data Quality"},{value:"system-health",label:"System Health"},{value:"performance",label:"Performance"},{value:"reporting",label:"Reporting"},{value:"custom",label:"Custom"}];function iW(){let{state:e}=i$(),t=iP(),{general:r}=e,[l,i]=n().useState({}),[s,d]=n().useState({}),c=(e,a)=>{let n=((e,t)=>{let r={};switch(e){case"name":t&&""!==t.trim()||(r.name="Name is required");break;case"code":t&&""!==t.trim()?/^[a-z0-9-]+$/.test(t)||(r.code="Code must contain only lowercase letters, numbers, and hyphens"):r.code="Code is required";break;case"refreshInterval":(t<5||t>3600)&&(r.refreshInterval="Refresh interval must be between 5 and 3600 seconds");break;case"timeout":(t<1||t>300)&&(r.timeout="Timeout must be between 1 and 300 seconds")}return r})(e,a);i(e=>({...e,...n})),d(t=>({...t,[e]:!0})),t({general:{...r,[e]:a}})},m=n().useCallback(()=>{i((0,iO.zK)(r).errors.reduce((e,t)=>(e[t.split(" ")[0].toLowerCase()]=t,e),{}))},[r]);(0,a.useEffect)(()=>{m()},[m]);let u=Object.keys(l).some(e=>l[e]);return n().createElement("div",{className:"-esm-report-builder__general-step__general-step___xNLID"},n().createElement("div",{className:"-esm-report-builder__general-step__general-step__header___GcPrF"},n().createElement("h2",null,"General Information"),n().createElement("p",{className:"-esm-report-builder__general-step__general-step__description___gY3A1"},"Define the basic details of your ETL monitor.")),u&&s&&Object.keys(s).length>0&&n().createElement(o.jeF,{kind:"error",title:"Validation Errors",subtitle:"Please fix the errors below before proceeding",lowContrast:!0,style:{marginBottom:"1rem"}}),n().createElement(o.gE_,{legendText:""},n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"monitor-name",labelText:"Name *",placeholder:"e.g., ETL Module Health",value:r.name,onChange:e=>c("name",e.target.value),onBlur:()=>{r.name&&(!r.code||""===r.code)&&c("code",r.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""))},invalid:s.name&&!!l.name,invalidText:l.name,helperText:"A friendly name for this monitor",autoFocus:!0}),n().createElement(o.ksK,{id:"monitor-code",labelText:"Code *",placeholder:"e.g., etl-module-health",value:r.code,onChange:e=>c("code",e.target.value),invalid:s.code&&!!l.code,invalidText:l.code,helperText:"A unique code used to identify this monitor"}),n().createElement(o.fs1,{id:"monitor-description",labelText:"Description",rows:3,placeholder:"Optional description of what this monitor displays",value:r.description,onChange:e=>c("description",e.target.value),helperText:"Describe what this monitor checks and why it's important"}),n().createElement(o.l6P,{id:"monitor-category",labelText:"Category *",value:r.category,onChange:e=>{var a;let n;return a=e.target.value,n=iV.find(e=>e.value===a),void t({general:{...r,category:a,categoryLabel:n?.label||a}})},helperText:"Choose the category this monitor belongs to"},n().createElement(o.ebT,{value:"",text:"Select a category..."}),iV.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement("div",{className:"-esm-report-builder__general-step__general-step__toggle___EHfxl"},n().createElement(o.lMk,{id:"monitor-active",labelText:"Active *",labelA:"Off",labelB:"On",toggled:r.active,onToggle:e=>c("active",e)}),n().createElement("div",{className:"-esm-report-builder__general-step__general-step__toggle-helper___rKzSX"},"Enable or disable this monitor")),n().createElement(o.BJc,{orientation:"horizontal",gap:5},n().createElement("div",{style:{flex:1}},n().createElement(o.Q7x,{id:"refresh-interval",label:"Refresh Interval (seconds) *",min:5,max:3600,step:5,value:r.refreshInterval,onChange:e=>{c("refreshInterval",parseInt(e.target.value)||30)},invalid:s.refreshInterval&&!!l.refreshInterval,invalidText:l.refreshInterval,helperText:"How often the monitor runs"})),n().createElement("div",{style:{flex:1}},n().createElement(o.Q7x,{id:"timeout",label:"Timeout (seconds) *",min:1,max:300,step:1,value:r.timeout,onChange:e=>{c("timeout",parseInt(e.target.value)||10)},invalid:s.timeout&&!!l.timeout,invalidText:l.timeout,helperText:"Maximum time to wait for a response"}))))),n().createElement("div",{className:"-esm-report-builder__general-step__general-step__info-banner___CYeFk"},n().createElement(tw.$$,{size:16}),n().createElement("span",null,"You can configure the data source and design in the next steps.")))}let iK="-esm-report-builder__data-source-step__data-source-step__auth-description___mPeA8",iQ=[{value:"GET",label:"GET"},{value:"POST",label:"POST"},{value:"PUT",label:"PUT"},{value:"DELETE",label:"DELETE"}],iY=[{value:"NONE",label:"None",description:"No authentication required"},{value:"OPENMRS",label:"OpenMRS Session",description:"The monitor will use your current OpenMRS session"},{value:"BASIC",label:"Basic Auth",description:"Username and password"},{value:"API_KEY",label:"API Key",description:"Custom header with API key"},{value:"BEARER_TOKEN",label:"Bearer Token",description:"OAuth bearer token"}];function iX({authType:e,authConfig:t,onChange:r}){return"NONE"===e?n().createElement("div",{className:iK},"No authentication will be used for this endpoint."):"OPENMRS"===e?n().createElement("div",{className:iK},"The monitor will use your current OpenMRS session."):"BASIC"===e?n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"auth-username",labelText:"Username",value:t.username||"",onChange:e=>r({...t,username:e.target.value}),placeholder:"Enter username"}),n().createElement(o.ksK,{id:"auth-password",labelText:"Password",type:"password",value:t.password||"",onChange:e=>r({...t,password:e.target.value}),placeholder:"Enter password"})):"API_KEY"===e?n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"auth-header-name",labelText:"Header Name",value:t.headerName||"X-API-Key",onChange:e=>r({...t,headerName:e.target.value}),placeholder:"e.g., X-API-Key"}),n().createElement(o.ksK,{id:"auth-api-key",labelText:"API Key",value:t.apiKey||"",onChange:e=>r({...t,apiKey:e.target.value}),placeholder:"Enter API key"})):"BEARER_TOKEN"===e?n().createElement(o.ksK,{id:"auth-token",labelText:"Bearer Token",value:t.token||"",onChange:e=>r({...t,token:e.target.value}),placeholder:"Enter bearer token"}):null}function iZ(){let{state:e}=i$(),t=iP(),{endpoint:r,testResult:l,detectedSchema:i}=e,s=n().useMemo(()=>({...r,auth:r.auth||{type:"NONE"}}),[r]),[m,u]=(0,a.useState)(!1),[p,_]=(0,a.useState)(null),g=(e,r)=>{t({endpoint:{...s,[e]:r}})},E=async()=>{if(!s.url||""===s.url.trim())return void _("API URL is required");if(!s.url.startsWith("/"))return void _("URL must start with /");u(!0),_(null);try{let r=await lN({endpoint:{url:s.url,method:s.method,auth:s.auth}}),a=r.data?function e(t,r="$",a=!0){let n;if(!t||"object"!=typeof t)return{rootPath:"$",isArray:!1,fields:[],rawSample:t,detectedAt:new Date().toISOString()};let l=[];if(Array.isArray(t))return t.length>0&&"object"==typeof t[0]&&null!==t[0]?{rootPath:r,arrayPath:r,isArray:!0,fields:e(t[0],"$",!1).fields,rawSample:t,detectedAt:new Date().toISOString()}:{rootPath:r,arrayPath:r,isArray:!0,fields:[],rawSample:t,detectedAt:new Date().toISOString()};for(let[i,o]of Object.entries(t)){if(null===o||"function"==typeof o||"symbol"==typeof o)continue;let t=`${r}.${i}`;if(a&&"$"===r&&Array.isArray(o)&&o.length>0&&"object"==typeof o[0]&&null!==o[0]){n||(n=t,l.push(...e(o[0],"$",!1).fields));continue}if("object"==typeof o){if(!Array.isArray(o)){let n=e(o,t,a&&"$"!==r);l.push(...n.fields)}continue}let s=function(e){if(null==e)return"TEXT";let t=typeof e;if("boolean"===t)return"BOOLEAN";if("number"===t)return Number.isInteger(e)?"INTEGER":"DECIMAL";if("string"===t){let t=e.toUpperCase().trim();if(/^\d{13}$/.test(e)||/^\d{10}$/.test(e)||/GMT|UTC|EAT|EST|PST/.test(e)||/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(e)||/^\d{4}-\d{2}-\d{2}/.test(e))return"TIMESTAMP";if(/^(UP|DOWN|ON|OFF|ACTIVE|INACTIVE|SUCCESS|FAILURE|ERROR|WARNING|INFO|CRITICAL|READY|PENDING|RUNNING|STOPPED|COMPLETED|FAILED|STARTED)$/i.test(t))return"STATUS";if(/^\d+%?$/.test(e)||/percentage|percent|ratio|rate/i.test(e))return"PERCENTAGE";if(/^\d+\s*(seconds?|mins?|hours?|days?|h|m|s)$/.test(e)||/^\d+:\d{2}$/.test(e))return"DURATION";if(/^\d{4}-\d{2}-\d{2}$/.test(e)||/^\d{2}\/\d{2}\/\d{4}$/.test(e))return"DATE";if(/^\d{2}:\d{2}:\d{2}$/.test(e)||/^\d{2}:\d{2}$/.test(e))return"TIME"}return"TEXT"}(o),d=function(e){let t=e.toLowerCase();return t.includes("status")||t.includes("state")||t.includes("health")?"STATUS":t.includes("progress")||t.includes("percentage")||t.includes("percent")?"PERCENTAGE":t.includes("timestamp")||t.includes("date")||t.includes("time")||t.includes("created")||t.includes("updated")?"TIMESTAMP":t.includes("duration")||t.includes("elapsed")||t.includes("runtime")?"DURATION":t.includes("count")||t.includes("total")||t.includes("number")||t.includes("amount")?"NUMBER":t.includes("enabled")||t.includes("active")||t.includes("visible")?"BOOLEAN":null}(i)||s,c={name:i,path:t,type:s,suggestedType:d!==s?d:void 0,sampleValue:o,description:`Detected field: ${i}`};l.push(c)}return{rootPath:r,isArray:!1,arrayPath:n,fields:l,rawSample:t,detectedAt:new Date().toISOString()}}(r.data):void 0;if(a&&a.fields.length>0){var e;let t,r,n=(t=(e=a.fields).some(e=>"STATUS"===e.type||"STATUS"===e.suggestedType),r=e.some(e=>"PERCENTAGE"===e.type||"PERCENTAGE"===e.suggestedType),t&&e.length<=3?"STATUS_CARD":r&&t?"PROGRESS":e.length>=4?"DATA_TABLE":e.length>=2?"SUMMARY_CARD":void 0);a.recommendedComponent=n}t({testResult:{success:r.success,httpStatus:r.httpStatus,durationMs:r.durationMs,contentType:r.contentType,error:r.error,data:r.data,testedAt:r.testedAt},detectedSchema:a}),r.success||_(r.error||"Endpoint test failed")}catch(r){let e=r.message||"Failed to test endpoint";_(e),t({testResult:{success:!1,error:e,testedAt:new Date().toISOString()}})}finally{u(!1)}},f=l?.success===!0;return n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step___fRs2Z"},n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__header___LLQ8Z"},n().createElement("h2",null,"Data Source"),n().createElement("p",{className:"-esm-report-builder__data-source-step__data-source-step__description___H2j5X"},"Configure the API endpoint that will provide data for this monitor.")),p&&n().createElement(o.jeF,{kind:"error",title:"Endpoint request failed",subtitle:p,onClose:()=>_(null),lowContrast:!0,style:{marginBottom:"1rem"}}),n().createElement(o.gE_,{legendText:""},n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"api-url",labelText:"API Endpoint *",placeholder:"e.g., /ugandareportsetl/health",value:s.url,onChange:e=>g("url",e.target.value),helperText:"Relative URL path to the API endpoint",invalid:!!p&&!s.url,invalidText:"API URL is required"}),n().createElement(o.l6P,{id:"http-method",labelText:"HTTP Method *",value:s.method,onChange:e=>g("method",e.target.value)},iQ.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement(o.l6P,{id:"auth-type",labelText:"Authentication *",value:s.auth.type,onChange:e=>{var r;let a;return a={type:r=e.target.value},void("OPENMRS"===r?a.useSession=!0:"API_KEY"===r&&(a.headerName="X-API-Key"),t({endpoint:{...s,auth:a}}))}},iY.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__auth-config___sEzJM"},n().createElement(iX,{authType:s.auth.type,authConfig:s.auth,onChange:e=>{t({endpoint:{...s,auth:{...s.auth,...e}}})}})),n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__actions___RY9p3"},n().createElement(o.$nd,{kind:"primary",renderIcon:d.jG,onClick:E,disabled:m||!s.url},m?"Testing Endpoint…":"Test Endpoint")),f&&n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__test-result___e3GT0"},n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__test-header___VcmHd"},n().createElement(U._j,{size:16}),n().createElement("span",null,"Endpoint responded successfully")),n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__test-details___hQGFH"},n().createElement("span",null,"HTTP ",l.httpStatus),n().createElement("span",null,"•"),n().createElement("span",null,l.durationMs," ms"),n().createElement("span",null,"•"),n().createElement("span",null,l.contentType)),n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__test-time___VpxE2"},"Tested ",(e=>{if(!e)return"";let t=Math.floor((Date.now()-new Date(e).getTime())/1e3/60);if(t<1)return"Just now";if(t<60)return`${t} minute${t>1?"s":""} ago`;let r=Math.floor(t/60);if(r<24)return`${r} hour${r>1?"s":""} ago`;let a=Math.floor(r/24);return`${a} day${a>1?"s":""} ago`})(l.testedAt))),l?.data&&n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__response-preview___fjDQm"},n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__response-header___wHDSs"},n().createElement("h4",null,"Response Preview"),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:c.QR,onClick:()=>navigator.clipboard.writeText(JSON.stringify(l.data,null,2))},"Copy")),n().createElement("pre",{className:"-esm-report-builder__data-source-step__data-source-step__response-code___RuzGO"},JSON.stringify(l.data,null,2))),i&&i.fields.length>0&&n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__detected-fields___A-Cl2"},n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__detected-header___DoNsz"},n().createElement("h4",null,"Detected Fields"),n().createElement("span",{className:"-esm-report-builder__data-source-step__data-source-step__detected-count___c1Vn0"},i.fields.length," fields detected")),n().createElement("table",{className:"-esm-report-builder__data-source-step__data-source-step__fields-table___VJvtj"},n().createElement("thead",null,n().createElement("tr",null,n().createElement("th",null,"Field"),n().createElement("th",null,"Type"),n().createElement("th",null,"Suggested Label"))),n().createElement("tbody",null,i.fields.map((e,t)=>n().createElement("tr",{key:t},n().createElement("td",null,n().createElement("code",null,e.name)),n().createElement("td",null,n().createElement(o.vwO,{type:"STATUS"===e.type?"green":"gray"},e.type)),n().createElement("td",null,e.description||e.name)))))))))}var i0=r(3654);let i1=[{type:"STATUS_CARD",label:"Status Card",description:"Best for showing the health or availability of a system.",icon:n().createElement(g.Zn,{size:18}),accent:"#1A7F37",requires:"STATUS",requiredFieldTypes:["STATUS"],recommendedFor:["status","health","state","check"]},{type:"METRICS_GRID",label:"Metric Card",description:"Best for key numeric metrics at a glance.",icon:n().createElement(_._C,{size:18}),accent:"#8A3FFC",requires:"NONE",requiredFieldTypes:[],recommendedFor:["metrics","kpi","grid","multiple"]},{type:"PROGRESS",label:"Progress Card",description:"Best for showing progress of the current execution.",icon:n().createElement(u.wM,{size:18}),accent:"#0F62FE",requires:"PERCENTAGE",requiredFieldTypes:["PERCENTAGE"],recommendedFor:["progress","completion","percentage","stage"]},{type:"TABLE",aliases:["DATA_TABLE"],label:"Table Card",description:"Best for lists of executions or records.",icon:n().createElement(i0.bQ,{size:18}),accent:"#FA4D56",requires:"TABLE",requiredFieldTypes:[],recommendedFor:["list","table","records","log"]},{type:"DETAILS",label:"Details Card",description:"Best for showing all available fields and properties.",icon:n().createElement(es.yo,{size:18}),accent:"#1192E8",requires:"DETAILS",requiredFieldTypes:[],recommendedFor:["detail","property","field","config","schedule","info"]},{type:"SUMMARY_CARD",label:"Summary Card",description:"Best for stacked highlights with status badges.",icon:n().createElement(c.xh,{size:18}),accent:"#525252",requires:"SUMMARY",requiredFieldTypes:[],recommendedFor:["summary","overview","stats"]},{type:"LOG",label:"Log / Timeline Card",description:"Best for showing events or execution logs.",icon:n().createElement(nb.gX,{size:18}),accent:"#0762FE",requires:"LOG",requiredFieldTypes:[],recommendedFor:["event","timeline","activity","history"]},{type:"ERROR_LOG",label:"Error Log Card",description:"Best for monitoring failures and issues.",icon:n().createElement(tb.N5,{size:18}),accent:"#DA1E28",requires:"LOG",requiredFieldTypes:[],recommendedFor:["error","exception","failure","issue"]},{type:"TIME_SERIES",label:"Time Series Chart",description:"Best for metrics, performance data, or historical trends.",icon:n().createElement(_.BS,{size:18}),accent:"#8A3FFC",requires:"NONE",requiredFieldTypes:[],recommendedFor:["trend","history","metric","chart"]}];function i2({type:e}){let t=function(e){switch(e){case"STATUS_CARD":return{config:{schemaVersion:2,component:"STATUS_CARD",presentation:{title:"ETL Module Health",description:"ETL module is operational."},fields:[{key:"status",label:"Status",path:"$.status",type:"STATUS",primary:!0,statusMap:{UP:{label:"Running",tone:"success"},DOWN:{label:"Stopped",tone:"critical"}}},{key:"lastUpdated",label:"Last checked",path:"$.lastUpdated",type:"TIMESTAMP"}]},data:{status:"UP",lastUpdated:Date.now()-12e4}};case"METRICS_GRID":return{config:{schemaVersion:2,component:"METRICS_GRID",presentation:{title:"ETL Monitor",description:"Current run summary"},componentConfig:{icon:"chart",icons:{executionId:"badge",runDuration:"clock",progress:"trend",missedSchedule:"calendar"},iconColors:{executionId:"#24a148",runDuration:"#8A3FFC",progress:"#0F62FE",missedSchedule:"#F1C21B"},valueColors:{progress:"#198038"}},fields:[{key:"executionId",label:"Execution ID",path:"$.executionId",type:"INTEGER",description:"Run #"},{key:"runDuration",label:"Run Duration",path:"$.runDuration",type:"DURATION",description:"Duration"},{key:"progress",label:"Progress",path:"$.progress",type:"PERCENTAGE",description:"Complete"},{key:"missedSchedule",label:"Missed Schedule",path:"$.missedSchedule",type:"DURATION",description:"Behind"},{key:"lastUpdated",label:"Updated",path:"$.lastUpdated",type:"TIMESTAMP"}]},data:{executionId:17,runDuration:8927e3,progress:100,missedSchedule:528e4,lastUpdated:Date.now()-12e4}};case"PROGRESS":return{config:{schemaVersion:2,component:"PROGRESS",componentConfig:{stageFieldKey:"stage"},fields:[{key:"progress",label:"Progress",path:"$.progress",type:"PERCENTAGE",primary:!0},{key:"stage",label:"Current Stage",path:"$.stage",type:"TEXT"}]},data:{progress:100,stage:"Completed"}};case"TABLE":case"DATA_TABLE":return{config:{schemaVersion:2,component:"TABLE",componentConfig:{maxRows:5,viewAllUrl:"#",viewAllLabel:"View all executions"},fields:[{key:"started",label:"Started",path:"$.started",type:"TIMESTAMP",format:{timestamp:{display:"datetime"}}},{key:"duration",label:"Duration",path:"$.duration",type:"DURATION"},{key:"result",label:"Result",path:"$.result",type:"STATUS",statusMap:{SUCCESS:{label:"SUCCESS",tone:"success"},FAILED:{label:"FAILED",tone:"critical"}}}]},data:[{started:Date.now()-36e5,duration:8927e3,result:"SUCCESS"},{started:Date.now()-9e6,duration:1523e3,result:"SUCCESS"},{started:Date.now()-18e6,duration:1523e3,result:"SUCCESS"}]};case"ERROR_LOG":return{config:{schemaVersion:2,component:"ERROR_LOG",fields:[{key:"time",label:"Time",path:"$.time",type:"TIMESTAMP",format:{timestamp:{display:"time"}}},{key:"severity",label:"Severity",path:"$.severity",type:"STATUS",statusMap:{CRITICAL:{label:"CRITICAL",tone:"critical"},WARNING:{label:"WARNING",tone:"warning"}}},{key:"message",label:"Message",path:"$.message",type:"TEXT"}]},data:[{time:Date.now()-27e5,severity:"CRITICAL",message:"Connection timeout"},{time:Date.now()-54e5,severity:"WARNING",message:"Retry attempted"}]};case"DETAILS":return{config:{schemaVersion:2,component:"DETAILS",fields:[{key:"status",label:"status",path:"$.status",type:"STATUS",statusMap:{UP:{label:"UP",tone:"success"}}},{key:"module",label:"module",path:"$.module",type:"TEXT"},{key:"description",label:"description",path:"$.description",type:"TEXT"},{key:"timestamp",label:"timestamp",path:"$.timestamp",type:"TIMESTAMP",format:{timestamp:{display:"datetime"}}}]},data:{status:"UP",module:"ugandareportstetl",description:"Uganda Reports ETL Module",timestamp:Date.now()-3e5}};case"SUMMARY_CARD":return{config:{schemaVersion:2,component:"SUMMARY_CARD",fields:[{key:"completionStatus",label:"Completion Status",path:"$.completionStatus",type:"STATUS",statusMap:{SUCCESS:{label:"SUCCESS",tone:"success"}}},{key:"transactionStatus",label:"Transaction Status",path:"$.transactionStatus",type:"STATUS",statusMap:{COMPLETED:{label:"COMPLETED",tone:"success"}}}]},data:{completionStatus:"SUCCESS",transactionStatus:"COMPLETED"}};case"LOG":return{config:{schemaVersion:2,component:"LOG",componentConfig:{maxRows:5},fields:[{key:"time",label:"Time",path:"$.time",type:"TIMESTAMP",format:{timestamp:{display:"time"}}},{key:"event",label:"Event",path:"$.event",type:"TEXT"}]},data:[{time:Date.now()-24e5,event:"Execution started"},{time:Date.now()-192e4,event:"Data extraction completed"},{time:Date.now()-108e4,event:"Transformation completed"},{time:Date.now()-3e5,event:"Load completed"}]};case"TIME_SERIES":{let e=Date.now(),t=[892e4,861e4,836e4,848e4,812e4,824e4,89e5,925e4,903e4,8927e3];return{config:{schemaVersion:2,component:"TIME_SERIES",presentation:{title:"Execution Duration"},componentConfig:{icons:{duration:"timer"},deltaLabel:"vs previous period"},fields:[{key:"time",label:"Time",path:"$.time",type:"TIMESTAMP",format:{timestamp:{display:"time"}}},{key:"value",label:"Duration",path:"$.value",type:"DURATION",primary:!0}]},data:t.map((r,a)=>({time:e-(t.length-1-a)*216e4,value:r}))}}default:return{config:{schemaVersion:2,component:"TIME_SERIES",fields:[{key:"average",label:"Average",path:"$.average",type:"TEXT"},{key:"max",label:"Max",path:"$.max",type:"TEXT"},{key:"trend",label:"Trend",path:"$.trend",type:"TEXT"}]},data:{average:"2.3s",max:"5.1s",trend:"↑ 12%"}}}}(e);return n().createElement(l0.MonitorRenderer,{config:t.config,data:t.data,loading:!1,error:null})}function i5(e,t){return!!t&&(t===e.type||(e.aliases?.includes(t)??!1))}function i6({config:e,selected:t,disabled:r,recommended:a,onSelect:l}){return n().createElement("div",{className:["-esm-report-builder__design-step__component-card___RAlFw",t&&"-esm-report-builder__design-step__component-card--selected___Pk0Ap",r&&"-esm-report-builder__design-step__component-card--disabled___IdhpT"].filter(Boolean).join(" "),onClick:r?void 0:l,role:"button",tabIndex:r?-1:0,"aria-disabled":r,onKeyDown:e=>{r||("Enter"===e.key||" "===e.key)&&(e.preventDefault(),l())}},t&&n().createElement("span",{className:"-esm-report-builder__design-step__component-card__check___PtG-G"},n().createElement(U.MG,{size:14})),a&&!t&&n().createElement("span",{className:"-esm-report-builder__design-step__component-card__star___2LEWD",title:"Recommended"},n().createElement(f.FE,{size:11})),n().createElement("div",{className:"-esm-report-builder__design-step__component-card__head___lqb6r"},n().createElement("span",{className:"-esm-report-builder__design-step__component-card__icon___rvvJG",style:{backgroundColor:`${e.accent}1A`,color:e.accent}},e.icon),n().createElement("h4",{className:"-esm-report-builder__design-step__component-card__title___soJ9u"},e.label)),n().createElement("p",{className:"-esm-report-builder__design-step__component-card__description___ReOc4"},e.description),n().createElement("div",{className:"-esm-report-builder__design-step__component-card__preview___EOE45"},n().createElement("div",{className:"-esm-report-builder__design-step__component-card__sample___LliEt"},n().createElement(i2,{type:e.type}))),n().createElement("div",{className:"-esm-report-builder__design-step__component-card__footer___R8bVS"},n().createElement("span",{className:"-esm-report-builder__design-step__component-card__requires-label___5eSNx"},"Requires:"),n().createElement("span",{className:"-esm-report-builder__design-step__component-card__requires-chip___NnQdk"},e.requires)))}function i3(){let{state:e}=i$(),t=iP(),{componentType:r,detectedSchema:a}=e,l=()=>a?.recommendedComponent?a.recommendedComponent:null,i=l(),s=!!a&&a.fields.length>0,d=i1.find(e=>i5(e,r)),c=i?i1.find(e=>e.type===i||(e.aliases?.includes(i)??!1)):void 0;return n().createElement("div",{className:"-esm-report-builder__design-step__design-step___G-wQb"},n().createElement("div",{className:"-esm-report-builder__design-step__design-step__header___v-Cuy"},n().createElement("h2",null,"Choose a design"),n().createElement("p",{className:"-esm-report-builder__design-step__design-step__description___eANa4"},"Select how this monitor should be visualized on the dashboard.")),s&&c&&n().createElement("div",{className:"-esm-report-builder__design-step__design-step__recommendation___XFaNZ"},n().createElement(f.FE,{size:16}),n().createElement("p",null,n().createElement("strong",null,"Recommended: ",c.label)," — ",(()=>{if(!a)return"";if(a.fields.find(e=>"STATUS"===e.type||"STATUS"===e.suggestedType))return"This response contains a status-like field and supporting properties.";if(a.isArray)return"This response returns a list of records.";let e=a.fields.length;return`This response contains ${e} field${1===e?"":"s"} that suit this component.`})())),!s&&n().createElement(o.jeF,{kind:"warning",title:"No Schema Detected",subtitle:"Test your endpoint first to get a component recommendation based on your data structure.",lowContrast:!0,style:{marginBottom:"1rem"},hideCloseButton:!0}),n().createElement("div",{role:"group","aria-label":"Select a component type"},n().createElement("div",{className:"-esm-report-builder__design-step__design-step__grid___sM4Eq"},i1.map(e=>n().createElement(i6,{key:e.type,config:e,selected:i5(e,r),disabled:!!a&&0!==a.fields.length&&e.requiredFieldTypes.some(e=>!a.fields.some(t=>t.type===e||t.suggestedType===e)),recommended:(e=>{let t=l();if(t)return t===e.type||(e.aliases?.includes(t)??!1);if(!a)return!1;let r=a.fields.map(e=>e.name.toLowerCase());return e.recommendedFor.some(e=>r.some(t=>t.includes(e)))||!1})(e),onSelect:()=>{t({componentType:e.type})}})))),d&&n().createElement("div",{className:"-esm-report-builder__design-step__design-step__summary___m51vL"},n().createElement("div",{className:"-esm-report-builder__design-step__design-step__summary-content___2+5v2"},n().createElement("h4",null,n().createElement(tw.$$,{size:16}),"Selected: ",d.label),n().createElement("p",null,d.description))),s&&c&&i5(c,r)&&n().createElement("div",{className:"-esm-report-builder__design-step__design-step__why-recommended___3otjU"},n().createElement("div",{className:"-esm-report-builder__design-step__design-step__why-recommended-header___+-JvI"},n().createElement(tw.$$,{size:16}),n().createElement("h5",null,"Why this is recommended")),n().createElement("div",{className:"-esm-report-builder__design-step__design-step__why-recommended-content___EhNzx"},n().createElement("p",null,"Your endpoint returns a status field along with"," ",a.fields.filter(e=>"STATUS"!==e.type&&"STATUS"!==e.suggestedType).slice(0,3).map(e=>e.name).join(", ")||"supporting properties","."),n().createElement("p",null,"The ",n().createElement("strong",null,d?.label)," is the best way to highlight the overall status at a glance, with key context shown below."))),n().createElement("div",{className:"-esm-report-builder__design-step__design-step__help___plMPQ"},n().createElement("p",{className:"-esm-report-builder__design-step__design-step__help-text___SCYHj"},n().createElement("strong",null,"Tip:")," You can change the design or settings later. Your data and mappings will be preserved.")))}let i4={"fields-step":"-esm-report-builder__fields-step__fields-step___BHslw","fields-step__header":"-esm-report-builder__fields-step__fields-step__header___KKBku","fields-step__description":"-esm-report-builder__fields-step__fields-step__description___OrEK7","fields-step__empty":"-esm-report-builder__fields-step__fields-step__empty___OB+tt","fields-step__list":"-esm-report-builder__fields-step__fields-step__list___jmk5R","fields-step__list-header":"-esm-report-builder__fields-step__fields-step__list-header___oRXUE","fields-step__fields":"-esm-report-builder__fields-step__fields-step__fields___poKhr","fields-step__actions":"-esm-report-builder__fields-step__fields-step__actions___cAsjr","fields-step__timestamp-config":"-esm-report-builder__fields-step__fields-step__timestamp-config___Xj9nd","fields-step__timestamp-header":"-esm-report-builder__fields-step__fields-step__timestamp-header___WrBDT","fields-step__timestamp-description":"-esm-report-builder__fields-step__fields-step__timestamp-description___JAZ0D","fields-step__timestamp-settings":"-esm-report-builder__fields-step__fields-step__timestamp-settings___RD7Ap","fields-step__timestamp-field":"-esm-report-builder__fields-step__fields-step__timestamp-field___UFYF9","cds--text-input":"-esm-report-builder__fields-step__cds--text-input___mR2xM","cds--select-input":"-esm-report-builder__fields-step__cds--select-input___8hlIi","cds--toggle-input__label":"-esm-report-builder__fields-step__cds--toggle-input__label___TssaG","fields-step__timestamp-helper":"-esm-report-builder__fields-step__fields-step__timestamp-helper___8s1Vj","field-row":"-esm-report-builder__fields-step__field-row___Pn8gW","field-row__drag":"-esm-report-builder__fields-step__field-row__drag___w5YU4","field-row__drag-handle":"-esm-report-builder__fields-step__field-row__drag-handle___lrlH3","field-row__content":"-esm-report-builder__fields-step__field-row__content___Es4+4","field-row__main":"-esm-report-builder__fields-step__field-row__main___vzk-u","field-row__info":"-esm-report-builder__fields-step__field-row__info___vuDhd","field-row__header":"-esm-report-builder__fields-step__field-row__header___HI6LF","field-row__label":"-esm-report-builder__fields-step__field-row__label___HknJt","field-row__meta":"-esm-report-builder__fields-step__field-row__meta___MbwR6","field-row__path":"-esm-report-builder__fields-step__field-row__path___dwhbH","field-row__actions":"-esm-report-builder__fields-step__field-row__actions___9WjPq","field-config-modal":"-esm-report-builder__fields-step__field-config-modal___6sBee","cds--modal-content":"-esm-report-builder__fields-step__cds--modal-content___m4c-G","field-format-options":"-esm-report-builder__fields-step__field-format-options___MhU8L","status-mapping-modal__description":"-esm-report-builder__fields-step__status-mapping-modal__description___1hhb4","status-mapping-row":"-esm-report-builder__fields-step__status-mapping-row___Ct+n2","status-mapping-row__raw":"-esm-report-builder__fields-step__status-mapping-row__raw___c+bdP","status-mapping-row__label":"-esm-report-builder__fields-step__status-mapping-row__label___aA9zm","status-mapping-row__tone":"-esm-report-builder__fields-step__status-mapping-row__tone___vpGZL","cds--btn":"-esm-report-builder__fields-step__cds--btn___0Hgvy"},i8=[{value:"TEXT",label:"Text",description:"Plain text content"},{value:"STRING",label:"String",description:"Short text string"},{value:"NUMBER",label:"Number",description:"Numeric value"},{value:"INTEGER",label:"Integer",description:"Whole number"},{value:"DECIMAL",label:"Decimal",description:"Decimal number"},{value:"BOOLEAN",label:"Boolean",description:"True/false value"},{value:"STATUS",label:"Status",description:"Status indicator with tone mapping"},{value:"PERCENTAGE",label:"Percentage",description:"Percentage value (0-100)"},{value:"TIMESTAMP",label:"Timestamp",description:"Unix timestamp in milliseconds"},{value:"DURATION",label:"Duration",description:"Duration in seconds or milliseconds"},{value:"DATE",label:"Date",description:"Date value"},{value:"TIME",label:"Time",description:"Time value"}],i7=[{value:"success",label:"Success",color:"#198038"},{value:"critical",label:"Critical",color:"#da1e28"},{value:"warning",label:"Warning",color:"#f1c21b"},{value:"info",label:"Info",color:"#0f62fe"},{value:"neutral",label:"Neutral",color:"#6f6f6f"}];function i9({open:e,onClose:t,onSave:r,currentMappings:l,detectedValues:i}){let[s,d]=(0,a.useState)(l.length>0?l:i.map(e=>({rawValue:e,label:e,tone:"neutral"}))),c=(e,t)=>{d(r=>r.map((r,a)=>a===e?{...r,...t}:r))};return n().createElement(o.aFV,{open:e,onRequestClose:t,modalHeading:"Configure Status Mappings",primaryButtonText:"Save",secondaryButtonText:"Cancel",onRequestSubmit:()=>{r(s),t()},size:"md"},n().createElement("div",{className:i4["status-mapping-modal"]},n().createElement("p",{className:i4["status-mapping-modal__description"]},"Map each detected status value to a display label and tone."),n().createElement(o.BJc,{gap:4},s.map((e,t)=>n().createElement("div",{key:t,className:i4["status-mapping-row"]},n().createElement("div",{className:i4["status-mapping-row__raw"]},n().createElement("label",null,"Raw Value"),n().createElement(o.ksK,{id:`raw-${t}`,value:e.rawValue,onChange:e=>c(t,{rawValue:e.target.value}),disabled:!0,labelText:""})),n().createElement("div",{className:i4["status-mapping-row__label"]},n().createElement("label",null,"Display Label"),n().createElement(o.ksK,{id:`label-${t}`,value:e.label,onChange:e=>c(t,{label:e.target.value}),placeholder:"Enter display label",labelText:""})),n().createElement("div",{className:i4["status-mapping-row__tone"]},n().createElement("label",null,"Tone"),n().createElement(o.l6P,{id:`tone-${t}`,value:e.tone,onChange:e=>c(t,{tone:e.target.value})},i7.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label})))))))))}function oe({open:e,onClose:t,onSave:r,field:l,detectedFields:i}){let s=!!l,[d,c]=(0,a.useState)(l||{key:"",label:"",path:"",type:"TEXT",primary:!1,hidden:!1,order:0});return n().useEffect(()=>{l?c(l):c({key:"",label:"",path:"",type:"TEXT",primary:!1,hidden:!1,order:0})},[l,e]),n().createElement(o.aFV,{open:e,onRequestClose:()=>{c(l||{key:"",label:"",path:"",type:"TEXT",primary:!1,hidden:!1,order:0}),t()},modalHeading:s?"Edit Field":"Add Field",primaryButtonText:"Save",secondaryButtonText:"Cancel",onRequestSubmit:()=>{d.key&&d.label&&d.path&&(r(d),t())},size:"md"},n().createElement("div",{className:i4["field-config-modal"]},n().createElement(o.gE_,{legendText:""},n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"field-key",labelText:"Key *",value:d.key,onChange:e=>c({...d,key:e.target.value}),placeholder:"Unique identifier (e.g., status)",disabled:s,helperText:"Unique key for this field"}),n().createElement(o.ksK,{id:"field-label",labelText:"Label *",value:d.label,onChange:e=>c({...d,label:e.target.value}),placeholder:"Display label (e.g., Status)",helperText:"Human-readable label"}),n().createElement(o.l6P,{id:"field-path",labelText:"JSON Path *",value:d.path,onChange:e=>c({...d,path:e.target.value}),helperText:"Path to extract value from response"},n().createElement(o.ebT,{value:"",text:"Select a field..."}),i.map(e=>n().createElement(o.ebT,{key:e.path,value:e.path,text:`${e.name} (${e.path})`}))),n().createElement(o.l6P,{id:"field-type",labelText:"Type *",value:d.type,onChange:e=>c({...d,type:e.target.value}),helperText:"How should this value be interpreted and formatted?"},i8.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement(o.fs1,{id:"field-description",labelText:"Description",rows:2,value:d.description||"",onChange:e=>c({...d,description:e.target.value}),placeholder:"Optional description"}),n().createElement(o.lMk,{id:"field-primary",labelText:"Primary Field",labelA:"No",labelB:"Yes",toggled:d.primary,onToggle:e=>c({...d,primary:e})}),n().createElement(o.lMk,{id:"field-hidden",labelText:"Hidden",labelA:"No",labelB:"Yes",toggled:d.hidden,onToggle:e=>c({...d,hidden:e})}),"NUMBER"===d.type||"INTEGER"===d.type||"DECIMAL"===d.type?n().createElement("div",{className:i4["field-format-options"]},n().createElement("h5",null,"Number Formatting"),n().createElement(o.BJc,{orientation:"horizontal",gap:4},n().createElement(o.Q7x,{id:"field-decimals",label:"Decimal Places",value:d.format?.decimals||0,onChange:e=>{let t=parseInt(e.target.value)||0;c({...d,format:{...d.format,decimals:t}})},min:0,max:6}))):null))))}function ot({field:e,detectedField:t,isPrimary:r,onEdit:l,onUpdateField:i,onDelete:s,onMoveUp:d,onMoveDown:c,canMoveUp:m,canMoveDown:u,componentType:p}){let[_,g]=(0,a.useState)(!1),f=function(e){switch(e){case"STATUS_CARD":return["STATUS"];case"PROGRESS":return["PERCENTAGE"];default:return[]}}(p);return n().createElement("div",{className:i4["field-row"]},n().createElement("div",{className:i4["field-row__drag"]},n().createElement("div",{className:i4["field-row__drag-handle"]},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:E.Do,iconDescription:"Move up",onClick:d,disabled:!m}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:E.yd,iconDescription:"Move down",onClick:c,disabled:!u}))),n().createElement("div",{className:i4["field-row__content"]},n().createElement("div",{className:i4["field-row__main"]},n().createElement("div",{className:i4["field-row__info"]},n().createElement("div",{className:i4["field-row__header"]},n().createElement("span",{className:i4["field-row__label"]},e.label),r&&n().createElement(o.vwO,{type:"blue",size:"sm"},"Primary"),e.hidden&&n().createElement(o.vwO,{type:"gray",size:"sm"},"Hidden"),f.includes(e.type)&&n().createElement(o.vwO,{type:"green",size:"sm"},"Required")),n().createElement("div",{className:i4["field-row__meta"]},n().createElement("span",{className:i4["field-row__path"]},e.path),n().createElement(o.vwO,{type:"purple",size:"sm"},e.type))),n().createElement("div",{className:i4["field-row__actions"]},n().createElement(o.BJc,{orientation:"horizontal",gap:2},"STATUS"===e.type&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>g(!0)},"Map Status"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:es.ff,iconDescription:"Edit field",onClick:l}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,iconDescription:"Delete field",onClick:s}))))),"STATUS"===e.type&&n().createElement(i9,{open:_,onClose:()=>g(!1),onSave:t=>{i({...e,statusMappings:t}),g(!1)},currentMappings:e.statusMappings||[],detectedValues:t?.sampleValue?[String(t.sampleValue)]:[]}))}function or(){let{state:e}=i$(),t=iP(),{fields:r,componentType:l,detectedSchema:i,testResult:s}=e,[d,c]=(0,a.useState)(!1),[m,u]=(0,a.useState)(null),[p,_]=(0,a.useState)([]),[g,E]=(0,a.useState)([]),[f,y]=(0,a.useState)({unit:"milliseconds",format:"DD MMM YYYY, HH:mm",relative:!1}),h=i?.fields||[],v=function(e){switch(e){case"STATUS_CARD":return["Requires at least one STATUS field","Requires a primary field"];case"PROGRESS":return["Requires a PERCENTAGE field"];default:return["Requires at least one field"]}}(l),S=e=>{let a=r.findIndex(t=>t.key===e.key);if(a>=0){let n=[...r];n[a]=e,t({fields:n})}C()},T=()=>{i&&0!==h.length&&(t({fields:h.map((e,t)=>{let a=r.find(t=>t.path===e.path);return a||{key:e.name.replace(/[^a-zA-Z0-9]/g,"_").toLowerCase(),label:e.name,path:e.path,type:e.suggestedType||e.type,primary:0===t,hidden:!1,order:t,description:e.description}})}),C())},C=n().useCallback(()=>{let e=(0,iO.Kk)(r,l,s?.data,i?.arrayPath);_(e.errors),E(e.warnings??[])},[r,l,s,i]);n().useEffect(()=>{C()},[C]);let w=r.length>0,N=h.length>0,I=p.length>0;return n().createElement("div",{className:i4["fields-step"]},n().createElement("div",{className:i4["fields-step__header"]},n().createElement("h2",null,"Field Mapping"),n().createElement("p",{className:i4["fields-step__description"]},"Map fields from your API response to display fields. Configure types and formatting for each field.")),I&&n().createElement(o.jeF,{kind:"error",title:"Field Configuration Errors",subtitle:p.length>0?`${p.length} error(s) - see details above`:"",lowContrast:!0,style:{marginBottom:"1rem"}}),g.length>0&&n().createElement(o.jeF,{kind:"warning",title:"Unresolved Field Paths",subtitle:g.join(" \xb7 "),lowContrast:!0,style:{marginBottom:"1rem"}}),l&&n().createElement(o.jeF,{kind:"info",title:"Component Requirements",subtitle:v.join("; "),lowContrast:!0,style:{marginBottom:"1rem"},hideCloseButton:!0}),!w&&n().createElement("div",{className:i4["fields-step__empty"]},n().createElement("h3",null,"No Fields Configured"),n().createElement("p",null,N?`We detected ${h.length} fields from your endpoint response.`:"Test your endpoint first to detect available fields."),N&&n().createElement(o.$nd,{kind:"primary",renderIcon:b.OM,onClick:T},"Auto-Map Detected Fields")),w&&n().createElement("div",{className:i4["fields-step__list"]},n().createElement("div",{className:i4["fields-step__list-header"]},n().createElement("h4",null,"Configured Fields (",r.length,")"),N&&r.length<h.length&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:T},"Add Remaining Fields")),n().createElement("div",{className:i4["fields-step__fields"]},r.map((e,a)=>{let i=h.find(t=>t.path===e.path);return n().createElement(ot,{key:e.key,field:e,detectedField:i,isPrimary:e.primary,onEdit:()=>{u(e),c(!0)},onUpdateField:S,onDelete:()=>{var a;let n;return a=e.key,void((n=r.filter(e=>e.key!==a)).length>0&&!n.some(e=>e.primary)&&(n[0]={...n[0],primary:!0}),t({fields:n}),C())},onMoveUp:()=>(e=>{if(0===e)return;let a=[...r];[a[e-1],a[e]]=[a[e],a[e-1]],a.forEach((e,t)=>e.order=t),t({fields:a})})(a),onMoveDown:()=>(e=>{if(e===r.length-1)return;let a=[...r];[a[e],a[e+1]]=[a[e+1],a[e]],a.forEach((e,t)=>e.order=t),t({fields:a})})(a),canMoveUp:a>0,canMoveDown:a<r.length-1,componentType:l})})),n().createElement("div",{className:i4["fields-step__actions"]},n().createElement(o.$nd,{kind:"primary",renderIcon:b.OM,onClick:()=>{u(null),c(!0)}},"Add Field")),w&&r.some(e=>"TIMESTAMP"===e.type)&&n().createElement("div",{className:i4["fields-step__timestamp-config"]},n().createElement("div",{className:i4["fields-step__timestamp-header"]},n().createElement("h4",null,"Timestamp Format"),n().createElement("p",{className:i4["fields-step__timestamp-description"]},"Configure how timestamp fields are displayed")),n().createElement("div",{className:i4["fields-step__timestamp-settings"]},n().createElement("div",{className:i4["fields-step__timestamp-field"]},n().createElement("label",null,"Input unit"),n().createElement(o.l6P,{id:"timestamp-unit",size:"sm",value:f.unit,onChange:e=>{y({...f,unit:e.target.value})}},n().createElement(o.ebT,{value:"milliseconds",text:"Milliseconds"}),n().createElement(o.ebT,{value:"seconds",text:"Seconds"}))),n().createElement("div",{className:i4["fields-step__timestamp-field"]},n().createElement("label",null,"Display format"),n().createElement(o.ksK,{id:"timestamp-format",labelText:"",size:"sm",value:f.format,onChange:e=>{y({...f,format:e.target.value})},placeholder:"e.g., 15 Aug 2026, 19:23"})),n().createElement("div",{className:i4["fields-step__timestamp-field"]},n().createElement(o.lMk,{id:"timestamp-relative",size:"sm",labelText:"Show relative time",labelA:"No",labelB:"Yes",toggled:f.relative,onToggle:e=>{y({...f,relative:e})}}),n().createElement("span",{className:i4["fields-step__timestamp-helper"]},'Display timestamps as "2 minutes ago" instead of absolute time'))))),n().createElement(oe,{open:d,onClose:()=>c(!1),onSave:e=>{let a=r.findIndex(t=>t.key===e.key);if(a>=0){let n=[...r];n[a]=e,t({fields:n})}else t({fields:[...r,{...e,order:r.length}]});C()},field:m,detectedFields:h,componentType:l}))}let oa={"preview-step__header":"-esm-report-builder__preview-step__preview-step__header___8GGTm","preview-design-head":"-esm-report-builder__preview-step__preview-design-head___MrfTM","preview-design-head__icon":"-esm-report-builder__preview-step__preview-design-head__icon___Xw-Zn","preview-design-head__title":"-esm-report-builder__preview-step__preview-design-head__title___BYiU5","preview-design-head__desc":"-esm-report-builder__preview-step__preview-design-head__desc___JVYw3","preview-section":"-esm-report-builder__preview-step__preview-section___YQDjm","preview-section__divider":"-esm-report-builder__preview-step__preview-section__divider___vsFh6","preview-summary":"-esm-report-builder__preview-step__preview-summary___RRaW9","preview-summary__item":"-esm-report-builder__preview-step__preview-summary__item___5xg1m","preview-summary__icon":"-esm-report-builder__preview-step__preview-summary__icon___4rLgH","preview-summary__label":"-esm-report-builder__preview-step__preview-summary__label___VX+bA","preview-summary__value":"-esm-report-builder__preview-step__preview-summary__value___Kubko","preview-checklist":"-esm-report-builder__preview-step__preview-checklist___NkLbI","preview-checklist__item":"-esm-report-builder__preview-step__preview-checklist__item___I4I1I","preview-checklist__icon":"-esm-report-builder__preview-step__preview-checklist__icon___r0U1M","preview-checklist__icon--pass":"-esm-report-builder__preview-step__preview-checklist__icon--pass___a8+LE","preview-checklist__icon--fail":"-esm-report-builder__preview-step__preview-checklist__icon--fail___j5pDe","preview-checklist__label":"-esm-report-builder__preview-step__preview-checklist__label___bM9w-","preview-checklist__sub":"-esm-report-builder__preview-step__preview-checklist__sub___t+WSb","preview-save":"-esm-report-builder__preview-step__preview-save___Oe0PP"},on={NONE:"None",OPENMRS:"OpenMRS Session",BASIC:"Basic Auth",API_KEY:"API Key",BEARER_TOKEN:"Bearer Token"};function ol(){let{state:e,saveMonitor:t}=i$(),r=(0,i.Zp)(),[l,d]=(0,a.useState)(!1),[p,_]=(0,a.useState)(null),[E,f]=(0,a.useState)(!1),[b,y]=(0,a.useState)(0),h=(0,a.useMemo)(()=>(0,iO.stateToSavePayload)(e),[e]),v=function(e){if(e)return i1.find(t=>t.type===e||(t.aliases?.includes(e)??!1))}(e.componentType),S=(0,a.useMemo)(()=>(0,iO.yn)(e),[e]),T=(0,a.useMemo)(()=>(0,iO.lp)(e),[e]),C=0===S.length&&T.valid,w=e.fields.filter(e=>"STATUS"===e.type),N=w.every(e=>(e.statusMappings?.length??0)>0),I=[{icon:n().createElement(s.qz,null),label:"Data source",value:`${e.endpoint.method} ${e.endpoint.url||"—"}`},{icon:n().createElement(g.Zn,null),label:"Authentication",value:on[e.endpoint.auth?.type]||e.endpoint.auth?.type||"None"},{icon:n().createElement(tb.Ss,null),label:"Component",value:v?.label||e.componentType||"—"},{icon:n().createElement(nb.M4,null),label:"Timeout",value:`${e.general.timeout} sec`},{icon:n().createElement(u.wM,null),label:"Refresh",value:`${e.general.refreshInterval} sec`},{icon:n().createElement(m.vd,null),label:"Category",value:e.general.category||"—"}],k=[{pass:e.testResult?e.testResult.success:"edit"===e.mode&&!!e.endpoint.url,label:e.testResult?"Endpoint tested":"edit"===e.mode?"Endpoint configured":"Endpoint tested",sub:e.testResult?e.testResult.success?"Successfully connected and returned data":`Test failed: ${e.testResult.error||"unknown error"}`:"edit"===e.mode?"Endpoint configured and saved previously":"Run the endpoint test in the Data Source step"},{pass:e.fields.length>0,label:"Fields mapped",sub:e.fields.length>0?`${e.fields.length} field${1===e.fields.length?"":"s"} mapped to response paths`:"Map at least one response field"},{pass:0===w.length||N,label:"Status mapping complete",sub:0===w.length?"No status fields configured":N?"Status and thresholds configured":"Add status mappings to all STATUS fields"},{pass:T.valid,label:"Preview ready",sub:T.valid?"Monitor preview generated successfully":"Fix configuration errors to generate the preview"}],A=async()=>{d(!0),_(null);try{await t(),r("/admin/etl-monitors")}catch(e){_(e?.message||"Failed to save monitor")}finally{d(!1)}},R=async()=>{try{await navigator.clipboard.writeText(h.displayConfigJson||""),f(!0),window.setTimeout(()=>f(!1),2e3)}catch{}};return n().createElement("div",{className:oa["preview-step"]},n().createElement("div",{className:oa["preview-step__header"]},n().createElement("h2",null,"Preview & publish"),n().createElement("p",{className:oa["preview-step__description"]},"Review the monitor before saving it to the dashboard.")),p&&n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Save Failed",subtitle:p,onCloseButtonClick:()=>_(null),style:{marginBottom:"1rem"}}),n().createElement(l1,{loading:!1,onRefresh:()=>y(e=>e+1),actions:[{label:E?"Copied!":"Copy configuration JSON",onClick:R}]},v&&n().createElement("div",{className:oa["preview-design-head"]},n().createElement("span",{className:oa["preview-design-head__icon"],style:{backgroundColor:`${v.accent}1A`,color:v.accent}},v.icon),n().createElement("div",{className:oa["preview-design-head__text"]},n().createElement("h3",{className:oa["preview-design-head__title"]},v.label),n().createElement("p",{className:oa["preview-design-head__desc"]},v.description))),n().createElement("div",{key:b},n().createElement(iF,{state:e}))),n().createElement("div",{className:oa["preview-section"]},n().createElement("h4",null,"Configuration summary"),n().createElement("div",{className:oa["preview-summary"]},I.map(e=>n().createElement("div",{key:e.label,className:oa["preview-summary__item"]},n().createElement("span",{className:oa["preview-summary__icon"]},e.icon),n().createElement("div",{className:oa["preview-summary__text"]},n().createElement("div",{className:oa["preview-summary__label"]},e.label),n().createElement("div",{className:oa["preview-summary__value"]},e.value))))),n().createElement("div",{className:oa["preview-section__divider"]}),n().createElement("h4",null,"Validation checklist"),n().createElement("div",{className:oa["preview-checklist"]},k.map(e=>n().createElement("div",{key:e.label,className:oa["preview-checklist__item"]},n().createElement("span",{className:[oa["preview-checklist__icon"],e.pass?oa["preview-checklist__icon--pass"]:oa["preview-checklist__icon--fail"]].join(" ")},e.pass?n().createElement(U._j,null):n().createElement(es.$D,null)),n().createElement("div",null,n().createElement("div",{className:oa["preview-checklist__label"]},e.label),n().createElement("div",{className:oa["preview-checklist__sub"]},e.sub)))))),n().createElement("div",{className:oa["preview-save"]},n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:E?U.MG:c.QR,onClick:R},E?"Copied!":"Copy JSON"),n().createElement(o.$nd,{kind:"primary",renderIcon:g.eM,onClick:A,disabled:l||!C,title:C?void 0:S.join(", ")||"Configuration incomplete"},l?"Saving…":"Save Monitor")))}function oi(){let e=(0,i.Zp)(),[t]=(0,l.ok)(),r=t.get("mode")||"create",a=t.get("monitor");return n().createElement(iM,{mode:r,monitorId:a??void 0},n().createElement(oo,{onClose:()=>{e("/admin/etl-monitors")},mode:r}))}function oo({onClose:e,mode:t}){let{state:r,saveMonitor:a,updateState:l}=i$(),{has:i}=v(),{currentStep:d,goToNextStep:c,goToPreviousStep:m,canGoNext:u,canGoPrevious:p}=iU(),[_,f]=n().useState(null),[b,h]=n().useState(!1),S=(0,iO.yn)(r),T=!!r.parseError,C=i(y.RB.ETLMONITOR_ADD,y.RB.ETLMONITOR_EDIT),w=async()=>{if(S.length>0)return void f("Please fix validation errors before saving");h(!0),f(null);try{await a(),e()}catch(e){f(e?.message||"Failed to save monitor")}finally{h(!1)}},N=n().useMemo(()=>[{id:"general",label:"Basic information",sublabel:"Name & details"},{id:"data-source",label:"Data Source",sublabel:"Endpoint & test"},{id:"design",label:"Design",sublabel:"Choose layout"},{id:"fields",label:"Fields",sublabel:"Map data"},{id:"preview",label:"Preview",sublabel:"Review & save"}],[]),I=N.findIndex(e=>e.id===d),k=r.general.name||"New Monitor",A=r.general.categoryLabel||r.general.category||"ETL Monitor";return n().createElement("div",{className:iB["etl-monitor-builder-page"]},n().createElement("header",{className:iB["builder-header"]},n().createElement("div",{className:iB["builder-header__breadcrumb"]},n().createElement("span",{className:iB["builder-header__category"]},A),n().createElement("span",{className:iB["builder-header__separator"]},"/"),n().createElement("span",{className:iB["builder-header__name"]},k)),n().createElement("div",{className:iB["builder-header__title"]},"create"===t?"New ETL Monitor":"Edit ETL Monitor"),n().createElement("div",{className:iB["builder-header__actions"]},p&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:E.nk,onClick:()=>{p&&m()}},"Back"),u&&n().createElement(o.$nd,{kind:"primary",size:"sm",renderIcon:E.Qp,onClick:()=>{u&&c()}},"Continue"),!u&&"preview"===d&&n().createElement(o.$nd,{kind:"primary",size:"sm",renderIcon:g.eM,onClick:w,disabled:b||S.length>0||!C,title:C?void 0:"Requires ETL monitor privileges"},b?"Saving…":"Save Monitor"))),n().createElement("div",{className:iB["builder-content"]},n().createElement("div",{className:iB["builder-grid"]},n().createElement("div",{className:iB["builder-sidebar"]},n().createElement("nav",{className:iB["builder-steps-nav"],"aria-label":"Wizard steps"},n().createElement("ul",{className:iB["builder-steps-list"]},N.map((e,t)=>{let r=t<I?"completed":t===I?"current":"upcoming";return n().createElement("li",{key:e.id,className:`${iB["builder-step-item"]} ${iB[`builder-step-item--${r}`]}`},n().createElement("button",{type:"button",className:iB["builder-step-button"],"aria-current":"current"===r?"step":void 0},n().createElement("span",{className:iB["builder-step-number"]},"completed"===r?n().createElement(U._j,{size:16}):t+1),n().createElement("div",{className:iB["builder-step-content"]},n().createElement("span",{className:iB["builder-step-label"]},e.label),e.sublabel&&n().createElement("span",{className:iB["builder-step-sublabel"]},e.sublabel))))}))),n().createElement("div",{className:iB["builder-help-section"]},n().createElement(s._V,{size:16,className:iB["builder-help-icon"]}),n().createElement("div",{className:iB["builder-help-content"]},n().createElement("span",{className:iB["builder-help-label"]},"Need help?"),n().createElement("a",{href:"#",className:iB["builder-help-link"],onClick:e=>{e.preventDefault()}},"Learn how to create ETL monitors")))),n().createElement("div",{className:iB["builder-main"]},_&&n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:_,onClose:()=>f(null),style:{marginBottom:"1rem"}}),T&&"edit"===t&&n().createElement(o.jeF,{kind:"warning",title:"Configuration Parsing Issue",subtitle:`Some monitor configuration fields could not be parsed: ${r.parseError}. You may need to reconfigure these fields.`,style:{marginBottom:"1rem"},lowContrast:!0,hideCloseButton:!0}),S.length>0&&"preview"===d&&n().createElement(o.jeF,{kind:"error",title:"Validation Errors",subtitle:S.join(", "),style:{marginBottom:"1rem"},lowContrast:!0}),n().createElement("div",{className:iB["builder-step-content"]},(()=>{switch(d){case"general":default:return n().createElement(iW,null);case"data-source":return n().createElement(iZ,null);case"design":return n().createElement(i3,null);case"fields":return n().createElement(or,null);case"preview":return n().createElement(ol,null)}})())),n().createElement("div",{className:iB["builder-preview"]},"preview"===d?n().createElement(iG,null):n().createElement("div",{className:iB["builder-preview-panel"]},n().createElement("div",{className:iB["builder-preview-header"]},n().createElement("h4",null,"Live Preview"),n().createElement("p",{className:iB["builder-preview-description"]},"See how your monitor will appear in real-time")),n().createElement("div",{className:iB["builder-preview-content"]},r.componentType&&r.fields.length>0?n().createElement(n().Fragment,null,n().createElement(iF,{state:r}),r.componentType&&n().createElement("div",{className:iB["builder-preview-settings"]},n().createElement("div",{className:iB["builder-preview-settings-header"]},n().createElement("h5",null,"Selected Design Settings")),n().createElement("div",{className:iB["builder-preview-settings-content"]},n().createElement("div",{className:iB["builder-preview-setting"]},n().createElement("label",null,"Component"),n().createElement(o.vwO,{type:"purple"},r.componentType)),n().createElement("div",{className:iB["builder-preview-setting"]},n().createElement("label",null,"Density"),n().createElement(o.l6P,{id:"density-select",size:"sm",inline:!0,value:r.density||"compact",onChange:e=>{l({density:e.target.value})}},n().createElement(o.ebT,{value:"compact",text:"Compact"}),n().createElement(o.ebT,{value:"default",text:"Default"}),n().createElement(o.ebT,{value:"spacious",text:"Spacious"}))),n().createElement("div",{className:iB["builder-preview-setting"]},n().createElement("label",null,"Section"),n().createElement(o.l6P,{id:"section-select",size:"sm",inline:!0,value:r.layout?.section||"overview",onChange:e=>{l({layout:{section:e.target.value,span:r.layout?.span??{sm:4,md:4,lg:4},priority:r.layout?.priority??1}})}},n().createElement(o.ebT,{value:"overview",text:"Overview"}),n().createElement(o.ebT,{value:"execution",text:"Execution"}),n().createElement(o.ebT,{value:"history",text:"History"}),n().createElement(o.ebT,{value:"errors",text:"Errors"}),n().createElement(o.ebT,{value:"configuration",text:"Configuration"})))),n().createElement("div",{className:iB["builder-preview-settings-note"]},n().createElement(tw.$$,{size:12}),n().createElement("span",null,"You can change the design or settings later. Your data and mappings will be preserved."))),n().createElement("div",{className:iB["builder-preview-config"]},n().createElement("div",{className:iB["builder-preview-config-header"]},n().createElement("h5",null,"Generated Configuration (JSON)")),n().createElement("pre",{className:iB["builder-preview-json"]},JSON.stringify({schemaVersion:2,component:r.componentType,fields:r.fields.map(e=>({key:e.key,label:e.label,path:e.path,type:e.type}))},null,2)))):n().createElement("div",{className:iB["builder-preview-empty"]},n().createElement("p",null,"Configure your data source and select a design to see the live preview"))))))))}function os({state:e}){let[t,a]=n().useState(null);n().useEffect(()=>{Promise.resolve().then(r.bind(r,6434)).then(e=>{a(()=>e.MonitorRenderer)})},[]);let l=n().useMemo(()=>e.componentType&&e.fields&&0!==e.fields.length?{schemaVersion:2,component:e.componentType,data:{rootPath:"$"},fields:e.fields,layout:e.layout,emptyState:e.emptyState,componentConfig:e.componentConfig,presentation:{title:e.general.name||"Preview Monitor",description:e.general.description}}:null,[e]),i=n().useMemo(()=>{let t={};return e.fields?.forEach(e=>{let r=e.path.startsWith("$.")?e.path.slice(2):e.key;switch(e.type){case"STATUS":t[r]="UP";break;case"PERCENTAGE":t[r]=67;break;case"TIMESTAMP":t[r]=Date.now();break;case"DURATION":t[r]=5432;break;case"BOOLEAN":t[r]=!0;break;case"NUMBER":case"INTEGER":case"DECIMAL":t[r]=100;break;default:t[r]=`Sample ${e.label}`}}),t},[e.fields]),o=e.testResult?.data||e.detectedSchema?.rawSample||i;return l?t?n().createElement("div",{className:"builder-preview-renderer"},n().createElement(t,{config:l,data:o,loading:!1,error:null})):n().createElement("div",{className:"builder-preview-placeholder"},n().createElement("p",{style:{color:"var(--cds-text-secondary, #666)"}},"Loading preview renderer...")):n().createElement("div",{className:"builder-preview-placeholder"},n().createElement("p",{style:{color:"var(--cds-text-secondary, #666)"}},e.componentType?"Configure fields to see the live preview":"Select a component type to see the preview"))}function od({open:e,mode:t,onClose:r,onSave:a}){let{state:l}=i$(),{currentStep:i,goToNextStep:s,goToPreviousStep:d,canGoNext:c,canGoPrevious:m}=iU(),[u,p]=n().useState(null),[_,f]=n().useState(!1),b=(0,iO.yn)(l),y=!!l.parseError,h=async()=>{if(b.length>0)return void p("Please fix validation errors before saving");f(!0),p(null);try{let e={name:l.general.name.trim(),code:l.general.code.trim()||void 0,description:l.general.description.trim()||void 0,monitorType:l.componentType,category:l.general.category.trim()||void 0,refreshInterval:l.general.refreshInterval,timeout:l.general.timeout,active:l.general.active,configJson:JSON.stringify({apiEndpoint:{url:l.endpoint.url,method:l.endpoint.method,auth:{type:l.endpoint.auth.type,useSession:l.endpoint.auth.useSession,username:l.endpoint.auth.username,password:l.endpoint.auth.password,headerName:l.endpoint.auth.headerName,apiKey:l.endpoint.auth.apiKey,token:l.endpoint.auth.token}}}),displayConfigJson:JSON.stringify({schemaVersion:2,component:l.componentType,fields:l.fields,layout:l.layout,emptyState:l.emptyState,componentConfig:l.componentConfig})};await a(e),r()}catch(e){p(e?.message||"Failed to save monitor")}finally{f(!1)}},v=()=>{(!l.isDirty||window.confirm("You have unsaved changes. Are you sure you want to close?"))&&r()},S=[{id:"general",label:"General"},{id:"data-source",label:"Data Source"},{id:"design",label:"Design"},{id:"fields",label:"Fields"},{id:"preview",label:"Preview"}],T=S.findIndex(e=>e.id===i);return n().createElement(o.aFV,{open:e,onRequestClose:v,modalHeading:"create"===t?"New ETL Monitor":"Edit ETL Monitor",primaryButtonText:_?"Saving…":"Save",secondaryButtonText:"Cancel",onSecondarySubmit:v,onRequestSubmit:h,primaryButtonDisabled:_||b.length>0,size:"lg",className:"etl-monitor-builder-modal"},n().createElement("div",{className:"etl-monitor-builder-modal__content"},n().createElement(o.xA9,{className:"etl-monitor-builder-modal__grid"},n().createElement(o.VPZ,{sm:4,md:2,lg:3,className:"etl-monitor-builder-modal__sidebar"},n().createElement("nav",{className:"builder-steps-nav"},n().createElement("ul",{className:"builder-steps-list"},S.map((e,t)=>{let r=t<T,a=e.id===i,l=t<=T;return n().createElement("li",{key:e.id,className:["builder-step-item",a&&"builder-step-item--current",r&&"builder-step-item--completed",!l&&"builder-step-item--disabled"].filter(Boolean).join(" ")},n().createElement("button",{type:"button",disabled:!l,onClick:()=>{},className:"builder-step-button"},n().createElement("span",{className:"builder-step-number"},r?"✓":t+1),n().createElement("span",{className:"builder-step-label"},e.label)))})))),n().createElement(o.VPZ,{sm:12,md:14,lg:13,className:"etl-monitor-builder-modal__main"},n().createElement("div",{className:"builder-step-content"},u&&n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:u,onClose:()=>p(null),style:{marginBottom:"1rem"}}),y&&"edit"===t&&n().createElement(o.jeF,{kind:"warning",title:"Configuration Parsing Issue",subtitle:`Some monitor configuration fields could not be parsed: ${l.parseError}. You may need to reconfigure these fields.`,style:{marginBottom:"1rem"},lowContrast:!0,hideCloseButton:!0}),b.length>0&&"preview"===i&&n().createElement(o.jeF,{kind:"error",title:"Validation Errors",subtitle:b.join(", "),style:{marginBottom:"1rem"},lowContrast:!0}),(()=>{switch(i){case"general":default:return n().createElement(iW,null);case"data-source":return n().createElement(iZ,null);case"design":return n().createElement(i3,null);case"fields":return n().createElement(or,null);case"preview":return n().createElement(ol,null)}})()),n().createElement("div",{className:"builder-step-footer"},n().createElement(o.BJc,{orientation:"horizontal",gap:4},m&&n().createElement(o.$nd,{kind:"secondary",renderIcon:E.nk,onClick:()=>{m&&d()}},"Previous"),c&&n().createElement(o.$nd,{kind:"primary",renderIcon:E.Qp,onClick:()=>{c&&s()}},"Next"),!c&&"preview"===i&&n().createElement(o.$nd,{kind:"primary",renderIcon:g.eM,onClick:h,disabled:_||b.length>0},_?"Saving…":"Save Monitor")))),n().createElement(o.VPZ,{sm:4,md:6,lg:8,className:"etl-monitor-builder-modal__preview"},n().createElement("div",{className:"builder-preview-panel"},n().createElement("div",{className:"builder-preview-header"},n().createElement("h4",null,"Live Preview"),n().createElement("span",{className:"builder-preview-badge"},l.componentType||"Select a component")),n().createElement("div",{className:"builder-preview-content"},n().createElement(os,{state:l})))))))}function oc({open:e,mode:t,monitorId:r,onClose:a,onSave:l}){return e?n().createElement(iM,{mode:t,monitorId:r},n().createElement(od,{open:e,mode:t,monitorId:r,onClose:a,onSave:l})):null}let om=[{key:"name",header:"Name"},{key:"code",header:"Code"},{key:"monitorType",header:"Type"},{key:"category",header:"Category"},{key:"refreshInterval",header:"Refresh"},{key:"status",header:"Status"},{key:"actions",header:"Actions"}],ou={name:"",code:"",description:"",monitorType:"STATUS_CARD",category:"",refreshInterval:30,timeout:10,active:!0,apiUrl:"",apiMethod:"GET",authType:"NONE",authUsername:"",authPassword:"",authHeaderName:"",authApiKey:"",authToken:"",displayColumnsJson:""},op=[{value:"STATUS_CARD",label:"Status Card"},{value:"METRICS_GRID",label:"Metric Card"},{value:"PROGRESS",label:"Progress Card"},{value:"TABLE",label:"Table Card"},{value:"DETAILS",label:"Details Card"},{value:"SUMMARY_CARD",label:"Summary Card"},{value:"LOG",label:"Log / Timeline Card"},{value:"ERROR_LOG",label:"Error Log Card"},{value:"TIME_SERIES",label:"Time Series Chart"},{value:"PROGRESS_BAR",label:"Progress Bar (legacy)"},{value:"DATA_TABLE",label:"Data Table (legacy)"}],o_=[{value:"NONE",label:"None"},{value:"BASIC",label:"Basic Auth"},{value:"API_KEY",label:"API Key"},{value:"BEARER_TOKEN",label:"Bearer Token"},{value:"OPENMRS",label:"OpenMRS Session"}];function og(){let e=(0,i.Zp)(),{has:t}=v(),r=t(y.RB.ETLMONITOR_ADD,y.RB.ETLMONITOR_EDIT),a=t(y.RB.ETLMONITOR_PURGE),[l,s]=n().useState(""),[d,c]=n().useState([]),[m,u]=n().useState(!1),[p,_]=n().useState(null),[g,E]=n().useState(!1),[f,h]=n().useState("create"),[S,T]=n().useState(null),[C,w]=n().useState(ou),[N,I]=n().useState(!1),[k,A]=n().useState(!1),R=n().useCallback(async e=>{u(!0),_(null);try{let t=await lA(l,e);c(t)}catch(e){_(e?.message??"Failed to load ETL monitors")}finally{u(!1)}},[l]);n().useEffect(()=>{let e=new AbortController;return R(e.signal),()=>e.abort()},[R]);let O=async()=>{if(!C.name.trim()||!C.apiUrl.trim())return void _("Name and API URL are required");I(!0),_(null);try{let e,t={name:C.name.trim(),code:C.code.trim()||void 0,description:C.description.trim()||void 0,monitorType:C.monitorType,category:C.category.trim()||void 0,refreshInterval:C.refreshInterval,timeout:C.timeout,active:C.active,configJson:(e={apiEndpoint:{url:C.apiUrl,method:C.apiMethod,authType:C.authType}},"BASIC"===C.authType?e.apiEndpoint.authConfig={username:C.authUsername,password:C.authPassword}:"API_KEY"===C.authType?e.apiEndpoint.authConfig={headerName:C.authHeaderName,apiKey:C.authApiKey}:"BEARER_TOKEN"===C.authType?e.apiEndpoint.authConfig={token:C.authToken}:"OPENMRS"===C.authType&&(e.apiEndpoint.authConfig={useSession:"true"}),JSON.stringify(e,null,2)),displayConfigJson:C.displayColumnsJson.trim()||void 0};"create"===f?await lD(t):S?.uuid&&await lx(S.uuid,t),E(!1);let r=new AbortController;await R(r.signal)}catch(e){_(e?.message??"Failed to save ETL monitor")}finally{I(!1)}},D=async e=>{if(e?.uuid&&window.confirm(`Retire ETL monitor "${e.name}"?`))try{await lL(e.uuid);let t=new AbortController;await R(t.signal)}catch(e){_(e?.message??"Failed to retire ETL monitor")}},x=d.map(e=>({id:e.uuid,name:e.name,code:e.code||"—",monitorType:e.monitorType||"—",category:e.category||"—",refreshInterval:`${e.refreshInterval}s`,status:!1===e.active||e.retired?"Inactive":"Active",actions:""}));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"ETL Monitors",subtitle:"Configure and monitor external ETL processes. Set up API endpoints and define how to extract and display data.",actions:r?n().createElement(o.BJc,{orientation:"horizontal",gap:2},n().createElement(o.$nd,{size:"sm",renderIcon:b.OM,onClick:()=>e("/admin/etl-monitors/builder?mode=create")},"New Monitor"),n().createElement(o.$nd,{size:"sm",kind:"ghost",onClick:()=>{h("create"),T(null),w(ou),E(!0)}},"Advanced (JSON)")):void 0}),n().createElement("div",{style:{padding:"0 1rem 1rem",display:"grid",gap:"1rem"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search ETL monitors…",value:l,onChange:e=>s(e.target.value)}),p?n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:p}):null,m?n().createElement(o.OOb,{rowCount:5,columnCount:7,showHeader:!1,showToolbar:!1}):n().createElement(o.bQt,{rows:x,headers:om},({rows:t,headers:l,getHeaderProps:i,getRowProps:s})=>n().createElement(o.K3K,null,n().createElement(o.XIK,{useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,l.map(e=>n().createElement(o.A0N,{key:e.key,...i({header:e})},e.header)))),n().createElement(o.BFY,null,t.map(t=>{let l=d.find(e=>e.uuid===t.id);return n().createElement(o.Hjg,{key:t.id,...s({row:t})},n().createElement(o.nA6,null,t.cells[0].value),n().createElement(o.nA6,null,t.cells[1].value),n().createElement(o.nA6,null,t.cells[2].value),n().createElement(o.nA6,null,t.cells[3].value),n().createElement(o.nA6,null,t.cells[4].value),n().createElement(o.nA6,null,l?.active===!1||l?.retired?n().createElement(o.vwO,{type:"gray"},"Inactive"):n().createElement(o.vwO,{type:"green"},"Active")),n().createElement(o.nA6,null,n().createElement("div",{style:{display:"flex",gap:"0.5rem"}},r&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:es.ff,iconDescription:"Edit",hasIconOnly:!0,onClick:()=>l&&void e(`/admin/etl-monitors/builder?mode=edit&monitor=${l.uuid}`)}),a&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:P.zH,iconDescription:"Retire",hasIconOnly:!0,onClick:()=>l&&D(l)}))))})))))),n().createElement(o.aFV,{open:g,modalHeading:"create"===f?"New ETL Monitor":"Edit ETL Monitor",primaryButtonText:N?"Saving…":"Save",secondaryButtonText:"Cancel",onRequestClose:()=>!N&&E(!1),onRequestSubmit:O,primaryButtonDisabled:N||!C.name.trim()||!C.apiUrl.trim(),size:"lg"},n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"monitor-name",labelText:"Name",placeholder:"e.g., Uganda ETL Status",value:C.name,onChange:e=>w(t=>({...t,name:e.target.value}))}),n().createElement(o.ksK,{id:"monitor-code",labelText:"Code",placeholder:"e.g., uganda-etl-status",value:C.code,onChange:e=>w(t=>({...t,code:e.target.value}))}),n().createElement(o.fs1,{id:"monitor-description",labelText:"Description",rows:2,value:C.description,onChange:e=>w(t=>({...t,description:e.target.value}))}),n().createElement(o.l6P,{id:"monitor-type",labelText:"Monitor Type",value:C.monitorType,onChange:e=>w(t=>({...t,monitorType:e.target.value}))},op.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement(o.ksK,{id:"monitor-category",labelText:"Category",placeholder:"e.g., Uganda ETL",value:C.category,onChange:e=>w(t=>({...t,category:e.target.value}))}),n().createElement(o.BJc,{orientation:"horizontal",gap:5},n().createElement("div",null,n().createElement("label",{htmlFor:"refresh-interval",style:{display:"block",marginBottom:"0.5rem"}},"Refresh Interval (seconds)"),n().createElement(o.Q7x,{id:"refresh-interval",min:5,max:3600,value:C.refreshInterval,onChange:e=>{let t=parseInt(e.target.value)||30;w(e=>({...e,refreshInterval:t}))}})),n().createElement("div",null,n().createElement("label",{htmlFor:"timeout",style:{display:"block",marginBottom:"0.5rem"}},"Timeout (seconds)"),n().createElement(o.Q7x,{id:"timeout",min:1,max:300,value:C.timeout,onChange:e=>{let t=parseInt(e.target.value)||10;w(e=>({...e,timeout:t}))}}))),n().createElement(o.lMk,{id:"monitor-active",labelText:"Active",toggled:C.active,onToggle:e=>w(t=>({...t,active:e}))}),n().createElement("div",{style:{padding:"1rem",background:"var(--cds-background, #f4f4f4)",borderRadius:"0.5rem"}},n().createElement("h4",{style:{margin:"0 0 1rem 0"}},"API Endpoint Configuration"),n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"api-url",labelText:"API URL",placeholder:"/ws/rest/v1/ugandareportsetl/etl/status",value:C.apiUrl,onChange:e=>w(t=>({...t,apiUrl:e.target.value})),helperText:"Can be relative (starts with /) or absolute"}),n().createElement(o.l6P,{id:"api-method",labelText:"HTTP Method",value:C.apiMethod,onChange:e=>w(t=>({...t,apiMethod:e.target.value}))},n().createElement(o.ebT,{value:"GET",text:"GET"}),n().createElement(o.ebT,{value:"POST",text:"POST"})),n().createElement(o.l6P,{id:"auth-type",labelText:"Authentication",value:C.authType,onChange:e=>w(t=>({...t,authType:e.target.value}))},o_.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),(()=>{switch(C.authType){case"BASIC":return n().createElement(o.BJc,{gap:3},n().createElement(o.ksK,{id:"auth-username",labelText:"Username",value:C.authUsername,onChange:e=>w(t=>({...t,authUsername:e.target.value}))}),n().createElement(o.ksK,{id:"auth-password",labelText:"Password",type:"password",value:C.authPassword,onChange:e=>w(t=>({...t,authPassword:e.target.value}))}));case"API_KEY":return n().createElement(o.BJc,{gap:3},n().createElement(o.ksK,{id:"auth-header-name",labelText:"Header Name",placeholder:"e.g., X-API-Key",value:C.authHeaderName,onChange:e=>w(t=>({...t,authHeaderName:e.target.value}))}),n().createElement(o.ksK,{id:"auth-api-key",labelText:"API Key",type:"password",value:C.authApiKey,onChange:e=>w(t=>({...t,authApiKey:e.target.value}))}));case"BEARER_TOKEN":return n().createElement(o.ksK,{id:"auth-token",labelText:"Bearer Token",type:"password",value:C.authToken,onChange:e=>w(t=>({...t,authToken:e.target.value}))});case"OPENMRS":return n().createElement(o.jeF,{kind:"info",title:"Using OpenMRS Session",subtitle:"The monitor will use your current OpenMRS session. No additional credentials needed.",lowContrast:!0});default:return null}})())),n().createElement("div",{style:{padding:"1rem",background:"var(--cds-background, #f4f4f4)",borderRadius:"0.5rem"}},n().createElement("h4",{style:{margin:"0 0 1rem 0"}},"Display Configuration (JSON)"),n().createElement(o.fs1,{id:"display-config",labelText:"Display Configuration JSON",rows:6,value:C.displayColumnsJson,placeholder:`{
|
|
307
|
+
${e}`)}console.log("✅ [Section] All indicators compiled successfully",{total:l.length,withWarnings:l.filter(e=>e.sql.compiled.includes("--"))});let d={version:1,name:u.name.trim(),description:u.description.trim()||void 0,disaggregation:n,indicators:l,exchangeMappings:{dhis2:{version:1,enabled:u.dhis2Enabled,datasetId:aT(u.dhis2DatasetId)||void 0,periodType:aT(u.dhis2PeriodType)||void 0,orgUnitStrategy:u.dhis2OrgUnitStrategy,mappingMode:"dataElement-categoryOptionCombo",indicatorMappings:u.selected.slice().sort((e,t)=>e.sortOrder-t.sortOrder).map(e=>({indicatorUuid:e.id,dataElementId:aT(u.dhis2IndicatorMap[e.id]?.dataElementId)||void 0,categoryOptionComboByDisagg:u.disaggEnabled&&u.disaggKeys.length?u.dhis2IndicatorMap[e.id]?.cocByDisagg??{}:void 0}))}},compiledAt:new Date().toISOString()},c={id:u.isEdit?s?.uuid:void 0,name:u.name.trim(),description:u.description.trim()||void 0,disaggregationEnabled:u.disaggEnabled,ageCategoryUuid:u.disaggEnabled?u.selectedAgeCategory?.uuid??null:null,ageCategoryCode:u.disaggEnabled?u.selectedAgeCategory?.code??null:null,genders:u.pickedGenders,indicators:l.map(e=>({id:e.indicatorUuid,type:e.kind,sortOrder:e.sortOrder,finalDisagg:e.disaggregation})),configJson:JSON.stringify(d,null,2)};a(c)}catch(e){E(e?.message??"Failed to build section config")}finally{_(!1)}}};return n().createElement(o.aFV,{open:t,onRequestClose:r,modalHeading:u.isEdit?"Edit Section":"Create Section",primaryButtonText:u.isEdit?"Save changes":"Create Section",secondaryButtonText:"Cancel",onRequestSubmit:b,primaryButtonDisabled:!f,size:"lg"},n().createElement(o.BJc,{gap:5},n().createElement("div",{style:{opacity:.8}},"Sections are groups of indicators with shared disaggregation options."),c?n().createElement(o.OuH,{description:"Loading age categories…"}):null,m?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Age categories",subtitle:m}):null,g?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Section",subtitle:g}):null,n().createElement(aw,{name:u.name,setName:u.setName,description:u.description,setDescription:u.setDescription}),n().createElement("hr",{style:{border:0,borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)"}}),n().createElement(aI,{disaggEnabled:u.disaggEnabled,setDisaggEnabled:u.setDisaggEnabled,ageCategories:d,selectedAgeCategory:u.selectedAgeCategory,setSelectedAgeCategory:u.setSelectedAgeCategory,genderF:u.genderF,setGenderF:u.setGenderF,genderM:u.genderM,setGenderM:u.setGenderM,pickedGenders:u.pickedGenders,disaggMissing:u.disaggMissing,idPrefix:u.isEdit?"edit":"create"}),n().createElement(ak,{q:u.q,setQ:u.setQ,available:u.available,selectedFull:u.selectedFull,selected:u.selected,isSelected:u.isSelected,toggleIndicator:u.toggleIndicator,moveSelected:u.moveSelected,idPrefix:u.isEdit?"edit":"create",dbSearching:u.dbSearching,dbSearchError:u.dbSearchError}),n().createElement(aA,{dhis2Enabled:u.dhis2Enabled,setDhis2Enabled:u.setDhis2Enabled,dhis2DatasetId:u.dhis2DatasetId,setDhis2DatasetId:u.setDhis2DatasetId,dhis2PeriodType:u.dhis2PeriodType,setDhis2PeriodType:u.setDhis2PeriodType,dhis2OrgUnitStrategy:u.dhis2OrgUnitStrategy,setDhis2OrgUnitStrategy:u.setDhis2OrgUnitStrategy,disaggEnabled:u.disaggEnabled,selectedAgeCategory:u.selectedAgeCategory,pickedGenders:u.pickedGenders,selectedFull:u.selectedFull,selected:u.selected,disaggKeys:u.disaggKeys,dhis2IndicatorMap:u.dhis2IndicatorMap,updateDhis2DataElement:u.updateDhis2DataElement,updateDhis2Coc:u.updateDhis2Coc}),p?n().createElement(o.OuH,{description:"Building section SQL…"}):null))}var aO=r(1672);async function aD(e,t){let{data:r}=await (0,aO.jX)((0,h.openmrsFetch)("/ws/rest/v1/reportbuilder/sectionpreview",{method:"POST",headers:{"Content-Type":"application/json"},body:e,signal:t}));return r}function ax(e){return String(e??"").trim().toLowerCase()}function aL(e){return e?e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'"):e}function aM(e){let t=(e.columns??[]).map(ax);return t.includes("age_group")&&t.includes("gender")&&t.includes("value")}function a$(e){let t=String(e??"").trim().toLowerCase().split("-")[0].replace("+","").trim(),r=t.match(/^(\d+)\s*(d|day|days|m|mo|mos|month|months|y|yr|yrs|year|years)?$/i);if(!r){let e=t.match(/\d+/);return e?365*Number(e[0]):1/0}let a=Number(r[1]),n=(r[2]??"y").toLowerCase();return"d"===n||"day"===n||"days"===n?a:"m"===n||"mo"===n||"mos"===n||"month"===n||"months"===n?30*a:365*a}function aP({open:e,onClose:t,section:r}){let[a,l]=n().useState(""),[i,s]=n().useState(""),[c,m]=n().useState(""),[u,p]=n().useState(200),[_,g]=n().useState(!1),[E,f]=n().useState(null),[b,y]=n().useState(null),[h,v]=n().useState({}),[S,T]=n().useState(!1),[C,w]=n().useState(0);n().useEffect(()=>{e&&(l(""),s(""),m(""),p(200),f(null),y(null),g(!1),v({}),w(0))},[e]),n().useEffect(()=>{1===C&&r&&b?.results&&b.results.forEach(e=>{e.indicatorUuid&&!h[e.indicatorUuid]&&I(e.indicatorUuid,r)})},[C,b,r]);let N=!!r?.uuid&&!_,I=(e,t)=>{if(!h[e]){T(!0);try{let r=((t.configJson?JSON.parse(t.configJson):{}).indicators||[]).find(t=>t.indicatorUuid===e);if(!r)return void v(t=>({...t,[e]:"-- Error: Indicator not found in section config"}));let a=r.sql?.compiled;if(!a)return void v(t=>({...t,[e]:"-- Error: No compiled SQL found for this indicator in section config"}));let n=a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/>=/g,">=").replace(/<=/g,"<=").replace(/>e;/g,">=").replace(/≥/g,">=").replace(/<e;/g,"<=").replace(/≤/g,"<=");v(t=>({...t,[e]:n}))}catch(t){v(r=>({...r,[e]:`-- Error extracting SQL from config: ${t?.message||"Unknown error"}`}))}finally{T(!1)}}},k=async()=>{if(!r?.uuid)return;if(!a||!i)return void f("Start date and End date are required.");let e=new AbortController;g(!0),f(null),y(null);try{let t=await aD({sectionUuid:r.uuid,indicatorUuid:c.trim()||void 0,startDate:a,endDate:i,maxRows:u,params:{}},e.signal);y(t)}catch(e){f(e?.message??"Failed to preview section")}finally{g(!1)}},A=b?.results??[],R=function(e){let t=e.filter(e=>!e.error&&aM(e)),r=(e,t)=>(e.columns??[]).findIndex(e=>ax(e)===t),a=new Set,n=new Set;for(let e of t){let t=r(e,"age_group"),l=r(e,"gender");if(!(t<0)&&!(l<0))for(let r of e.rows??[]){let e=r?.[t],i=r?.[l];null!=e&&a.add(String(e)),null!=i&&n.add(String(i))}}let l=Array.from(n);l.sort((e,t)=>{let r=e.toUpperCase(),a=t.toUpperCase(),n=e=>"F"===e?0:"M"===e?1:2,l=n(r),i=n(a);return l!==i?l-i:r.localeCompare(a)});let i=Array.from(a);i.sort((e,t)=>{let r=a$(e),a=a$(t);return r!==a?r-a:e.localeCompare(t)});let o=[];for(let e of i)for(let t of l){let r=`${e}__${t}`;o.push({key:r,header:`${e} ${t}`,age:e,gender:t})}let s=e.map((e,t)=>{let a={id:e.indicatorUuid||String(t),indicator:aL(e.name||e.code||e.indicatorUuid),kind:e.kind??"",error:e.error??""};for(let e of o)a[e.key]=0;if(!e.error&&aM(e)){let t=r(e,"age_group"),n=r(e,"gender"),l=r(e,"value");for(let r of e.rows??[]){let e=String(r?.[t]??""),i=String(r?.[n]??""),o=r?.[l],s=`${e}__${i}`;s in a&&(a[s]=o??0)}}return a});return{headers:[{key:"indicator",header:"Indicator"},{key:"kind",header:"Type"},...o.map(e=>({key:e.key,header:e.header})),{key:"error",header:"Error"}],rows:s,hasAnyDisagg:o.length>0}}(A),O=A.filter(e=>e.error||!aM(e));return n().createElement(o.aFV,{open:e,onRequestClose:t,modalHeading:r?`Preview Section: ${r.name}`:"Preview Section",primaryButtonText:"Close",secondaryButtonText:"Cancel",onRequestSubmit:t,size:"lg"},n().createElement(o.BJc,{gap:5},r?null:n().createElement(o.jeF,{kind:"warning",lowContrast:!0,title:"No section",subtitle:"Select a section first."}),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.75rem"}},n().createElement(o.ksK,{id:"section-preview-startdate","data-testid":"section-preview-startdate",labelText:"Start date",type:"date",value:a,onChange:e=>l(e.target.value),disabled:!r}),n().createElement(o.ksK,{id:"section-preview-enddate","data-testid":"section-preview-enddate",labelText:"End date",type:"date",value:i,onChange:e=>s(e.target.value),disabled:!r})),n().createElement(o.ksK,{id:"section-preview-indicatoruuid","data-testid":"section-preview-indicatoruuid",labelText:"Indicator UUID (optional)",value:c,onChange:e=>m(e.target.value),disabled:!r}),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr auto",gap:"0.75rem",alignItems:"end"}},n().createElement(o.ksK,{id:"section-preview-maxrows","data-testid":"section-preview-maxrows",labelText:"Max rows",value:String(u),onChange:e=>{let t=Number(e.target.value);p(Number.isFinite(t)&&t>0?t:200)},disabled:!r}),n().createElement(o.$nd,{"data-testid":"section-preview-run",kind:"primary",renderIcon:d.jG,disabled:!N,onClick:k},"Preview Section")),_?n().createElement(o.OuH,{description:"Running section preview…"}):null,E?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Preview",subtitle:E}):null,n().createElement(o.tUM,{selectedIndex:C,onChange:({selectedIndex:e})=>w(e),"aria-label":"Section preview tabs"},n().createElement(o.wbY,{"aria-label":"Section preview tab list"},n().createElement(o.ozo,null,"Results"),n().createElement(o.ozo,null,"SQL")),n().createElement(o.T2N,null,n().createElement(o.KpK,null,b?n().createElement(n().Fragment,null,R.hasAnyDisagg?n().createElement(o.K3K,{"data-testid":"section-preview-matrix",title:"Section preview matrix",description:"Indicators are rows; disaggregations are columns. Missing values show as 0."},n().createElement(o.bQt,{rows:R.rows,headers:R.headers,size:"md",useZebraStyles:!0},({rows:e,headers:t,getHeaderProps:r,getRowProps:a,getTableProps:l})=>n().createElement(o.XIK,l(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,t.map(e=>n().createElement(o.A0N,{key:e.key,...r({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id,...a({row:e})},e.cells.map(e=>n().createElement(o.nA6,{key:e.id},e.value)))))))):n().createElement(o.jeF,{kind:"info",lowContrast:!0,title:"No disaggregated results",subtitle:"No indicator returned (age_group, gender, value) rows for this preview."}),O.length?n().createElement(o.BJc,{gap:4},n().createElement("div",{style:{fontWeight:600,marginTop:"0.5rem"}},"Other results"),O.map((e,t)=>{var r,a;if(e.error)return n().createElement(o.jeF,{key:`${e.indicatorUuid}-${t}`,kind:"error",lowContrast:!0,title:`Indicator error: ${aL(e.name||e.code||e.indicatorUuid)}`,subtitle:e.error});let{headers:l,tableRows:i}=(r=e.columns??[],a=e.rows??[],{headers:r.map((e,t)=>({key:`${t}`,header:e})),tableRows:(a??[]).map((e,t)=>{let a={id:String(t)};return r.forEach((t,r)=>{a[`${r}`]=e?.[r]}),a})});return n().createElement(o.K3K,{key:`${e.indicatorUuid}-${t}`,title:aL(e.name||e.code||e.indicatorUuid),description:`Returned columns: ${(e.columns??[]).join(", ")}`},n().createElement(o.bQt,{rows:i,headers:l,size:"md",useZebraStyles:!0},({rows:e,headers:t,getHeaderProps:r,getRowProps:a,getTableProps:l})=>n().createElement(o.XIK,l(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,t.map(e=>n().createElement(o.A0N,{key:e.key,...r({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id,...a({row:e})},e.cells.map(e=>n().createElement(o.nA6,{key:e.id},e.value))))))))})):null):n().createElement("div",{style:{opacity:.6}},"Run the preview to see results.")),n().createElement(o.KpK,null,b&&0!==A.length?n().createElement("div",{style:{opacity:S?.6:1}},S&&n().createElement(o.OuH,{description:"Generating SQL preview…"}),n().createElement("div",{style:{fontSize:"0.875rem",color:"#666",marginBottom:"0.5rem"}},"Generated disaggregation SQL for each indicator in this section:"),A.map((e,t)=>{let r=h[e.indicatorUuid];return n().createElement("div",{key:e.indicatorUuid,style:{marginBottom:"1.5rem"}},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.25rem"}},t+1,". ",aL(e.name||e.code||e.indicatorUuid),e.kind?n().createElement("span",{style:{fontWeight:400,color:"#666",marginLeft:"0.5rem"}},"(",e.kind,")"):null),n().createElement("pre",{style:{background:"#f4f4f4",padding:"1rem",borderRadius:"4px",fontSize:"0.875rem",overflow:"auto",maxHeight:"400px",border:"1px solid #e0e0e0"}},r||"Loading SQL…"))})):n().createElement("div",{style:{opacity:.6}},"Run the preview first to generate SQL."))))))}let aU=()=>{let{t:e}=(0,A.useTranslation)(),{has:t}=v(),r=t(y.RB.SECTION_ADD,y.RB.SECTION_EDIT),a=t(y.RB.SQL_EXECUTE),[l,s]=n().useState(""),[d,c]=n().useState(!1),[u,p]=n().useState([]),[,_]=n().useState(!1),[g,E]=n().useState(null),[f,h]=n().useState([]),[,S]=n().useState(!1),[T,C]=n().useState(null),[w,N]=n().useState(!1),[I,k]=n().useState(null),[R,O]=n().useState(!1),[D,x]=n().useState(null),L=n().useMemo(()=>{let e=l.trim().toLowerCase();return u.filter(e=>!e.retired).filter(t=>!e||(t.name??"").toLowerCase().includes(e)||(t.code??"").toLowerCase().includes(e))},[l,u]),M=n().useMemo(()=>[{key:"name",header:e("name","Name")},{key:"indicators",header:e("indicators","Indicators")},{key:"actions",header:e("actions","Actions")}],[e]),$=n().useMemo(()=>L.map(e=>({id:e.uuid,name:e.name,indicators:String(function(e){try{if(!e?.configJson)return 0;let t=JSON.parse(e.configJson);return(Array.isArray(t?.indicators)?t.indicators:[]).length}catch{return 0}}(e)),actions:""})),[L]),P=n().useCallback(async()=>{let e=new AbortController;_(!0),E(null);try{let t=await tp({v:"default"},e.signal);p(t)}catch(e){E(e?.message??"Failed to load sections")}finally{_(!1)}return()=>e.abort()},[]);n().useEffect(()=>{P()},[P]),n().useEffect(()=>{let e=new AbortController;return S(!0),C(null),rp({v:"default",includeRetired:!1},e.signal).then(e=>{h(e.map(e=>({id:e.uuid,type:e.kind,code:e.code??"",name:e.name})))}).catch(e=>C(e?.message??"Failed to load indicators")).finally(()=>S(!1)),()=>e.abort()},[]);let U=async e=>{try{e.id?(await tE(e.id,{name:e.name,description:e.description,configJson:e.configJson}),O(!1),x(null)):(await tg({name:e.name,description:e.description,code:e.name?.trim?.()?e.name.trim().toUpperCase().replace(/[^A-Z0-9]+/g,"_").slice(0,60):void 0,configJson:e.configJson}),c(!1)),await P()}catch(e){console.error("Failed to save section",e)}},B=async e=>{try{let t=await t_(e,void 0,"full");k(t),N(!0)}catch(e){console.error("Failed to load section",e)}},F=async e=>{try{let t=await t_(e,void 0,"full");x(t),O(!0)}catch(e){console.error("Failed to load section for edit",e)}},z=(0,i.zy)();return n().useEffect(()=>{"1"===new URLSearchParams(z.search).get("create")&&c(!0)},[z.search]),n().createElement("div",{className:"-esm-report-builder__sections-page__page___W8CFE"},n().createElement(G,{title:e("reportSection","Manage Report Sections"),subtitle:e("sectionsSubtitle","Draft • Define sections and reuse them in reports"),status:{label:e("draft","Draft"),kind:"warning"}}),n().createElement("div",{className:"-esm-report-builder__sections-page__sectionsPage___QgtJD"},n().createElement("div",{className:"-esm-report-builder__sections-page__headerRow___1UsSW"},n().createElement("h3",{className:"-esm-report-builder__sections-page__title___MUNjM"},e("sections","Sections")),r&&n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:b.OM,onClick:()=>c(!0)},e("createSection","Create Section"))),n().createElement("div",{className:"-esm-report-builder__sections-page__surface___OYYi4"},n().createElement("div",{className:"-esm-report-builder__sections-page__toolbarRow___Nc9lf"},n().createElement(o.vji,{size:"lg",labelText:e("search","Search"),placeholder:e("search","Search"),value:l,onChange:e=>s(e.target.value)})),g?n().createElement("div",{style:{padding:"0.75rem"}},g):null,T?n().createElement("div",{style:{padding:"0.75rem"}},T):null,n().createElement(o.bQt,{rows:$,headers:M,size:"lg",useZebraStyles:!0},({rows:e,headers:t,getHeaderProps:l,getRowProps:i,getTableProps:s})=>n().createElement(o.XIK,s(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,n().createElement(o.A0N,{key:"_hash",style:{width:"3rem"}}),t.map(e=>n().createElement(o.A0N,{key:e.key,...l({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id,"data-testid":`section-row-${String(L.find(t=>t.uuid===e.id)?.name??e.id).replace(/\s+/g,"-")}`,...i({row:e})},n().createElement(o.nA6,null,n().createElement(m.vd,{size:16})),e.cells.map(t=>"actions"===t.info.header?n().createElement(o.nA6,{key:t.id},n().createElement(o.obU,{"data-testid":`section-actions-${e.id}`,size:"sm",ariaLabel:"Actions",flipped:!0},a&&n().createElement(o.XSD,{itemText:"Preview",onClick:()=>B(e.id)}),r&&n().createElement(o.XSD,{itemText:"Edit",onClick:()=>F(e.id)}))):"name"===t.info.header?n().createElement(o.nA6,{key:t.id},n().createElement("div",{style:{fontWeight:600}},t.value)):"indicators"===t.info.header?n().createElement(o.nA6,{key:t.id},n().createElement(o.vwO,{type:"gray",size:"sm"},t.value)):n().createElement(o.nA6,{key:t.id},t.value))))))))),n().createElement(aR,{open:d,onClose:()=>c(!1),onSubmit:U,indicators:f,mode:"create",initialSection:null}),n().createElement(aR,{open:R,onClose:()=>{O(!1),x(null)},onSubmit:U,indicators:f,mode:"edit",initialSection:D}),n().createElement(aP,{open:w,onClose:()=>{N(!1),k(null)},section:I}))},aB="-esm-report-builder__report-visualizer__explorerPanel___w0VjU",aF="-esm-report-builder__report-visualizer__panelHeader___UvhIe",az="-esm-report-builder__report-visualizer__panelTitle___gfz5J",aq="-esm-report-builder__report-visualizer__panelContent___F09Qx",aj="-esm-report-builder__report-visualizer__emptyState___AQyxI";var aH=r(2272),aJ=r(4353),aG=r.n(aJ);let aV=e=>(0,aO.jX)((0,h.openmrsFetch)(e));async function aW(e,t){let r=new URLSearchParams({startDate:e.startDate,endDate:e.endDate,uuid:e.uuid}),a=e.renderType||e.reportCategory?.renderType;return a&&r.set("renderType",a),e.reportCategory?.category==="cqi"&&e.reportingCohort&&r.set("cohortList",e.reportingCohort),e.parameters&&Object.entries(e.parameters).forEach(([e,t])=>{null!=t&&""!==t&&r.set(e,String(t))}),(0,aO.jX)((0,h.openmrsFetch)(`${h.restBaseUrl}/reportbuilder/reportingDefinition?${r.toString()}`,{signal:t}))}async function aK(e,t){let r=`${h.restBaseUrl}/sendreport?uuid=${e}`,a=new AbortController;return(0,aO.jX)((0,h.openmrsFetch)(r,{method:"POST",signal:a.signal,headers:{"Content-Type":"application/json"},body:{...t}}))}let aQ=e=>aG()(e).format("YYYY-MM-DD");function aY(e){if(!e.metaJson)return[];try{let t=JSON.parse(e.metaJson);if(Array.isArray(t.tags))return t.tags;if("string"==typeof t.tags)return t.tags.split(",").map(e=>e.trim()).filter(Boolean);return[]}catch{return[]}}let aX="reportVisualizer.preferences",aZ={explorerExpanded:!0,explorerWidth:350,rowsPerPage:25,lastActiveView:void 0},a0=({value:e,onChange:t,disabled:r})=>{let[l,i]=(0,a.useState)(e),s=(0,a.useRef)(null),[d,c]=(0,a.useState)(!1),m=(0,a.useMemo)(()=>{let e=null;return r=>{e&&clearTimeout(e),e=setTimeout(()=>{t(r)},200)}},[t]);(0,a.useEffect)(()=>{i(e)},[e]),(0,a.useEffect)(()=>{let e=e=>{(e.ctrlKey||e.metaKey)&&"k"===e.key&&(e.preventDefault(),s.current?.focus())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[]);let u=l.length>0,p=e.length>0;return n().createElement("div",{style:{position:"relative"}},n().createElement(o.ksK,{ref:s,id:"report-search-input",labelText:"",placeholder:"Search... (⌘K)",value:l,onChange:e=>{let t=e.target.value;i(t),m(t)},disabled:r,size:"sm",onFocus:()=>c(!0),onBlur:()=>c(!1),style:{borderColor:p||d?"#0f62fe":void 0,backgroundColor:p?"#f4f8ff":void 0}}),n().createElement("div",{style:{position:"absolute",left:"0.75rem",top:"50%",transform:"translateY(-50%)",color:p?"#0f62fe":"#666",pointerEvents:"none",transition:"color 0.15s ease"}},n().createElement(g.vj,{size:16})),u&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.bm,iconDescription:"Clear search",onClick:()=>{i(""),t(""),s.current?.focus()},style:{position:"absolute",right:"0.25rem",top:"50%",transform:"translateY(-50%)",padding:"0.25rem",minWidth:"auto",width:"28px",height:"28px"}}),p&&n().createElement("div",{style:{position:"absolute",left:"0",top:"0",bottom:"0",width:"3px",backgroundColor:"#0f62fe",borderRadius:"4px 0 0 4px"}}))},a1=({categories:e,selectedCategory:t,onSelect:r,disabled:a})=>n().createElement(o.l6P,{id:"report-category-filter",labelText:"Category",value:t||"all",onChange:e=>{let t=e.target.value;r("all"===t?void 0:t)},disabled:a,size:"sm"},n().createElement(o.ebT,{value:"all",text:"All report categories"}),e.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.display||e.name}))),a2=({availableTags:e,selectedTags:t,onChange:r,disabled:l})=>{let[i,s]=(0,a.useState)(""),d=(0,a.useMemo)(()=>e.filter(e=>!t.includes(e)).map(e=>({id:e,label:e,value:e})),[e,t]);return n().createElement("div",null,t.length>0&&n().createElement("div",{style:{marginBottom:"0.5rem",display:"flex",flexWrap:"wrap",gap:"0.5rem"}},t.map(e=>n().createElement(o.vwO,{key:e,type:"blue",style:{display:"flex",alignItems:"center",gap:"0.25rem"}},e,n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.bm,iconDescription:`Remove ${e}`,onClick:()=>{r(t.filter(t=>t!==e))},style:{marginLeft:"0.25rem",padding:"0"}})))),n().createElement(o.a32,{id:"report-tag-filter",titleText:"Tags",placeholder:"Add tag filter",items:d,value:i,itemToString:e=>e?.label||"",onChange:({selectedItem:e})=>{e&&e&&!t.includes(e.value)&&(r([...t,e.value]),s(""))},onInputChange:e=>s(e.target.value||""),disabled:l,size:"sm"}))},a5=({reports:e,selectedReportUuid:t,onSelect:r,loading:l,searchQuery:i=""})=>{let[o,s]=(0,a.useState)(null),[d,c]=(0,a.useState)(-1),m=(0,a.useRef)(null),u=(0,a.useRef)([]),p=(0,a.useCallback)(t=>{if(0!==e.length)switch(t.key){case"ArrowDown":t.preventDefault(),c(t=>{let r=Math.min(t+1,e.length-1);return u.current[r]?.scrollIntoView({block:"nearest"}),r});break;case"ArrowUp":t.preventDefault(),c(e=>{let t=Math.max(e-1,0);return u.current[t]?.scrollIntoView({block:"nearest"}),t});break;case"Enter":t.preventDefault(),d>=0&&d<e.length&&r(e[d]);break;case"Escape":t.preventDefault(),c(-1)}},[e,d,r]);return((0,a.useEffect)(()=>{c(-1),s(null)},[e.length,i]),(0,a.useEffect)(()=>{if(t){let r=e.findIndex(e=>e.uuid===t);r>=0&&c(r)}},[t,e]),l)?n().createElement("div",{style:{padding:"1rem"}},[1,2,3].map(e=>n().createElement("div",{key:e,style:{padding:"0.75rem",marginBottom:"0.5rem",backgroundColor:"#f5f5f5",borderRadius:"4px",animation:"pulse 1.5s ease-in-out infinite"}},n().createElement("div",{style:{height:"14px",width:"70%",backgroundColor:"#e0e0e0",borderRadius:"2px",marginBottom:"0.5rem"}}),n().createElement("div",{style:{height:"12px",width:"40%",backgroundColor:"#e0e0e0",borderRadius:"2px"}})))):0===e.length?n().createElement("div",{style:{padding:"2rem 1rem",textAlign:"center",color:"#666"}},i?n().createElement(n().Fragment,null,n().createElement(g.vj,{size:32,style:{marginBottom:"0.75rem",opacity:.4,color:"#999"}}),n().createElement("p",{style:{fontSize:"0.875rem",marginBottom:"0.25rem"}},'No reports match "',i,'"'),n().createElement("p",{style:{fontSize:"0.75rem",color:"#999"}},"Try adjusting your search or filters")):n().createElement(n().Fragment,null,n().createElement(es.yo,{size:32,style:{marginBottom:"0.75rem",opacity:.4}}),n().createElement("p",{style:{fontSize:"0.875rem",marginBottom:"0.25rem"}},"No reports available"),n().createElement("p",{style:{fontSize:"0.75rem",color:"#999"}},"Select a category to see reports"))):n().createElement("div",{ref:m,role:"listbox","aria-label":"Reports",onKeyDown:p,tabIndex:-1,style:{display:"flex",flexDirection:"column",gap:"0.25rem"}},e.map((e,a)=>{let l=e.uuid===t,i=a===d,c=a===o;return n().createElement("div",{key:e.uuid,ref:e=>u.current[a]=e,onClick:()=>r(e),onMouseEnter:()=>s(a),onMouseLeave:()=>s(null),role:"option","aria-selected":l,tabIndex:i?0:-1,style:{padding:"0.75rem",backgroundColor:l?"#e0f2ff":i?"#f4f8ff":c?"#fafafa":"#ffffff",border:l?"2px solid #0f62fe":i?"2px solid #8ca3f7":"1px solid #e0e0e0",borderRadius:"6px",cursor:"pointer",display:"flex",alignItems:"flex-start",justifyContent:"space-between",transition:"all 0.15s ease",transform:i?"translateX(2px)":"translateX(0)",boxShadow:i?"0 2px 8px rgba(15, 98, 254, 0.15)":l?"0 1px 4px rgba(15, 98, 254, 0.1)":"none"}},n().createElement("div",{style:{flex:1,minWidth:0}},n().createElement("div",{style:{fontWeight:l||i?600:500,color:"#161616",marginBottom:"0.25rem",fontSize:"0.875rem"}},e.name),e.code&&n().createElement("div",{style:{fontSize:"0.75rem",color:"#666",display:"inline-block",padding:"2px 6px",backgroundColor:"#f0f0f0",borderRadius:"3px",marginBottom:"0.25rem"}},e.code),e.description&&n().createElement("div",{style:{fontSize:"0.75rem",color:"#666",marginTop:"0.25rem",lineHeight:"1.4"}},e.description)),l&&n().createElement("div",{style:{backgroundColor:"#0f62fe",borderRadius:"50%",padding:"4px",flexShrink:0,marginLeft:"0.5rem",marginTop:"2px"}},n().createElement(U.MG,{size:12,style:{color:"#ffffff"}})))}))},a6=[{value:"TODAY",label:"Today"},{value:"YESTERDAY",label:"Yesterday"},{value:"THIS_WEEK",label:"This Week"},{value:"LAST_WEEK",label:"Last Week"},{value:"THIS_MONTH",label:"This Month"},{value:"LAST_MONTH",label:"Last Month"},{value:"THIS_QUARTER",label:"This Quarter"},{value:"LAST_QUARTER",label:"Last Quarter"},{value:"THIS_YEAR",label:"This Year"},{value:"LAST_YEAR",label:"Last Year"},{value:"LAST_7_DAYS",label:"Last 7 Days"},{value:"LAST_30_DAYS",label:"Last 30 Days"},{value:"LAST_90_DAYS",label:"Last 90 Days"}];function a3(e){let t=new Date;switch(e){case"TODAY":return{start:t,end:t};case"YESTERDAY":{let e=new Date(t);return e.setDate(t.getDate()-1),{start:e,end:e}}case"THIS_WEEK":{let e=new Date(t);e.setDate(t.getDate()-t.getDay());let r=new Date(t);return r.setDate(t.getDate()+(6-t.getDay())),{start:e,end:r}}case"LAST_WEEK":{let e=new Date(t);e.setDate(t.getDate()-t.getDay()-7);let r=new Date(t);return r.setDate(t.getDate()-t.getDay()-1),{start:e,end:r}}case"THIS_MONTH":return{start:new Date(t.getFullYear(),t.getMonth(),1),end:new Date(t.getFullYear(),t.getMonth()+1,0)};case"LAST_MONTH":return{start:new Date(t.getFullYear(),t.getMonth()-1,1),end:new Date(t.getFullYear(),t.getMonth(),0)};case"THIS_QUARTER":{let e=Math.floor(t.getMonth()/3);return{start:new Date(t.getFullYear(),3*e,1),end:new Date(t.getFullYear(),(e+1)*3,0)}}case"LAST_QUARTER":{let e=Math.floor(t.getMonth()/3);if(0===e)return{start:new Date(t.getFullYear()-1,9,1),end:new Date(t.getFullYear()-1,12,0)};return{start:new Date(t.getFullYear(),(e-1)*3,1),end:new Date(t.getFullYear(),3*e,0)}}case"THIS_YEAR":return{start:new Date(t.getFullYear(),0,1),end:new Date(t.getFullYear(),12,0)};case"LAST_YEAR":return{start:new Date(t.getFullYear()-1,0,1),end:new Date(t.getFullYear()-1,12,0)};case"LAST_7_DAYS":{let e=new Date(t);return e.setDate(t.getDate()-7),{start:e,end:t}}case"LAST_30_DAYS":{let e=new Date(t);return e.setDate(t.getDate()-30),{start:e,end:t}}case"LAST_90_DAYS":{let e=new Date(t);return e.setDate(t.getDate()-90),{start:e,end:t}}default:throw Error(`Unknown relative period: ${e}`)}}function a4(e){return aG()(e).format("YYYY-MM-DD")}let a8=({parameter:e,value:t,error:r,onChange:l})=>{let i=e.config,[s,d]=(0,a.useState)(null),c=(0,a.useRef)(!1),m=(0,a.useMemo)(()=>{if(!t)return null;let e=t.split("-");if(3===e.length){let[t,r,a]=e.map(Number);if(t&&void 0!==r&&void 0!==a&&!isNaN(t)&&!isNaN(r)&&!isNaN(a)){let e=new Date(t,r-1,a);if(!isNaN(e.getTime()))return e}}return null},[t]);return(0,a.useEffect)(()=>{console.log("DateParameterInput useEffect - syncing from parent:",{parameterName:e.name,parsedDate:m,internalValue:s,isUpdatingFromRef:c.current,value:t}),c.current||d(m),c.current=!1},[m]),n().createElement(o.lrV,{dateFormat:"Y-m-d",datePickerType:"single",minDate:i?.minDate?new Date(i.minDate):void 0,maxDate:i?.maxDate?new Date(i.maxDate):void 0,value:s,onChange:r=>{if(console.log("DateParameterInput handleDateChange called:",{date:r,parameterName:e.name,currentValue:t,internalValue:s,isUpdatingFromRef:c.current}),!r){c.current=!0,d(null),l("");return}let a=Array.isArray(r)?r[0]:r;if(a&&!isNaN(a.getTime())){c.current=!0,d(a);let e=a.getFullYear(),t=String(a.getMonth()+1).padStart(2,"0"),r=String(a.getDate()).padStart(2,"0"),n=`${e}-${t}-${r}`;console.log("Calling onChange with:",n),l(n)}}},n().createElement(o.tKA,{id:`${e.name}-input`,labelText:e.label,placeholder:e.label,invalid:!!r,invalidText:r,size:"sm"}))},a7=({parameter:e,value:t,error:r,onChange:a})=>{let l=e.config;return n().createElement(o.Q7x,{id:`report-param-${e.name}`,label:e.label,value:t,onChange:e=>{a(e.target.value)},invalid:!!r,invalidText:r,min:l?.min,max:l?.max,step:l?.step,size:"sm"})},a9=({parameter:e,value:t,onChange:r})=>{let a=e.config;return n().createElement(o.lMk,{id:`report-param-${e.name}`,labelA:a?.falseLabel||"No",labelB:a?.trueLabel||"Yes",toggled:!0===t||"true"===t,onToggle:e=>{r(e)}})},ne=({parameter:e,value:t,error:r,onChange:a})=>{let l=e.config,i=l?.options||[];return i.length<=5?n().createElement(o.l6P,{id:`report-param-${e.name}`,labelText:e.label,value:t,onChange:e=>{a(e.target.value)},invalid:!!r,invalidText:r,size:"sm"},n().createElement(o.ebT,{value:"",text:`Select ${e.label}`}),i.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))):n().createElement("div",null,n().createElement("label",{htmlFor:`report-param-${e.name}`,className:"cds--label"},e.label),n().createElement(o.a32,{id:`report-param-${e.name}`,titleText:e.label,items:i,itemToString:e=>e?.label||"",initialSelectedItem:i.find(e=>e.value===t),onChange:({selectedItem:e})=>{e?a(e.value):a("")},invalid:!!r,invalidText:r,size:"sm"}))};async function nt(e=!1,t,r){var a;let n=new URLSearchParams;n.append("v","full"),e&&n.append("includeAll","true"),t&&n.append("tag",t);let l=n.toString();return(a=await (0,W.wO)(`location?${l}`,r))?Array.isArray(a)?a:Array.isArray(a.results)?a.results:[]:[]}async function nr(e,t){var r;return e?.trim()?(r=await (0,W.wO)(`concept?q=${encodeURIComponent(e)}&v=full`,t))?Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]:[]:[]}async function na(e=!1,t){var r;return(r=await (0,W.wO)(`patientidentifiertype${e?"?includeAll=true&v=default":"?v=default"}`,t))?Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]:[]}async function nn(e=!1,t){var r;return(r=await (0,W.wO)(`personattributetype${e?"?includeAll=true&v=default":"?v=default"}`,t))?Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]:[]}let nl=({parameter:e,value:t,error:r,onChange:l,onSearchQueryChange:i})=>{let s=e.config,{locations:d}=function(e){let[t,r]=(0,a.useState)([]),[n,l]=(0,a.useState)(!1),[i,o]=(0,a.useState)(null);return(0,a.useEffect)(()=>{let t=!1;return(async()=>{l(!0),o(null);try{let a=await nt(!1,e);t||r(a)}catch(e){t||o(e instanceof Error?e.message:"Failed to load locations")}finally{t||l(!1)}})(),()=>{t=!0}},[e]),{locations:t,loading:n,error:i}}(s?.tagUuid),c=d.map(e=>({uuid:e.uuid,label:e.display||e.name})),m=c.find(e=>e.uuid===t),u=(0,a.useCallback)(e=>{i?.(e)},[i]),p=(0,a.useCallback)(({selectedItem:e})=>{e?l(e.uuid||""):l("")},[l]);return n().createElement("div",null,n().createElement("label",{htmlFor:`report-param-${e.name}`,className:"cds--label"},e.label),n().createElement(o.a32,{id:`report-param-${e.name}`,titleText:e.label,items:c,itemToString:e=>e?.label||"",initialSelectedItem:m,onInputChange:u,onChange:p,invalid:!!r,invalidText:r,placeholder:e.label,size:"sm"}))},ni=({parameter:e,value:t,error:r,onChange:l,searchQuery:i="",onSearchQueryChange:s})=>{let d=e.config,{results:c}=function(e,t){let[r,n]=(0,a.useState)([]),[l,i]=(0,a.useState)(!1),[o,s]=(0,a.useState)(null),d=(0,a.useRef)();return(0,a.useEffect)(()=>{if(d.current&&clearTimeout(d.current),!e?.trim()){n([]),i(!1),s(null);return}return d.current=setTimeout(async()=>{i(!0),s(null);try{let r=await nr(e),a=r;t&&t.length>0&&(a=r.filter(e=>t.includes(e.conceptClass?.uuid))),n(a)}catch(e){s(e instanceof Error?e.message:"Failed to search concepts"),n([])}finally{i(!1)}},300),()=>{d.current&&clearTimeout(d.current)}},[e,t]),{results:r,loading:l,error:o}}(i,d?.conceptClassUuids),m=c.map(e=>({uuid:e.uuid,label:e.display||e.name?.name||e.uuid})),u=m.find(e=>e.uuid===t),p=(0,a.useCallback)(e=>{s?.(e)},[s]),_=(0,a.useCallback)(({selectedItem:e})=>{e?l(e.uuid||""):l("")},[l]);return n().createElement("div",null,n().createElement("label",{htmlFor:`report-param-${e.name}`,className:"cds--label"},e.label),n().createElement(o.a32,{id:`report-param-${e.name}`,titleText:e.label,items:m,itemToString:e=>e?.label||"",initialSelectedItem:u,onInputChange:p,onChange:_,invalid:!!r,invalidText:r,placeholder:e.label,size:"sm"}))},no=({parameter:e,value:t,error:r,onChange:l})=>{let{identifierTypes:i}=function(e=!1){let[t,r]=(0,a.useState)([]),[n,l]=(0,a.useState)(!1),[i,o]=(0,a.useState)(null);return(0,a.useEffect)(()=>{let t=!1;return(async()=>{l(!0),o(null);try{let a=await na(e);t||r(a)}catch(e){t||o(e instanceof Error?e.message:"Failed to load identifier types")}finally{t||l(!1)}})(),()=>{t=!0}},[e]),{identifierTypes:t,loading:n,error:i}}(!0),s=i.map(e=>({uuid:e.uuid,label:e.display||e.name||e.uuid})),d=s.find(e=>e.uuid===t),c=(0,a.useCallback)(({selectedItem:e})=>{e?l(e.uuid||""):l("")},[l]);return n().createElement("div",null,n().createElement("label",{htmlFor:`report-param-${e.name}`,className:"cds--label"},e.label),n().createElement(o.a32,{id:`report-param-${e.name}`,titleText:e.label,items:s,itemToString:e=>e?.label||"",initialSelectedItem:d,onChange:c,invalid:!!r,invalidText:r,placeholder:e.label,size:"sm"}))},ns=({parameter:e,value:t,error:r,onChange:l})=>{let i=e.config,{attributeTypes:s}=function(e=!1,t){let[r,n]=(0,a.useState)([]),[l,i]=(0,a.useState)(!1),[o,s]=(0,a.useState)(null);return(0,a.useEffect)(()=>{let r=!1;return(async()=>{i(!0),s(null);try{let a=await nn(e),l=a;t&&(l=a.filter(e=>e.format===t)),r||n(l)}catch(e){r||s(e instanceof Error?e.message:"Failed to load attribute types")}finally{r||i(!1)}})(),()=>{r=!0}},[e,t]),{attributeTypes:r,loading:l,error:o}}(!1,i?.format),d=s.map(e=>({uuid:e.uuid,label:e.display||e.name||e.uuid})),c=d.find(e=>e.uuid===t),m=(0,a.useCallback)(({selectedItem:e})=>{e?l(e.uuid||""):l("")},[l]);return n().createElement("div",null,n().createElement("label",{htmlFor:`report-param-${e.name}`,className:"cds--label"},e.label),n().createElement(o.a32,{id:`report-param-${e.name}`,titleText:e.label,items:d,itemToString:e=>e?.label||"",initialSelectedItem:c,onChange:m,invalid:!!r,invalidText:r,placeholder:e.label,size:"sm"}))},nd=({parameter:e,value:t,error:r,onChange:l,onError:i})=>{let s=e.config,d=(0,a.useCallback)(e=>{let t=e.target.value;s?.minLength&&t.length<s.minLength?i?.(`Minimum ${s.minLength} characters required`):s?.maxLength&&t.length>s.maxLength?i?.(`Maximum ${s.maxLength} characters allowed`):s?.pattern&&!new RegExp(s.pattern).test(t)?i?.("Invalid format"):(i?.(void 0),l(t))},[s,l,i]);return n().createElement(o.ksK,{id:`report-param-${e.name}`,labelText:e.label,value:t,onChange:d,invalid:!!r,invalidText:r,placeholder:e.label,size:"sm"})},nc=({parameters:e,values:t,errors:r,onChange:l,onReset:i,disabled:s})=>{let[d,c]=(0,a.useState)("FIXED"),[m,p]=(0,a.useState)(void 0),_=(0,a.useMemo)(()=>e.filter(e=>"DATE"===e.type||"DATETIME"===e.type),[e]),g=(0,a.useMemo)(()=>_.some(e=>"startdate"===e.name.toLowerCase()||"start_date"===e.name.toLowerCase())&&_.some(e=>"enddate"===e.name.toLowerCase()||"end_date"===e.name.toLowerCase()),[_]);return 0===e.length?n().createElement("div",{style:{padding:"1rem",textAlign:"center",color:"#999"}},n().createElement("p",null,"Select a report to see its parameters")):n().createElement("div",null,n().createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"0.75rem"}},n().createElement("h4",{style:{margin:0,fontSize:"0.875rem",fontWeight:600,color:"#161616"}},"Available filters"),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:u.wM,onClick:i,disabled:s,hasIconOnly:!0,iconDescription:"Reset filters"},"Reset")),_.length>0&&n().createElement("div",{style:{marginBottom:"0.75rem"}},n().createElement("label",{className:"cds--label",style:{fontSize:"0.75rem",fontWeight:400,color:"#525252"}},"Date Selection Mode"),n().createElement(o.zWQ,{legendText:"",name:"date-mode",valueSelected:d,onChange:e=>{c(e),"FIXED"===e&&p(void 0)}},n().createElement(o.aaP,{id:"date-mode-fixed",labelText:"Specific dates",value:"FIXED"}),n().createElement(o.aaP,{id:"date-mode-relative",labelText:"Relative period",value:"RELATIVE"}))),"RELATIVE"===d&&g&&n().createElement("div",{style:{marginBottom:"0.75rem"}},n().createElement(o.l6P,{id:"relative-period-select",labelText:"Select reporting period",value:m,onChange:e=>(e=>{if(p(e),e&&g){let{start:r,end:a}=a3(e),n={...t};_.forEach((e,t)=>{0===t?n[e.name]=a4(r):1===t&&(n[e.name]=a4(a))}),l(n)}})(e.target.value),size:"sm"},n().createElement(o.ebT,{value:"",text:"Select period"}),a6.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label})))),n().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"0.75rem"}},e.map(e=>{if("RELATIVE"===d&&g){let t="startdate"===e.name.toLowerCase()||"start_date"===e.name.toLowerCase(),r="enddate"===e.name.toLowerCase()||"end_date"===e.name.toLowerCase();if(("DATE"===e.type||"DATETIME"===e.type)&&(t||r))return null}return n().createElement("div",{key:e.name,style:{marginBottom:0}},(e=>{let a=t[e.name]||"",i=r[e.name],o={parameter:e,value:a,error:i,onChange:r=>{var a;return a=e.name,void l({...t,[a]:r})}};switch(e.type){case"DATE":case"DATETIME":return n().createElement(a8,{key:e.name,...o});case"NUMBER":return n().createElement(a7,{key:e.name,...o});case"BOOLEAN":return n().createElement(a9,{key:e.name,...o});case"LIST":return n().createElement(ne,{key:e.name,...o});case"LOCATION":return n().createElement(nl,{key:e.name,...o});case"CONCEPT":return n().createElement(ni,{key:e.name,...o});case"IDENTIFIER_TYPE":return n().createElement(no,{key:e.name,...o});case"PERSON_ATTRIBUTE":return n().createElement(ns,{key:e.name,...o});default:return n().createElement(nd,{key:e.name,...o})}})(e))})))},nm=({disabled:e,loading:t,onClick:r,reportSelected:a})=>n().createElement("div",{style:{padding:"1rem",borderTop:"1px solid #e0e0e0",marginTop:"auto"}},n().createElement(o.$nd,{kind:"primary",size:"lg",renderIcon:a?d.jG:E.Qp,onClick:r,disabled:e||t||!a,style:{width:"100%"}},t?"Running...":a?"Run report":"Select a report")),nu=({icon:e,label:t,badge:r,disabled:a,onClick:l,isPrimaryAction:i})=>{let s=n().createElement(o.$nd,{kind:i?"primary":"ghost",size:"sm",hasIconOnly:!0,renderIcon:e,iconDescription:t,onClick:l,disabled:a,style:{margin:"0.25rem 0"}}),d="number"==typeof r?r>0:r;return n().createElement("div",{style:{position:"relative",display:"inline-block"}},s,d&&n().createElement(o.vwO,{size:"sm",type:i?"green":"blue",style:{position:"absolute",top:"-2px",right:"-2px",padding:"0 4px",minHeight:"16px",fontSize:"0.625rem",fontWeight:600}},"number"==typeof r?r:""))},np=({onExpand:e,onRunReport:t,searchActive:r,categoryCount:a,selectedTagCount:l,matchingReportCount:i,hasDateParams:s,hasLocationParams:c,hasOtherParams:u,hasSelectedReport:E})=>n().createElement("aside",{className:`${aB} -esm-report-builder__report-visualizer__collapsed___huSDN`,style:{width:48,alignItems:"center",padding:"0.5rem 0"}},n().createElement("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"0.5rem",width:"100%"}},n().createElement(o.m_M,{align:"right",direction:"right",label:"Show report explorer"},n().createElement(nu,{icon:U.c_,label:"Show report explorer",onClick:e})),void 0!==r&&n().createElement(o.m_M,{align:"right",direction:"right",label:r?"Search active":"Search reports"},n().createElement(nu,{icon:g.vj,label:"Search",badge:r})),void 0!==a&&n().createElement(o.m_M,{align:"right",direction:"right",label:`Category${1===a?"":"ies"}: ${a}`},n().createElement(nu,{icon:m.vd,label:"Category filter",badge:a})),void 0!==l&&l>0&&n().createElement(o.m_M,{align:"right",direction:"right",label:`${l} tag${1===l?"":"s"} selected`},n().createElement(nu,{icon:f.vw,label:"Tag filter",badge:l})),void 0!==i&&n().createElement(o.m_M,{align:"right",direction:"right",label:`${i} report${1===i?"":"s"} found`},n().createElement(nu,{icon:es.yo,label:"Reports",badge:i})),s&&n().createElement(o.m_M,{align:"right",direction:"right",label:"Date parameters"},n().createElement(nu,{icon:_.Vv,label:"Date parameters",badge:!0})),c&&n().createElement(o.m_M,{align:"right",direction:"right",label:"Location parameters"},n().createElement(nu,{icon:p.aZ,label:"Location parameters",badge:!0})),u&&n().createElement(o.m_M,{align:"right",direction:"right",label:"Other parameters"},n().createElement(nu,{icon:m.dJ,label:"Parameters",badge:!0})),n().createElement("div",{style:{flex:1}}),t&&n().createElement(o.m_M,{align:"right",direction:"right",label:E?"Run report":"Select a report first"},n().createElement(nu,{icon:d.jG,label:E?"Run report":"Select a report",onClick:t,disabled:!E,isPrimaryAction:!0})))),n_=({collapsed:e,width:t,onCollapse:r,onExpand:a,categories:l,availableTags:i,reports:s,searchQuery:d,selectedCategory:c,selectedTags:m,selectedReportUuid:u,reportParameters:p,parameterValues:_,parameterErrors:g,onSearchChange:E,onCategoryChange:f,onTagsChange:b,onReportSelect:y,onParameterChange:h,onParametersReset:v,onRunReport:S,loading:T,runningReport:C})=>{let w=d.trim().length>0,N=l.length,I=m.length,k=s.length,A=p.some(e=>"DATE"===e.type||"DATETIME"===e.type),R=p.some(e=>"LOCATION"===e.type),O=p.some(e=>!["DATE","DATETIME","LOCATION"].includes(e.type)),D=!!u;return e?n().createElement(np,{onExpand:a,onRunReport:S,searchActive:w,categoryCount:N,selectedTagCount:I,matchingReportCount:k,hasDateParams:A,hasLocationParams:R,hasOtherParams:O,hasSelectedReport:D}):n().createElement("aside",{className:`${aB}`,style:{width:t}},n().createElement("div",{className:aF},n().createElement("h3",{className:az},"Report Explorer"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.JG,iconDescription:"Hide report explorer",onClick:r})),n().createElement("div",{className:aq},n().createElement("div",{className:"-esm-report-builder__report-visualizer__filterSection___ld3qg",style:{display:"flex",flexDirection:"column",gap:"0.5rem",paddingBottom:"0.75rem",borderBottom:"1px solid #e0e0e0"}},n().createElement(a0,{value:d,onChange:E,disabled:T}),n().createElement(a1,{categories:l,selectedCategory:c,onSelect:f,disabled:T}),i.length>0&&n().createElement(a2,{availableTags:i,selectedTags:m,onChange:b,disabled:T})),u&&p.length>0&&n().createElement("div",{className:"-esm-report-builder__report-visualizer__parameterSection___lIv-6",style:{padding:"0.75rem 0",borderBottom:"1px solid #e0e0e0"}},n().createElement(nc,{parameters:p,values:_,errors:g,onChange:h,onReset:v,disabled:C}),n().createElement("div",{style:{marginTop:"0.75rem"}},n().createElement(nm,{reportSelected:!!u,loading:C,onClick:S}))),n().createElement("div",{className:"-esm-report-builder__report-visualizer__reportsListWrapper___-v6ha",style:{flex:1,overflow:"auto",paddingTop:"0.75rem"}},n().createElement("h4",{style:{margin:"0 0 0.5rem 0",fontSize:"0.875rem",fontWeight:600,color:"#161616"}},"Reports ",s.length>0&&`(${s.length})`),n().createElement(a5,{reports:s,selectedReportUuid:u,onSelect:y,loading:T}))))},ng=({capabilities:e,activeView:t,onViewChange:r,disabled:a})=>{let l=[...e.reportLayout?[{label:"Report Layout",value:"REPORT_LAYOUT",icon:es.yo}]:[],...e.pivot?[{label:"Pivot",value:"PIVOT",icon:c.eB}]:[],...e.chart?[{label:"Chart",value:"CHART",icon:_._C}]:[],...e.table?[{label:"Table",value:"TABLE",icon:f.XI}]:[]];if(0===l.length)return null;let i=l.findIndex(e=>e.value===t);return n().createElement(o.Tps,{selectedIndex:i,onChange:e=>{let t=l.find(t=>t.value===e.name);t&&r(t.value)},size:"sm"},l.map(e=>n().createElement(o.dOG,{key:e.value,name:e.value,text:e.label,disabled:a})))},nE=({onExport:e,disabled:t,loading:r})=>{let[l,i]=(0,a.useState)(!1),s=(0,a.useRef)(null),d=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=e=>{s.current&&!s.current.contains(e.target)&&d.current&&!d.current.contains(e.target)&&i(!1)};return l&&document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[l]);let c=(t,r)=>{r.stopPropagation(),i(!1),e(t)};return n().createElement("div",{style:{position:"relative",display:"inline-block"}},n().createElement(o.$nd,{ref:d,kind:"ghost",size:"sm",renderIcon:es.f5,iconDescription:"Export",onClick:()=>i(!l),disabled:t||r},"Export"),l&&n().createElement(o.Wdr,null,n().createElement("div",{ref:s,style:{position:"absolute",top:"100%",right:0,marginTop:"4px",backgroundColor:"white",border:"1px solid #e0e0e0",borderRadius:"4px",boxShadow:"0 2px 8px rgba(0,0,0,0.15)",minWidth:"200px",zIndex:9999},onClick:e=>e.stopPropagation()},n().createElement("div",{style:{padding:"0.5rem",cursor:"pointer",transition:"background-color 0.1s"},onMouseEnter:e=>{e.currentTarget.style.backgroundColor="#f3f3f3"},onMouseLeave:e=>{e.currentTarget.style.backgroundColor="transparent"},onClick:e=>c("CSV",e)},"Export as CSV"),n().createElement("div",{style:{padding:"0.5rem",cursor:"pointer",transition:"background-color 0.1s"},onMouseEnter:e=>{e.currentTarget.style.backgroundColor="#f3f3f3"},onMouseLeave:e=>{e.currentTarget.style.backgroundColor="transparent"},onClick:e=>c("XLSX",e)},"Export as Excel (XLSX)"),n().createElement("div",{style:{padding:"0.5rem",cursor:"pointer",transition:"background-color 0.1s"},onMouseEnter:e=>{e.currentTarget.style.backgroundColor="#f3f3f3"},onMouseLeave:e=>{e.currentTarget.style.backgroundColor="transparent"},onClick:e=>c("PDF",e)},"Export as PDF"))))},nf=({reportName:e,reportDescription:t,capabilities:r,activeView:a,onViewChange:l,onExport:i,onSendToDhis2:s,loading:d,hasResults:c=!1})=>n().createElement("div",{style:{display:"flex",alignItems:"flex-end",justifyContent:"space-between",gap:"1rem"}},n().createElement("div",{style:{flex:1,minWidth:0}},n().createElement("h3",{style:{margin:0,fontSize:"1rem",fontWeight:600,color:"#161616"}},e),t&&n().createElement("p",{style:{margin:"0.25rem 0 0",fontSize:"0.875rem",color:"#666"}},t)),n().createElement("div",{style:{flex:"0 0 auto"}},n().createElement(ng,{capabilities:r,activeView:a,onViewChange:l,disabled:d})),c&&n().createElement(o.Te$,null,s&&r.sendToDhis2&&n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:g.o0,onClick:s,disabled:d},"DHIS2"),n().createElement(nE,{onExport:i,disabled:d,loading:d})));var nb=r(5576);let ny=({rowCount:e,generatedTime:t,parameters:r})=>n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"1rem",flexWrap:"wrap"}},n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"}},n().createElement("span",{style:{fontSize:"0.875rem",color:"#333"}},new Intl.NumberFormat().format(e)," ",1===e?"record":"records")),n().createElement("span",{style:{color:"#999"}},"•"),n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.25rem",fontSize:"0.875rem",color:"#666"}},n().createElement(nb.gX,{size:14}),n().createElement("span",null,"Generated ",(e=>{let t=new Date,r=e.toDateString()===t.toDateString(),a=e.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!1});if(r)return`today ${a}`;let n=new Date(t);return(n.setDate(n.getDate()-1),e.toDateString()===n.toDateString())?`yesterday ${a}`:`${e.toLocaleDateString()} ${a}`})(t))),r&&Object.keys(r).length>0&&n().createElement(n().Fragment,null,n().createElement("span",{style:{color:"#999"}},"•"),n().createElement("div",{style:{display:"flex",gap:"0.25rem",flexWrap:"wrap"}},Object.entries(r).slice(0,3).map(([e,t])=>n().createElement(o.vwO,{key:e,size:"sm",type:"cool-gray"},e,": ",String(t))),Object.keys(r).length>3&&n().createElement(o.vwO,{size:"sm",type:"cool-gray"},"+",Object.keys(r).length-3," more")))),nh=({htmlContent:e,reportName:t})=>{let r=(0,a.useMemo)(()=>e.replace(/<style[^>]*>[\s\S]*?<\/style>/gi,""),[e]);return n().createElement("div",{className:"-esm-report-builder__report-visualizer__reportLayer___Tz8-+"},n().createElement("div",{className:"-esm-report-builder__report-visualizer__reportLayerContent___IfCz3",dangerouslySetInnerHTML:{__html:r},"data-report-name":t}))},nv={completed:"green",complete:"green",done:"green",finished:"green",success:"green",active:"green",open:"green",admitted:"green",started:"green",scheduled:"blue",pending:"blue",missed:"red","missed appointment":"red",failed:"red",error:"red",cancelled:"gray",canceled:"gray",closed:"gray",inactive:"gray","lost to follow-up":"red",lftu:"red",dead:"gray",deceased:"gray",died:"gray",rescheduled:"warm-gray",deferred:"warm-gray","on hold":"warm-gray",warning:"red",unknown:"cool-gray"},nS=({columns:e,hiddenColumns:t,onToggleColumn:r,onShowAll:l,onHideAll:i,disabled:s})=>{let[d,c]=(0,a.useState)(!1),m=(0,a.useRef)(null),u=(0,a.useRef)(null),p=e.length-t.size;(0,a.useEffect)(()=>{let e=e=>{m.current&&!m.current.contains(e.target)&&u.current&&!u.current.contains(e.target)&&c(!1)};return d&&document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[d]);let _=(e,t)=>{t&&t.stopPropagation(),r(e)};return n().createElement("div",{style:{position:"relative",display:"inline-block"}},n().createElement(o.$nd,{ref:u,kind:"ghost",size:"sm",renderIcon:tb.Ss,hasIconOnly:!0,iconDescription:"Column visibility",onClick:()=>c(!d),disabled:s},"Columns"),p>0&&n().createElement("span",{style:{position:"absolute",top:"-4px",right:"-4px",backgroundColor:"#0f62fe",color:"white",fontSize:"10px",minWidth:"16px",height:"16px",borderRadius:"8px",display:"flex",alignItems:"center",justifyContent:"center",padding:"0 4px"}},p),d&&n().createElement(o.Wdr,null,n().createElement("div",{ref:m,style:{position:"absolute",top:"100%",right:0,marginTop:"4px",backgroundColor:"white",border:"1px solid #e0e0e0",borderRadius:"4px",boxShadow:"0 2px 8px rgba(0,0,0,0.15)",minWidth:"250px",maxHeight:"400px",overflowY:"auto",zIndex:9999},onClick:e=>e.stopPropagation()},n().createElement("div",{style:{padding:"0.5rem"}},n().createElement("div",{style:{fontWeight:"bold",marginBottom:"0.5rem",fontSize:"0.875rem"}},"Column Visibility (",p," of ",e.length," shown)"),e.length>1&&n().createElement("div",{style:{marginBottom:"0.5rem",borderBottom:"1px solid #e0e0e0",paddingBottom:"0.5rem"}},l&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:e=>{e.stopPropagation(),l&&l(),c(!1)},style:{width:"100%",justifyContent:"flex-start",marginBottom:"0.25rem"}},"Show all"),i&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:e=>{e.stopPropagation(),i&&i(),c(!1)},style:{width:"100%",justifyContent:"flex-start"}},"Hide all")),n().createElement("div",{style:{maxHeight:"300px",overflowY:"auto"}},e.map(e=>n().createElement("div",{key:e,style:{padding:"0.5rem",display:"flex",alignItems:"center",gap:"0.5rem",cursor:"pointer",borderRadius:"4px",transition:"background-color 0.1s"},onMouseEnter:e=>{e.currentTarget.style.backgroundColor="#f3f3f3"},onMouseLeave:e=>{e.currentTarget.style.backgroundColor="transparent"},onClick:t=>_(e,t)},n().createElement(o.Sc0,{id:`col-${e}`,checked:!t.has(e),onChange:()=>_(e),labelText:e,style:{margin:0}}))))))))},nT=({data:e,columns:t,loading:r,onRefresh:l,title:i,description:s})=>{let[d,c]=(0,a.useState)(1),[m,p]=(0,a.useState)(25),[_,g]=(0,a.useState)(new Set),{paginatedData:E,totalPages:f}=(0,a.useMemo)(()=>{let t=(d-1)*m,r=e.slice(t,t+m),a=Math.ceil(e.length/m);return{paginatedData:r.map((e,r)=>({...e,id:`row-${t+r}`})),totalPages:a}},[e,d,m]),b=(0,a.useMemo)(()=>t.filter(e=>!_.has(e)),[t,_]),y=e=>{g(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},h=()=>{g(new Set)},v=()=>{g(new Set(t))};return r?n().createElement(o.FAs,{style:{width:"100%",minHeight:"200px",display:"flex",alignItems:"center",justifyContent:"center"}},"Loading data..."):0===e.length?n().createElement(o.FAs,{style:{width:"100%",minHeight:"200px"}},n().createElement("h4",null,"No results"),n().createElement("p",null,"No data found for the current parameters."),l&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:u.wM,onClick:l,style:{marginTop:"1rem"}},"Refresh")):n().createElement("div",{style:{width:"100%"}},n().createElement(o.bQt,{rows:E,headers:b.map(e=>({key:e,header:e})),render:({rows:a,headers:g,getHeaderProps:E,getRowProps:b,getTableProps:S})=>n().createElement(o.K3K,{title:i,description:s},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"1rem",flexWrap:"wrap",gap:"0.5rem"}},n().createElement("div",null,n().createElement("strong",null,e.length," total results")),n().createElement("div",{style:{display:"flex",gap:"0.5rem",alignItems:"center"}},t.length>1&&n().createElement(nS,{columns:t,hiddenColumns:_,onToggleColumn:y,onShowAll:h,onHideAll:v,disabled:r}),l&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:u.wM,iconDescription:"Refresh data",onClick:l,disabled:r},"Refresh"))),n().createElement(o.XIK,S(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,g.map(e=>n().createElement(o.A0N,E({header:e}),e.header)))),n().createElement(o.BFY,null,a.map(e=>n().createElement(o.Hjg,b({row:e}),e.cells.map(e=>{let t=e.info.header;return n().createElement(o.nA6,{key:e.id},((e,t)=>{let r;if(null==t)return"—";if(r=e.toLowerCase(),["status","state","result","outcome","condition","appointment","visit"].some(e=>r.includes(e))){let e={type:function(e){if(!e)return"cool-gray";let t=e.toLowerCase().trim();return nv[t]?nv[t]:t.includes("complet")||t.includes("success")?"green":t.includes("miss")||t.includes("fail")?"red":t.includes("resched")||t.includes("defer")?"warm-gray":t.includes("cancel")||t.includes("close")?"gray":t.includes("pend")||t.includes("sched")?"blue":"cool-gray"}(t)};return n().createElement(o.vwO,e,String(t))}if(t instanceof Date)return t.toLocaleDateString();if("object"==typeof t&&null!==t&&!Array.isArray(t)){let{year:e,month:r,day:a,date:n}=t;if("number"==typeof e&&"number"==typeof r){let t=new Date(e,r-1,a||n||1);if(!isNaN(t.getTime()))return t.toLocaleDateString()}}if(Array.isArray(t)&&t.length>=3){let[e,r,a]=t;if("number"==typeof e&&"number"==typeof r&&"number"==typeof a){let t=new Date(e,r-1,a);if(e>1e3&&!isNaN(t.getTime()))return t.toLocaleDateString()}}return String(t)})(t,e.value))}))))),f>1&&n().createElement(o.dKS,{page:d,pageSize:m,pageSizes:[10,25,50,100],totalItems:e.length,onChange:({page:e,pageSize:t})=>{c(e),t&&p(t)}}))}))},nC=({selectedReport:e,reportResults:t,runningReport:r,htmlContent:a,activeView:l="REPORT_LAYOUT",onViewChange:i,capabilities:s={table:!0,pivot:!1,chart:!1,reportLayout:!1,export:!0,sendToDhis2:!1},onExport:d,onSendToDhis2:c,parameterValues:m})=>{n().useEffect(()=>{console.log("ReportWorkspacePanel props:",{hasSelectedReport:!!e,hasReportResults:!!t,hasHtmlContent:!!a,runningReport:r,activeView:l,reportResultsDataLength:t?.data?.length,reportResultsColumnsLength:t?.columns?.length})},[e,t,a,r,l]);let u=()=>{console.log("Refreshing report")};return n().createElement("main",{className:"-esm-report-builder__report-visualizer__workspacePanel___DgBwB"},n().createElement("div",{className:aF},e?n().createElement(nf,{reportName:e.name,reportDescription:e.description,capabilities:s,activeView:l,onViewChange:e=>{i&&i(e)},onExport:e=>{d&&d(e)},onSendToDhis2:s.sendToDhis2?()=>{c&&c()}:void 0,loading:r,hasResults:!r&&(t||a)}):n().createElement("h3",{className:az},"Report Workspace")),n().createElement("div",{className:aq},r&&n().createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%"}},n().createElement(o.OuH,{style:{width:"auto"},description:"Running report..."})),!r&&!e&&n().createElement("div",{className:aj},n().createElement(es.yo,{size:48}),n().createElement("p",null,"Select a report to begin"),n().createElement("p",{style:{fontSize:"0.75rem",marginTop:"0.5rem"}},"Search and select a report from the explorer panel")),!r&&e&&!t&&!a&&n().createElement("div",{className:aj},n().createElement(o.OOb,{size:"lg"}),n().createElement("p",{style:{marginTop:"1rem"}},'Click "Run report" to generate results')),!r&&e&&(t||a)&&n().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"}},t?.rowCount!==void 0&&t?.generatedTime&&n().createElement(ny,{rowCount:t.rowCount,generatedTime:new Date(t.generatedTime),parameters:m}),"TABLE"===l&&t?.data&&t.data.length>0&&n().createElement(n().Fragment,null,!1,n().createElement(nT,{data:t.data,columns:t.columns||[],onRefresh:u,title:e.name})),"TABLE"===l&&t&&(!t.data||0===t.data.length)&&n().createElement("div",{style:{padding:"2rem",textAlign:"center",backgroundColor:"#f5f5f5",borderRadius:"4px"}},n().createElement("p",null,"No tabular data available for this report"),!1),"PIVOT"===l&&t?.data&&n().createElement("div",{style:{width:"100%"}},n().createElement("div",{style:{padding:"1rem",backgroundColor:"#f0f0f0",borderRadius:"4px",textAlign:"center"}},n().createElement("p",{style:{margin:0}},"Pivot View"),n().createElement("p",{style:{fontSize:"0.875rem",color:"#666",marginTop:"0.5rem"}},"Pivot table view will be implemented with react-pivottable integration")),n().createElement(nT,{data:t.data,columns:t.columns||[],onRefresh:u,title:e.name})),"CHART"===l&&t?.data&&n().createElement("div",{style:{width:"100%"}},n().createElement("div",{style:{padding:"1rem",backgroundColor:"#f0f0f0",borderRadius:"4px",textAlign:"center"}},n().createElement("p",{style:{margin:0}},"Chart View"),n().createElement("p",{style:{fontSize:"0.875rem",color:"#666",marginTop:"0.5rem"}},"Chart view will be implemented with react-plotly.js integration")),n().createElement(nT,{data:t.data,columns:t.columns||[],onRefresh:u,title:e.name})),"REPORT_LAYOUT"===l&&a&&n().createElement(nh,{htmlContent:a,reportName:e.name}),"REPORT_LAYOUT"===l&&!a&&t?.data&&n().createElement(nT,{data:t.data,columns:t.columns||[],onRefresh:u,title:e.name}))))},nw=()=>{let e,{preferences:t,setExplorerExpanded:r,setLastActiveView:l,isLoaded:i}=function(){let[e,t]=(0,a.useState)(aZ),[r,n]=(0,a.useState)(!1);(0,a.useEffect)(()=>{try{let e=localStorage.getItem(aX);if(e){let r=JSON.parse(e);t({...aZ,...r})}}catch(e){console.error("Failed to load preferences:",e)}finally{n(!0)}},[]),(0,a.useEffect)(()=>{if(r)try{localStorage.setItem(aX,JSON.stringify(e))}catch(e){console.error("Failed to save preferences:",e)}},[e,r]);let l=(0,a.useCallback)(e=>{t(t=>({...t,...e}))},[]),i=(0,a.useCallback)(()=>{t(aZ)},[]),o=(0,a.useCallback)(e=>{l({explorerExpanded:e})},[l]),s=(0,a.useCallback)(e=>{l({explorerWidth:e})},[l]),d=(0,a.useCallback)(e=>{l({rowsPerPage:e})},[l]),c=(0,a.useCallback)(e=>{l({lastActiveView:e})},[l]);return{preferences:e,updatePreferences:l,resetPreferences:i,setExplorerExpanded:o,setExplorerWidth:s,setRowsPerPage:d,setLastActiveView:c,isLoaded:r}}(),[o,s]=(0,a.useState)(!t.explorerExpanded),[d,c]=(0,a.useState)(t.explorerWidth),[m,u]=(0,a.useState)(!1),[p,_]=(0,a.useState)(""),[g,E]=(0,a.useState)(),[f,b]=(0,a.useState)([]),[y,v]=(0,a.useState)(),[S,T]=(0,a.useState)("REPORT_LAYOUT"),[C,w]=(0,a.useState)(!1),[N,I]=(0,a.useState)(null),[k,A]=(0,a.useState)({}),[R,O]=(0,a.useState)(""),{filteredReports:D,loading:x,getReportByUuid:L,availableTags:M}=function(e){let{searchQuery:t,selectedCategory:r,selectedTags:n}=e,{reportLibrary:l,isLoadingReportLibrary:i,isError:o,mutate:s}=function(){let e=`${h.restBaseUrl}/reportbuilder/reportlibrary?v=full`,{data:t,error:r,isLoading:a,mutate:n}=(0,aH.u)(e,aV);return{reportLibrary:t?.data?.results??[],isError:r,isLoadingReportLibrary:a,mutate:n}}(),d=(0,a.useMemo)(()=>{let e=l??[];if(t.trim()){let r=t.toLowerCase();e=e.filter(e=>{let t=e.name?.toLowerCase()||"",a=e.code?.toLowerCase()||"",n=e.description?.toLowerCase()||"";return t.includes(r)||a.includes(r)||n.includes(r)})}return r&&(e=e.filter(e=>e.category?.uuid===r)),n.length>0&&(e=e.filter(e=>{let t=aY(e);return n.every(e=>t.includes(e))})),e},[l,t,r,n]),c=(0,a.useMemo)(()=>{var e;let t;return e=l??[],t=new Set,e.forEach(e=>{aY(e).forEach(e=>t.add(e))}),Array.from(t).sort()},[l]),m=(0,a.useCallback)(e=>l?.find(t=>t.uuid===e),[l]);return{reports:l??[],filteredReports:d,availableTags:c,loading:i,error:o||null,refresh:()=>s(),getReportByUuid:m}}({searchQuery:p,selectedCategory:g,selectedTags:f}),{reportCategories:$,isLoadingReportCategories:P}=function(){let e=`${h.restBaseUrl}/reportbuilder/reportcategory?v=full`,{data:t,error:r,isLoading:a,mutate:n}=(0,aH.u)(e,aV);return{reportCategories:t?.data?.results??[],isError:r,isLoadingReportCategories:a,mutate:n}}(),U=y&&L(y)||null,{parameters:B,values:F,errors:z,setValues:q,validate:j,reset:H}=function(e){let{report:t}=e,r=(0,a.useMemo)(()=>{if(!t?.metaJson)return[];try{let e=JSON.parse(t.metaJson);if(e?.parameters&&Array.isArray(e.parameters))return e.parameters}catch(e){console.error("Failed to parse metaJson:",e)}return[]},[t?.metaJson]),n=(0,a.useMemo)(()=>r.filter(e=>e.required).length,[r]),l=r.length>0,i=(0,a.useMemo)(()=>{let e={},t=new Date().toISOString().split("T")[0];return r.forEach(r=>{void 0!==r.defaultValue?e[r.name]=r.defaultValue:("DATE"===r.type||"DATETIME"===r.type)&&("startDate"===r.name||"endDate"===r.name||r.name.toLowerCase().includes("date"))&&(e[r.name]=t)}),e},[r]),[o,s]=(0,a.useState)(i),[d,c]=(0,a.useState)({}),[m,u]=(0,a.useState)(null);(0,a.useMemo)(()=>{t?.uuid!==m&&(s(i),c({}),u(t?.uuid||null))},[t?.uuid,i,m]);let p=(0,a.useCallback)(e=>{s(e)},[]),_=(0,a.useCallback)(()=>{let e={};return r.forEach(t=>{let r=o[t.name];t.required&&(!r||""===r.toString().trim())&&(e[t.name]=`${t.label} is required`),r&&"NUMBER"===t.type&&isNaN(Number(r))&&(e[t.name]=`${t.label} must be a number`)}),c(e),0===Object.keys(e).length},[r,o]);return{parameters:r,values:o,errors:d,loading:!1,setValues:p,validate:_,reset:(0,a.useCallback)(()=>{s(i),c({})},[i]),clear:(0,a.useCallback)(()=>{s({}),c({})},[]),hasParameters:l,requiredParamsCount:n}}({report:U}),{capabilities:J}={capabilities:e=(0,a.useMemo)(()=>{if(!U)return{table:!1,pivot:!1,chart:!1,reportLayout:!1,export:!1,sendToDhis2:!1};let e={table:!0,pivot:!1,chart:!1,reportLayout:!1,export:!0,sendToDhis2:!1},t=U.reportType?.toLowerCase(),r=U.category?.name?.toLowerCase()||U.category?.display?.toLowerCase()||"";if("linelist"===t||"line_list"===t?(e.pivot=!0,e.chart=!0,e.reportLayout=!0):"aggregate"===t?(e.reportLayout=!0,e.chart=!0,e.sendToDhis2=!0):"indicator"===t&&(e.chart=!0),(r.includes("national")||r.includes("mer")||r.includes("donor")||r.includes("indicator report"))&&(e.sendToDhis2=!0,e.reportLayout=!0),U.metaJson)try{let t=JSON.parse(U.metaJson);t.capabilities&&(void 0!==t.capabilities.pivot&&(e.pivot=t.capabilities.pivot),void 0!==t.capabilities.chart&&(e.chart=t.capabilities.chart),void 0!==t.capabilities.reportLayout&&(e.reportLayout=t.capabilities.reportLayout),void 0!==t.capabilities.export&&(e.export=t.capabilities.export),void 0!==t.capabilities.sendToDhis2&&(e.sendToDhis2=t.capabilities.sendToDhis2)),(t.dhis2||t.dhis2Config)&&(e.sendToDhis2=!0)}catch(e){console.error("Failed to parse metaJson for capabilities:",e)}return e},[U]),canTable:e.table,canPivot:e.pivot,canChart:e.chart,canReportLayout:e.reportLayout,canExport:e.export,canSendToDhis2:e.sendToDhis2};(0,a.useEffect)(()=>{let e=e=>{if(m){let t=Math.max(280,Math.min(700,e.clientX));c(t),c(t)}},t=()=>{u(!1),document.body.style.cursor="default",document.body.style.userSelect=""};if(m)return document.addEventListener("mousemove",e),document.addEventListener("mouseup",t),document.body.style.cursor="col-resize",document.body.style.userSelect="none",()=>{document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",t),document.body.style.cursor="default",document.body.style.userSelect=""}},[m]);let G=(0,a.useCallback)(e=>{e.preventDefault(),u(!0)},[]),V=(0,a.useCallback)(()=>{s(!0),r(!1)},[r]),W=(0,a.useCallback)(()=>{s(!1),r(!0)},[r]),K=(0,a.useCallback)(e=>{_(e)},[]),Q=(0,a.useCallback)(e=>{E(e)},[]),Y=(0,a.useCallback)(e=>{b(e)},[]),X=(0,a.useCallback)(e=>{v(e.uuid),I(null),O(""),A({})},[]),Z=(0,a.useCallback)(e=>{q(e)},[q]),ee=(0,a.useCallback)(()=>{H()},[H]),et=(0,a.useCallback)(e=>{T(e),l(e)},[l]),er=(0,a.useCallback)(async()=>{if(console.log("handleRunReport called - user clicked Run Report button"),U){if(!j())return void(0,h.showNotification)({title:"Validation Error",kind:"error",critical:!1,description:"Please fill in all required parameters"});w(!0),I(null),O(""),A({});try{let e={uuid:U.reportDefinitionUuid||U.reportBuilderReportUuid||U.uuid,startDate:F.startDate||aQ(new Date),endDate:F.endDate||aQ(new Date),renderType:"html",parameters:F};console.log("Executing report:",U.name),console.log("Request params:",e);let t=await aW(e);if(200===t.status){let e=t.data;console.log("Report response data:",e),e._html&&e._html.length>0?O(e._html[0].html||""):e.html&&O(e.html||""),e.json&&A(e.json),I({rowCount:0,generatedTime:new Date().toISOString(),parameters:F}),console.log("Report HTML content set"),(0,h.showToast)({title:"Report executed successfully",kind:"success",critical:!1,description:""})}else throw Error(`Report execution failed with status ${t.status}`)}catch(e){console.error("Failed to run report:",e),(0,h.showNotification)({title:"Error executing report",kind:"error",critical:!0,description:e instanceof Error?e.message:"Unknown error"})}finally{w(!1)}}},[U,F,j]),ea=(0,a.useCallback)(async e=>{if(U)try{var t;let r,a,n=U.reportDefinitionUuid||U.uuid,l=await (t={uuid:n,startDate:F.startDate||aQ(new Date),endDate:F.endDate||aQ(new Date)},r=new AbortController,a=`${h.restBaseUrl}/reportbuilder/reportDownload?startDate=${t.startDate}&endDate=${t.endDate}&uuid=${t.uuid}`,"cqi"===t.reportCategory&&(a+=`&cohortList=${t.reportingCohort}`),(0,aO.jX)((0,h.openmrsFetch)(a,{signal:r.signal})));if(l.ok){let t=l.headers.get("Content-Disposition"),r=t?.match(/filename=(.+)/),a=r?r[1]:`${U.name}.${e.toLowerCase()}`,n=await l.blob(),i=window.URL.createObjectURL(n),o=document.createElement("a");o.href=i,o.download=a,o.click(),window.URL.revokeObjectURL(i),(0,h.showToast)({title:"Export successful",kind:"success",critical:!1,description:""})}else throw Error(`Export failed with status ${l.status}`)}catch(e){console.error("Failed to export report:",e),(0,h.showNotification)({title:"Error exporting report",kind:"error",critical:!0,description:e instanceof Error?e.message:"Unknown error"})}},[U,F]),en=(0,a.useCallback)(async()=>{if(!U)return;let e=(0,h.showModal)("confirm-modal",{close:()=>e(),submit:async()=>{try{let e=U.reportDefinitionUuid||U.uuid,t=await aK(e,k);if(200===t.status)(0,h.showToast)({title:"Report sent to DHIS2",kind:"success",critical:!0,description:`Report ${U.name} sent successfully`});else throw Error(`DHIS2 send failed with status ${t.status}`)}catch(e){console.error("Failed to send to DHIS2:",e),(0,h.showNotification)({title:"Error sending to DHIS2",kind:"error",critical:!0,description:e instanceof Error?e.message:"Unknown error"})}e()},report:U.name})},[U,k]);return n().createElement("div",{className:"-esm-report-builder__report-visualizer__page___umafn"},n().createElement("div",{className:"-esm-report-builder__report-visualizer__panels___fT5IU"},n().createElement(n_,{collapsed:o,width:d,onCollapse:V,onExpand:W,categories:$??[],availableTags:M,reports:D,searchQuery:p,selectedCategory:g,selectedTags:f,selectedReportUuid:y,reportParameters:B,parameterValues:F,parameterErrors:z,onSearchChange:K,onCategoryChange:Q,onTagsChange:Y,onReportSelect:X,onParameterChange:Z,onParametersReset:ee,onRunReport:er,loading:x||P||!i,runningReport:C}),!o&&n().createElement("div",{className:"-esm-report-builder__report-visualizer__resizeHandle___MHsWm",onMouseDown:G}),n().createElement(nC,{explorerCollapsed:o,selectedReport:U,reportResults:N,runningReport:C,htmlContent:R,activeView:S,onViewChange:et,capabilities:J,onExport:ea,onSendToDhis2:J.sendToDhis2?en:void 0,parameterValues:F})))},nN=[{key:"name",header:"Name"},{key:"code",header:"Code"},{key:"domain",header:"Domain"},{key:"description",header:"Description"},{key:"actions",header:""}];function nI({rows:e,onEdit:t,onDelete:r,canEdit:a=!0,canDelete:l=!0}){let i=n().useMemo(()=>(e??[]).map(e=>({id:e.uuid,name:e.name,code:e.code,domain:e.domain,description:e.description??"",actions:e.uuid})),[e]);return n().createElement(o.bQt,{rows:i,headers:nN},({rows:e,headers:i,getHeaderProps:s,getRowProps:d,getTableProps:c,getTableContainerProps:m})=>n().createElement(o.K3K,{title:"Data Themes",description:"Manage derived data themes used by the indicator builder.",...m()},n().createElement(o.e1U,null,n().createElement(o.VbH,null)),n().createElement(o.XIK,c(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,i.map(e=>n().createElement(o.A0N,{key:e.key,...s({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id,...d({row:e})},e.cells.map(i=>"actions"===i.info.header?n().createElement(o.nA6,{key:i.id},n().createElement(o.obU,{size:"sm",ariaLabel:"Theme actions"},a&&n().createElement(o.XSD,{itemText:"Edit",onClick:()=>t(e.id)}),l&&n().createElement(o.XSD,{hasDivider:!0,isDelete:!0,itemText:"Delete",onClick:()=>r(e.id)}))):n().createElement(o.nA6,{key:i.id},i.value))))))))}let nk=[{value:"DIAGNOSIS",text:"Diagnosis"},{value:"OBSERVATIONS",text:"Observations"},{value:"TEST_ORDERS",text:"Test Orders"},{value:"MEDICATION_ORDERS",text:"Medication Orders"},{value:"APPOINTMENTS",text:"Appointments"},{value:"MEDICATION_DISPENSE",text:"Medication Dispense"}];function nA({value:e,onChange:t}){return n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.75rem"}},"Basics"),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.75rem"}},n().createElement(o.ksK,{id:"theme-name",labelText:"Name",value:e.name,onChange:r=>t({...e,name:r.target.value})}),n().createElement(o.ksK,{id:"theme-code",labelText:"Code",helperText:"Short unique code (e.g. DX_OPD)",value:e.code,onChange:r=>t({...e,code:r.target.value})})),n().createElement("div",{style:{marginTop:"0.75rem"}},n().createElement(o.l6P,{id:"theme-domain",labelText:"Main domain",value:e.domain,onChange:r=>t({...e,domain:r.target.value})},nk.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.text})))),n().createElement("div",{style:{marginTop:"0.75rem"}},n().createElement(o.fs1,{id:"theme-desc",labelText:"Description",value:e.description??"",onChange:r=>t({...e,description:r.target.value})})))}function nR(e){return"string"==typeof e?{name:e}:{name:String(e?.name??e?.tableName??e?.table??""),type:e?.type,rows:"number"==typeof e?.rows?e.rows:"number"==typeof e?.tableRows?e.tableRows:null,updateTime:e?.updateTime??null,tableType:e?.tableType??e?.type??null}}async function nO(e){let t=[],r=new Set,a=null;for(let n=0;n<30;n++){if(e?.aborted)return[];let l=100*n,i=await (0,W.wO)(`/reportbuilder/schema?limit=100&startIndex=${l}&totalCount=true`,e),o=function(e){if(!e)return[];let t=[];return Array.isArray(e)?t=e:Array.isArray(e?.results)?t=e.results:Array.isArray(e?.tables)&&(t=e.tables),t.map(nR).filter(e=>!!e.name)}(i);for(let e of o)r.has(e.name)||(r.add(e.name),t.push(e));if(null===a&&(a="number"==typeof i?.totalCount?i.totalCount:null),o.length<100||null!==a&&t.length>=a)break}return t}function nD(e=[]){return e.map(e=>({name:e.name??e.columnName??"",type:e.type??e.dataType,nullable:e.nullable})).filter(e=>e.name.length>0)}async function nx(e,t){let r=await (0,W.wO)(`/etltablecolumn?table=${encodeURIComponent(e)}`,t);return Array.isArray(r)?nD(r):nD(r?.columns??r?.results??[])}function nL(e){return"string"==typeof e?String(e):e?.name??e?.table??e?.tableName??""}function nM({open:e,config:t,onChange:r}){let[a,l]=n().useState([]),[i,s]=n().useState(!1),[d,c]=n().useState(null),[m,u]=n().useState([]),[p,_]=n().useState(!1),[g,E]=n().useState(null);n().useEffect(()=>{if(!e){l([]),s(!1),c(null);return}let t=new AbortController;return s(!0),c(null),nO(t.signal).then(e=>l(e??[])).catch(e=>{e?.name!=="AbortError"&&c(e?.message??"Failed to load tables")}).finally(()=>s(!1)),()=>t.abort()},[e]),n().useEffect(()=>{if(!e){u([]),_(!1),E(null);return}let r=t?.sourceTable;if(!r){u([]),_(!1),E(null);return}let a=new AbortController;return _(!0),E(null),nx(r,a.signal).then(e=>u(e??[])).catch(e=>{e?.name!=="AbortError"&&E(e?.message??"Failed to load columns")}).finally(()=>_(!1)),()=>a.abort()},[e,t?.sourceTable]);let f=n().useMemo(()=>(m??[]).map(e=>e?.name).filter(Boolean),[m]),b=n().useMemo(()=>(a??[]).map(nL).filter(Boolean),[a]),y=e&&!i&&!d,h=e&&!!t.sourceTable&&!p&&!g;return n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.75rem"}},"Source"),n().createElement(o.a32,{id:"theme-source-table",titleText:"Source table/view",items:b,selectedItem:t.sourceTable||null,disabled:!y,placeholder:i?"Loading…":d?"Failed to load tables":"Type to search tables…",onChange:e=>{let a=e?.selectedItem??"";r({...t,sourceTable:a,patientIdColumn:"",dateColumn:"",locationColumn:"",fields:t.fields??[]})}}),n().createElement("div",{style:{marginTop:"0.5rem"}},i?n().createElement(o.OuH,{description:"Loading tables…"}):null,!i&&d?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},d):null),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:"0.75rem",marginTop:"0.75rem"}},n().createElement(o.l6P,{id:"theme-patient-id-col",labelText:"client_id column",value:t.patientIdColumn||"",disabled:!h,onChange:e=>r({...t,patientIdColumn:e.target.value})},n().createElement(o.ebT,{value:"",disabled:!0,text:p?"Loading…":"Select"}),f.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement(o.l6P,{id:"theme-date-col",labelText:"date column",value:t.dateColumn||"",disabled:!h,onChange:e=>r({...t,dateColumn:e.target.value})},n().createElement(o.ebT,{value:"",disabled:!0,text:p?"Loading…":"Select"}),f.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement(o.l6P,{id:"theme-location-col",labelText:"location column (optional)",value:t.locationColumn||"",disabled:!h,onChange:e=>r({...t,locationColumn:e.target.value})},n().createElement(o.ebT,{value:"",disabled:!0,text:p?"Loading…":"Select"}),f.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e})))),n().createElement("div",{style:{marginTop:"0.5rem"}},p?n().createElement(o.OuH,{description:"Loading columns…"}):null,!p&&g?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},g):null))}let n$=["string","number","date","datetime","boolean","coded","json"];function nP({config:e,onChange:t}){let r=e.fields??[],a=(a,n)=>{let l=r.map((e,t)=>t===a?{...e,...n}:e);t({...e,fields:l})};return n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.75rem"}},"Fields"),n().createElement("div",{style:{marginBottom:"0.75rem",opacity:.85,fontSize:"0.875rem"}},"Define the fields exposed by this theme. ",n().createElement("b",null,"expr")," can be a column name or a SQL expression."),0===r.length?n().createElement("div",{style:{marginBottom:"0.75rem",opacity:.8}},"No fields yet. Add at least one field."):null,n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1.2fr 1.2fr 2fr 1fr auto",gap:"0.75rem"}},n().createElement("div",{style:{fontWeight:600}},"Key"),n().createElement("div",{style:{fontWeight:600}},"Label"),n().createElement("div",{style:{fontWeight:600}},"Expression"),n().createElement("div",{style:{fontWeight:600}},"Type"),n().createElement("div",null),r.map((l,i)=>n().createElement(n().Fragment,{key:i},n().createElement(o.ksK,{id:`theme-field-key-${i}`,labelText:"",hideLabel:!0,value:l.key,placeholder:"field_key",onChange:e=>a(i,{key:e.target.value})}),n().createElement(o.ksK,{id:`theme-field-label-${i}`,labelText:"",hideLabel:!0,value:l.label,placeholder:"Field label",onBlur:()=>{!l.key&&l.label&&a(i,{key:(l.label??"").toLowerCase().trim().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,40)})},onChange:e=>a(i,{label:e.target.value})}),n().createElement(o.ksK,{id:`theme-field-expr-${i}`,labelText:"",hideLabel:!0,value:l.expr,placeholder:"column_name or SQL expression",onChange:e=>a(i,{expr:e.target.value})}),n().createElement(o.l6P,{id:`theme-field-type-${i}`,labelText:"",hideLabel:!0,value:l.type,onChange:e=>a(i,{type:e.target.value})},n$.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Remove field",renderIcon:P.zH,onClick:()=>{let a;return a=r.filter((e,t)=>t!==i),void t({...e,fields:a})}})))),n().createElement("div",{style:{marginTop:"1rem"}},n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:b.OM,onClick:()=>{let a={key:`field_${r.length+1}`,label:"",expr:"",type:"string"};t({...e,fields:[...r,a]})}},"Add field")))}let nU=["CONCEPT_SEARCH","QUESTION_ANSWER_CONCEPT_SEARCH","TEXT","NUMBER","DATE_RANGE","BOOLEAN","LOCATION_PICKER","CODED_LIST"],nB=["EQUALS","IN","NOT_IN","LIKE","BETWEEN","GTE","LTE","IS_NULL","IS_NOT_NULL"],nF=["conceptUuid","conceptId","string","number","date","datetime","boolean"];function nz(){return`${Date.now()}_${Math.random().toString(16).slice(2)}`}function nq(e,t){let r=(e??"").trim(),a=(t??"").trim();return r&&a?`QA(${r},${a})`:""}function nj(e,t){return(e??[]).map(e=>{let r,a,n=(r=(e.column??"").trim(),(a=/^QA\(([^,]+),([^)]+)\)$/.exec(r))?{questionCol:a[1].trim(),answerCol:a[2].trim()}:null);if(n)return{...e,_id:nz(),_columnMode:"qa",_qaQuestionCol:n.questionCol,_qaAnswerCol:n.answerCol};if("QUESTION_ANSWER_CONCEPT_SEARCH"===e.handler)return{...e,_id:nz(),_columnMode:"qa",_qaQuestionCol:"",_qaAnswerCol:""};let l=t.includes(e.column);return{...e,_id:nz(),_columnMode:l?"pick":"custom"}})}function nH({open:e,config:t,onChange:r,columns:a,loadingCols:l}){let i=n().useMemo(()=>(a??[]).map(e=>e?.name).filter(Boolean),[a]),s=n().useMemo(()=>i.map(e=>({id:e,label:e})),[i]),d=n().useMemo(()=>[{id:"__CUSTOM__",label:"Custom expression…"},{id:"__QA__",label:"Question + Answer…"},...s],[s]),c=n().useMemo(()=>s,[s]),m=n().useRef(""),[u,p]=n().useState(()=>nj(t.conditions,i)),_=n().useCallback(e=>{p(e);let a=e.map(e=>{let t={...e};return delete t._id,delete t._columnMode,delete t._qaQuestionCol,delete t._qaAnswerCol,t});m.current=JSON.stringify(a??[]),r({...t,conditions:a})},[t,r]);n().useEffect(()=>{if(!e)return;let r=JSON.stringify(t.conditions??[]);r!==m.current&&(m.current=r,p(nj(t.conditions,i)))},[e,t.conditions,i]),n().useEffect(()=>{e&&p(e=>(e??[]).map(e=>{if("QUESTION_ANSWER_CONCEPT_SEARCH"===e.handler){let t=e._qaQuestionCol??"",r=e._qaAnswerCol??"";return{...e,_columnMode:"qa",column:nq(t,r)}}return"pick"===e._columnMode&&e.column&&!i.includes(e.column)?{...e,_columnMode:"custom"}:e}))},[e,i]);let g=(e,t)=>_((u??[]).map(r=>r._id===e?{...r,...t}:r)),E=e&&!l;return n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.75rem"}},"Conditions"),n().createElement("div",{style:{marginBottom:"0.75rem",opacity:.85,fontSize:"0.875rem"}},"Define filterable fields for this theme. ",n().createElement("b",null,"Column/Expr")," should be a real column where possible; use custom only when needed."),0===u.length?n().createElement("div",{style:{marginBottom:"0.75rem",opacity:.8}},"No conditions yet."):null,n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1.2fr 1.4fr 1.2fr 2fr 1fr 1.1fr auto",gap:"0.75rem"}},n().createElement("div",{style:{fontWeight:600}},"Key"),n().createElement("div",{style:{fontWeight:600}},"Label"),n().createElement("div",{style:{fontWeight:600}},"Handler"),n().createElement("div",{style:{fontWeight:600}},"Column/Expr"),n().createElement("div",{style:{fontWeight:600}},"Operator"),n().createElement("div",{style:{fontWeight:600}},"Value type"),n().createElement("div",null),u.map(t=>{let r="custom"===t._columnMode?d.find(e=>"__CUSTOM__"===e.id)??null:"qa"===t._columnMode?d.find(e=>"__QA__"===e.id)??null:d.find(e=>e.id===t.column)??null,a=c.find(e=>e.id===(t._qaQuestionCol??""))??null,l=c.find(e=>e.id===(t._qaAnswerCol??""))??null;return n().createElement(n().Fragment,{key:t._id},n().createElement(o.ksK,{id:`theme-cond-key-${t._id}`,labelText:"",hideLabel:!0,value:t.key,disabled:!e,placeholder:"concept_id",onChange:e=>g(t._id,{key:e.target.value})}),n().createElement(o.ksK,{id:`theme-cond-label-${t._id}`,labelText:"",hideLabel:!0,value:t.label,disabled:!e,placeholder:"Diagnosis",onChange:e=>g(t._id,{label:e.target.value})}),n().createElement(o.l6P,{id:`theme-cond-handler-${t._id}`,labelText:"",hideLabel:!0,value:t.handler,disabled:!E,onChange:e=>{let r=e.target.value;"QUESTION_ANSWER_CONCEPT_SEARCH"===r?g(t._id,{handler:r,_columnMode:"qa",column:nq(t._qaQuestionCol??"",t._qaAnswerCol??"")}):g(t._id,{handler:r,_columnMode:"qa"===t._columnMode?"pick":t._columnMode,column:"qa"===t._columnMode?"":t.column})}},nU.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement("div",null,n().createElement(o.a32,{id:`theme-cond-col-${t._id}`,titleText:"",items:d,itemToString:e=>e?e.label:"",selectedItem:r,disabled:!E||"QUESTION_ANSWER_CONCEPT_SEARCH"===t.handler,onChange:({selectedItem:e})=>{let r=e?.id;"__CUSTOM__"===r?g(t._id,{_columnMode:"custom",column:""}):"__QA__"===r?g(t._id,{_columnMode:"qa",column:nq(t._qaQuestionCol??"",t._qaAnswerCol??"")}):"string"==typeof r&&r&&g(t._id,{_columnMode:"pick",column:r})}}),"custom"===t._columnMode&&"QUESTION_ANSWER_CONCEPT_SEARCH"!==t.handler?n().createElement(o.ksK,{id:`theme-cond-col-custom-${t._id}`,labelText:"",hideLabel:!0,value:t.column,disabled:!E,placeholder:"a.some_column",onChange:e=>g(t._id,{column:e.target.value}),style:{marginTop:"0.5rem"}}):null,"qa"===t._columnMode||"QUESTION_ANSWER_CONCEPT_SEARCH"===t.handler?n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.5rem",marginTop:"0.5rem"}},n().createElement(o.a32,{id:`theme-cond-qa-q-${t._id}`,titleText:"",items:c,itemToString:e=>e?e.label:"",selectedItem:a,disabled:!E,placeholder:"Question column",onChange:({selectedItem:e})=>{let r=e?.id??"",a=t._qaAnswerCol??"";g(t._id,{_qaQuestionCol:r,_columnMode:"qa",column:nq(String(r),a)})}}),n().createElement(o.a32,{id:`theme-cond-qa-a-${t._id}`,titleText:"",items:c,itemToString:e=>e?e.label:"",selectedItem:l,disabled:!E,placeholder:"Answer column",onChange:({selectedItem:e})=>{let r=e?.id??"",a=t._qaQuestionCol??"";g(t._id,{_qaAnswerCol:r,_columnMode:"qa",column:nq(a,String(r))})}})):null),n().createElement(o.l6P,{id:`theme-cond-op-${t._id}`,labelText:"",hideLabel:!0,value:t.operator,disabled:!E,onChange:e=>g(t._id,{operator:e.target.value})},nB.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement(o.l6P,{id:`theme-cond-vt-${t._id}`,labelText:"",hideLabel:!0,value:t.valueType,disabled:!E,onChange:e=>g(t._id,{valueType:e.target.value})},nF.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:P.zH,iconDescription:"Remove condition",disabled:!E,onClick:()=>{let e;return e=t._id,_((u??[]).filter(t=>t._id!==e))}}))})),n().createElement(o.BJc,{orientation:"horizontal",gap:3,style:{marginTop:"0.75rem"}},n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:b.OM,disabled:!E,onClick:()=>{var e;return _([...u??[],(e=u.length,{_id:nz(),_columnMode:"pick",key:`cond_${e+1}`,label:"",handler:"CONCEPT_SEARCH",column:"",operator:"IN",valueType:"conceptUuid"})])}},"Add condition")))}var nJ=r(810);let nG=[{key:"Report",label:"Report",Icon:u.pl},{key:"ChartColumn",label:"Chart",Icon:_.n5},{key:"Medication",label:"Medication",Icon:nJ.gG},{key:"Calendar",label:"Appointments",Icon:_.Vv},{key:"Hospital",label:"Facility",Icon:s.vg},{key:"Document",label:"Document",Icon:es.yo},{key:"Search",label:"Search",Icon:g.vj},{key:"Information",label:"Info",Icon:tw.$$},{key:"Warning",label:"Warning",Icon:tb.N5},{key:"CheckmarkFilled",label:"Check",Icon:U._j},{key:"List",label:"List",Icon:p.B8},{key:"Tag",label:"Tag",Icon:f.vw}],nV=["BASE","FINAL"];function nW(e,t="#0f62fe"){let r=(e??"").trim();if(!r)return t;let a=r.startsWith("#")?r:`#${r}`;if(/^#[0-9a-fA-F]{6}$/.test(a))return a.toLowerCase();if(/^#[0-9a-fA-F]{3}$/.test(a)){let e=a[1],t=a[2],r=a[3];return`#${e}${e}${t}${t}${r}${r}`.toLowerCase()}return t}function nK({value:e,onChange:t,open:r}){var a;let l=nW(e.color),i=(a=e.icon,nG.find(e=>e.key===a)?.Icon);return n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.75rem"}},"Metadata"),n().createElement("div",{style:{marginBottom:"0.75rem",opacity:.85,fontSize:"0.875rem"}},"Controls how this theme appears in the UI (icon, color, category, ordering, etc.). Stored as ",n().createElement("b",null,"metaJson"),"."),n().createElement(o.BJc,{gap:5},n().createElement("div",null,n().createElement(o.a32,{id:"theme-meta-icon",titleText:"Icon",items:[...nG],disabled:!r,itemToString:e=>e?e.label:"",selectedItem:nG.find(t=>t.key===e.icon)??null,placeholder:"Type to search icons…",onChange:r=>{let a=r?.selectedItem;t({...e,icon:a?.key??""})}}),i?n().createElement("div",{style:{marginTop:"0.5rem",display:"flex",alignItems:"center",gap:"0.5rem",opacity:.9}},n().createElement(i,{size:20}),n().createElement("span",{style:{fontSize:"0.875rem"}},e.icon)):null),n().createElement("div",null,n().createElement("div",{style:{fontSize:"0.875rem",marginBottom:"0.25rem"}},"Color"),n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"}},n().createElement("input",{id:"theme-meta-color-picker",type:"color",value:l,disabled:!r,onChange:r=>t({...e,color:nW(r.target.value)}),style:{width:"3rem",height:"2.5rem",padding:0,border:"1px solid var(--cds-border-subtle)",borderRadius:"4px",background:"transparent",cursor:r?"pointer":"not-allowed"}}),n().createElement(o.ksK,{id:"theme-meta-color-hex",labelText:"",hideLabel:!0,value:l,disabled:!r,onChange:r=>t({...e,color:nW(r.target.value)})}))),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.75rem"}},n().createElement(o.ksK,{id:"theme-meta-category",labelText:"Category",value:e.category??"",disabled:!r,placeholder:"e.g. Clinical",onChange:r=>t({...e,category:r.target.value})}),n().createElement(o.Q7x,{id:"theme-meta-order",label:"Order",value:Number.isFinite(e.order)?e.order:0,disabled:!r,min:0,step:1,onChange:(r,a)=>{let n=Number(a?.value);t({...e,order:Number.isFinite(n)?n:0})}})),n().createElement(o.Sc0,{id:"theme-meta-beta",labelText:"Beta",checked:!!e.beta,disabled:!r,onChange:(r,{checked:a})=>t({...e,beta:!!a})}),n().createElement(o.fs1,{id:"theme-meta-description-short",labelText:"Short description",value:e.descriptionShort??"",disabled:!r,placeholder:"e.g. Diagnosis-based indicators",onChange:r=>t({...e,descriptionShort:r.target.value})}),n().createElement(o.KFt,{id:"theme-meta-kinds",titleText:"Allowed indicator kinds",items:nV,disabled:!r,itemToString:e=>e?String(e):"",initialSelectedItems:e.allowedIndicatorKinds??[],onChange:r=>{let a=r?.selectedItems??[];t({...e,allowedIndicatorKinds:a})},label:"Select kinds"})))}function nQ({config:e,metaJson:t,onConfigJson:r}){let a=n().useMemo(()=>JSON.stringify(e,null,2),[e]);n().useEffect(()=>{r(a)},[a,r]);let l=({title:e,subtitle:t,value:r,copyLabel:a,textAreaId:l})=>n().createElement("div",{style:{background:"var(--cds-layer-01)",border:"1px solid var(--cds-border-subtle)",borderRadius:8,padding:"1rem"}},n().createElement("div",{style:{display:"flex",alignItems:"start",justifyContent:"space-between",gap:"1rem"}},n().createElement("div",null,n().createElement("div",{style:{fontWeight:600}},e),t?n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8,marginTop:"0.25rem"}},t):null),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:c.QR,iconDescription:a,onClick:()=>{r&&navigator.clipboard?.writeText(r).catch(()=>{})}},"Copy")),n().createElement("div",{style:{marginTop:"0.75rem"}},n().createElement(o.fs1,{id:l,labelText:"",hideLabel:!0,value:r,readOnly:!0,style:{minHeight:420,fontFamily:'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace'}})));return n().createElement("div",null,n().createElement("div",{style:{marginBottom:"0.75rem"}},n().createElement("div",{style:{fontWeight:600}},"Preview"),n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8}},"These are the exact JSON payloads that will be saved.")),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem",alignItems:"start"}},n().createElement(l,{title:"configJson",subtitle:"Data source + fields + conditions.",value:a,copyLabel:"Copy configJson",textAreaId:"theme-config-preview"}),n().createElement(l,{title:"metaJson",subtitle:"UI metadata (icon, color, category, ordering).",value:t,copyLabel:"Copy metaJson",textAreaId:"theme-meta-preview"})))}let nY={sourceTable:"",patientIdColumn:"",dateColumn:"",locationColumn:"",fields:[],conditions:[]},nX={icon:"",color:"#0f62fe",category:"",order:0,beta:!1,descriptionShort:"",allowedIndicatorKinds:["BASE","FINAL"]};function nZ(e){return(e??"").toUpperCase().replace(/[^A-Z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,30)}function n0(e,t){try{if(!e)return t;return JSON.parse(e)??t}catch{return t}}function n1(e){return JSON.stringify({metaJson:e},null,2)}function n2({open:e,mode:t,initial:r,onClose:a,onSave:l}){let[i,s]=n().useState("basics"),[d,c]=n().useState(""),[m,u]=n().useState(""),[p,_]=n().useState("OBSERVATIONS"),[g,E]=n().useState(""),[f,b]=n().useState(nY),[y,h]=n().useState(JSON.stringify(nY,null,2)),[v,S]=n().useState(nX),[T,C]=n().useState(n1(nX)),[,w]=n().useState([]),[N,I]=n().useState(!1),[k,A]=n().useState(null),[R,O]=n().useState([]),[D,x]=n().useState(!1),[L,M]=n().useState(null);n().useEffect(()=>{if(e)if(s("basics"),r){let e;c(r.name??""),u(r.code??""),_(r.domain??"OBSERVATIONS"),E(r.description??"");let t=function(e){let t=n0(e,nY),r=t&&"object"==typeof t&&t.configJson&&"object"==typeof t.configJson?t.configJson:t,a={...nY,...r??{}};Array.isArray(a.fields)||(a.fields=[]),Array.isArray(a.conditions)||(a.conditions=[]);let n=a.conditionColumns&&"object"==typeof a.conditionColumns,l=!Array.isArray(a.conditions)||0===a.conditions.length;if(n&&l){let e=Object.entries(a.conditionColumns);a.conditions=e.map(([e,t])=>{let r=e.toLowerCase().includes("concept");return{key:e,label:e.replace(/_/g," "),handler:r?"CONCEPT_SEARCH":"TEXT",column:t,operator:r?"IN":"EQUALS",valueType:r?"conceptId":"string"}})}return Array.isArray(a.conditions)||(a.conditions=[]),Array.isArray(a.fields)||(a.fields=[]),a}(r.configJson);b(t),h(JSON.stringify(t,null,2));let a=(e=n0(r.metaJson,nX))&&"object"==typeof e&&e.metaJson&&"object"==typeof e.metaJson?{...nX,...e.metaJson}:{...nX,...e};S(a),C(n1(a))}else c(""),u(""),_("OBSERVATIONS"),E(""),b(nY),h(JSON.stringify(nY,null,2)),S(nX),C(n1(nX))},[e,r]),n().useEffect(()=>{if(!e)return;let t=new AbortController;return I(!0),A(null),w([]),nO(t.signal).then(e=>w(e??[])).catch(e=>{e?.name!=="AbortError"&&A(e?.message??"Failed to load schema tables")}).finally(()=>I(!1)),()=>t.abort()},[e]),n().useEffect(()=>{if(!e)return;let t=f?.sourceTable;if(!t){O([]),M(null),x(!1);return}let r=new AbortController;return x(!0),M(null),O([]),nx(t,r.signal).then(e=>O(e??[])).catch(e=>{e?.name!=="AbortError"&&M(e?.message??"Failed to load table columns")}).finally(()=>x(!1)),()=>r.abort()},[e,f?.sourceTable]),n().useEffect(()=>{h(JSON.stringify(f??nY,null,2))},[f]),n().useEffect(()=>{C(n1(v??nX))},[v]);let $=e&&!N&&!k,P=$&&!!d.trim()&&!!(m.trim()||nZ(d)).trim()&&!!p&&!!f?.sourceTable&&!!f?.patientIdColumn&&!!f?.dateColumn;if(!e)return null;let U=({id:e,label:t})=>n().createElement(o.VxE,{isActive:i===e,onClick:()=>s(e)},t);return n().createElement(o.aFV,{open:e,modalHeading:"create"===t?"Create Data Theme":"Edit Data Theme",primaryButtonText:"create"===t?"Create":"Save",secondaryButtonText:"Cancel",onRequestClose:a,onRequestSubmit:()=>{if(!P)return;let e={...r?.uuid?{uuid:r.uuid}:{},name:d.trim(),code:(m.trim()||nZ(d)).trim(),domain:p,description:g.trim(),configJson:y,metaJson:T};l(e)},primaryButtonDisabled:!P,size:"lg"},n().createElement(o.BJc,{gap:6},N?n().createElement(o.OuH,{description:"Loading schema tables…"}):null,!N&&k?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},"Failed to load schema tables: ",k):null,$?n().createElement("div",{style:{display:"grid",gridTemplateColumns:"240px 1fr",gap:"1rem"}},n().createElement("div",null,n().createElement(o.f8J,{expanded:!0,isPersistent:!1,"aria-label":"Theme editor sections"},n().createElement(o.BC4,null,n().createElement(U,{id:"basics",label:"Basics"}),n().createElement(U,{id:"source",label:"Source"}),n().createElement(U,{id:"fields",label:"Fields"}),n().createElement(U,{id:"conditions",label:"Conditions"}),n().createElement(U,{id:"metadata",label:"Metadata"}),n().createElement(U,{id:"preview",label:"Preview"})))),n().createElement(o.UCW,{style:{padding:0}},"basics"===i?n().createElement(nA,{value:{name:d,code:m,domain:p,description:g},onChange:e=>{c(e.name),u(e.code),_(e.domain),E(e.description??"")}}):null,"source"===i?n().createElement(n().Fragment,null,n().createElement(nM,{open:e,config:f,onChange:b}),D?n().createElement(o.OuH,{description:"Loading columns…"}):null,!D&&L?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)",marginTop:"0.5rem"}},"Failed to load table columns: ",L):null):null,"fields"===i?n().createElement(nP,{config:f,onChange:b,open:e}):null,"conditions"===i?n().createElement(nH,{open:e,config:f,onChange:b,columns:R,loadingCols:D}):null,"metadata"===i?n().createElement(nK,{value:v,onChange:S,open:e}):null,"preview"===i?n().createElement(nQ,{config:f,metaJson:T,onConfigJson:h}):null)):null))}function n5(){let{t:e}=(0,A.useTranslation)(),{has:t}=v(),r=t(y.RB.THEME_ADD,y.RB.THEME_EDIT),a=t(y.RB.THEME_PURGE),[l,i]=n().useState(""),[s,d]=n().useState([]),[c,m]=n().useState(!1),[u,p]=n().useState(null),[_,g]=n().useState(!1),[E,f]=n().useState("create"),[h,S]=n().useState(null),T=n().useCallback(e=>(m(!0),p(null),tD(l,e).then(e=>{d((e??[]).map(e=>({uuid:e.uuid??"",name:e.name??"",code:e.code??"",domain:e.domain,description:e.description,retired:e.retired})).filter(e=>!!e.uuid))}).catch(e=>p(e?.message??"Failed to load themes")).finally(()=>m(!1))),[l]);n().useEffect(()=>{let e=new AbortController;return T(e.signal),()=>e.abort()},[T]);let C=async e=>{try{f("edit"),p(null),m(!0);let t=await tx(e);S(t),g(!0)}catch(e){p(e?.message??"Failed to load theme for editing")}finally{m(!1)}},w=async e=>{await t$(e,!1);let t=new AbortController;await T(t.signal)},N=async e=>{if("create"===E)await tL(e);else{if(!e.uuid)throw Error("Missing uuid for update");await tM(e.uuid,e)}g(!1);let t=new AbortController;await T(t.signal)};return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:e("dataTheme","Data Themes"),subtitle:e("dataThemeSubTitle"," Define reusable data sources (mamba_* tables/views) for indicators and reporting.")}),n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"end",gap:"1rem"}},n().createElement("div",null),r&&n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:b.OM,onClick:()=>{f("create"),S(null),g(!0)}},"Create Theme")),n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search themes…",value:l,onChange:e=>i(e.target.value)}),c?n().createElement("div",null,"Loading…"):null,!c&&u?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},u):null,n().createElement(nI,{rows:s,onEdit:C,onDelete:w,canEdit:r,canDelete:a}),n().createElement(n2,{open:_,mode:E,initial:h,onClose:()=>g(!1),onSave:N}))}let n6={minHeight:"10rem"};function n3(){let e=(0,i.Zp)(),{has:t}=v(),r=[{path:"/admin/report-library",title:"Report Library",body:"Catalog completed and legacy reports before full migration into the builder.",required:[y.RB.LIBRARY_VIEW]},{path:"/admin/themes",title:"Data Themes",body:"Manage reusable source configurations and table mappings.",required:[y.RB.THEME_VIEW]},{path:"/admin/etl-tasks",title:"ETL Tasks",body:"Configure and run scheduled ETL processes for data extraction and transformation.",required:[y.RB.PACKAGE_IMPORT]},{path:"/admin/etl-browser",title:"ETL Data Browser",body:"Explore ETL schemas, tables, columns, and sample records.",required:[y.RB.ETLSOURCE_VIEW]},{path:"/admin/dashboards",title:"Dashboards",body:"Configure dashboards composed of sections and widgets (ETL monitors, reports).",required:[y.RB.DASHBOARD_VIEW]}].filter(e=>t(...e.required));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Admin",subtitle:"Manage shared configuration, catalogues, and library references for the report builder."}),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(260px, 1fr))",gap:"1rem"}},r.map(t=>n().createElement(o.t3h,{key:t.path,style:n6,onClick:()=>e(t.path)},n().createElement("h4",null,t.title),n().createElement("p",null,t.body))),0===r.length&&n().createElement(o.jeF,{lowContrast:!0,kind:"info",title:"No access",subtitle:"You do not have access to any Report Builder administration features. Contact your administrator.",hideCloseButton:!0})))}let n4=[{key:"name",header:"Name"},{key:"description",header:"Description"},{key:"status",header:"Status"},{key:"actions",header:"Actions"}],n8={name:"",description:""},n7=()=>{let{has:e}=v(),t=e(y.RB.CATEGORY_ADD,y.RB.CATEGORY_EDIT),r=e(y.RB.CATEGORY_PURGE),[a,l]=n().useState(""),[i,s]=n().useState([]),[d,c]=n().useState(!1),[m,u]=n().useState(null),[p,_]=n().useState(!1),[g,E]=n().useState("create"),[f,h]=n().useState(null),[S,T]=n().useState(n8),[C,w]=n().useState(!1),N=n().useCallback(async e=>{c(!0),u(null);try{let t=await en(a,e);s(t)}catch(e){u(e?.message??"Failed to load report categories")}finally{c(!1)}},[a]);n().useEffect(()=>{let e=new AbortController;return N(e.signal),()=>e.abort()},[N]);let I=async()=>{if(S.name.trim()){w(!0),u(null);try{let e={name:S.name.trim(),description:S.description.trim()||void 0};"create"===g?await el(e):f?.uuid&&await ei(f.uuid,e),_(!1);let t=new AbortController;await N(t.signal)}catch(e){u(e?.message??"Failed to save report category")}finally{w(!1)}}},k=async e=>{if(e?.uuid&&window.confirm(`Retire report category "${e.name}"?`))try{await eo(e.uuid);let t=new AbortController;await N(t.signal)}catch(e){u(e?.message??"Failed to retire report category")}},A=i.map(e=>({id:e.uuid,name:e.name,description:e.description||"—",status:e.retired?"Retired":"Active",actions:""}));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Report Categories",subtitle:"Manage shared categories used to classify reports across the builder.",actions:t?n().createElement(o.$nd,{size:"sm",renderIcon:b.OM,onClick:()=>{E("create"),h(null),T(n8),_(!0)}},"New Category"):void 0}),n().createElement("div",{style:{padding:"0 1rem 1rem",display:"grid",gap:"1rem"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search report categories…",value:a,onChange:e=>l(e.target.value)}),m?n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:m}):null,d?n().createElement(o.OOb,{rowCount:5,columnCount:4,showHeader:!1,showToolbar:!1}):n().createElement(o.bQt,{rows:A,headers:n4},({rows:e,headers:a,getHeaderProps:l,getRowProps:s})=>n().createElement(o.K3K,null,n().createElement(o.XIK,{useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,a.map(e=>n().createElement(o.A0N,{key:e.key,...l({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>{let a=i.find(t=>t.uuid===e.id);return n().createElement(o.Hjg,{key:e.id,...s({row:e})},n().createElement(o.nA6,null,a?.name),n().createElement(o.nA6,null,a?.description||"—"),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:a?.retired?"gray":"green"},a?.retired?"Retired":"Active")),n().createElement(o.nA6,null,n().createElement("div",{style:{display:"flex",gap:"0.5rem"}},t&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:es.ff,iconDescription:"Edit",onClick:()=>a&&void(E("edit"),h(a),T({name:a.name??"",description:a.description??""}),_(!0))},"Edit"),r&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:P.zH,iconDescription:"Retire",onClick:()=>a&&k(a)},"Retire"))))})))))),n().createElement(o.aFV,{open:p,modalHeading:"create"===g?"Create Report Category":"Edit Report Category",primaryButtonText:C?"Saving…":"create"===g?"Create":"Save",secondaryButtonText:"Cancel",onRequestClose:()=>!C&&_(!1),onRequestSubmit:I,primaryButtonDisabled:C||!S.name.trim()},n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"report-category-name",labelText:"Name",value:S.name,onChange:e=>T(t=>({...t,name:e.target.value}))}),n().createElement(o.fs1,{id:"report-category-description",labelText:"Description",rows:4,value:S.description,onChange:e=>T(t=>({...t,description:e.target.value}))}))))},n9=()=>{let[e,t]=n().useState(""),[r,a]=n().useState([]),[l,i]=n().useState(!1),[s,d]=n().useState(null);n().useEffect(()=>{let e=new AbortController;return i(!0),d(null),rL(e.signal).then(a).catch(e=>d(e?.message??"Failed to load age categories")).finally(()=>i(!1)),()=>e.abort()},[]);let c=r.filter(t=>{let r=e.trim().toLowerCase();return!r||[t.name,t.code,t.description||"",t.label].join(" ").toLowerCase().includes(r)});return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Age Categories",subtitle:"Review reusable age disaggregation structures used by indicators and sections."}),n().createElement("div",{style:{padding:"0 1rem 1rem",display:"grid",gap:"1rem"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search age categories…",value:e,onChange:e=>t(e.target.value)}),s?n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:s}):null,l?n().createElement("div",null,"Loading…"):null,l||s?null:n().createElement(o.nD3,null,c.map(e=>n().createElement(o.AsP,{key:e.uuid,title:n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",flexWrap:"wrap"}},n().createElement("span",{style:{fontWeight:600}},e.name),n().createElement(o.vwO,{type:"blue"},e.code),n().createElement(o.vwO,{type:"green"},e.ageGroups.length," age groups"))},n().createElement(o.FAs,null,n().createElement("div",{style:{display:"grid",gap:"0.75rem"}},n().createElement("div",null,n().createElement("strong",null,"Description:")," ",e.description||"—"),n().createElement("div",null,n().createElement("strong",null,"UUID:")," ",e.uuid),n().createElement("div",null,n().createElement("strong",null,"Groups:"),n().createElement("div",{style:{display:"grid",gap:"0.5rem",marginTop:"0.75rem"}},e.ageGroups.map(e=>n().createElement("div",{key:e.id,style:{display:"grid",gridTemplateColumns:"2fr 1fr 1fr 1fr",gap:"0.75rem",padding:"0.75rem",border:"1px solid var(--cds-border-subtle, #e0e0e0)"}},n().createElement("span",null,e.label),n().createElement("span",null,"Min days: ",e.minAgeDays),n().createElement("span",null,"Max days: ",e.maxAgeDays),n().createElement("span",null,"Sort: ",e.sortOrder))))))))))))},le=[{key:"label",header:"Label"},{key:"category",header:"Category"},{key:"range",header:"Range (days)"},{key:"sortOrder",header:"Sort Order"},{key:"status",header:"Status"}],lt=()=>{let[e,t]=n().useState(""),[r,a]=n().useState([]),[l,i]=n().useState(!1),[s,d]=n().useState(null);n().useEffect(()=>{let e=new AbortController;return i(!0),d(null),rL(e.signal).then(e=>{a(e.flatMap(e=>(e.ageGroups??[]).map(t=>({id:`${e.uuid}-${t.id}`,categoryName:e.name,categoryCode:e.code,label:t.label,minAgeDays:t.minAgeDays,maxAgeDays:t.maxAgeDays,sortOrder:t.sortOrder,active:t.active}))))}).catch(e=>d(e?.message??"Failed to load age groups")).finally(()=>i(!1)),()=>e.abort()},[]);let c=r.filter(t=>{let r=e.trim().toLowerCase();return!r||[t.label,t.categoryName,t.categoryCode].join(" ").toLowerCase().includes(r)}),m=c.map(e=>({id:e.id,label:e.label,category:`${e.categoryName} (${e.categoryCode})`,range:`${e.minAgeDays} - ${e.maxAgeDays}`,sortOrder:String(e.sortOrder),status:e.active?"Active":"Inactive"}));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Age Groups",subtitle:"Inspect age group ranges, ordering and category membership across the builder."}),n().createElement("div",{style:{padding:"0 1rem 1rem",display:"grid",gap:"1rem"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search age groups…",value:e,onChange:e=>t(e.target.value)}),s?n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:s}):null,l?n().createElement(o.OOb,{rowCount:8,columnCount:5,showHeader:!1,showToolbar:!1}):n().createElement(o.bQt,{rows:m,headers:le},({rows:e,headers:t,getHeaderProps:r,getRowProps:a})=>n().createElement(o.K3K,null,n().createElement(o.XIK,{useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,t.map(e=>n().createElement(o.A0N,{key:e.key,...r({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>{let t=c.find(t=>t.id===e.id);return n().createElement(o.Hjg,{key:e.id,...a({row:e})},n().createElement(o.nA6,null,t?.label),n().createElement(o.nA6,null,t?`${t.categoryName} (${t.categoryCode})`:"—"),n().createElement(o.nA6,null,t?`${t.minAgeDays} - ${t.maxAgeDays}`:"—"),n().createElement(o.nA6,null,t?.sortOrder),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:t?.active?"green":"gray"},t?.active?"Active":"Inactive")))})))))))},lr="/reportbuilder/reportlibrary";async function la(e,t){var r;let a=new URLSearchParams;return a.set("v","full"),e?.trim()&&a.set("q",e.trim()),(!(r=await (0,W.wO)(`${lr}?${a.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid)}async function ln(e,t){return(0,W.oV)(lr,e,t)}async function ll(e,t,r){return(0,W.oV)(`${lr}/${encodeURIComponent(e)}`,t,r)}async function li(e,t="Retired from report library",r){return(0,W.hI)(`${lr}/${encodeURIComponent(e)}?reason=${encodeURIComponent(t)}`,r)}let lo=[{key:"name",header:"Name"},{key:"sourceType",header:"Source"},{key:"reportType",header:"Type"},{key:"category",header:"Category"},{key:"migration",header:"Migration"},{key:"status",header:"Status"},{key:"actions",header:"Actions"}],ls={name:"",description:"",code:"",sourceType:"LEGACY",reportType:"AGGREGATE",reportDefinitionUuid:"",reportBuilderReportUuid:"",category:"",migrated:!1,metaJson:"{}"};function ld(e){return e?"string"==typeof e?e:e.uuid??"":""}function lc(e){return e?"string"==typeof e?e:e.name??e.uuid??"—":"—"}function lm(){let{has:e}=v(),t=e(y.RB.LIBRARY_ADD,y.RB.LIBRARY_EDIT),r=e(y.RB.LIBRARY_PURGE),[a,l]=n().useState(""),[i,s]=n().useState([]),[d,c]=n().useState([]),[m,u]=n().useState(!1),[p,_]=n().useState(null),[g,E]=n().useState(!1),[f,h]=n().useState("create"),[S,T]=n().useState(null),[C,w]=n().useState(ls),[N,I]=n().useState(!1),[k,A]=n().useState(""),[R,O]=n().useState(""),[D,x]=n().useState(""),[L,M]=n().useState(""),[$,U]=n().useState(""),B=n().useCallback(e=>(u(!0),_(null),Promise.all([la(void 0,e),en(void 0,e)]).then(([e,t])=>{s(e),c(t.filter(e=>!e.retired))}).catch(e=>_(e?.message??"Failed to load report library")).finally(()=>u(!1))),[]);n().useEffect(()=>{let e=new AbortController;return B(e.signal),()=>e.abort()},[B]);let F=async()=>{if(C.name.trim()){I(!0),_(null);try{let e={name:C.name.trim(),description:C.description.trim()||void 0,code:C.code.trim()||void 0,sourceType:C.sourceType,reportType:C.reportType,reportDefinitionUuid:C.reportDefinitionUuid.trim()||void 0,reportBuilderReportUuid:C.reportBuilderReportUuid.trim()||void 0,category:C.category||void 0,migrated:C.migrated,metaJson:C.metaJson.trim()||void 0};"create"===f?await ln(e):S?.uuid&&await ll(S.uuid,e),E(!1);let t=new AbortController;await B(t.signal)}catch(e){_(e?.message??"Failed to save report library entry")}finally{I(!1)}}},z=async e=>{if(e?.uuid&&window.confirm(`Retire report library entry "${e.name}"?`))try{await li(e.uuid);let t=new AbortController;await B(t.signal)}catch(e){_(e?.message??"Failed to retire report library entry")}},q=n().useMemo(()=>{let e=a.trim().toLowerCase();return i.filter(t=>{let r=!e||t.name?.toLowerCase().includes(e)||t.description?.toLowerCase().includes(e)||t.code?.toLowerCase().includes(e)||lc(t.category).toLowerCase().includes(e),a=!k||t.sourceType===k,n=!R||t.reportType===R,l=!D||ld(t.category)===D,i=!L||"ACTIVE"===L&&!t.retired||"RETIRED"===L&&!!t.retired,o=!$||"MIGRATED"===$&&!!t.migrated||"PENDING"===$&&!t.migrated;return r&&a&&n&&l&&i&&o})},[i,a,k,R,D,L,$]),j=q.map(e=>({id:e.uuid,name:e.name,sourceType:e.sourceType??"LEGACY",reportType:e.reportType??"AGGREGATE",category:lc(e.category),migration:e.migrated?"Migrated":"Pending",status:e.retired?"Retired":"Active",actions:""}));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Report Library",subtitle:"Catalog legacy and completed reports before and during migration into the report builder."}),n().createElement("div",{style:{display:"grid",gap:"1rem"}},n().createElement("div",{style:{display:"grid",gridTemplateColumns:"minmax(18rem, 2fr) repeat(5, minmax(10rem, 1fr)) auto auto",gap:"1rem",alignItems:"end"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search report library…",value:a,onChange:e=>l(e.target.value)}),n().createElement(o.l6P,{id:"filter-source",labelText:"Source",value:k,onChange:e=>A(e.target.value)},n().createElement(o.ebT,{value:"",text:"All sources"}),n().createElement(o.ebT,{value:"LEGACY",text:"LEGACY"}),n().createElement(o.ebT,{value:"BUILDER",text:"BUILDER"})),n().createElement(o.l6P,{id:"filter-type",labelText:"Type",value:R,onChange:e=>O(e.target.value)},n().createElement(o.ebT,{value:"",text:"All types"}),n().createElement(o.ebT,{value:"AGGREGATE",text:"AGGREGATE"}),n().createElement(o.ebT,{value:"LINE_LIST",text:"LINE_LIST"})),n().createElement(o.l6P,{id:"filter-category",labelText:"Category",value:D,onChange:e=>x(e.target.value)},n().createElement(o.ebT,{value:"",text:"All categories"}),d.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.name}))),n().createElement(o.l6P,{id:"filter-status",labelText:"Status",value:L,onChange:e=>M(e.target.value)},n().createElement(o.ebT,{value:"",text:"All statuses"}),n().createElement(o.ebT,{value:"ACTIVE",text:"Active"}),n().createElement(o.ebT,{value:"RETIRED",text:"Retired"})),n().createElement(o.l6P,{id:"filter-migration",labelText:"Migration",value:$,onChange:e=>U(e.target.value)},n().createElement(o.ebT,{value:"",text:"All"}),n().createElement(o.ebT,{value:"MIGRATED",text:"Migrated"}),n().createElement(o.ebT,{value:"PENDING",text:"Pending"})),n().createElement(o.$nd,{kind:"tertiary",size:"md",onClick:()=>{l(""),A(""),O(""),x(""),M(""),U("")}},"Clear"),t&&n().createElement(o.$nd,{size:"md",renderIcon:b.OM,onClick:()=>{h("create"),T(null),w(ls),E(!0)}},"New Library Entry")),p?n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:p}):null,m?n().createElement(o.OOb,{rowCount:6,columnCount:7,showHeader:!1,showToolbar:!1}):n().createElement(o.bQt,{rows:j,headers:lo},({rows:e,headers:a,getHeaderProps:l,getRowProps:i})=>n().createElement(o.K3K,null,n().createElement(o.XIK,{useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,a.map(e=>n().createElement(o.A0N,{key:e.key,...l({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>{let a=q.find(t=>t.uuid===e.id);return n().createElement(o.Hjg,{key:e.id,...i({row:e})},n().createElement(o.nA6,null,a?.name),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:a?.sourceType==="BUILDER"?"blue":"purple"},a?.sourceType??"LEGACY")),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:a?.reportType==="LINE_LIST"?"teal":"cyan"},a?.reportType??"AGGREGATE")),n().createElement(o.nA6,null,lc(a?.category)),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:a?.migrated?"green":"warm-gray"},a?.migrated?"Migrated":"Pending")),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:a?.retired?"gray":"green"},a?.retired?"Retired":"Active")),n().createElement(o.nA6,null,n().createElement("div",{style:{display:"flex",gap:"0.5rem"}},t&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:es.ff,onClick:()=>a&&void(h("edit"),T(a),w({name:a.name??"",description:a.description??"",code:a.code??"",sourceType:a.sourceType??"LEGACY",reportType:a.reportType??"AGGREGATE",reportDefinitionUuid:a.reportDefinitionUuid??"",reportBuilderReportUuid:a.reportBuilderReportUuid??"",category:ld(a.category),migrated:!!a.migrated,metaJson:a.metaJson?.trim()||"{}"}),E(!0))},"Edit"),r&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:P.zH,onClick:()=>a&&z(a)},"Retire"))))})))))),n().createElement(o.aFV,{open:g,modalHeading:"create"===f?"New Report Library Entry":"Edit Report Library Entry",primaryButtonText:N?"Saving…":"create"===f?"Create":"Save",secondaryButtonText:"Cancel",primaryButtonDisabled:N||!C.name.trim(),onRequestSubmit:F,onRequestClose:()=>!N&&E(!1)},n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"rl-name",labelText:"Name",value:C.name,onChange:e=>w(t=>({...t,name:e.target.value}))}),n().createElement(o.ksK,{id:"rl-code",labelText:"Code",value:C.code,onChange:e=>w(t=>({...t,code:e.target.value}))}),n().createElement(o.fs1,{id:"rl-description",labelText:"Description",value:C.description,onChange:e=>w(t=>({...t,description:e.target.value}))}),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(o.l6P,{id:"rl-sourceType",labelText:"Source Type",value:C.sourceType,onChange:e=>w(t=>({...t,sourceType:e.target.value}))},n().createElement(o.ebT,{value:"LEGACY",text:"LEGACY"}),n().createElement(o.ebT,{value:"BUILDER",text:"BUILDER"})),n().createElement(o.l6P,{id:"rl-reportType",labelText:"Report Type",value:C.reportType,onChange:e=>w(t=>({...t,reportType:e.target.value}))},n().createElement(o.ebT,{value:"AGGREGATE",text:"AGGREGATE"}),n().createElement(o.ebT,{value:"LINE_LIST",text:"LINE_LIST"}))),n().createElement(o.l6P,{id:"rl-category",labelText:"Category",value:C.category,onChange:e=>w(t=>({...t,category:e.target.value}))},n().createElement(o.ebT,{value:"",text:"None"}),d.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.name}))),n().createElement(o.ksK,{id:"rl-rd",labelText:"Legacy Report Definition UUID",value:C.reportDefinitionUuid,onChange:e=>w(t=>({...t,reportDefinitionUuid:e.target.value}))}),n().createElement(o.ksK,{id:"rl-rbr",labelText:"Builder Report UUID",value:C.reportBuilderReportUuid,onChange:e=>w(t=>({...t,reportBuilderReportUuid:e.target.value}))}),n().createElement(o.Sc0,{id:"rl-migrated",labelText:"Migrated",checked:C.migrated,onChange:(e,{checked:t})=>w(e=>({...e,migrated:!!t}))}),n().createElement(o.fs1,{id:"rl-meta",labelText:"Meta JSON",value:C.metaJson,onChange:e=>w(t=>({...t,metaJson:e.target.value})),rows:6}))))}let lu="/reportbuilder/etlsource";async function lp(e,t){var r;let a=new URLSearchParams;return a.set("v","custom:(uuid,name,code,description,tablePatterns,schemaName,sourceType,active,retired)"),e?.trim()&&a.set("q",e.trim()),(!(r=await (0,W.wO)(`${lu}?${a.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid)}async function l_(e,t){return(0,W.oV)(lu,e,t)}async function lg(e,t,r){return(0,W.oV)(`${lu}/${encodeURIComponent(e)}`,t,r)}async function lE(e,t="Retired from Report Builder Admin",r){let a=new URLSearchParams;return a.set("reason",t),(0,W.hI)(`${lu}/${encodeURIComponent(e)}?${a.toString()}`,r)}let lf=[{key:"name",header:"Name"},{key:"code",header:"Code"},{key:"schemaName",header:"Schema"},{key:"sourceType",header:"Source Type"},{key:"status",header:"Status"},{key:"actions",header:"Actions"}],lb={name:"",code:"",description:"",tablePatterns:"",schemaName:"",sourceType:"",active:!0};function ly(){let{has:e}=v(),t=e(y.RB.ETLSOURCE_ADD,y.RB.ETLSOURCE_EDIT),r=e(y.RB.ETLSOURCE_PURGE),[a,l]=n().useState(""),[i,s]=n().useState([]),[d,c]=n().useState(!1),[m,u]=n().useState(null),[p,_]=n().useState(!1),[g,E]=n().useState("create"),[f,h]=n().useState(null),[S,T]=n().useState(lb),[C,w]=n().useState(!1),N=n().useCallback(async e=>{c(!0),u(null);try{let t=await lp(a,e);s(t)}catch(e){u(e?.message??"Failed to load ETL sources")}finally{c(!1)}},[a]);n().useEffect(()=>{let e=new AbortController;return N(e.signal),()=>e.abort()},[N]);let I=async()=>{if(S.name.trim()){w(!0),u(null);try{let e={name:S.name.trim(),code:S.code.trim()||void 0,description:S.description.trim()||void 0,tablePatterns:S.tablePatterns.trim()||void 0,schemaName:S.schemaName.trim()||void 0,sourceType:S.sourceType.trim()||void 0,active:S.active};"create"===g?await l_(e):f?.uuid&&await lg(f.uuid,e),_(!1);let t=new AbortController;await N(t.signal)}catch(e){u(e?.message??"Failed to save ETL source")}finally{w(!1)}}},k=async e=>{if(e?.uuid&&window.confirm(`Retire ETL source "${e.name}"?`))try{await lE(e.uuid);let t=new AbortController;await N(t.signal)}catch(e){u(e?.message??"Failed to retire ETL source")}},A=i.map(e=>({id:e.uuid,name:e.name,code:e.code||"—",schemaName:e.schemaName||"—",sourceType:e.sourceType||"—",status:!1===e.active||e.voided?"Inactive":"Active",actions:""}));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"ETL Sources",subtitle:"Manage ETL source definitions used by the report builder.",actions:t?n().createElement(o.$nd,{"data-testid":"etl-source-new",size:"sm",renderIcon:b.OM,onClick:()=>{E("create"),h(null),T(lb),_(!0)}},"New ETL Source"):void 0}),n().createElement("div",{style:{padding:"0 1rem 1rem",display:"grid",gap:"1rem"}},n().createElement(o.vji,{"data-testid":"etl-source-search",size:"lg",labelText:"Search",placeholder:"Search ETL sources…",value:a,onChange:e=>l(e.target.value)}),m?n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:m}):null,d?n().createElement(o.OOb,{rowCount:5,columnCount:6,showHeader:!1,showToolbar:!1}):n().createElement(o.bQt,{rows:A,headers:lf},({rows:e,headers:a,getHeaderProps:l,getRowProps:s})=>n().createElement(o.K3K,null,n().createElement(o.XIK,{useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,a.map(e=>n().createElement(o.A0N,{key:e.key,...l({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>{let a=i.find(t=>t.uuid===e.id);return n().createElement(o.Hjg,{key:e.id,...s({row:e})},n().createElement(o.nA6,null,e.cells[0].value),n().createElement(o.nA6,null,e.cells[1].value),n().createElement(o.nA6,null,e.cells[2].value),n().createElement(o.nA6,null,e.cells[3].value),n().createElement(o.nA6,null,a?.active===!1||a?.voided?n().createElement(o.vwO,{type:"gray"},"Inactive"):n().createElement(o.vwO,{type:"green"},"Active")),n().createElement(o.nA6,null,n().createElement("div",{style:{display:"flex",gap:"0.5rem"}},t&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:es.ff,iconDescription:"Edit",hasIconOnly:!0,onClick:()=>a&&void(E("edit"),h(a),T({name:a.name??"",code:a.code??"",description:a.description??"",tablePatterns:a.tablePatterns??"",schemaName:a.schemaName??"",sourceType:a.sourceType??"",active:a.active??!0}),_(!0))}),r&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:P.zH,iconDescription:"Retire",hasIconOnly:!0,onClick:()=>a&&k(a)}))))})))))),n().createElement(o.aFV,{open:p,modalHeading:"create"===g?"New ETL Source":"Edit ETL Source","data-testid":"etl-source-modal",primaryButtonText:C?"Saving…":"Save",secondaryButtonText:"Cancel",onRequestClose:()=>!C&&_(!1),onRequestSubmit:I,primaryButtonDisabled:C||!S.name.trim()},n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"etl-source-name","data-testid":"etl-source-name",labelText:"Name",value:S.name,onChange:e=>T(t=>({...t,name:e.target.value}))}),n().createElement(o.ksK,{id:"etl-source-code","data-testid":"etl-source-code",labelText:"Code",value:S.code,onChange:e=>T(t=>({...t,code:e.target.value}))}),n().createElement(o.ksK,{id:"etl-source-schema","data-testid":"etl-source-schema",labelText:"Schema Name",value:S.schemaName,onChange:e=>T(t=>({...t,schemaName:e.target.value}))}),n().createElement(o.ksK,{id:"etl-source-type","data-testid":"etl-source-type",labelText:"Source Type",value:S.sourceType,onChange:e=>T(t=>({...t,sourceType:e.target.value}))}),n().createElement(o.fs1,{id:"etl-source-description","data-testid":"etl-source-description",labelText:"Description",rows:3,value:S.description,onChange:e=>T(t=>({...t,description:e.target.value}))}),n().createElement(o.fs1,{id:"etl-source-table-patterns","data-testid":"etl-source-table-patterns",labelText:"Table Patterns",helperText:"Store table matching patterns as text.",rows:4,value:S.tablePatterns,onChange:e=>T(t=>({...t,tablePatterns:e.target.value}))}),n().createElement(o.lMk,{id:"etl-source-active",labelText:"Active",toggled:S.active,onToggle:e=>T(t=>({...t,active:e}))}))))}var lh=r(6942),lv=r.n(lh);async function lS(e){try{let t=await (0,aO.jX)((0,h.openmrsFetch)("/ws/rest/v1/taskdefinition?v=custom:(uuid,name,description,taskClass,started,lastExecutionTime,repeatInterval)",{signal:e}));return(await t.json()).results||[]}catch(e){throw console.error("Error fetching task definitions:",e),e}}async function lT(e,t){let r=e.map(e=>"string"==typeof e?e.trim():"").filter(e=>e);if(0===r.length)return{tasks:[],unknownNames:[]};let a=await lS(t),n=new Set,l=[];for(let e of a)r.includes(e.name)&&(l.push(e),n.add(e.name));return{tasks:l,unknownNames:r.filter(e=>!n.has(e))}}async function lC(e){try{let t=await (0,aO.jX)((0,h.openmrsFetch)("/ws/rest/v1/taskaction",{method:"POST",headers:{"Content-Type":"application/json"},body:{action:"runtask",tasks:[e]}}));if(201!==t.status)throw Error(`Task execution failed with status ${t.status}`);return{status:t.status,message:"Task executed successfully"}}catch(e){throw console.error("Error executing ETL task:",e),e}}let lw=["password","secret","token","authorization","cookie","session","sessionid","jsessionid","apikey","api_key","apikey","auth","credentials","private","key"];async function lN(e,t){let r=Date.now(),a=[];if(!e.endpoint?.url)return{success:!1,error:"URL is required",testedAt:new Date().toISOString()};let n=e.endpoint.url;n.startsWith("/")&&(n=`${h.restBaseUrl}${n}`);let l={"Content-Type":"application/json"},i=e.endpoint.auth;"BASIC"===i.type&&i.username&&i.password?l.Authorization=`Basic ${btoa(`${i.username}:${i.password}`)}`:"BEARER_TOKEN"===i.type&&i.token?l.Authorization=`Bearer ${i.token}`:"API_KEY"===i.type&&i.headerName&&i.apiKey&&(l[i.headerName]=i.apiKey);try{let i=await (0,h.openmrsFetch)(n,{method:e.endpoint.method||"GET",headers:l,body:e.requestBody?JSON.stringify(e.requestBody):void 0,signal:t}),o=Date.now()-r,s=i.data,d=function e(t,r=0){if(r>10||null==t)return t;if(Array.isArray(t))return t.map(t=>e(t,r+1));if("object"==typeof t){let a={};for(let[n,l]of Object.entries(t))!function(e){let t=e.toLowerCase();return lw.some(e=>t.includes(e))}(n)?"object"==typeof l&&null!==l?a[n]=e(l,r+1):"string"==typeof l&&l.length>1e3?a[n]=l.substring(0,1e3)+"...[TRUNCATED]":a[n]=l:a[n]="[REDACTED]";return a}return t}(function e(t,r=50,a=5){if(a<=0)return"[MAX_DEPTH_REACHED]";if(Array.isArray(t))return t.slice(0,100).map(t=>e(t,r,a-1));if("object"==typeof t&&null!==t){let n=Object.entries(t).slice(0,r),l={};for(let[t,i]of n)l[t]=e(i,r,a-1);return l}return t}(s));return o>5e3&&a.push("Response time is slow (>5s)"),{success:!0,httpStatus:i.status||200,durationMs:o,contentType:i.headers?.get("content-type")||void 0,contentLength:JSON.stringify(s).length,data:d,sanitizedData:d,testedAt:new Date().toISOString(),warnings:a}}catch(t){let e=Date.now()-r;if("AbortError"===t.name)return{success:!1,error:"Request was cancelled",errorCode:"ABORTED",durationMs:e,testedAt:new Date().toISOString()};return{success:!1,error:t.message||"Connection test failed",errorCode:t.code||"CONNECTION_ERROR",durationMs:e,testedAt:new Date().toISOString()}}}function lI(e){return e?Array.isArray(e)?e:Array.isArray(e.results)?e.results:[]:[]}let lk="/reportbuilder/etl-monitor";async function lA(e,t){let r=new URLSearchParams;return r.set("v","full"),e?.trim()&&r.set("q",e.trim()),lI(await (0,W.wO)(`${lk}?${r.toString()}`,t)).filter(e=>!!e?.uuid)}async function lR(e){let t=new URLSearchParams;return t.set("v","full"),t.set("activeOnly","true"),lI(await (0,W.wO)(`${lk}?${t.toString()}`,e)).filter(e=>!!e?.uuid)}async function lO(e,t){let r=new URLSearchParams;return r.set("v","full"),(0,W.wO)(`${lk}/${encodeURIComponent(e)}?${r.toString()}`,t)}async function lD(e,t){return(0,W.oV)(lk,e,t)}async function lx(e,t,r){return(0,W.oV)(`${lk}/${encodeURIComponent(e)}`,t,r)}async function lL(e,t="Retired from Report Builder Admin",r){let a=new URLSearchParams;return a.set("reason",t),(0,W.hI)(`${lk}/${encodeURIComponent(e)}?${a.toString()}`,r)}async function lM(e,t){let r=await lO(e,t);if(!r||!r.configJson)throw Error("Monitor configuration not found");let a=JSON.parse(r.configJson).apiEndpoint;if(!a||!a.url)throw Error("ETL endpoint URL not configured");let n=a.url;n.startsWith("/")&&(n=`${h.restBaseUrl}${n}`);let l={},i="POST"===a.method&&a.requestBody?JSON.stringify(a.requestBody):void 0;if(a.headers&&Object.entries(a.headers).forEach(([e,t])=>{l[e]=String(t)}),"BASIC"===a.authType&&a.authConfig){let e=btoa(`${a.authConfig.username}:${a.authConfig.password}`);l.Authorization=`Basic ${e}`}else if("BEARER_TOKEN"===a.authType&&a.authConfig?.token)l.Authorization=`Bearer ${a.authConfig.token}`;else if("API_KEY"===a.authType&&a.authConfig){let{headerName:e,apiKey:t}=a.authConfig;e&&t&&(l[e]=t)}let o=await (0,h.openmrsFetch)(n,{method:a.method||"GET",headers:l,body:i,signal:t}),s=function(e,t){if(!e)return[];if(!t)return Array.isArray(e)?e:Object.entries(e).map(([e,t])=>({key:e,header:e,value:t}));try{return(JSON.parse(t).columns||[]).map(t=>{var r,a;let n=function(e,t){if(!t||!e)return;let r=(t.startsWith("$.")?t.slice(2):t).split(".").flatMap(e=>{let t=e.match(/^(\w+)\[(\d+)\]$/);return t?[t[1],parseInt(t[2],10)]:[e]}),a=e;for(let e of r){if(null==a)return;a=a[e]}return a}(e,t.jsonPath);return{key:t.key,header:t.header,value:n??t.defaultValue,displayValue:t.format?(r=n,a=t.format,null==r?"":a.includes("%")?String(Math.round(Number(r)||0))+"%":a.includes("s")?String(r)+"s":"0.0"===a?String(Math.round(10*Number(r))/10):String(r)):void 0,rawValue:n}})}catch(e){return console.error("Failed to parse display config JSON",e),[]}}(o.data,r.displayConfigJson);return{uuid:r.uuid,code:r.code||"",timestamp:new Date().toISOString(),success:!0,data:s,rawResponse:o.data}}var l$=r(4676);let lP=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function lU(e){if(null==e||""===e)return null;if(e instanceof Date)return isNaN(e.getTime())?null:e;if("number"==typeof e)return isNaN(e)?null:new Date(e);if("string"!=typeof e)return null;let t=new Date(e.trim().replace(/([+-]\d{2})(\d{2})$/,"$1:$2"));return isNaN(t.getTime())?null:t}function lB(e,t=new Date){let r,a=String(e.getHours()).padStart(2,"0"),n=String(e.getMinutes()).padStart(2,"0"),l=`${a}:${n}`,i=Math.round(((r=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime())(e)-r(t))/864e5);return 0===i?`Today, ${l}`:-1===i?`Yesterday, ${l}`:`${e.getDate()} ${lP[e.getMonth()]}, ${l}`}function lF(e){let t=lU(e);return t?lB(t):null==e||""===e?"—":String(e)}function lz(e,t){let r=lU(e);return r&&"number"==typeof t&&isFinite(t)&&!(t<=0)?new Date(r.getTime()+1e3*t):null}function lq(e){return e?lB(e):"Not scheduled"}let lj=/duration|elapsed|runtime/i,lH=/sec/i,lJ=/milli|_ms\b|ms$/i;function lG(e,t){return lJ.test(t)?e:lH.test(t)||e<1e3?1e3*e:e}let lV=/^(status|state)$/i;function lW(e,t){let r;for(let a of e){let e=function(e,t){let r;if(null==e||"object"!=typeof e)return;let a=new WeakSet,n=(e,l)=>{if(!(null==e||l>3||"object"!=typeof e||a.has(e)))for(let[i,o]of(a.add(e),Array.isArray(e)?e.map(e=>["",e]):Object.entries(e)))"number"==typeof o&&isFinite(o)&&t.test(i)?r=(r??0)+o:lV.test(i)&&"string"==typeof o&&t.test(o)?r=(r??0)+1:"object"==typeof o&&null!==o&&n(o,l+1)};return n(e,0),r}(a,t);void 0!==e&&(r=(r??0)+e)}return r}let lK={TEXT:"TEXT",STRING:"STRING",NUMBER:"NUMBER",INTEGER:"INTEGER",DECIMAL:"DECIMAL",PERCENTAGE:"PERCENTAGE",PROGRESS_BAR:"PERCENTAGE",STATUS_BADGE:"STATUS",TIMESTAMP:"TIMESTAMP",DURATION:"DURATION",BOOLEAN:"BOOLEAN",ICON:"TEXT",LINK:"TEXT"},lQ={green:"success",success:"success",blue:"info",info:"info",yellow:"warning",warning:"warning",orange:"warning",red:"critical",error:"critical",critical:"critical",gray:"neutral",grey:"neutral",neutral:"neutral","cool-gray":"neutral",running:"info"},lY={STATUS_CARD:"STATUS_CARD",PROGRESS_BAR:"PROGRESS",DATA_TABLE:"TABLE",TIME_SERIES:"TABLE",ERROR_LOG:"TABLE",METRICS_GRID:"METRICS_GRID"};function lX(e,t){let r,a,n;if(!e)return null;if("string"==typeof e)try{r=JSON.parse(e)}catch{return console.error("Failed to parse legacy display config JSON"),null}else r=e;if(!r||"object"!=typeof r)return null;let l=t&&lY[t]||"SUMMARY_CARD",i={schemaVersion:2,component:l,fields:[]};if(i.layout=(a={STATUS_CARD:{section:"overview",span:{sm:4,md:4,lg:4},priority:1},SUMMARY_CARD:{section:"overview",span:{sm:4,md:4,lg:4},priority:2},METRICS_GRID:{section:"execution",span:{sm:4,md:8,lg:8},priority:1},PROGRESS:{section:"execution",span:{sm:4,md:8,lg:8},priority:2},TABLE:{section:"history",span:{sm:4,md:8,lg:16},priority:1},DATA_TABLE:{section:"history",span:{sm:4,md:8,lg:16},priority:1},DETAILS:{section:"configuration",span:{sm:4,md:4,lg:4},priority:1},ERROR_LOG:{section:"errors",span:{sm:4,md:8,lg:16},priority:1},LOG:{section:"history",span:{sm:4,md:8,lg:8},priority:2},TIME_SERIES:{section:"history",span:{sm:4,md:8,lg:12},priority:2}})[l]||a.SUMMARY_CARD,i.emptyState=(n={STATUS_CARD:{title:"No status data available",tone:"neutral"},SUMMARY_CARD:{title:"No data available",tone:"neutral"},METRICS_GRID:{title:"No metrics available",tone:"neutral"},PROGRESS:{title:"No active process",description:"No process is currently running",tone:"neutral"},TABLE:{title:"No data available",description:"There are no records to display",tone:"neutral"},DATA_TABLE:{title:"No data available",description:"There are no records to display",tone:"neutral"},DETAILS:{title:"No configuration available",tone:"neutral"},ERROR_LOG:{title:"No errors reported",description:"There are no errors to display",tone:"success"},LOG:{title:"No activity",description:"No events have been recorded yet",tone:"neutral"},TIME_SERIES:{title:"No data available",description:"There is no time series data to display",tone:"neutral"}})[l]||n.SUMMARY_CARD,r.columns&&Array.isArray(r.columns)){if(i.fields=r.columns.map((e,t)=>{var r,a,n;let l;return r=e,a=t,l={key:r.key||`field-${a}`,label:r.header||r.key||"Field",path:r.jsonPath||r.path||`$.${r.key}`,type:(n=r.columnType||r.type)&&lK[n.toUpperCase()]||"TEXT",primary:!1,order:a},void 0!==r.defaultValue&&(l.defaultValue=r.defaultValue),void 0!==r.sortable&&(l.sortable=r.sortable),void 0!==r.width&&(l.width=r.width),"STATUS"===l.type&&r.colorMap&&(l.statusMap=function(e){let t={};for(let[a,n]of Object.entries(e)){var r;let e=lQ[n.toLowerCase()]||"neutral";t[a]={label:({true:"Running",false:"Stopped",UP:"Healthy",DOWN:"Unavailable",ACTIVE:"Active",INACTIVE:"Inactive",RUNNING:"Running",STOPPED:"Stopped",SUCCESS:"Success",FAILURE:"Failed",COMPLETED:"Completed",FAILED:"Failed",PENDING:"Pending",IN_PROGRESS:"In Progress"})[(r=a).toUpperCase()]||r,tone:e}}return t}(r.colorMap)),r.format&&(l.format=function(e,t){if(e)switch(t){case"TIMESTAMP":return{timestamp:{display:e.includes("relative")?"relative":"datetime",relative:e.includes("relative")}};case"DURATION":return{duration:{display:e.includes("human")?"human":"seconds"}};case"PERCENTAGE":return{percentage:{decimals:e.includes(".0")||e.includes(".1")?1:0,suffix:"%"}};case"NUMBER":return{number:{decimals:e.includes(".0")?0:e.includes(".1")?1:e.includes(".2")?2:void 0}};default:return}}(r.format,l.type)),l}),"STATUS_CARD"===l&&i.fields.length>0){let e=i.fields.find(e=>"STATUS"===e.type);e?(e.primary=!0,i.componentConfig={statusFieldKey:e.key}):i.fields[0]&&(i.fields[0].primary=!0)}"METRICS_GRID"===l&&(i.componentConfig={labelsAbove:!1}),"PROGRESS"===l&&i.fields.find(e=>"PERCENTAGE"===e.type||"NUMBER"===e.type)&&(i.componentConfig={progressMin:0,progressMax:100}),"TABLE"===l&&(i.data={rootPath:"$"},i.componentConfig={selectable:!1,maxRows:50})}return i}function lZ(e){if(!e)return{version:"unknown",config:null};try{let t=JSON.parse(e);if(t&&"object"==typeof t&&2===t.schemaVersion)return{version:2,config:t};return t&&"object"==typeof t&&(t.columns&&Array.isArray(t.columns)&&!t.schemaVersion||t.schemaVersion),{version:1,config:t}}catch(e){return{version:"unknown",config:null,error:e instanceof Error?e.message:"Failed to parse JSON"}}}var l0=r(6434);function l1({children:e,loading:t=!1,onRefresh:r,actions:a}){return n().createElement("div",{className:"-esm-report-builder__monitor-widget-card__monitor-widget-card___fr5Gr"},n().createElement("div",{className:"-esm-report-builder__monitor-widget-card__monitor-widget-card__actions___Wd0dV"},r&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:u.wM,iconDescription:"Refresh",onClick:r,disabled:t}),a&&a.length>0&&n().createElement(o.obU,{flipped:!0,ariaLabel:"Monitor actions"},a.map(e=>n().createElement(o.XSD,{key:e.label,itemText:e.label,onClick:e.onClick})))),e)}let l2={"etl-monitor-card-shell":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell___Vk6Rm","etl-monitor-card-shell__header":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__header___GFyuz","etl-monitor-card-shell__status":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__status___kTliF","etl-monitor-card-shell__status-dot":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__status-dot___kDt5h","etl-monitor-card-shell__status-dot--active":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__status-dot--active___dcVa1","etl-monitor-card-shell__status-dot--inactive":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__status-dot--inactive___Qg3L-","etl-monitor-card-shell__status-dot--error":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__status-dot--error___99+Je","etl-monitor-card-shell__status-dot--warning":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__status-dot--warning___WTw+2","etl-monitor-card-shell__content":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__content___hfukv","etl-monitor-card-shell__footer":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__footer___Q5u07","etl-monitor-card-shell__actions":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__actions___4ykJv"};function l5({title:e,children:t,loading:r=!1,error:a,onRefresh:l,refreshDisabled:i=!1,extraActions:s,onEdit:d,size:c="md"}){let[m,p]=n().useState(!1),_=async()=>{if(l&&!m&&!i){p(!0);try{await l()}finally{p(!1)}}};return n().createElement(o.FAs,{className:`${l2["etl-monitor-card-shell"]} ${l2[`etl-monitor-card-shell--${c}`]}`},n().createElement("div",{className:l2["etl-monitor-card-shell__header"]},n().createElement("h4",{className:l2["etl-monitor-card-shell__title"]},e),n().createElement("div",{className:l2["etl-monitor-card-shell__actions"]},s,l&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:u.wM,iconDescription:"Refresh",hasIconOnly:!0,onClick:_,disabled:i||m||r}),d&&n().createElement(o.obU,{flipped:!0,ariaLabel:"Monitor actions",size:"sm"},n().createElement(o.XSD,{itemText:"Edit monitor",onClick:d})))),n().createElement("div",{className:l2["etl-monitor-card-shell__content"]},r&&n().createElement("div",{className:l2["etl-monitor-card-shell__loading"]},n().createElement(o.OuH,{description:"Loading..."})),!r&&a&&n().createElement("div",{className:l2["etl-monitor-card-shell__error"]},n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:a,hideCloseButton:!0}),l&&n().createElement(o.$nd,{size:"sm",kind:"secondary",renderIcon:u.wM,onClick:_,style:{marginTop:"1rem"}},"Retry")),!r&&!a&&t))}function l6({icon:e,message:t,description:r}){return n().createElement("div",{className:l2["etl-monitor-card-shell__empty"]},e||n().createElement(tb.BF,{size:32}),n().createElement("p",{className:l2["etl-monitor-card-shell__empty-message"]},t),r&&n().createElement("p",{className:l2["etl-monitor-card-shell__empty-description"]},r))}function l3({monitor:e,data:t,error:r,loading:a,onRefresh:l,position:o,title:s,editBaseUrl:d="/admin/etl-monitors/builder"}){let c=(0,i.Zp)(),m=`${"number"==typeof o?`${o}. `:""}${s??e.name}`,u=n().useMemo(()=>{let t=lZ(e.displayConfigJson),r=2===t.version?t.config:lX(e.displayConfigJson,e.monitorType);return r?{...r,presentation:{...r.presentation||{},title:m,description:e.description}}:null},[e.displayConfigJson,e.monitorType,e.description,m]);return u?n().createElement(l1,{loading:a,onRefresh:l,actions:[{label:"Edit monitor",onClick:()=>c(`${d}?mode=edit&monitor=${e.uuid}`)}]},n().createElement(l0.MonitorRenderer,{config:u,data:t?.rawResponse,loading:a,error:r??null})):n().createElement(l5,{title:m,loading:a,error:r,onRefresh:l,size:"lg"},n().createElement(l6,{message:"Invalid monitor configuration"}))}let l4={page:"-esm-report-builder__etl-tasks-page-component__page___Mt7Wf",kpiGrid:"-esm-report-builder__etl-tasks-page-component__kpiGrid___qW4n-",kpiCard:"-esm-report-builder__etl-tasks-page-component__kpiCard___AObBu",kpiIcon:"-esm-report-builder__etl-tasks-page-component__kpiIcon___QCqkF",kpiIconhealthy:"-esm-report-builder__etl-tasks-page-component__kpiIconhealthy___emXSD",kpiIconinfo:"-esm-report-builder__etl-tasks-page-component__kpiIconinfo___jVX2a",kpiIcondanger:"-esm-report-builder__etl-tasks-page-component__kpiIcondanger___5lv2-",kpiIconneutral:"-esm-report-builder__etl-tasks-page-component__kpiIconneutral___zQVWI",kpiText:"-esm-report-builder__etl-tasks-page-component__kpiText___IyEGI",kpiLabel:"-esm-report-builder__etl-tasks-page-component__kpiLabel___AfHvE",kpiValue:"-esm-report-builder__etl-tasks-page-component__kpiValue___aLYxV",kpiSubtext:"-esm-report-builder__etl-tasks-page-component__kpiSubtext___78GC8",toolbarControls:"-esm-report-builder__etl-tasks-page-component__toolbarControls___+e7Kv",searchBox:"-esm-report-builder__etl-tasks-page-component__searchBox___PZ7do",filterTabs:"-esm-report-builder__etl-tasks-page-component__filterTabs___G8QWn",filterTab:"-esm-report-builder__etl-tasks-page-component__filterTab___OEeyn",filterTabActive:"-esm-report-builder__etl-tasks-page-component__filterTabActive___8aeVs",countChip:"-esm-report-builder__etl-tasks-page-component__countChip___GXC6i",liveEmpty:"-esm-report-builder__etl-tasks-page-component__liveEmpty___32mxd",liveEmptyTitle:"-esm-report-builder__etl-tasks-page-component__liveEmptyTitle___mmicJ",liveEmptyHint:"-esm-report-builder__etl-tasks-page-component__liveEmptyHint___Pxmgr",sectionHeading:"-esm-report-builder__etl-tasks-page-component__sectionHeading___aEFpc",monitorsGrid:"-esm-report-builder__etl-tasks-page-component__monitorsGrid___UEM3s",monitorMissingCard:"-esm-report-builder__etl-tasks-page-component__monitorMissingCard___6DPX2",monitorMissingTitle:"-esm-report-builder__etl-tasks-page-component__monitorMissingTitle___JxNCB",monitorMissingHint:"-esm-report-builder__etl-tasks-page-component__monitorMissingHint___pizBc",toolbar:"-esm-report-builder__etl-tasks-page-component__toolbar___dLl7k",toolbarHeading:"-esm-report-builder__etl-tasks-page-component__toolbarHeading___JimFz",toolbarSubtext:"-esm-report-builder__etl-tasks-page-component__toolbarSubtext___VRe-A",tasksGrid:"-esm-report-builder__etl-tasks-page-component__tasksGrid___AHLKY",taskCard:"-esm-report-builder__etl-tasks-page-component__taskCard___94a2R",cardHead:"-esm-report-builder__etl-tasks-page-component__cardHead___ws1j6",cardIcon:"-esm-report-builder__etl-tasks-page-component__cardIcon___3uSJw",cardIconMuted:"-esm-report-builder__etl-tasks-page-component__cardIconMuted___6T82f",cardHeadText:"-esm-report-builder__etl-tasks-page-component__cardHeadText___UVEvu",cardTitle:"-esm-report-builder__etl-tasks-page-component__cardTitle___CerTU",cardDescription:"-esm-report-builder__etl-tasks-page-component__cardDescription___4lyXO",statusPill:"-esm-report-builder__etl-tasks-page-component__statusPill___rZDjR",statusPillActive:"-esm-report-builder__etl-tasks-page-component__statusPillActive___wzlTk",statusPillInactive:"-esm-report-builder__etl-tasks-page-component__statusPillInactive___V1wUN",statusPillUnknown:"-esm-report-builder__etl-tasks-page-component__statusPillUnknown___Lwq55",metaRow:"-esm-report-builder__etl-tasks-page-component__metaRow___tpiie",metaItem:"-esm-report-builder__etl-tasks-page-component__metaItem___6u4FS",metaLabel:"-esm-report-builder__etl-tasks-page-component__metaLabel___Z3qOo",metaValue:"-esm-report-builder__etl-tasks-page-component__metaValue___t7QLs",cardActions:"-esm-report-builder__etl-tasks-page-component__cardActions___GNIrw",monitorMissing:"-esm-report-builder__etl-tasks-page-component__monitorMissing___jOpIf",executingStatus:"-esm-report-builder__etl-tasks-page-component__executingStatus___k2gU5",emptyState:"-esm-report-builder__etl-tasks-page-component__emptyState___1YrRv",emptyStateIcon:"-esm-report-builder__etl-tasks-page-component__emptyStateIcon___3aFAn"},l8=/running|in.?progress|processing/i,l7=/fail|error/i,l9="All types";function ie(e){return e?.name==="AbortError"||/abort/i.test(String(e?.message))}function it(e){let t=(e??"").toLowerCase();return t.includes("upgrade")?"Upgrade":t.includes("sync")?"Sync":t.includes("download")?"Download":t.includes("initializ")?"Initialize":t.includes("update")?"Update":t.includes("report")?"Report":t.includes("etl")||t.includes("extract")||t.includes("flatten")||t.includes("mamba")?"ETL":"Task"}function ir({label:e,value:t}){return n().createElement("div",{className:l4.metaItem},n().createElement("span",{className:l4.metaLabel},e),n().createElement("span",{className:l4.metaValue,title:t},t))}function ia({icon:e,iconTone:t,label:r,value:a,subtext:l}){return n().createElement(o.FAs,{className:l4.kpiCard},n().createElement("span",{className:lv()(l4.kpiIcon,l4[`kpiIcon${t}`])},e),n().createElement("div",{className:l4.kpiText},n().createElement("span",{className:l4.kpiLabel},r),n().createElement("span",{className:l4.kpiValue},a),n().createElement("span",{className:l4.kpiSubtext},l)))}function il({tab:e,label:t,count:r,activeTab:a,onSelect:l}){return n().createElement("button",{type:"button",className:lv()(l4.filterTab,a===e&&l4.filterTabActive),onClick:()=>l(e)},t,n().createElement("span",{className:l4.countChip},r))}function ii(){let{t:e}=(0,A.useTranslation)(),t=(0,h.useConfig)(),r=(0,a.useMemo)(()=>(t.etlTasks?.tasks??[]).filter(e=>"string"==typeof e&&e.trim().length>0),[t.etlTasks?.tasks]),l=(0,a.useMemo)(()=>(t.etlTasks?.progressMonitors??[]).filter(e=>"string"==typeof e),[t.etlTasks?.progressMonitors]),[i,s]=(0,a.useState)([]),[m,p]=(0,a.useState)([]),[E,f]=(0,a.useState)([]),[b,y]=(0,a.useState)(null),[v,S]=(0,a.useState)(!0),[T,C]=(0,a.useState)(null),[w,N]=(0,a.useState)(null),[I,k]=(0,a.useState)({}),[R,O]=(0,a.useState)({}),[D,x]=(0,a.useState)({}),[L,M]=(0,a.useState)(""),[$,P]=(0,a.useState)("all"),[B,F]=(0,a.useState)(l9),z=(0,a.useRef)(null),q=(0,a.useCallback)(async e=>{S(!0),C(null),y(null);try{if(0===r.length&&0===l.length){s([]),p([]),f([]);return}let[t,a]=await Promise.all([r.length>0?lT(r,e):Promise.resolve({tasks:[],unknownNames:[]}),l.length>0?lA(void 0,e).catch(e=>(ie(e)||y(e?.message??"Failed to load ETL monitors"),[])):Promise.resolve([])]);if(e?.aborted)return;s(t.tasks),p(t.unknownNames),f(a)}catch(e){ie(e)||C(e?.message??"Failed to load ETL tasks")}finally{e?.aborted||S(!1)}},[r,l]);(0,a.useEffect)(()=>{let e=new AbortController;return q(e.signal),()=>e.abort()},[q]);let j=(0,a.useMemo)(()=>(function(e,t){if(!t||0===t.length)return[];let r=new Set,a=[];for(let n of t){if("string"!=typeof n||!n.trim())continue;let t=function(e,t){if(!e||0===e.length||"string"!=typeof t||!t.trim())return;let r=t.trim();return e.find(e=>e?.uuid===r)??e.find(e=>e?.uuid?.toLowerCase()===r.toLowerCase())??e.find(e=>e?.code?.toLowerCase()===r.toLowerCase())}(e,n);if(t){if(r.has(t.uuid))continue;r.add(t.uuid)}a.push({ref:n.trim(),monitor:t})}return a})(E,l),[E,l]),H=(0,a.useMemo)(()=>j.filter(e=>!!e.monitor),[j]),J=(0,a.useCallback)(async(e,t)=>{O(t=>({...t,[e]:!0}));try{let r=await lM(e,t);k(t=>({...t,[e]:r})),x(t=>{let r={...t};return delete r[e],r})}catch(t){ie(t)||x(r=>({...r,[e]:t?.message??"Failed to load monitor data"}))}finally{t?.aborted||O(t=>({...t,[e]:!1}))}},[]),V=(0,a.useRef)(()=>{}),W=H.map(e=>e.monitor.uuid).sort().join(",");(0,a.useEffect)(()=>{if(0===H.length)return;let e={current:new AbortController},t=()=>{e.current?.abort(),e.current=new AbortController,H.forEach(t=>J(t.monitor.uuid,e.current.signal))};V.current=t,t();let r=setInterval(t,1e3*Math.max(5,Math.min(...H.map(e=>e.monitor.refreshInterval&&e.monitor.refreshInterval>0?e.monitor.refreshInterval:30))));return()=>{clearInterval(r),e.current?.abort(),V.current=()=>{}}},[W,J]);let K=(0,a.useMemo)(()=>{let e=new Map(i.map(e=>[e.name,e]));return r.map(t=>{let r=e.get(t);return{name:t,definition:r,unknown:!r}})},[r,i]),Q=(0,a.useMemo)(()=>H.map(e=>e.monitor.uuid),[H]),Y=(0,a.useMemo)(()=>Q.map(e=>I[e]?.rawResponse),[Q,I]),X=(0,a.useMemo)(()=>Q.length>0?lW(Y,l8):void 0,[Q,Y]),Z=(0,a.useMemo)(()=>Q.length>0?lW(Y,l7):void 0,[Q,Y]),ee=(0,a.useMemo)(()=>i.filter(e=>!0===e.started).length,[i]),et=(0,a.useMemo)(()=>0===Q.length?"unknown":Q.some(e=>D[e])?"down":Q.some(e=>I[e])?"healthy":"unknown",[Q,D,I]),er=(0,a.useMemo)(()=>{let e=Q.map(e=>I[e]?.timestamp).filter(e=>!!e).sort();return e.length>0?e[e.length-1]:null},[Q,I]),ea=(0,a.useMemo)(()=>{let e=null;for(let t of i){let r=lz(t.lastExecutionTime,t.repeatInterval);r&&(!e||r<e.date)&&(e={name:t.name,date:r})}return e},[i]),en=(0,a.useMemo)(()=>Array.from(new Set(i.map(e=>it(e.taskClass)))).sort(),[i]),el=(0,a.useMemo)(()=>K.filter(e=>{if("all"!==$){if(e.unknown)return!1;let t=e.definition?.started===!0;if("active"===$&&!t||"inactive"===$&&t)return!1}if(B!==l9&&!e.unknown&&it(e.definition?.taskClass)!==B)return!1;let t=L.trim().toLowerCase();return(!t||!!`${e.name} ${e.definition?.description??""}`.toLowerCase().includes(t))&&!0}),[K,$,B,L]),ei=K.filter(e=>!e.unknown&&e.definition?.started===!0).length,eo=K.filter(e=>!e.unknown&&e.definition?.started!==!0).length,ed=(0,a.useCallback)(async()=>{await q(new AbortController().signal),(0,h.showToast)({title:e("refreshSuccess","Refresh Successful"),kind:"success",description:e("tasksRefreshed","ETL tasks have been refreshed")})},[q,e]),ec=(0,a.useCallback)(async t=>{N(t.name);try{await lC(t.name),(0,h.showToast)({critical:!0,title:e("taskExecutionSuccess","Execution Successful"),kind:"success",description:e("taskExecutedSuccessfully","Task {{name}} executed successfully",{name:t.name})}),q(new AbortController().signal),V.current()}catch(t){(0,h.showNotification)({title:e("taskExecutionFailed","Task Execution Failed"),kind:"error",critical:!0,description:t?.message??"Task execution failed"})}finally{N(null)}},[q,e]),em=(0,a.useCallback)(()=>{z.current?.scrollIntoView({behavior:"smooth",block:"start"})},[]),eu=0===r.length,ep=l.length>0,e_=1===H.length?H[0].monitor.uuid:void 0;return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:e("etlTasks","ETL Tasks"),subtitle:e("etlTasksSubtitle","Manage, run, and monitor ETL tasks for data extraction, transformation, and loading.")}),n().createElement("div",{className:l4.page},T&&n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:T}),b&&n().createElement(o.jeF,{lowContrast:!0,kind:"warning",title:e("monitorDataUnavailable","Monitor data unavailable"),subtitle:b}),n().createElement("div",{className:l4.kpiGrid},n().createElement(ia,{icon:n().createElement(U._j,{size:22}),iconTone:"down"===et?"danger":"healthy"===et?"healthy":"neutral",label:e("etlService","ETL Service"),value:"healthy"===et?e("serviceHealthy","Healthy"):"down"===et?e("serviceDown","Down"):e("serviceUnknown","Unknown"),subtext:er?e("lastChecked","Last checked: {{value}}",{value:lF(er)}):e("noMonitorsHint","No monitors configured")}),n().createElement(ia,{icon:n().createElement(d.jG,{size:22}),iconTone:"info",label:e("runningTasks","Running tasks"),value:void 0===X?e("dash","—"):String(X),subtext:void 0===X?e("noRunningData","No monitor data"):0===X?e("noTasksRunning","No tasks running"):e("tasksInProgress","Tasks in progress")}),n().createElement(ia,{icon:n().createElement(c.EN,{size:22}),iconTone:"info",label:e("activeTasks","Active tasks"),value:String(ee),subtext:e("outOfTotal","Out of {{count}}",{count:i.length})}),n().createElement(ia,{icon:n().createElement(es.x,{size:22}),iconTone:Z?"danger":"neutral",label:e("failedToday","Failed today"),value:void 0===Z?e("dash","—"):String(Z),subtext:void 0===Z?e("noFailureData","No failure data"):0===Z?e("noFailedRuns","No failed runs"):e("failedRuns","Failed runs")}),n().createElement(ia,{icon:n().createElement(nb.gX,{size:22}),iconTone:"info",label:e("nextScheduledRun","Next scheduled run"),value:ea?lq(ea.date):e("dash","—"),subtext:ea?.name??e("notScheduled","Not scheduled")})),n().createElement("section",null,n().createElement("div",{className:l4.toolbar},n().createElement("div",null,n().createElement("h4",{className:l4.toolbarHeading},e("configuredTasks","Configured Tasks")),n().createElement("p",{className:l4.toolbarSubtext},eu?e("noConfigHint","No ETL tasks configured. Configure via frontend config: etlTasks.tasks"):e("tasksConfiguredForExecution","{{count}} task(s) configured for ETL execution.",{count:K.length}))),n().createElement("div",{className:l4.toolbarControls},n().createElement(o.vji,{size:"sm",placeholder:e("searchTasks","Search tasks..."),labelText:e("searchTasksLabel","Search tasks"),value:L,onChange:e=>M(e.target.value),className:l4.searchBox}),n().createElement(o.msM,{id:"etl-task-type-filter",size:"sm",type:"inline",titleText:e("filter","Filter"),label:B,items:[l9,...en],selectedItem:B,onChange:({selectedItem:e})=>F(e??l9)}),n().createElement(o.$nd,{kind:"primary",size:"sm",renderIcon:u.wM,onClick:ed,disabled:v||null!==w},v?e("loading","Loading..."):e("refresh","Refresh")))),n().createElement("div",{className:l4.filterTabs},n().createElement(il,{tab:"all",label:e("all","All"),count:K.length,activeTab:$,onSelect:P}),n().createElement(il,{tab:"active",label:e("active","Active"),count:ei,activeTab:$,onSelect:P}),n().createElement(il,{tab:"inactive",label:e("inactive","Inactive"),count:eo,activeTab:$,onSelect:P})),v&&0===i.length&&0===m.length?n().createElement(o.OuH,{description:e("loadingETLTasks","Loading ETL tasks...")}):eu?n().createElement(o.FAs,{className:l4.emptyState},n().createElement(g.wB,{size:48,className:l4.emptyStateIcon}),n().createElement("h3",null,e("noConfig","No Configuration")),n().createElement("p",null,e("noConfigDesc",'No ETL tasks have been configured. Configure the frontend config option "etlTasks.tasks" with an array of task names.'))):0===K.length?n().createElement(o.FAs,{className:l4.emptyState},n().createElement(g.wB,{size:48,className:l4.emptyStateIcon}),n().createElement("h3",null,e("noTasksFound","No Tasks Found")),n().createElement("p",null,e("noTasksFoundDesc","No ETL tasks found for the configured task names. Verify the task names match existing OpenMRS task definitions."))):0===el.length?n().createElement(o.FAs,{className:l4.emptyState},n().createElement(g.wB,{size:48,className:l4.emptyStateIcon}),n().createElement("h3",null,e("noMatchingTasks","No Matching Tasks")),n().createElement("p",null,e("noMatchingTasksDesc","No tasks match the current search, status, or type filters."))):n().createElement("div",{className:l4.tasksGrid},el.map(t=>{var r;let a,l;if(t.unknown)return n().createElement(o.FAs,{key:t.name,className:l4.taskCard},n().createElement("div",{className:l4.cardHead},n().createElement("span",{className:lv()(l4.cardIcon,l4.cardIconMuted)},n().createElement(_._C,{size:20})),n().createElement("div",{className:l4.cardHeadText},n().createElement("h4",{className:l4.cardTitle},t.name),n().createElement("p",{className:l4.cardDescription},e("unknownTaskDescription","Configured in etlTasks.tasks but no matching OpenMRS task definition was found."))),n().createElement("span",{className:lv()(l4.statusPill,l4.statusPillUnknown)},e("unknown","Unknown"))),n().createElement("div",{className:l4.metaRow},n().createElement(ir,{label:e("lastRun","Last run"),value:"—"}),n().createElement(ir,{label:e("duration","Duration"),value:"—"}),n().createElement(ir,{label:e("nextRun","Next run"),value:e("notScheduled","Not scheduled")})),n().createElement("div",{className:l4.cardActions},n().createElement(o.$nd,{kind:"primary",size:"sm",renderIcon:d.jG,disabled:!0},e("runNow","Run Now"))));let i=t.definition?.started===!0,s=lz(t.definition?.lastExecutionTime,t.definition?.repeatInterval),c=e_?(r=I[e_]?.rawResponse,a=new WeakSet,(l=(e,t,r)=>{if(null==e||r>3)return null;if(lj.test(t)){let r=function(e,t){if(null==t||""===t)return null;if("number"==typeof t&&isFinite(t))return(0,l$.a3)(lG(t,e));if("string"==typeof t){let r=t.trim();if(!r)return null;let a=Number(r);return isNaN(a)||""===r?r:(0,l$.a3)(lG(a,e))}return null}(t,e);if(null!==r)return r}if("object"!=typeof e||a.has(e))return null;for(let[t,n]of(a.add(e),Array.isArray(e)?e.map((e,t)=>[String(t),e]):Object.entries(e))){let e=l(n,t,r+1);if(null!==e)return e}return null})(r,"",0)??e("dash","—")):e("dash","—"),m=w===t.name;return n().createElement(o.FAs,{key:t.name,className:l4.taskCard},n().createElement("div",{className:l4.cardHead},n().createElement("span",{className:l4.cardIcon},n().createElement(_._C,{size:20})),n().createElement("div",{className:l4.cardHeadText},n().createElement("h4",{className:l4.cardTitle,title:t.name},t.name),n().createElement("p",{className:l4.cardDescription,title:t.definition?.description||t.definition?.taskClass},t.definition?.description||t.definition?.taskClass)),n().createElement("span",{className:lv()(l4.statusPill,i?l4.statusPillActive:l4.statusPillInactive)},i?e("active","Active"):e("inactive","Inactive"))),n().createElement("div",{className:l4.metaRow},n().createElement(ir,{label:e("lastRun","Last run"),value:lF(t.definition?.lastExecutionTime)}),n().createElement(ir,{label:e("duration","Duration"),value:c}),n().createElement(ir,{label:e("nextRun","Next run"),value:lq(s)})),n().createElement("div",{className:l4.cardActions},n().createElement(o.$nd,{kind:"primary",size:"sm",renderIcon:m?u.wM:d.jG,onClick:()=>ec(t),disabled:null!==w},m?e("executing","Executing..."):null!==w?e("pleaseWait","Please Wait"):e("runNow","Run Now")),ep&&n().createElement(o.$nd,{kind:"tertiary",size:"sm",onClick:em},e("viewDetails","View details")),ep&&0===H.length&&n().createElement("span",{className:l4.monitorMissing},e("monitorNotFound","Monitor not found"))),m&&n().createElement("div",{className:l4.executingStatus},n().createElement(o.OuH,{description:e("executingTask","Executing task...")})))}))),n().createElement("section",{ref:z},n().createElement("div",{className:l4.sectionHeading},n().createElement("h4",{className:l4.toolbarHeading},e("liveExecution","Live Execution")),n().createElement("p",{className:l4.toolbarSubtext},e("liveExecutionHint","Monitor progress and status for currently running ETL tasks."))),ep?n().createElement("div",{className:l4.monitorsGrid},j.map(t=>t.monitor?n().createElement(l3,{key:t.monitor.uuid,monitor:t.monitor,data:I[t.monitor.uuid],error:D[t.monitor.uuid]??null,loading:!!R[t.monitor.uuid],onRefresh:()=>J(t.monitor.uuid),title:t.monitor.name}):n().createElement(o.FAs,{key:t.ref,className:l4.monitorMissingCard},n().createElement("p",{className:l4.monitorMissingTitle},t.ref),n().createElement("p",{className:l4.monitorMissingHint},e("monitorRefNotFound","No monitor matches this code or UUID. Check etlTasks.progressMonitors or create the monitor under Admin → ETL Monitors."))))):n().createElement("div",{className:l4.liveEmpty},n().createElement(g.wB,{size:40,className:l4.emptyStateIcon}),n().createElement("p",{className:l4.liveEmptyTitle},e("noTaskRunning","No ETL task currently running")),n().createElement("p",{className:l4.liveEmptyHint},ea?n().createElement(n().Fragment,null,e("nextScheduledIs","The next scheduled task is")," ",n().createElement("strong",null,ea.name," — ",lq(ea.date)),"."):e("liveExecutionConfigureHint","Configure etlTasks.progressMonitors to see live progress from your ETL monitors here."))))))}function io(e){let[t,r]=n().useState([]),[a,l]=n().useState(!1),[i,o]=n().useState(null);return n().useEffect(()=>{if(!e){r([]),l(!1),o(null);return}let t=new AbortController;return l(!0),o(null),nO(t.signal).then(e=>{let t=(e??[]).map(e=>e?.name??e?.table??e?.tableName??e?.view??e?.value??"").map(e=>e.trim()).filter(Boolean),a=[],n=new Set;for(let e of t)n.has(e)||(n.add(e),a.push(e));r(a)}).catch(e=>{e?.name!=="AbortError"&&o(e?.message??"Failed to load tables")}).finally(()=>l(!1)),()=>t.abort()},[e]),{tables:t,loading:a,error:i}}function is(e,t=!0){let[r,a]=n().useState([]),[l,i]=n().useState(!1),[o,s]=n().useState(null);return n().useEffect(()=>{if(!t||!e){a([]),i(!1),s(null);return}let r=new AbortController;return i(!0),s(null),nx(e,r.signal).then(e=>a(Array.isArray(e)?e:[])).catch(e=>{e?.name!=="AbortError"&&s(e?.message??"Failed to load columns")}).finally(()=>i(!1)),()=>r.abort()},[e,t]),{columns:r,loading:l,error:o}}var id=r(4213);function ic(e){if(null==e)return"";let t="object"==typeof e?JSON.stringify(e):String(e);return/^[=+@]/.test(t)&&(t=`'${t}`),/[",\n\r]/.test(t)&&(t=`"${t.replace(/"/g,'""')}"`),t}let im={browserGrid:"-esm-report-builder__etl-browser-component__browserGrid___m2X6e",paneWrap:"-esm-report-builder__etl-browser-component__paneWrap___RjVhg",pane:"-esm-report-builder__etl-browser-component__pane___jTPem",detailPane:"-esm-report-builder__etl-browser-component__detailPane___Z061T",resizeHandle:"-esm-report-builder__etl-browser-component__resizeHandle___5bVeh",paneHeader:"-esm-report-builder__etl-browser-component__paneHeader___gpmKg",paneTitle:"-esm-report-builder__etl-browser-component__paneTitle___UxNrg",paneActions:"-esm-report-builder__etl-browser-component__paneActions___P3xr9",paneSearch:"-esm-report-builder__etl-browser-component__paneSearch___O-hHb",paneBody:"-esm-report-builder__etl-browser-component__paneBody___DewaH",iconAction:"-esm-report-builder__etl-browser-component__iconAction___o4p0Q",sourceList:"-esm-report-builder__etl-browser-component__sourceList___FhFvp",tableList:"-esm-report-builder__etl-browser-component__tableList___LD6CT",sourceRow:"-esm-report-builder__etl-browser-component__sourceRow___2ygFc",sourceRowSelected:"-esm-report-builder__etl-browser-component__sourceRowSelected___haNZm",sourceRowIcon:"-esm-report-builder__etl-browser-component__sourceRowIcon___Svjp4",sourceRowName:"-esm-report-builder__etl-browser-component__sourceRowName___CpQKN",treeEmpty:"-esm-report-builder__etl-browser-component__treeEmpty___Ph4NL",tableRow:"-esm-report-builder__etl-browser-component__tableRow___MT3No",tableRowSelected:"-esm-report-builder__etl-browser-component__tableRowSelected___8hDhw",tableRowIcon:"-esm-report-builder__etl-browser-component__tableRowIcon___AC6oj",tableRowText:"-esm-report-builder__etl-browser-component__tableRowText___Gv4ib",tableName:"-esm-report-builder__etl-browser-component__tableName___I7qu0",tableMeta:"-esm-report-builder__etl-browser-component__tableMeta___hhHd0",detailHeader:"-esm-report-builder__etl-browser-component__detailHeader___Am4IY",detailIcon:"-esm-report-builder__etl-browser-component__detailIcon___iaD0D",detailHeaderText:"-esm-report-builder__etl-browser-component__detailHeaderText___OBt1N",detailTitle:"-esm-report-builder__etl-browser-component__detailTitle___eoG+P",detailMeta:"-esm-report-builder__etl-browser-component__detailMeta___aZTJ8",detailActions:"-esm-report-builder__etl-browser-component__detailActions___MOlLQ",detailBody:"-esm-report-builder__etl-browser-component__detailBody___0saoj",toolbar:"-esm-report-builder__etl-browser-component__toolbar___ljMnG",toolbarSpacer:"-esm-report-builder__etl-browser-component__toolbarSpacer___s8Trg",rowSearch:"-esm-report-builder__etl-browser-component__rowSearch___83Hx3",truncateNote:"-esm-report-builder__etl-browser-component__truncateNote___nXM+f",gridScroll:"-esm-report-builder__etl-browser-component__gridScroll___VI+L+",emptyState:"-esm-report-builder__etl-browser-component__emptyState___srSg0",metadataFacts:"-esm-report-builder__etl-browser-component__metadataFacts___9JAuY",metadataHeading:"-esm-report-builder__etl-browser-component__metadataHeading___AcxwJ",metadataTypes:"-esm-report-builder__etl-browser-component__metadataTypes___mqq-4",infoStrip:"-esm-report-builder__etl-browser-component__infoStrip___bwFMl",infoCell:"-esm-report-builder__etl-browser-component__infoCell___7xF6k",infoLabel:"-esm-report-builder__etl-browser-component__infoLabel___g4Yz0",infoValue:"-esm-report-builder__etl-browser-component__infoValue___J5r4+"};function iu({groups:e,other:t,selectedSourceId:r,searchValue:a,loading:l,error:i,collapsed:s=!1,onToggleCollapsed:d,onSearchChange:m,onSelectSource:u}){let p=a.trim().toLowerCase(),g=[...e,...t.tables.length>0?[t]:[]],E=p?g.filter(e=>e.name.toLowerCase().includes(p)):g;return n().createElement("div",{className:im.pane},n().createElement("div",{className:im.paneHeader},!s&&n().createElement(n().Fragment,null,n().createElement("span",{className:im.paneTitle},"Data Sources"),n().createElement("span",{className:im.paneActions},d&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:_.ZK,iconDescription:"Collapse panel",onClick:d}))),s&&d&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:_.K3,iconDescription:"Expand panel",onClick:d})),!s&&n().createElement(n().Fragment,null,n().createElement("div",{className:im.paneSearch},n().createElement(o.vji,{size:"sm",placeholder:"Search sources...",labelText:"Search sources",value:a,onChange:e=>m(e.target.value)})),n().createElement("div",{className:im.paneBody},l&&n().createElement(o.OuH,{description:"Loading sources..."}),i&&n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:i}),!l&&!i&&0===E.length&&n().createElement("p",{className:im.treeEmpty},"No sources match"),E.length>0&&n().createElement("ul",{className:im.sourceList},E.map(e=>n().createElement("li",{key:e.id},n().createElement("button",{type:"button",className:lv()(im.sourceRow,r===e.id&&im.sourceRowSelected),onClick:()=>u(e.id)},n().createElement("span",{className:im.sourceRowIcon},n().createElement(c.EN,{size:16})),n().createElement("span",{className:im.sourceRowName},e.name),n().createElement(o.vwO,{size:"sm",type:"gray"},e.tables.length))))))))}function ip({title:e,tables:t,selectedTable:r,searchValue:a,loading:l,error:i,collapsed:s=!1,onToggleCollapsed:d,onResetFilter:c,onSearchChange:m,onSelectTable:u}){let p=a.trim().toLowerCase(),g=p?t.filter(e=>e.name.toLowerCase().includes(p)):t;return n().createElement("div",{className:im.pane},n().createElement("div",{className:im.paneHeader},!s&&n().createElement(n().Fragment,null,n().createElement("span",{className:im.paneTitle},e),n().createElement("span",{className:im.paneActions},c&&n().createElement("button",{type:"button",className:im.iconAction,title:"Show all sources",onClick:c},"All sources"),n().createElement(o.vwO,{size:"sm",type:"cool-gray"},t.length),d&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:_.ZK,iconDescription:"Collapse panel",onClick:d}))),s&&d&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:_.K3,iconDescription:"Expand panel",onClick:d})),!s&&n().createElement(n().Fragment,null,n().createElement("div",{className:im.paneSearch},n().createElement(o.vji,{size:"sm",placeholder:"Search tables...",labelText:"Search tables",value:a,onChange:e=>m(e.target.value)})),n().createElement("div",{className:im.paneBody},l&&n().createElement(o.OuH,{description:"Loading tables..."}),i&&n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:i}),!l&&!i&&0===g.length&&n().createElement("p",{className:im.treeEmpty},"No tables match"),g.length>0&&n().createElement("ul",{className:im.tableList},g.map(e=>{let t,a;return n().createElement("li",{key:e.name},n().createElement("button",{type:"button",className:lv()(im.tableRow,r===e.name&&im.tableRowSelected),onClick:()=>u(e.name)},n().createElement("span",{className:im.tableRowIcon},n().createElement(f.vx,{size:18})),n().createElement("span",{className:im.tableRowText},n().createElement("span",{className:im.tableName},e.name),n().createElement("span",{className:im.tableMeta},(t="number"==typeof e.rows?`${e.rows.toLocaleString()} rows`:"rows unknown",a=e.updateTime?(0,l$.fw)(e.updateTime,{pastOnly:!0}):"—",`${t} • ${a}`)))))})))))}let i_=[{key:"name",header:"Column"},{key:"type",header:"Data type"}];function ig({columns:e,loading:t,error:r}){if(t)return n().createElement(o.OuH,{description:"Loading columns..."});if(r)return n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:r});if(0===e.length)return n().createElement(o.FAs,{className:im.emptyState},n().createElement("h5",null,"No columns returned"),n().createElement("p",null,"The backend returned no column metadata for this table."));let a=e.map(e=>({id:e.name,name:e.name,type:e.type??"—"}));return n().createElement("div",null,n().createElement("div",{className:im.toolbar},n().createElement(o.vwO,{size:"sm",type:"cool-gray"},e.length," columns")),n().createElement(o.bQt,{rows:a,headers:i_,size:"sm"},({rows:e,headers:t,getHeaderProps:r,getRowProps:a,getTableProps:l})=>n().createElement(o.K3K,{className:im.gridScroll},n().createElement(o.XIK,l(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,t.map(e=>n().createElement(o.A0N,{key:e.key,...r({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id,...a({row:e})},e.cells.map(e=>n().createElement(o.nA6,{key:e.id},e.value)))))))))}function iE({table:e,source:t,columns:r}){var a,l;let i=function(e){let t=new Map;for(let r of e??[]){let e=r?.type?.trim()||"unknown";t.set(e,(t.get(e)??0)+1)}let r=Array.from(t.entries()).map(([e,t])=>({type:e,count:t})).sort((e,t)=>t.count-e.count||e.type.localeCompare(t.type));return{total:e?.length??0,byType:r}}(r),s=[{label:"Source",value:t?.name??"—"},{label:"Schema",value:t?.schemaName??"—"},{label:"Type",value:"VIEW"===e.tableType?"View":"Table"},{label:"Rows",value:"number"==typeof(a=e.rows)?`${a.toLocaleString()} (approximate)`:"—"},{label:"Last refreshed",value:(l=e.updateTime)?(0,l$.fw)(l,{pastOnly:!0}):"—"},{label:"Columns",value:r.length?String(r.length):"—"}];return n().createElement("div",null,n().createElement("div",{className:im.metadataFacts},s.map(e=>n().createElement("div",{key:e.label,className:im.infoCell},n().createElement("span",{className:im.infoLabel},e.label),n().createElement("span",{className:im.infoValue},e.value)))),n().createElement("h6",{className:im.metadataHeading},"Column types"),0===i.byType.length?n().createElement("p",{className:im.truncateNote},"Column metadata not loaded yet."):n().createElement("div",{className:im.metadataTypes},i.byType.map(e=>n().createElement(o.vwO,{key:e.type,size:"sm",type:"cool-gray"},e.type,": ",e.count))))}let ib=[10,25,50,100];function iy({table:e,data:t,loading:r,error:l,onRefresh:i}){let[s,d]=(0,a.useState)(""),[c,m]=(0,a.useState)(1),[p,_]=(0,a.useState)(10);(0,a.useEffect)(()=>{d(""),m(1)},[e,t]);let g=(0,a.useMemo)(()=>{if(!t)return[];let e=s.trim().toLowerCase();return e?t.rows.filter(t=>t.some(t=>String(t??"").toLowerCase().includes(e))):t.rows},[t,s]),E=Math.min(c,Math.max(1,Math.ceil(g.length/p))),f=(E-1)*p,b=g.slice(f,f+p),y=!!(t&&(t.truncated||t.rows.length>=1e3)),h=(t?.columns??[]).map(e=>({key:e,header:e})),v=b.map((e,r)=>{let a={id:String(f+r)};return t?.columns.forEach((t,r)=>{let n=e[r];a[t]=null==n?"":String(n)}),a});return r?n().createElement(o.OuH,{description:`Loading preview of ${e}...`}):l?n().createElement("div",null,n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Preview failed",subtitle:l}),n().createElement("div",{className:im.toolbar},n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:u.wM,onClick:i},"Retry")),n().createElement("p",{className:im.truncateNote},'Preview needs the "sql.execute" privilege and a valid table name.')):t?n().createElement("div",null,n().createElement("div",{className:im.toolbar},n().createElement(o.vji,{size:"sm",className:im.rowSearch,placeholder:"Search rows...",labelText:"Search rows",value:s,onChange:e=>d(e.target.value)}),n().createElement(o.vwO,{size:"sm",type:"cool-gray"},t.rowCount.toLocaleString()," rows in preview"),n().createElement("span",{className:im.toolbarSpacer}),n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:u.wM,onClick:i},"Refresh"),n().createElement(o.$nd,{kind:"tertiary",size:"sm",onClick:()=>{var r;let a,n;return r=`${e}-preview`,a=new Blob([function(e,t){let r=[e.map(ic).join(",")];for(let e of t??[])r.push(e.map(ic).join(","));return r.join("\n")}(t.columns,t.rows)],{type:"text/csv;charset=utf-8"}),n=`${r}_${new Date().toISOString().replace(/:/g,"-")}.csv`,void(0,id.saveAs)(a,n)},disabled:0===t.rows.length},"Export CSV")),y&&n().createElement("p",{className:im.truncateNote},"Preview shows the first ",1e3.toLocaleString()," rows — use the search or export to work with more."),0===t.rows.length?n().createElement(o.FAs,{className:im.emptyState},n().createElement("h5",null,"This table has no rows"),n().createElement("p",null,"The table may be empty, or it is a view that currently returns no rows.")):n().createElement(n().Fragment,null,n().createElement(o.bQt,{rows:v,headers:h,size:"sm",isSortable:!0},({rows:e,headers:t,getHeaderProps:r,getRowProps:a,getTableProps:l})=>n().createElement(o.K3K,{className:im.gridScroll},n().createElement(o.XIK,{...l(),useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,t.map(e=>n().createElement(o.A0N,{key:e.key,...r({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id,...a({row:e})},e.cells.map(e=>n().createElement(o.nA6,{key:e.id},e.value)))))))),n().createElement(o.dKS,{page:E,pageSize:p,pageSizes:ib,totalItems:g.length,onChange:({page:e,pageSize:t})=>{_(t),m(e)}}))):null}function ih(){return n().createElement("div",{className:im.emptyState},n().createElement(tw.$$,{size:28}),n().createElement("h5",null,"Relationships aren't available yet"),n().createElement("p",null,"The report builder API doesn't expose foreign-key metadata for ETL tables. Column-level hints (e.g. columns ending in ",n().createElement("code",null,"_id"),") may still be visible in the Columns tab."))}function iv({source:e,table:t}){if(!t)return null;let r=[{label:"Source",value:e?.name??"—"},{label:"Schema",value:e?.schemaName??"—"},{label:"Table",value:t.name},{label:"Type",value:"VIEW"===t.tableType?"View":"Table"},{label:"Rows",value:"number"==typeof t.rows?n().createElement("strong",null,t.rows.toLocaleString()):"—"},{label:"Last refreshed",value:t.updateTime?(0,l$.fw)(t.updateTime,{pastOnly:!0}):"—"}];return n().createElement("div",{className:im.infoStrip},r.map(e=>n().createElement("div",{key:e.label,className:im.infoCell},n().createElement("span",{className:im.infoLabel},e.label),n().createElement("span",{className:im.infoValue},e.value))))}let iS=["data","columns","metadata","relationships"];function iT({table:e,source:t,columns:r,columnsLoading:a,columnsError:l,activeTab:i,onTabChange:s}){let d=function(e){let[t,r]=n().useState({status:"idle"}),[a,l]=n().useState(0);return n().useEffect(()=>{if(!e)return void r({status:"idle"});r({status:"loading"});let t=new AbortController;return rU({sql:`SELECT * FROM ${function(e){let t=e?.trim();if(!t)throw Error("Table name is required");return"`"+t.replace(/`/g,"``")+"`"}(e)}`,maxRows:1e3},t.signal).then(e=>{t.signal.aborted||r({status:"ready",data:e})}).catch(e=>{e?.name!=="AbortError"&&r({status:"error",error:e?.message??"Failed to load preview"})}),()=>t.abort()},[e,a]),{...t,refresh:()=>l(e=>e+1)}}(e.name),c=[`Source: ${t?.name??"—"}`,`Schema: ${t?.schemaName??"—"}`,`Type: ${"VIEW"===e.tableType?"View":"Table"}`,`Rows: ${"number"==typeof e.rows?e.rows.toLocaleString():"—"}`,`Last refreshed: ${e.updateTime?(0,l$.fw)(e.updateTime,{pastOnly:!0}):"—"}`];return n().createElement("div",{className:`${im.pane} ${im.detailPane}`},n().createElement("div",{className:im.detailHeader},n().createElement("span",{className:im.detailIcon},n().createElement(f.vx,{size:22})),n().createElement("div",{className:im.detailHeaderText},n().createElement("h4",{className:im.detailTitle,title:e.name},"Table: ",e.name),n().createElement("p",{className:im.detailMeta},c.join(" "))),n().createElement("div",{className:im.detailActions},n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:u.wM,onClick:d.refresh},"Refresh"))),n().createElement("div",{className:im.detailBody},n().createElement(o.tUM,{selectedIndex:iS.indexOf(i),onChange:({selectedIndex:e})=>s(iS[e]??"data")},n().createElement(o.wbY,{"aria-label":"Table detail tabs"},n().createElement(o.ozo,null,"Data"),n().createElement(o.ozo,null,"Columns"),n().createElement(o.ozo,null,"Metadata"),n().createElement(o.ozo,null,"Relationships")),n().createElement(o.T2N,null,n().createElement(o.KpK,null,n().createElement(iy,{table:e.name,data:d.data,loading:"loading"===d.status,error:d.error,onRefresh:d.refresh})),n().createElement(o.KpK,null,n().createElement(ig,{columns:r,loading:a,error:l})),n().createElement(o.KpK,null,n().createElement(iE,{table:e,source:t,columns:r})),n().createElement(o.KpK,null,n().createElement(ih,null)))),n().createElement(iv,{source:t,table:e})))}function iC(){return n().createElement("div",{className:`${im.pane} ${im.detailPane}`},n().createElement(o.FAs,{className:im.emptyState},n().createElement(f.vx,{size:32}),n().createElement("h5",null,"No table selected"),n().createElement("p",null,"Select a table from the list to explore its columns and preview its data.")))}function iw(){let{t:e}=(0,A.useTranslation)(),[t,r]=(0,a.useState)([]),[i,s]=(0,a.useState)(!0),[d,c]=(0,a.useState)(null),{tables:m,loading:u,error:p}=function(e){let[t,r]=n().useState([]),[a,l]=n().useState(!1),[i,o]=n().useState(null);return n().useEffect(()=>{if(!e){r([]),l(!1),o(null);return}let t=new AbortController;return l(!0),o(null),nO(t.signal).then(e=>r(e??[])).catch(e=>{e?.name!=="AbortError"&&o(e?.message??"Failed to load tables")}).finally(()=>l(!1)),()=>t.abort()},[e]),{tables:t,loading:a,error:i}}(!0),[_,g]=(0,a.useState)(""),[E,f]=(0,a.useState)(""),[b,y]=(0,a.useState)("all"),[h,v]=(0,a.useState)(null),[S,T]=(0,a.useState)("data"),[C,w]=(0,l.ok)(),[N,I]=(0,a.useState)(!1),[k,R]=(0,a.useState)(260),[O,D]=(0,a.useState)(!1),[x,L]=(0,a.useState)(300),[M,$]=(0,a.useState)(!1),[P,U]=(0,a.useState)(!1);(0,a.useEffect)(()=>{let e=e=>{let t=document.querySelector(`.${im.browserGrid}`)?.getBoundingClientRect();if(t&&(M&&R(Math.max(200,Math.min(500,e.clientX-t.left))),P)){let r=(N?48:k)+t.left;L(Math.max(240,Math.min(600,e.clientX-r)))}},t=()=>{$(!1),U(!1),document.body.style.cursor="default",document.body.style.userSelect=""};if(M||P)return document.addEventListener("mousemove",e),document.addEventListener("mouseup",t),document.body.style.cursor="col-resize",document.body.style.userSelect="none",()=>{document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",t),document.body.style.cursor="default",document.body.style.userSelect=""}},[M,P,k,N]);let B=(0,a.useCallback)(e=>{e.preventDefault(),$(!0)},[]),F=(0,a.useCallback)(e=>{e.preventDefault(),U(!0)},[]);(0,a.useEffect)(()=>{let e=new AbortController;return s(!0),c(null),lp(void 0,e.signal).then(t=>{e.signal.aborted||r(t)}).catch(e=>{e?.name!=="AbortError"&&c(e?.message??"Failed to load ETL sources")}).finally(()=>{e.signal.aborted||s(!1)}),()=>e.abort()},[]);let{groups:z,other:q}=(0,a.useMemo)(()=>(function(e,t){let r=t.filter(e=>e?.active!==!1&&e?.voided!==!0),a=r.map(e=>({id:e.uuid,name:e.name,sourceUuid:e.uuid,schemaName:e.schemaName,tables:[]})),n={id:"other",name:"Other",tables:[]};for(let t of e){let e=a.find(e=>{let a=r.find(t=>t.uuid===e.id);return(a?.tablePatterns??"").split(",").map(e=>e.trim()).filter(Boolean).some(e=>(function(e,t){let r=t?.trim();if(!r||!e)return!1;let a=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/%/g,"[\\s\\S]*").replace(/_/g,".");return RegExp(`^${a}`,"i").test(e)})(t.name,e))});e?e.tables.push(t):n.tables.push(t)}return{groups:a,other:n}})(m,t),[m,t]),j=(0,a.useMemo)(()=>[...z,...q.tables.length>0?[q]:[]],[z,q]),H=(0,a.useMemo)(()=>new Map(m.map(e=>[e.name,e])),[m]),J=(0,a.useMemo)(()=>{let e=new Map;for(let t of j)for(let r of t.tables)e.set(r.name,t);return e},[j]);(0,a.useEffect)(()=>{if(u||0===m.length)return;let e=C.get("table");if(!e||!H.has(e))return;v(e);let t=J.get(e);t&&y(t.id);let r=C.get("source");r&&y(r)},[u,m]);let V=(0,a.useCallback)((e,t)=>{w(r=>{let a=new URLSearchParams(r);return e?a.set("table",e):a.delete("table"),t&&"all"!==t?a.set("source",t):a.delete("source"),a},{replace:!0})},[w]),W=(0,a.useCallback)(e=>{y(e),V(h,e)},[h,V]),K=(0,a.useCallback)(e=>{v(e),T("data");let t=J.get(e)?.id??b;y(t),V(e,t)},[J,b,V]),Q=(0,a.useCallback)(()=>{y("all"),V(h,"all")},[h,V]),Y=h?H.get(h):void 0,X=Y?J.get(Y.name):void 0,Z=z.find(e=>e.id===X?.id),ee=(0,a.useMemo)(()=>"all"===b?m:"other"===b?q.tables:z.find(e=>e.id===b)?.tables??m,[b,m,z,q]),et="all"===b?e("etlBrowserAllTables","All tables"):e("etlBrowserTablesIn","Tables in {{name}}",{name:j.find(e=>e.id===b)?.name??""}),er=is(h??void 0,!!h);return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:e("etlBrowser","ETL Data Browser"),subtitle:e("etlBrowserSubtitle","Explore ETL schemas, tables, columns, and sample records.")}),n().createElement("div",{className:im.browserGrid},n().createElement("aside",{className:im.paneWrap,style:{width:N?48:k}},n().createElement(iu,{groups:z,other:q,selectedSourceId:b,searchValue:_,loading:i,error:d,collapsed:N,onToggleCollapsed:()=>I(e=>!e),onSearchChange:g,onSelectSource:W})),n().createElement("div",{className:im.resizeHandle,role:"separator","aria-orientation":"vertical",onMouseDown:B}),n().createElement("aside",{className:im.paneWrap,style:{width:O?48:x}},n().createElement(ip,{title:et,tables:ee,selectedTable:h,searchValue:E,loading:u,error:p,collapsed:O,onToggleCollapsed:()=>D(e=>!e),onResetFilter:"all"!==b?Q:void 0,onSearchChange:f,onSelectTable:e=>K(e)})),n().createElement("div",{className:lv()(im.resizeHandle,im.resizeHandleBeforeDetail),role:"separator","aria-orientation":"vertical",onMouseDown:F}),Y?n().createElement(iT,{table:Y,source:Z,columns:er.columns,columnsLoading:er.loading,columnsError:er.error,activeTab:S,onTabChange:T}):n().createElement(iC,null)))}function iN(e="create"){return{mode:e,currentStep:"general",general:{name:"",code:"",description:"",category:"",refreshInterval:30,timeout:10,active:!0},endpoint:{url:"",method:"GET",auth:{type:"NONE"}},fields:[],componentConfig:{labelsAbove:!1,selectable:!1,maxRows:50},density:"compact",validation:{isValid:!1,errors:[],warnings:[],validatedSteps:new Set},stepValidation:{general:{},"data-source":{},design:{},fields:{},preview:{}},isDirty:!1,isSaving:!1}}let iI=["general","data-source","design","fields","preview"];function ik(e){let t=iI.indexOf(e);return -1===t||t===iI.length-1?null:iI[t+1]}function iA(e){let t=iI.indexOf(e);return t<=0?null:iI[t-1]}function iR(e,t){let{validation:r,stepValidation:a}=t;switch(e){case"general":return!0===a.general.nameValid&&!0===a.general.codeValid&&!1!==a.general.codeUnique&&!0===a.general.refreshIntervalValid&&!0===a.general.timeoutValid;case"data-source":return!0===a["data-source"].endpointTested&&!0===a["data-source"].endpointValid;case"design":return!0===a.design.componentSelected;case"fields":return t.fields.length>0&&!0===a.fields.requiredFieldsMapped&&!1!==a.fields.jsonPathsValid;case"preview":return!0===r.isValid;default:return!1}}var iO=r(8159);let iD=(0,a.createContext)(null);function ix(e,t){switch(t.type){case"SET_GENERAL_CONFIG":return{...e,general:{...e.general,...t.payload},isDirty:!0};case"SET_ENDPOINT_CONFIG":return{...e,endpoint:{...e.endpoint,...t.payload},isDirty:!0};case"SET_TEST_RESULT":return{...e,testResult:t.payload,isDirty:!0};case"SET_DETECTED_SCHEMA":return{...e,detectedSchema:t.payload,isDirty:!0};case"SET_COMPONENT_TYPE":return{...e,componentType:t.payload,isDirty:!0};case"SET_FIELDS":return{...e,fields:t.payload,isDirty:!0};case"ADD_FIELD":return{...e,fields:[...e.fields,t.payload],isDirty:!0};case"UPDATE_FIELD":return{...e,fields:e.fields.map(e=>e.key===t.payload.key?{...e,...t.payload.updates}:e),isDirty:!0};case"REMOVE_FIELD":return{...e,fields:e.fields.filter(e=>e.key!==t.payload),isDirty:!0};case"SET_COMPONENT_CONFIG":return{...e,componentConfig:{...e.componentConfig,...t.payload},isDirty:!0};case"SET_LAYOUT":return{...e,layout:t.payload,isDirty:!0};case"SET_DENSITY":return{...e,density:t.payload,isDirty:!0};case"SET_EMPTY_STATE":return{...e,emptyState:t.payload,isDirty:!0};case"SET_CURRENT_STEP":return{...e,currentStep:t.payload};case"VALIDATE_STEP":return function(e,t){let r=new Set(e.validation.validatedSteps);r.add(t);let a={...e.stepValidation};switch(t){case"general":{let t=(0,iO.zK)(e.general);a.general={nameValid:0===t.errors.filter(e=>e.includes("Name")).length,codeValid:0===t.errors.filter(e=>e.includes("Code")).length,codeUnique:!0,categoryValid:!0,refreshIntervalValid:0===t.errors.filter(e=>e.includes("Refresh")).length,timeoutValid:0===t.errors.filter(e=>e.includes("Timeout")).length};break}case"data-source":{let t=(0,iO.Km)(e.endpoint,e.testResult,"edit"===e.mode);a["data-source"]={endpointTested:!!e.testResult,endpointValid:t.valid,urlValid:0===t.errors.filter(e=>e.includes("URL")).length,authValid:!0};break}case"design":{let t=(0,iO.X0)(e.componentType);a.design={componentSelected:t.valid,componentValid:t.valid};break}case"fields":{let t=(0,iO.Kk)(e.fields,e.componentType,e.testResult?.data,e.detectedSchema?.arrayPath);a.fields={requiredFieldsMapped:0===t.errors.filter(e=>e.includes("required")).length,primaryFieldSet:e.fields.some(e=>e.primary),jsonPathsValid:0===t.errors.filter(e=>e.includes("path")).length};break}case"preview":{let t=(0,iO.lp)(e);a.preview={configValid:t.valid,previewRenderable:t.valid}}}return{...e,validation:{...e.validation,validatedSteps:r,isValid:5===r.size},stepValidation:a}}(e,t.payload);case"SET_SAVING":return{...e,isSaving:t.payload};case"RESET":return iN(e.mode);case"LOAD_MONITOR":return function(e){let t,r=iN("edit");r.initialMonitor=e;let a={},n={},l=!1;try{e.configJson&&(a=JSON.parse(e.configJson))}catch(e){console.error("Failed to parse monitor configJson:",e),l=!0,r.parseError="configJson"}try{e.displayConfigJson&&(n=JSON.parse(e.displayConfigJson))}catch(e){console.error("Failed to parse monitor displayConfigJson:",e),l=!0,r.parseError=r.parseError?`${r.parseError}, displayConfigJson`:"displayConfigJson"}l&&console.warn("Monitor configuration parsing failed, builder may not function correctly:",e.code);let i=a.apiEndpoint||{};if(i.auth&&"object"==typeof i.auth)t={type:i.auth.type||i.authType||"NONE",useSession:i.auth.useSession||!0===i.useSession,username:i.auth.username||"",password:i.auth.password||"",headerName:i.auth.headerName||"",apiKey:i.auth.apiKey||"",token:i.auth.token||""};else{let e=i.authType||i.auth?.type||"NONE",r=i.authConfig||i.authConfig||{};t={type:e,useSession:"OPENMRS"===e||"true"===r.useSession||!0===r.useSession,username:r.username||"",password:r.password||"",headerName:r.headerName||"X-API-Key",apiKey:r.apiKey||"",token:r.token||""}}return r.endpoint={url:i.url||"",method:i.method||"GET",auth:t},r.general={name:e.name||"",code:e.code||"",description:e.description||"",category:e.category||"",refreshInterval:e.refreshInterval||30,timeout:e.timeout||10,active:!1!==e.active},2===n.schemaVersion?(r.componentType=n.component,r.fields=n.fields?n.fields.map(e=>({...e,statusMappings:e.statusMap?Object.entries(e.statusMap).map(([e,t])=>({rawValue:e,label:t.label,tone:t.tone})):e.statusMappings||[]})):[],r.componentConfig=n.componentConfig?{...n.componentConfig}:{},r.layout=n.layout?{...n.layout}:void 0,r.emptyState=n.emptyState?{...n.emptyState}:void 0,r.density=n.presentation?.density||"compact"):(n.columns&&Array.isArray(n.columns)&&n.columns.length>0?(console.log("Converting V1 monitor format to V2 for editing:",e.code),r.componentType="TABLE",r.fields=n.columns.map(iL)):(console.warn("No valid display configuration found for monitor:",e.code),r.componentType="SUMMARY_CARD",r.fields=[]),r.componentConfig={}),r}(t.payload);default:return e}}function iL(e){let t={key:e.key,label:e.header||e.key,path:e.jsonPath||`$.${e.key}`,type:"TEXT",primary:!1,hidden:!1,order:0};switch(e.columnType){case"STATUS_BADGE":t.type="STATUS",e.colorMap&&"object"==typeof e.colorMap&&(t.statusMappings=Object.entries(e.colorMap).map(([e,t])=>{var r;return{rawValue:e,label:e,tone:(r=String(t),({green:"success",red:"critical",yellow:"warning",blue:"info",gray:"neutral",grey:"neutral",success:"success",error:"critical",warning:"warning",info:"info",neutral:"neutral"})[r?.toLowerCase()||""]||"neutral")}}));break;case"TIMESTAMP":t.type="TIMESTAMP";break;case"NUMBER":t.type="NUMBER";break;case"PERCENTAGE":t.type="PERCENTAGE";break;case"DURATION":t.type="DURATION";break;case"BOOLEAN":t.type="BOOLEAN";break;default:t.type="TEXT"}return void 0!==e.defaultValue&&(t.defaultValue=e.defaultValue),t}function iM({children:e,mode:t,monitorId:l}){let[i,o]=(0,a.useReducer)(ix,iN("create")),[s,d]=n().useState(null),[c,m]=n().useState(!1);n().useEffect(()=>{let e=!0,r=new AbortController;return"edit"===t&&l&&(m(!0),lO(l,r.signal).then(t=>{e&&(d(t),o({type:"LOAD_MONITOR",payload:t}),m(!1))}).catch(t=>{e&&"AbortError"!==t.name&&(console.error("Failed to load monitor:",t),m(!1))})),()=>{e=!1,r.abort()}},[t,l]);let u=(0,a.useCallback)(e=>{e.general&&o({type:"SET_GENERAL_CONFIG",payload:e.general}),e.endpoint&&o({type:"SET_ENDPOINT_CONFIG",payload:e.endpoint}),void 0!==e.testResult&&o({type:"SET_TEST_RESULT",payload:e.testResult}),void 0!==e.detectedSchema&&o({type:"SET_DETECTED_SCHEMA",payload:e.detectedSchema}),void 0!==e.componentType&&o({type:"SET_COMPONENT_TYPE",payload:e.componentType}),void 0!==e.fields&&o({type:"SET_FIELDS",payload:e.fields}),void 0!==e.componentConfig&&o({type:"SET_COMPONENT_CONFIG",payload:e.componentConfig}),void 0!==e.layout&&o({type:"SET_LAYOUT",payload:e.layout}),void 0!==e.density&&o({type:"SET_DENSITY",payload:e.density}),void 0!==e.emptyState&&o({type:"SET_EMPTY_STATE",payload:e.emptyState}),void 0!==e.currentStep&&o({type:"SET_CURRENT_STEP",payload:e.currentStep})},[]),p=(0,a.useCallback)(e=>iR(e,i),[i]),_=(0,a.useCallback)(e=>iR(e,i),[i]),g=(0,a.useCallback)(()=>(0,iO.fz)(i),[i]),E=(0,a.useCallback)(async()=>{o({type:"SET_SAVING",payload:!0});try{let e,{stateToSavePayload:a}=await Promise.resolve().then(r.bind(r,8159)),n=a(i);return e="edit"===t&&s?.uuid?await lx(s.uuid,n):await lD(n),o({type:"SET_SAVING",payload:!1}),e}catch(e){throw o({type:"SET_SAVING",payload:!1}),e}},[i,t,s]),f=(0,a.useCallback)(()=>{o({type:"RESET"})},[]),b=n().useMemo(()=>({state:i,dispatch:o,updateState:u,validateStep:p,canAdvance:_,generateConfig:g,saveMonitor:E,cancel:f}),[i,u,p,_,g,E,f]);return c?n().createElement(iD.Provider,{value:b},n().createElement("div",{style:{padding:"2rem",textAlign:"center"}},n().createElement("p",null,"Loading monitor configuration..."))):(i.parseError&&"edit"===t&&console.warn("Monitor configuration had parsing errors:",i.parseError),n().createElement(iD.Provider,{value:b},e))}function i$(){let e=(0,a.useContext)(iD);if(!e)throw Error("useBuilderContext must be used within BuilderProvider");return e}function iP(){let{updateState:e}=i$();return e}function iU(){let{state:e,dispatch:t,canAdvance:r}=i$(),l=(0,a.useCallback)(a=>{let n=iI.indexOf(e.currentStep),l=iI.indexOf(a);if(1>=Math.abs(l-n))t({type:"SET_CURRENT_STEP",payload:a});else{let e=!0;for(let t=Math.min(n,l);t<Math.max(n,l);t++)if(!r(iI[t])){e=!1;break}e&&t({type:"SET_CURRENT_STEP",payload:a})}},[e.currentStep,r,t]),i=(0,a.useCallback)(()=>{let t=ik(e.currentStep);t&&l(t)},[e.currentStep,l]),o=(0,a.useCallback)(()=>{let t=iA(e.currentStep);t&&l(t)},[e.currentStep,l]);return n().useMemo(()=>({currentStep:e.currentStep,goToStep:l,goToNextStep:i,goToPreviousStep:o,canGoNext:!!ik(e.currentStep),canGoPrevious:!!iA(e.currentStep)}),[e.currentStep,l,i,o])}let iB={"etl-monitor-builder-page":"-esm-report-builder__etl-monitor-builder-page__etl-monitor-builder-page___Kli-X","builder-header":"-esm-report-builder__etl-monitor-builder-page__builder-header___vPlRP","builder-header__breadcrumb":"-esm-report-builder__etl-monitor-builder-page__builder-header__breadcrumb___rs3vf","builder-header__category":"-esm-report-builder__etl-monitor-builder-page__builder-header__category___vFQO2","builder-header__separator":"-esm-report-builder__etl-monitor-builder-page__builder-header__separator___AgfXN","builder-header__name":"-esm-report-builder__etl-monitor-builder-page__builder-header__name___wV8Yi","builder-header__title":"-esm-report-builder__etl-monitor-builder-page__builder-header__title___RJ4yj","builder-header__actions":"-esm-report-builder__etl-monitor-builder-page__builder-header__actions___ZFC7A","builder-content":"-esm-report-builder__etl-monitor-builder-page__builder-content___qweI7","builder-grid":"-esm-report-builder__etl-monitor-builder-page__builder-grid___5vUmZ","builder-sidebar":"-esm-report-builder__etl-monitor-builder-page__builder-sidebar___rkuoX","builder-steps-nav":"-esm-report-builder__etl-monitor-builder-page__builder-steps-nav___b24Da","builder-steps-list":"-esm-report-builder__etl-monitor-builder-page__builder-steps-list___sBIY6","builder-step-item":"-esm-report-builder__etl-monitor-builder-page__builder-step-item___YcqOI","builder-step-item--completed":"-esm-report-builder__etl-monitor-builder-page__builder-step-item--completed___vMtDh","builder-step-button":"-esm-report-builder__etl-monitor-builder-page__builder-step-button___vJ1cm","builder-step-number":"-esm-report-builder__etl-monitor-builder-page__builder-step-number___y6htw","builder-step-item--current":"-esm-report-builder__etl-monitor-builder-page__builder-step-item--current___YYTAr","builder-step-label":"-esm-report-builder__etl-monitor-builder-page__builder-step-label___nhFir","builder-step-sublabel":"-esm-report-builder__etl-monitor-builder-page__builder-step-sublabel___ozQ7V","builder-step-item--upcoming":"-esm-report-builder__etl-monitor-builder-page__builder-step-item--upcoming___KQDmu","builder-step-content":"-esm-report-builder__etl-monitor-builder-page__builder-step-content___etYhB","builder-help-section":"-esm-report-builder__etl-monitor-builder-page__builder-help-section___knpIC","builder-help-icon":"-esm-report-builder__etl-monitor-builder-page__builder-help-icon___rThNo","builder-help-content":"-esm-report-builder__etl-monitor-builder-page__builder-help-content___lXEwK","builder-help-label":"-esm-report-builder__etl-monitor-builder-page__builder-help-label___TFWGe","builder-help-link":"-esm-report-builder__etl-monitor-builder-page__builder-help-link___mV22v","builder-main":"-esm-report-builder__etl-monitor-builder-page__builder-main___+i8dk","builder-preview":"-esm-report-builder__etl-monitor-builder-page__builder-preview___-q45n","builder-preview-panel":"-esm-report-builder__etl-monitor-builder-page__builder-preview-panel___tp8Mi","builder-preview-header":"-esm-report-builder__etl-monitor-builder-page__builder-preview-header___hgCeO","builder-preview-description":"-esm-report-builder__etl-monitor-builder-page__builder-preview-description___fr-qO","builder-preview-content":"-esm-report-builder__etl-monitor-builder-page__builder-preview-content___OnP3u","monitor-preview-wrapper":"-esm-report-builder__etl-monitor-builder-page__monitor-preview-wrapper___LsG7m","builder-preview-settings":"-esm-report-builder__etl-monitor-builder-page__builder-preview-settings___XVQOU","builder-preview-settings-header":"-esm-report-builder__etl-monitor-builder-page__builder-preview-settings-header___0cBXe","builder-preview-settings-content":"-esm-report-builder__etl-monitor-builder-page__builder-preview-settings-content___DwyPk","builder-preview-settings-setting":"-esm-report-builder__etl-monitor-builder-page__builder-preview-settings-setting___2xgqF","builder-preview-settings-note":"-esm-report-builder__etl-monitor-builder-page__builder-preview-settings-note___T1XA2","builder-preview-card":"-esm-report-builder__etl-monitor-builder-page__builder-preview-card___LaRZJ","builder-preview-card-header":"-esm-report-builder__etl-monitor-builder-page__builder-preview-card-header___u4MhD","builder-preview-card-body":"-esm-report-builder__etl-monitor-builder-page__builder-preview-card-body___xgHxd","builder-preview-status":"-esm-report-builder__etl-monitor-builder-page__builder-preview-status___nzToM","builder-preview-dot":"-esm-report-builder__etl-monitor-builder-page__builder-preview-dot___WNC3y",pulse:"-esm-report-builder__etl-monitor-builder-page__pulse___0vx4K","builder-preview-fields":"-esm-report-builder__etl-monitor-builder-page__builder-preview-fields___WBu3f","builder-preview-field":"-esm-report-builder__etl-monitor-builder-page__builder-preview-field___llrcr","builder-preview-field-label":"-esm-report-builder__etl-monitor-builder-page__builder-preview-field-label___TOdl0","builder-preview-field-value":"-esm-report-builder__etl-monitor-builder-page__builder-preview-field-value___Xnols","builder-preview-config":"-esm-report-builder__etl-monitor-builder-page__builder-preview-config___qyMz3","builder-preview-config-header":"-esm-report-builder__etl-monitor-builder-page__builder-preview-config-header___Wrso6","builder-preview-config-tabs":"-esm-report-builder__etl-monitor-builder-page__builder-preview-config-tabs___JdrA7",active:"-esm-report-builder__etl-monitor-builder-page__active___6EQYj","builder-preview-json":"-esm-report-builder__etl-monitor-builder-page__builder-preview-json___Co-2E","builder-preview-empty":"-esm-report-builder__etl-monitor-builder-page__builder-preview-empty___IOlVB","component-preview":"-esm-report-builder__etl-monitor-builder-page__component-preview___aoMN3",selected:"-esm-report-builder__etl-monitor-builder-page__selected___7mWjn","component-preview__header":"-esm-report-builder__etl-monitor-builder-page__component-preview__header___Rk3x+","component-preview__preview":"-esm-report-builder__etl-monitor-builder-page__component-preview__preview___1ldPz","component-preview__fields":"-esm-report-builder__etl-monitor-builder-page__component-preview__fields___9X6My","component-preview__field":"-esm-report-builder__etl-monitor-builder-page__component-preview__field___ye8+H","component-preview__field-label":"-esm-report-builder__etl-monitor-builder-page__component-preview__field-label___Mc8gF","component-preview__field-value":"-esm-report-builder__etl-monitor-builder-page__component-preview__field-value___JmIDs","component-preview__field-value--status":"-esm-report-builder__etl-monitor-builder-page__component-preview__field-value--status___TFqbk","component-preview__description":"-esm-report-builder__etl-monitor-builder-page__component-preview__description___eISPl","builder-form-section":"-esm-report-builder__etl-monitor-builder-page__builder-form-section___JZunw","builder-form-section__title":"-esm-report-builder__etl-monitor-builder-page__builder-form-section__title___nVsHC","builder-form-section__fields":"-esm-report-builder__etl-monitor-builder-page__builder-form-section__fields___jrhjH","builder-form-row":"-esm-report-builder__etl-monitor-builder-page__builder-form-row___01mZX","full-width":"-esm-report-builder__etl-monitor-builder-page__full-width___jjWxp","builder-form-group":"-esm-report-builder__etl-monitor-builder-page__builder-form-group___P5kNe","builder-form-group__label":"-esm-report-builder__etl-monitor-builder-page__builder-form-group__label___AaJH9","builder-form-group__description":"-esm-report-builder__etl-monitor-builder-page__builder-form-group__description___dwDLU","endpoint-test-result":"-esm-report-builder__etl-monitor-builder-page__endpoint-test-result___tdTKS","endpoint-test-result--success":"-esm-report-builder__etl-monitor-builder-page__endpoint-test-result--success___PuZsE","endpoint-test-result--error":"-esm-report-builder__etl-monitor-builder-page__endpoint-test-result--error___rpQCp","endpoint-test-result__header":"-esm-report-builder__etl-monitor-builder-page__endpoint-test-result__header___VGRHl",success:"-esm-report-builder__etl-monitor-builder-page__success___T+spt",error:"-esm-report-builder__etl-monitor-builder-page__error___yk6x2","endpoint-test-result__content":"-esm-report-builder__etl-monitor-builder-page__endpoint-test-result__content___jPfLd","detected-fields-table":"-esm-report-builder__etl-monitor-builder-page__detected-fields-table___OCESb","builder-footer":"-esm-report-builder__etl-monitor-builder-page__builder-footer___AgXEu"};function iF({state:e}){let t=(0,iO.fz)(e),r=e.testResult?.data||function(e,t){let{fields:r,componentType:a}=e;if(!r||0===r.length)return{};let n={};if(r.forEach(e=>{let t=e.path;t.startsWith("$.")?n[t.slice(2)]=iz(e):n[e.key]=iz(e)}),"DATA_TABLE"===a||"TABLE"===a||"ERROR_LOG"===a){let e=t.data?.arrayPath||"$.data";n[e.startsWith("$.")?e.slice(2):"data"]=[iq(r,0),iq(r,1,{status:"COMPLETED",result:"SUCCESS"}),iq(r,2,{status:"FAILED",result:"ERROR"})]}return n}(e,t);return n().createElement(l0.MonitorRenderer,{config:t,data:r,loading:!1,error:null})}function iz(e,t=0){switch(e.type){case"STATUS":if(e.statusMappings&&e.statusMappings.length>0)return e.statusMappings[0].rawValue||"UP";return"UP";case"TIMESTAMP":return Date.now()-36e5*t;case"DURATION":return 1e3+500*t;case"BOOLEAN":return t%2==0;case"NUMBER":case"INTEGER":case"DECIMAL":return Math.floor(1e3*Math.random())+100+100*t;case"PERCENTAGE":return Math.max(0,Math.min(100,80-20*t));case"DATE":return new Date(Date.now()-864e5*t).toISOString().split("T")[0];case"TIME":return new Date(Date.now()-36e5*t).toTimeString().split(" ")[0];default:return`Sample ${e.label} ${t+1}`}}function iq(e,t,r={}){let a={_id:t+1};return e.forEach(e=>{let n,l=e.path;void 0!==r[n=l.startsWith("$.")?l.slice(2):l.includes(".")?l.split(".").pop():e.key]?a[n]=r[n]:a[n]=iz(e,t)}),a}let ij="-esm-report-builder__generated-config-panel__generated-config-panel__tab___8Gn1P",iH="-esm-report-builder__generated-config-panel__generated-config-panel__tab--active___J75Iw",iJ=/("(?:\\.|[^"\\])*")(\s*:)?|\b(true|false|null)\b|(-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)/g;function iG(){let{state:e}=i$(),[t,r]=(0,a.useState)("json"),[l,i]=(0,a.useState)(!1),s=(0,a.useMemo)(()=>(0,iO.fz)(e),[e]),d=(0,a.useMemo)(()=>JSON.stringify(s,null,2),[s]),m=(0,a.useMemo)(()=>(function(e){let t,r=[],a=0,l=0;for(iJ.lastIndex=0;t=iJ.exec(e);)t.index>a&&r.push(e.slice(a,t.index)),void 0!==t[1]?(r.push(n().createElement("span",{key:l++,className:t[2]?"-esm-report-builder__generated-config-panel__json-key___JiqP2":"-esm-report-builder__generated-config-panel__json-string___lQCaZ"},t[1])),t[2]&&r.push(t[2])):void 0!==t[3]?r.push(n().createElement("span",{key:l++,className:"-esm-report-builder__generated-config-panel__json-boolean___HjUcS"},t[3])):void 0!==t[4]&&r.push(n().createElement("span",{key:l++,className:"-esm-report-builder__generated-config-panel__json-number___DL0+H"},t[4])),a=iJ.lastIndex;return a<e.length&&r.push(e.slice(a)),r})(d),[d]),u=(0,a.useMemo)(()=>(0,iO.yn)(e),[e]),p=(0,a.useMemo)(()=>(0,iO.lp)(e),[e]),_=0===u.length&&p.valid,g=async()=>{try{await navigator.clipboard.writeText(d),i(!0),window.setTimeout(()=>i(!1),2e3)}catch{}};return n().createElement("div",{className:"-esm-report-builder__generated-config-panel__generated-config-panel___nR3Io"},n().createElement("div",{className:"-esm-report-builder__generated-config-panel__generated-config-panel__header___uVGqn"},n().createElement("h4",null,"Generated Configuration")),n().createElement("div",{className:"-esm-report-builder__generated-config-panel__generated-config-panel__tabs___lvp75",role:"tablist"},n().createElement("button",{type:"button",role:"tab","aria-selected":"visual"===t,className:[ij,"visual"===t&&iH].filter(Boolean).join(" "),onClick:()=>r("visual")},"Visual"),n().createElement("button",{type:"button",role:"tab","aria-selected":"json"===t,className:[ij,"json"===t&&iH].filter(Boolean).join(" "),onClick:()=>r("json")},"JSON")),n().createElement("div",{className:"-esm-report-builder__generated-config-panel__generated-config-panel__content___7Ko+W"},"visual"===t?n().createElement(iF,{state:e}):n().createElement("div",{className:"-esm-report-builder__generated-config-panel__generated-config-panel__json-wrap___UqTf4"},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:l?U.MG:c.QR,iconDescription:l?"Copied!":"Copy JSON",className:"-esm-report-builder__generated-config-panel__generated-config-panel__copy___r1QU2",onClick:g}),n().createElement("pre",{className:"-esm-report-builder__generated-config-panel__generated-config-panel__json___FhyBN"},m))),n().createElement("div",{className:["-esm-report-builder__generated-config-panel__generated-config-panel__banner___BycCH",_?"-esm-report-builder__generated-config-panel__generated-config-panel__banner--ready___SVozm":"-esm-report-builder__generated-config-panel__generated-config-panel__banner--blocked___Iefko"].join(" ")},_?n().createElement(U._j,{size:18}):n().createElement(es.$D,{size:18}),n().createElement("span",null,_?"Ready to publish — this monitor will appear immediately on the dashboard after saving.":`Configuration incomplete — fix ${u.length} error${1===u.length?"":"s"} before saving.`)))}let iV=[{value:"uganda-etl",label:"Uganda ETL"},{value:"etl-status",label:"ETL Status"},{value:"data-quality",label:"Data Quality"},{value:"system-health",label:"System Health"},{value:"performance",label:"Performance"},{value:"reporting",label:"Reporting"},{value:"custom",label:"Custom"}];function iW(){let{state:e}=i$(),t=iP(),{general:r}=e,[l,i]=n().useState({}),[s,d]=n().useState({}),c=(e,a)=>{let n=((e,t)=>{let r={};switch(e){case"name":t&&""!==t.trim()||(r.name="Name is required");break;case"code":t&&""!==t.trim()?/^[a-z0-9-]+$/.test(t)||(r.code="Code must contain only lowercase letters, numbers, and hyphens"):r.code="Code is required";break;case"refreshInterval":(t<5||t>3600)&&(r.refreshInterval="Refresh interval must be between 5 and 3600 seconds");break;case"timeout":(t<1||t>300)&&(r.timeout="Timeout must be between 1 and 300 seconds")}return r})(e,a);i(e=>({...e,...n})),d(t=>({...t,[e]:!0})),t({general:{...r,[e]:a}})},m=n().useCallback(()=>{i((0,iO.zK)(r).errors.reduce((e,t)=>(e[t.split(" ")[0].toLowerCase()]=t,e),{}))},[r]);(0,a.useEffect)(()=>{m()},[m]);let u=Object.keys(l).some(e=>l[e]);return n().createElement("div",{className:"-esm-report-builder__general-step__general-step___xNLID"},n().createElement("div",{className:"-esm-report-builder__general-step__general-step__header___GcPrF"},n().createElement("h2",null,"General Information"),n().createElement("p",{className:"-esm-report-builder__general-step__general-step__description___gY3A1"},"Define the basic details of your ETL monitor.")),u&&s&&Object.keys(s).length>0&&n().createElement(o.jeF,{kind:"error",title:"Validation Errors",subtitle:"Please fix the errors below before proceeding",lowContrast:!0,style:{marginBottom:"1rem"}}),n().createElement(o.gE_,{legendText:""},n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"monitor-name",labelText:"Name *",placeholder:"e.g., ETL Module Health",value:r.name,onChange:e=>c("name",e.target.value),onBlur:()=>{r.name&&(!r.code||""===r.code)&&c("code",r.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""))},invalid:s.name&&!!l.name,invalidText:l.name,helperText:"A friendly name for this monitor",autoFocus:!0}),n().createElement(o.ksK,{id:"monitor-code",labelText:"Code *",placeholder:"e.g., etl-module-health",value:r.code,onChange:e=>c("code",e.target.value),invalid:s.code&&!!l.code,invalidText:l.code,helperText:"A unique code used to identify this monitor"}),n().createElement(o.fs1,{id:"monitor-description",labelText:"Description",rows:3,placeholder:"Optional description of what this monitor displays",value:r.description,onChange:e=>c("description",e.target.value),helperText:"Describe what this monitor checks and why it's important"}),n().createElement(o.l6P,{id:"monitor-category",labelText:"Category *",value:r.category,onChange:e=>{var a;let n;return a=e.target.value,n=iV.find(e=>e.value===a),void t({general:{...r,category:a,categoryLabel:n?.label||a}})},helperText:"Choose the category this monitor belongs to"},n().createElement(o.ebT,{value:"",text:"Select a category..."}),iV.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement("div",{className:"-esm-report-builder__general-step__general-step__toggle___EHfxl"},n().createElement(o.lMk,{id:"monitor-active",labelText:"Active *",labelA:"Off",labelB:"On",toggled:r.active,onToggle:e=>c("active",e)}),n().createElement("div",{className:"-esm-report-builder__general-step__general-step__toggle-helper___rKzSX"},"Enable or disable this monitor")),n().createElement(o.BJc,{orientation:"horizontal",gap:5},n().createElement("div",{style:{flex:1}},n().createElement(o.Q7x,{id:"refresh-interval",label:"Refresh Interval (seconds) *",min:5,max:3600,step:5,value:r.refreshInterval,onChange:e=>{c("refreshInterval",parseInt(e.target.value)||30)},invalid:s.refreshInterval&&!!l.refreshInterval,invalidText:l.refreshInterval,helperText:"How often the monitor runs"})),n().createElement("div",{style:{flex:1}},n().createElement(o.Q7x,{id:"timeout",label:"Timeout (seconds) *",min:1,max:300,step:1,value:r.timeout,onChange:e=>{c("timeout",parseInt(e.target.value)||10)},invalid:s.timeout&&!!l.timeout,invalidText:l.timeout,helperText:"Maximum time to wait for a response"}))))),n().createElement("div",{className:"-esm-report-builder__general-step__general-step__info-banner___CYeFk"},n().createElement(tw.$$,{size:16}),n().createElement("span",null,"You can configure the data source and design in the next steps.")))}let iK="-esm-report-builder__data-source-step__data-source-step__auth-description___mPeA8",iQ=[{value:"GET",label:"GET"},{value:"POST",label:"POST"},{value:"PUT",label:"PUT"},{value:"DELETE",label:"DELETE"}],iY=[{value:"NONE",label:"None",description:"No authentication required"},{value:"OPENMRS",label:"OpenMRS Session",description:"The monitor will use your current OpenMRS session"},{value:"BASIC",label:"Basic Auth",description:"Username and password"},{value:"API_KEY",label:"API Key",description:"Custom header with API key"},{value:"BEARER_TOKEN",label:"Bearer Token",description:"OAuth bearer token"}];function iX({authType:e,authConfig:t,onChange:r}){return"NONE"===e?n().createElement("div",{className:iK},"No authentication will be used for this endpoint."):"OPENMRS"===e?n().createElement("div",{className:iK},"The monitor will use your current OpenMRS session."):"BASIC"===e?n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"auth-username",labelText:"Username",value:t.username||"",onChange:e=>r({...t,username:e.target.value}),placeholder:"Enter username"}),n().createElement(o.ksK,{id:"auth-password",labelText:"Password",type:"password",value:t.password||"",onChange:e=>r({...t,password:e.target.value}),placeholder:"Enter password"})):"API_KEY"===e?n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"auth-header-name",labelText:"Header Name",value:t.headerName||"X-API-Key",onChange:e=>r({...t,headerName:e.target.value}),placeholder:"e.g., X-API-Key"}),n().createElement(o.ksK,{id:"auth-api-key",labelText:"API Key",value:t.apiKey||"",onChange:e=>r({...t,apiKey:e.target.value}),placeholder:"Enter API key"})):"BEARER_TOKEN"===e?n().createElement(o.ksK,{id:"auth-token",labelText:"Bearer Token",value:t.token||"",onChange:e=>r({...t,token:e.target.value}),placeholder:"Enter bearer token"}):null}function iZ(){let{state:e}=i$(),t=iP(),{endpoint:r,testResult:l,detectedSchema:i}=e,s=n().useMemo(()=>({...r,auth:r.auth||{type:"NONE"}}),[r]),[m,u]=(0,a.useState)(!1),[p,_]=(0,a.useState)(null),g=(e,r)=>{t({endpoint:{...s,[e]:r}})},E=async()=>{if(!s.url||""===s.url.trim())return void _("API URL is required");if(!s.url.startsWith("/"))return void _("URL must start with /");u(!0),_(null);try{let r=await lN({endpoint:{url:s.url,method:s.method,auth:s.auth}}),a=r.data?function e(t,r="$",a=!0){let n;if(!t||"object"!=typeof t)return{rootPath:"$",isArray:!1,fields:[],rawSample:t,detectedAt:new Date().toISOString()};let l=[];if(Array.isArray(t))return t.length>0&&"object"==typeof t[0]&&null!==t[0]?{rootPath:r,arrayPath:r,isArray:!0,fields:e(t[0],"$",!1).fields,rawSample:t,detectedAt:new Date().toISOString()}:{rootPath:r,arrayPath:r,isArray:!0,fields:[],rawSample:t,detectedAt:new Date().toISOString()};for(let[i,o]of Object.entries(t)){if(null===o||"function"==typeof o||"symbol"==typeof o)continue;let t=`${r}.${i}`;if(a&&"$"===r&&Array.isArray(o)&&o.length>0&&"object"==typeof o[0]&&null!==o[0]){n||(n=t,l.push(...e(o[0],"$",!1).fields));continue}if("object"==typeof o){if(!Array.isArray(o)){let n=e(o,t,a&&"$"!==r);l.push(...n.fields)}continue}let s=function(e){if(null==e)return"TEXT";let t=typeof e;if("boolean"===t)return"BOOLEAN";if("number"===t)return Number.isInteger(e)?"INTEGER":"DECIMAL";if("string"===t){let t=e.toUpperCase().trim();if(/^\d{13}$/.test(e)||/^\d{10}$/.test(e)||/GMT|UTC|EAT|EST|PST/.test(e)||/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(e)||/^\d{4}-\d{2}-\d{2}/.test(e))return"TIMESTAMP";if(/^(UP|DOWN|ON|OFF|ACTIVE|INACTIVE|SUCCESS|FAILURE|ERROR|WARNING|INFO|CRITICAL|READY|PENDING|RUNNING|STOPPED|COMPLETED|FAILED|STARTED)$/i.test(t))return"STATUS";if(/^\d+%?$/.test(e)||/percentage|percent|ratio|rate/i.test(e))return"PERCENTAGE";if(/^\d+\s*(seconds?|mins?|hours?|days?|h|m|s)$/.test(e)||/^\d+:\d{2}$/.test(e))return"DURATION";if(/^\d{4}-\d{2}-\d{2}$/.test(e)||/^\d{2}\/\d{2}\/\d{4}$/.test(e))return"DATE";if(/^\d{2}:\d{2}:\d{2}$/.test(e)||/^\d{2}:\d{2}$/.test(e))return"TIME"}return"TEXT"}(o),d=function(e){let t=e.toLowerCase();return t.includes("status")||t.includes("state")||t.includes("health")?"STATUS":t.includes("progress")||t.includes("percentage")||t.includes("percent")?"PERCENTAGE":t.includes("timestamp")||t.includes("date")||t.includes("time")||t.includes("created")||t.includes("updated")?"TIMESTAMP":t.includes("duration")||t.includes("elapsed")||t.includes("runtime")?"DURATION":t.includes("count")||t.includes("total")||t.includes("number")||t.includes("amount")?"NUMBER":t.includes("enabled")||t.includes("active")||t.includes("visible")?"BOOLEAN":null}(i)||s,c={name:i,path:t,type:s,suggestedType:d!==s?d:void 0,sampleValue:o,description:`Detected field: ${i}`};l.push(c)}return{rootPath:r,isArray:!1,arrayPath:n,fields:l,rawSample:t,detectedAt:new Date().toISOString()}}(r.data):void 0;if(a&&a.fields.length>0){var e;let t,r,n=(t=(e=a.fields).some(e=>"STATUS"===e.type||"STATUS"===e.suggestedType),r=e.some(e=>"PERCENTAGE"===e.type||"PERCENTAGE"===e.suggestedType),t&&e.length<=3?"STATUS_CARD":r&&t?"PROGRESS":e.length>=4?"DATA_TABLE":e.length>=2?"SUMMARY_CARD":void 0);a.recommendedComponent=n}t({testResult:{success:r.success,httpStatus:r.httpStatus,durationMs:r.durationMs,contentType:r.contentType,error:r.error,data:r.data,testedAt:r.testedAt},detectedSchema:a}),r.success||_(r.error||"Endpoint test failed")}catch(r){let e=r.message||"Failed to test endpoint";_(e),t({testResult:{success:!1,error:e,testedAt:new Date().toISOString()}})}finally{u(!1)}},f=l?.success===!0;return n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step___fRs2Z"},n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__header___LLQ8Z"},n().createElement("h2",null,"Data Source"),n().createElement("p",{className:"-esm-report-builder__data-source-step__data-source-step__description___H2j5X"},"Configure the API endpoint that will provide data for this monitor.")),p&&n().createElement(o.jeF,{kind:"error",title:"Endpoint request failed",subtitle:p,onClose:()=>_(null),lowContrast:!0,style:{marginBottom:"1rem"}}),n().createElement(o.gE_,{legendText:""},n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"api-url",labelText:"API Endpoint *",placeholder:"e.g., /ugandareportsetl/health",value:s.url,onChange:e=>g("url",e.target.value),helperText:"Relative URL path to the API endpoint",invalid:!!p&&!s.url,invalidText:"API URL is required"}),n().createElement(o.l6P,{id:"http-method",labelText:"HTTP Method *",value:s.method,onChange:e=>g("method",e.target.value)},iQ.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement(o.l6P,{id:"auth-type",labelText:"Authentication *",value:s.auth.type,onChange:e=>{var r;let a;return a={type:r=e.target.value},void("OPENMRS"===r?a.useSession=!0:"API_KEY"===r&&(a.headerName="X-API-Key"),t({endpoint:{...s,auth:a}}))}},iY.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__auth-config___sEzJM"},n().createElement(iX,{authType:s.auth.type,authConfig:s.auth,onChange:e=>{t({endpoint:{...s,auth:{...s.auth,...e}}})}})),n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__actions___RY9p3"},n().createElement(o.$nd,{kind:"primary",renderIcon:d.jG,onClick:E,disabled:m||!s.url},m?"Testing Endpoint…":"Test Endpoint")),f&&n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__test-result___e3GT0"},n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__test-header___VcmHd"},n().createElement(U._j,{size:16}),n().createElement("span",null,"Endpoint responded successfully")),n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__test-details___hQGFH"},n().createElement("span",null,"HTTP ",l.httpStatus),n().createElement("span",null,"•"),n().createElement("span",null,l.durationMs," ms"),n().createElement("span",null,"•"),n().createElement("span",null,l.contentType)),n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__test-time___VpxE2"},"Tested ",(e=>{if(!e)return"";let t=Math.floor((Date.now()-new Date(e).getTime())/1e3/60);if(t<1)return"Just now";if(t<60)return`${t} minute${t>1?"s":""} ago`;let r=Math.floor(t/60);if(r<24)return`${r} hour${r>1?"s":""} ago`;let a=Math.floor(r/24);return`${a} day${a>1?"s":""} ago`})(l.testedAt))),l?.data&&n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__response-preview___fjDQm"},n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__response-header___wHDSs"},n().createElement("h4",null,"Response Preview"),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:c.QR,onClick:()=>navigator.clipboard.writeText(JSON.stringify(l.data,null,2))},"Copy")),n().createElement("pre",{className:"-esm-report-builder__data-source-step__data-source-step__response-code___RuzGO"},JSON.stringify(l.data,null,2))),i&&i.fields.length>0&&n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__detected-fields___A-Cl2"},n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__detected-header___DoNsz"},n().createElement("h4",null,"Detected Fields"),n().createElement("span",{className:"-esm-report-builder__data-source-step__data-source-step__detected-count___c1Vn0"},i.fields.length," fields detected")),n().createElement("table",{className:"-esm-report-builder__data-source-step__data-source-step__fields-table___VJvtj"},n().createElement("thead",null,n().createElement("tr",null,n().createElement("th",null,"Field"),n().createElement("th",null,"Type"),n().createElement("th",null,"Suggested Label"))),n().createElement("tbody",null,i.fields.map((e,t)=>n().createElement("tr",{key:t},n().createElement("td",null,n().createElement("code",null,e.name)),n().createElement("td",null,n().createElement(o.vwO,{type:"STATUS"===e.type?"green":"gray"},e.type)),n().createElement("td",null,e.description||e.name)))))))))}var i0=r(3654);let i1=[{type:"STATUS_CARD",label:"Status Card",description:"Best for showing the health or availability of a system.",icon:n().createElement(g.Zn,{size:18}),accent:"#1A7F37",requires:"STATUS",requiredFieldTypes:["STATUS"],recommendedFor:["status","health","state","check"]},{type:"METRICS_GRID",label:"Metric Card",description:"Best for key numeric metrics at a glance.",icon:n().createElement(_._C,{size:18}),accent:"#8A3FFC",requires:"NONE",requiredFieldTypes:[],recommendedFor:["metrics","kpi","grid","multiple"]},{type:"PROGRESS",label:"Progress Card",description:"Best for showing progress of the current execution.",icon:n().createElement(u.wM,{size:18}),accent:"#0F62FE",requires:"PERCENTAGE",requiredFieldTypes:["PERCENTAGE"],recommendedFor:["progress","completion","percentage","stage"]},{type:"TABLE",aliases:["DATA_TABLE"],label:"Table Card",description:"Best for lists of executions or records.",icon:n().createElement(i0.bQ,{size:18}),accent:"#FA4D56",requires:"TABLE",requiredFieldTypes:[],recommendedFor:["list","table","records","log"]},{type:"DETAILS",label:"Details Card",description:"Best for showing all available fields and properties.",icon:n().createElement(es.yo,{size:18}),accent:"#1192E8",requires:"DETAILS",requiredFieldTypes:[],recommendedFor:["detail","property","field","config","schedule","info"]},{type:"SUMMARY_CARD",label:"Summary Card",description:"Best for stacked highlights with status badges.",icon:n().createElement(c.xh,{size:18}),accent:"#525252",requires:"SUMMARY",requiredFieldTypes:[],recommendedFor:["summary","overview","stats"]},{type:"LOG",label:"Log / Timeline Card",description:"Best for showing events or execution logs.",icon:n().createElement(nb.gX,{size:18}),accent:"#0762FE",requires:"LOG",requiredFieldTypes:[],recommendedFor:["event","timeline","activity","history"]},{type:"ERROR_LOG",label:"Error Log Card",description:"Best for monitoring failures and issues.",icon:n().createElement(tb.N5,{size:18}),accent:"#DA1E28",requires:"LOG",requiredFieldTypes:[],recommendedFor:["error","exception","failure","issue"]},{type:"TIME_SERIES",label:"Time Series Chart",description:"Best for metrics, performance data, or historical trends.",icon:n().createElement(_.BS,{size:18}),accent:"#8A3FFC",requires:"NONE",requiredFieldTypes:[],recommendedFor:["trend","history","metric","chart"]}];function i2({type:e}){let t=function(e){switch(e){case"STATUS_CARD":return{config:{schemaVersion:2,component:"STATUS_CARD",presentation:{title:"ETL Module Health",description:"ETL module is operational."},fields:[{key:"status",label:"Status",path:"$.status",type:"STATUS",primary:!0,statusMap:{UP:{label:"Running",tone:"success"},DOWN:{label:"Stopped",tone:"critical"}}},{key:"lastUpdated",label:"Last checked",path:"$.lastUpdated",type:"TIMESTAMP"}]},data:{status:"UP",lastUpdated:Date.now()-12e4}};case"METRICS_GRID":return{config:{schemaVersion:2,component:"METRICS_GRID",presentation:{title:"ETL Monitor",description:"Current run summary"},componentConfig:{icon:"chart",icons:{executionId:"badge",runDuration:"clock",progress:"trend",missedSchedule:"calendar"},iconColors:{executionId:"#24a148",runDuration:"#8A3FFC",progress:"#0F62FE",missedSchedule:"#F1C21B"},valueColors:{progress:"#198038"}},fields:[{key:"executionId",label:"Execution ID",path:"$.executionId",type:"INTEGER",description:"Run #"},{key:"runDuration",label:"Run Duration",path:"$.runDuration",type:"DURATION",description:"Duration"},{key:"progress",label:"Progress",path:"$.progress",type:"PERCENTAGE",description:"Complete"},{key:"missedSchedule",label:"Missed Schedule",path:"$.missedSchedule",type:"DURATION",description:"Behind"},{key:"lastUpdated",label:"Updated",path:"$.lastUpdated",type:"TIMESTAMP"}]},data:{executionId:17,runDuration:8927e3,progress:100,missedSchedule:528e4,lastUpdated:Date.now()-12e4}};case"PROGRESS":return{config:{schemaVersion:2,component:"PROGRESS",componentConfig:{stageFieldKey:"stage"},fields:[{key:"progress",label:"Progress",path:"$.progress",type:"PERCENTAGE",primary:!0},{key:"stage",label:"Current Stage",path:"$.stage",type:"TEXT"}]},data:{progress:100,stage:"Completed"}};case"TABLE":case"DATA_TABLE":return{config:{schemaVersion:2,component:"TABLE",componentConfig:{maxRows:5,viewAllUrl:"#",viewAllLabel:"View all executions"},fields:[{key:"started",label:"Started",path:"$.started",type:"TIMESTAMP",format:{timestamp:{display:"datetime"}}},{key:"duration",label:"Duration",path:"$.duration",type:"DURATION"},{key:"result",label:"Result",path:"$.result",type:"STATUS",statusMap:{SUCCESS:{label:"SUCCESS",tone:"success"},FAILED:{label:"FAILED",tone:"critical"}}}]},data:[{started:Date.now()-36e5,duration:8927e3,result:"SUCCESS"},{started:Date.now()-9e6,duration:1523e3,result:"SUCCESS"},{started:Date.now()-18e6,duration:1523e3,result:"SUCCESS"}]};case"ERROR_LOG":return{config:{schemaVersion:2,component:"ERROR_LOG",fields:[{key:"time",label:"Time",path:"$.time",type:"TIMESTAMP",format:{timestamp:{display:"time"}}},{key:"severity",label:"Severity",path:"$.severity",type:"STATUS",statusMap:{CRITICAL:{label:"CRITICAL",tone:"critical"},WARNING:{label:"WARNING",tone:"warning"}}},{key:"message",label:"Message",path:"$.message",type:"TEXT"}]},data:[{time:Date.now()-27e5,severity:"CRITICAL",message:"Connection timeout"},{time:Date.now()-54e5,severity:"WARNING",message:"Retry attempted"}]};case"DETAILS":return{config:{schemaVersion:2,component:"DETAILS",fields:[{key:"status",label:"status",path:"$.status",type:"STATUS",statusMap:{UP:{label:"UP",tone:"success"}}},{key:"module",label:"module",path:"$.module",type:"TEXT"},{key:"description",label:"description",path:"$.description",type:"TEXT"},{key:"timestamp",label:"timestamp",path:"$.timestamp",type:"TIMESTAMP",format:{timestamp:{display:"datetime"}}}]},data:{status:"UP",module:"ugandareportstetl",description:"Uganda Reports ETL Module",timestamp:Date.now()-3e5}};case"SUMMARY_CARD":return{config:{schemaVersion:2,component:"SUMMARY_CARD",fields:[{key:"completionStatus",label:"Completion Status",path:"$.completionStatus",type:"STATUS",statusMap:{SUCCESS:{label:"SUCCESS",tone:"success"}}},{key:"transactionStatus",label:"Transaction Status",path:"$.transactionStatus",type:"STATUS",statusMap:{COMPLETED:{label:"COMPLETED",tone:"success"}}}]},data:{completionStatus:"SUCCESS",transactionStatus:"COMPLETED"}};case"LOG":return{config:{schemaVersion:2,component:"LOG",componentConfig:{maxRows:5},fields:[{key:"time",label:"Time",path:"$.time",type:"TIMESTAMP",format:{timestamp:{display:"time"}}},{key:"event",label:"Event",path:"$.event",type:"TEXT"}]},data:[{time:Date.now()-24e5,event:"Execution started"},{time:Date.now()-192e4,event:"Data extraction completed"},{time:Date.now()-108e4,event:"Transformation completed"},{time:Date.now()-3e5,event:"Load completed"}]};case"TIME_SERIES":{let e=Date.now(),t=[892e4,861e4,836e4,848e4,812e4,824e4,89e5,925e4,903e4,8927e3];return{config:{schemaVersion:2,component:"TIME_SERIES",presentation:{title:"Execution Duration"},componentConfig:{icons:{duration:"timer"},deltaLabel:"vs previous period"},fields:[{key:"time",label:"Time",path:"$.time",type:"TIMESTAMP",format:{timestamp:{display:"time"}}},{key:"value",label:"Duration",path:"$.value",type:"DURATION",primary:!0}]},data:t.map((r,a)=>({time:e-(t.length-1-a)*216e4,value:r}))}}default:return{config:{schemaVersion:2,component:"TIME_SERIES",fields:[{key:"average",label:"Average",path:"$.average",type:"TEXT"},{key:"max",label:"Max",path:"$.max",type:"TEXT"},{key:"trend",label:"Trend",path:"$.trend",type:"TEXT"}]},data:{average:"2.3s",max:"5.1s",trend:"↑ 12%"}}}}(e);return n().createElement(l0.MonitorRenderer,{config:t.config,data:t.data,loading:!1,error:null})}function i5(e,t){return!!t&&(t===e.type||(e.aliases?.includes(t)??!1))}function i6({config:e,selected:t,disabled:r,recommended:a,onSelect:l}){return n().createElement("div",{className:["-esm-report-builder__design-step__component-card___RAlFw",t&&"-esm-report-builder__design-step__component-card--selected___Pk0Ap",r&&"-esm-report-builder__design-step__component-card--disabled___IdhpT"].filter(Boolean).join(" "),onClick:r?void 0:l,role:"button",tabIndex:r?-1:0,"aria-disabled":r,onKeyDown:e=>{r||("Enter"===e.key||" "===e.key)&&(e.preventDefault(),l())}},t&&n().createElement("span",{className:"-esm-report-builder__design-step__component-card__check___PtG-G"},n().createElement(U.MG,{size:14})),a&&!t&&n().createElement("span",{className:"-esm-report-builder__design-step__component-card__star___2LEWD",title:"Recommended"},n().createElement(f.FE,{size:11})),n().createElement("div",{className:"-esm-report-builder__design-step__component-card__head___lqb6r"},n().createElement("span",{className:"-esm-report-builder__design-step__component-card__icon___rvvJG",style:{backgroundColor:`${e.accent}1A`,color:e.accent}},e.icon),n().createElement("h4",{className:"-esm-report-builder__design-step__component-card__title___soJ9u"},e.label)),n().createElement("p",{className:"-esm-report-builder__design-step__component-card__description___ReOc4"},e.description),n().createElement("div",{className:"-esm-report-builder__design-step__component-card__preview___EOE45"},n().createElement("div",{className:"-esm-report-builder__design-step__component-card__sample___LliEt"},n().createElement(i2,{type:e.type}))),n().createElement("div",{className:"-esm-report-builder__design-step__component-card__footer___R8bVS"},n().createElement("span",{className:"-esm-report-builder__design-step__component-card__requires-label___5eSNx"},"Requires:"),n().createElement("span",{className:"-esm-report-builder__design-step__component-card__requires-chip___NnQdk"},e.requires)))}function i3(){let{state:e}=i$(),t=iP(),{componentType:r,detectedSchema:a}=e,l=()=>a?.recommendedComponent?a.recommendedComponent:null,i=l(),s=!!a&&a.fields.length>0,d=i1.find(e=>i5(e,r)),c=i?i1.find(e=>e.type===i||(e.aliases?.includes(i)??!1)):void 0;return n().createElement("div",{className:"-esm-report-builder__design-step__design-step___G-wQb"},n().createElement("div",{className:"-esm-report-builder__design-step__design-step__header___v-Cuy"},n().createElement("h2",null,"Choose a design"),n().createElement("p",{className:"-esm-report-builder__design-step__design-step__description___eANa4"},"Select how this monitor should be visualized on the dashboard.")),s&&c&&n().createElement("div",{className:"-esm-report-builder__design-step__design-step__recommendation___XFaNZ"},n().createElement(f.FE,{size:16}),n().createElement("p",null,n().createElement("strong",null,"Recommended: ",c.label)," — ",(()=>{if(!a)return"";if(a.fields.find(e=>"STATUS"===e.type||"STATUS"===e.suggestedType))return"This response contains a status-like field and supporting properties.";if(a.isArray)return"This response returns a list of records.";let e=a.fields.length;return`This response contains ${e} field${1===e?"":"s"} that suit this component.`})())),!s&&n().createElement(o.jeF,{kind:"warning",title:"No Schema Detected",subtitle:"Test your endpoint first to get a component recommendation based on your data structure.",lowContrast:!0,style:{marginBottom:"1rem"},hideCloseButton:!0}),n().createElement("div",{role:"group","aria-label":"Select a component type"},n().createElement("div",{className:"-esm-report-builder__design-step__design-step__grid___sM4Eq"},i1.map(e=>n().createElement(i6,{key:e.type,config:e,selected:i5(e,r),disabled:!!a&&0!==a.fields.length&&e.requiredFieldTypes.some(e=>!a.fields.some(t=>t.type===e||t.suggestedType===e)),recommended:(e=>{let t=l();if(t)return t===e.type||(e.aliases?.includes(t)??!1);if(!a)return!1;let r=a.fields.map(e=>e.name.toLowerCase());return e.recommendedFor.some(e=>r.some(t=>t.includes(e)))||!1})(e),onSelect:()=>{t({componentType:e.type})}})))),d&&n().createElement("div",{className:"-esm-report-builder__design-step__design-step__summary___m51vL"},n().createElement("div",{className:"-esm-report-builder__design-step__design-step__summary-content___2+5v2"},n().createElement("h4",null,n().createElement(tw.$$,{size:16}),"Selected: ",d.label),n().createElement("p",null,d.description))),s&&c&&i5(c,r)&&n().createElement("div",{className:"-esm-report-builder__design-step__design-step__why-recommended___3otjU"},n().createElement("div",{className:"-esm-report-builder__design-step__design-step__why-recommended-header___+-JvI"},n().createElement(tw.$$,{size:16}),n().createElement("h5",null,"Why this is recommended")),n().createElement("div",{className:"-esm-report-builder__design-step__design-step__why-recommended-content___EhNzx"},n().createElement("p",null,"Your endpoint returns a status field along with"," ",a.fields.filter(e=>"STATUS"!==e.type&&"STATUS"!==e.suggestedType).slice(0,3).map(e=>e.name).join(", ")||"supporting properties","."),n().createElement("p",null,"The ",n().createElement("strong",null,d?.label)," is the best way to highlight the overall status at a glance, with key context shown below."))),n().createElement("div",{className:"-esm-report-builder__design-step__design-step__help___plMPQ"},n().createElement("p",{className:"-esm-report-builder__design-step__design-step__help-text___SCYHj"},n().createElement("strong",null,"Tip:")," You can change the design or settings later. Your data and mappings will be preserved.")))}let i4={"fields-step":"-esm-report-builder__fields-step__fields-step___BHslw","fields-step__header":"-esm-report-builder__fields-step__fields-step__header___KKBku","fields-step__description":"-esm-report-builder__fields-step__fields-step__description___OrEK7","fields-step__empty":"-esm-report-builder__fields-step__fields-step__empty___OB+tt","fields-step__list":"-esm-report-builder__fields-step__fields-step__list___jmk5R","fields-step__list-header":"-esm-report-builder__fields-step__fields-step__list-header___oRXUE","fields-step__fields":"-esm-report-builder__fields-step__fields-step__fields___poKhr","fields-step__actions":"-esm-report-builder__fields-step__fields-step__actions___cAsjr","fields-step__timestamp-config":"-esm-report-builder__fields-step__fields-step__timestamp-config___Xj9nd","fields-step__timestamp-header":"-esm-report-builder__fields-step__fields-step__timestamp-header___WrBDT","fields-step__timestamp-description":"-esm-report-builder__fields-step__fields-step__timestamp-description___JAZ0D","fields-step__timestamp-settings":"-esm-report-builder__fields-step__fields-step__timestamp-settings___RD7Ap","fields-step__timestamp-field":"-esm-report-builder__fields-step__fields-step__timestamp-field___UFYF9","cds--text-input":"-esm-report-builder__fields-step__cds--text-input___mR2xM","cds--select-input":"-esm-report-builder__fields-step__cds--select-input___8hlIi","cds--toggle-input__label":"-esm-report-builder__fields-step__cds--toggle-input__label___TssaG","fields-step__timestamp-helper":"-esm-report-builder__fields-step__fields-step__timestamp-helper___8s1Vj","field-row":"-esm-report-builder__fields-step__field-row___Pn8gW","field-row__drag":"-esm-report-builder__fields-step__field-row__drag___w5YU4","field-row__drag-handle":"-esm-report-builder__fields-step__field-row__drag-handle___lrlH3","field-row__content":"-esm-report-builder__fields-step__field-row__content___Es4+4","field-row__main":"-esm-report-builder__fields-step__field-row__main___vzk-u","field-row__info":"-esm-report-builder__fields-step__field-row__info___vuDhd","field-row__header":"-esm-report-builder__fields-step__field-row__header___HI6LF","field-row__label":"-esm-report-builder__fields-step__field-row__label___HknJt","field-row__meta":"-esm-report-builder__fields-step__field-row__meta___MbwR6","field-row__path":"-esm-report-builder__fields-step__field-row__path___dwhbH","field-row__actions":"-esm-report-builder__fields-step__field-row__actions___9WjPq","field-config-modal":"-esm-report-builder__fields-step__field-config-modal___6sBee","cds--modal-content":"-esm-report-builder__fields-step__cds--modal-content___m4c-G","field-format-options":"-esm-report-builder__fields-step__field-format-options___MhU8L","status-mapping-modal__description":"-esm-report-builder__fields-step__status-mapping-modal__description___1hhb4","status-mapping-row":"-esm-report-builder__fields-step__status-mapping-row___Ct+n2","status-mapping-row__raw":"-esm-report-builder__fields-step__status-mapping-row__raw___c+bdP","status-mapping-row__label":"-esm-report-builder__fields-step__status-mapping-row__label___aA9zm","status-mapping-row__tone":"-esm-report-builder__fields-step__status-mapping-row__tone___vpGZL","cds--btn":"-esm-report-builder__fields-step__cds--btn___0Hgvy"},i8=[{value:"TEXT",label:"Text",description:"Plain text content"},{value:"STRING",label:"String",description:"Short text string"},{value:"NUMBER",label:"Number",description:"Numeric value"},{value:"INTEGER",label:"Integer",description:"Whole number"},{value:"DECIMAL",label:"Decimal",description:"Decimal number"},{value:"BOOLEAN",label:"Boolean",description:"True/false value"},{value:"STATUS",label:"Status",description:"Status indicator with tone mapping"},{value:"PERCENTAGE",label:"Percentage",description:"Percentage value (0-100)"},{value:"TIMESTAMP",label:"Timestamp",description:"Unix timestamp in milliseconds"},{value:"DURATION",label:"Duration",description:"Duration in seconds or milliseconds"},{value:"DATE",label:"Date",description:"Date value"},{value:"TIME",label:"Time",description:"Time value"}],i7=[{value:"success",label:"Success",color:"#198038"},{value:"critical",label:"Critical",color:"#da1e28"},{value:"warning",label:"Warning",color:"#f1c21b"},{value:"info",label:"Info",color:"#0f62fe"},{value:"neutral",label:"Neutral",color:"#6f6f6f"}];function i9({open:e,onClose:t,onSave:r,currentMappings:l,detectedValues:i}){let[s,d]=(0,a.useState)(l.length>0?l:i.map(e=>({rawValue:e,label:e,tone:"neutral"}))),c=(e,t)=>{d(r=>r.map((r,a)=>a===e?{...r,...t}:r))};return n().createElement(o.aFV,{open:e,onRequestClose:t,modalHeading:"Configure Status Mappings",primaryButtonText:"Save",secondaryButtonText:"Cancel",onRequestSubmit:()=>{r(s),t()},size:"md"},n().createElement("div",{className:i4["status-mapping-modal"]},n().createElement("p",{className:i4["status-mapping-modal__description"]},"Map each detected status value to a display label and tone."),n().createElement(o.BJc,{gap:4},s.map((e,t)=>n().createElement("div",{key:t,className:i4["status-mapping-row"]},n().createElement("div",{className:i4["status-mapping-row__raw"]},n().createElement("label",null,"Raw Value"),n().createElement(o.ksK,{id:`raw-${t}`,value:e.rawValue,onChange:e=>c(t,{rawValue:e.target.value}),disabled:!0,labelText:""})),n().createElement("div",{className:i4["status-mapping-row__label"]},n().createElement("label",null,"Display Label"),n().createElement(o.ksK,{id:`label-${t}`,value:e.label,onChange:e=>c(t,{label:e.target.value}),placeholder:"Enter display label",labelText:""})),n().createElement("div",{className:i4["status-mapping-row__tone"]},n().createElement("label",null,"Tone"),n().createElement(o.l6P,{id:`tone-${t}`,value:e.tone,onChange:e=>c(t,{tone:e.target.value})},i7.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label})))))))))}function oe({open:e,onClose:t,onSave:r,field:l,detectedFields:i}){let s=!!l,[d,c]=(0,a.useState)(l||{key:"",label:"",path:"",type:"TEXT",primary:!1,hidden:!1,order:0});return n().useEffect(()=>{l?c(l):c({key:"",label:"",path:"",type:"TEXT",primary:!1,hidden:!1,order:0})},[l,e]),n().createElement(o.aFV,{open:e,onRequestClose:()=>{c(l||{key:"",label:"",path:"",type:"TEXT",primary:!1,hidden:!1,order:0}),t()},modalHeading:s?"Edit Field":"Add Field",primaryButtonText:"Save",secondaryButtonText:"Cancel",onRequestSubmit:()=>{d.key&&d.label&&d.path&&(r(d),t())},size:"md"},n().createElement("div",{className:i4["field-config-modal"]},n().createElement(o.gE_,{legendText:""},n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"field-key",labelText:"Key *",value:d.key,onChange:e=>c({...d,key:e.target.value}),placeholder:"Unique identifier (e.g., status)",disabled:s,helperText:"Unique key for this field"}),n().createElement(o.ksK,{id:"field-label",labelText:"Label *",value:d.label,onChange:e=>c({...d,label:e.target.value}),placeholder:"Display label (e.g., Status)",helperText:"Human-readable label"}),n().createElement(o.l6P,{id:"field-path",labelText:"JSON Path *",value:d.path,onChange:e=>c({...d,path:e.target.value}),helperText:"Path to extract value from response"},n().createElement(o.ebT,{value:"",text:"Select a field..."}),i.map(e=>n().createElement(o.ebT,{key:e.path,value:e.path,text:`${e.name} (${e.path})`}))),n().createElement(o.l6P,{id:"field-type",labelText:"Type *",value:d.type,onChange:e=>c({...d,type:e.target.value}),helperText:"How should this value be interpreted and formatted?"},i8.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement(o.fs1,{id:"field-description",labelText:"Description",rows:2,value:d.description||"",onChange:e=>c({...d,description:e.target.value}),placeholder:"Optional description"}),n().createElement(o.lMk,{id:"field-primary",labelText:"Primary Field",labelA:"No",labelB:"Yes",toggled:d.primary,onToggle:e=>c({...d,primary:e})}),n().createElement(o.lMk,{id:"field-hidden",labelText:"Hidden",labelA:"No",labelB:"Yes",toggled:d.hidden,onToggle:e=>c({...d,hidden:e})}),"NUMBER"===d.type||"INTEGER"===d.type||"DECIMAL"===d.type?n().createElement("div",{className:i4["field-format-options"]},n().createElement("h5",null,"Number Formatting"),n().createElement(o.BJc,{orientation:"horizontal",gap:4},n().createElement(o.Q7x,{id:"field-decimals",label:"Decimal Places",value:d.format?.decimals||0,onChange:e=>{let t=parseInt(e.target.value)||0;c({...d,format:{...d.format,decimals:t}})},min:0,max:6}))):null))))}function ot({field:e,detectedField:t,isPrimary:r,onEdit:l,onUpdateField:i,onDelete:s,onMoveUp:d,onMoveDown:c,canMoveUp:m,canMoveDown:u,componentType:p}){let[_,g]=(0,a.useState)(!1),f=function(e){switch(e){case"STATUS_CARD":return["STATUS"];case"PROGRESS":return["PERCENTAGE"];default:return[]}}(p);return n().createElement("div",{className:i4["field-row"]},n().createElement("div",{className:i4["field-row__drag"]},n().createElement("div",{className:i4["field-row__drag-handle"]},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:E.Do,iconDescription:"Move up",onClick:d,disabled:!m}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:E.yd,iconDescription:"Move down",onClick:c,disabled:!u}))),n().createElement("div",{className:i4["field-row__content"]},n().createElement("div",{className:i4["field-row__main"]},n().createElement("div",{className:i4["field-row__info"]},n().createElement("div",{className:i4["field-row__header"]},n().createElement("span",{className:i4["field-row__label"]},e.label),r&&n().createElement(o.vwO,{type:"blue",size:"sm"},"Primary"),e.hidden&&n().createElement(o.vwO,{type:"gray",size:"sm"},"Hidden"),f.includes(e.type)&&n().createElement(o.vwO,{type:"green",size:"sm"},"Required")),n().createElement("div",{className:i4["field-row__meta"]},n().createElement("span",{className:i4["field-row__path"]},e.path),n().createElement(o.vwO,{type:"purple",size:"sm"},e.type))),n().createElement("div",{className:i4["field-row__actions"]},n().createElement(o.BJc,{orientation:"horizontal",gap:2},"STATUS"===e.type&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>g(!0)},"Map Status"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:es.ff,iconDescription:"Edit field",onClick:l}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,iconDescription:"Delete field",onClick:s}))))),"STATUS"===e.type&&n().createElement(i9,{open:_,onClose:()=>g(!1),onSave:t=>{i({...e,statusMappings:t}),g(!1)},currentMappings:e.statusMappings||[],detectedValues:t?.sampleValue?[String(t.sampleValue)]:[]}))}function or(){let{state:e}=i$(),t=iP(),{fields:r,componentType:l,detectedSchema:i,testResult:s}=e,[d,c]=(0,a.useState)(!1),[m,u]=(0,a.useState)(null),[p,_]=(0,a.useState)([]),[g,E]=(0,a.useState)([]),[f,y]=(0,a.useState)({unit:"milliseconds",format:"DD MMM YYYY, HH:mm",relative:!1}),h=i?.fields||[],v=function(e){switch(e){case"STATUS_CARD":return["Requires at least one STATUS field","Requires a primary field"];case"PROGRESS":return["Requires a PERCENTAGE field"];default:return["Requires at least one field"]}}(l),S=e=>{let a=r.findIndex(t=>t.key===e.key);if(a>=0){let n=[...r];n[a]=e,t({fields:n})}C()},T=()=>{i&&0!==h.length&&(t({fields:h.map((e,t)=>{let a=r.find(t=>t.path===e.path);return a||{key:e.name.replace(/[^a-zA-Z0-9]/g,"_").toLowerCase(),label:e.name,path:e.path,type:e.suggestedType||e.type,primary:0===t,hidden:!1,order:t,description:e.description}})}),C())},C=n().useCallback(()=>{let e=(0,iO.Kk)(r,l,s?.data,i?.arrayPath);_(e.errors),E(e.warnings??[])},[r,l,s,i]);n().useEffect(()=>{C()},[C]);let w=r.length>0,N=h.length>0,I=p.length>0;return n().createElement("div",{className:i4["fields-step"]},n().createElement("div",{className:i4["fields-step__header"]},n().createElement("h2",null,"Field Mapping"),n().createElement("p",{className:i4["fields-step__description"]},"Map fields from your API response to display fields. Configure types and formatting for each field.")),I&&n().createElement(o.jeF,{kind:"error",title:"Field Configuration Errors",subtitle:p.length>0?`${p.length} error(s) - see details above`:"",lowContrast:!0,style:{marginBottom:"1rem"}}),g.length>0&&n().createElement(o.jeF,{kind:"warning",title:"Unresolved Field Paths",subtitle:g.join(" \xb7 "),lowContrast:!0,style:{marginBottom:"1rem"}}),l&&n().createElement(o.jeF,{kind:"info",title:"Component Requirements",subtitle:v.join("; "),lowContrast:!0,style:{marginBottom:"1rem"},hideCloseButton:!0}),!w&&n().createElement("div",{className:i4["fields-step__empty"]},n().createElement("h3",null,"No Fields Configured"),n().createElement("p",null,N?`We detected ${h.length} fields from your endpoint response.`:"Test your endpoint first to detect available fields."),N&&n().createElement(o.$nd,{kind:"primary",renderIcon:b.OM,onClick:T},"Auto-Map Detected Fields")),w&&n().createElement("div",{className:i4["fields-step__list"]},n().createElement("div",{className:i4["fields-step__list-header"]},n().createElement("h4",null,"Configured Fields (",r.length,")"),N&&r.length<h.length&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:T},"Add Remaining Fields")),n().createElement("div",{className:i4["fields-step__fields"]},r.map((e,a)=>{let i=h.find(t=>t.path===e.path);return n().createElement(ot,{key:e.key,field:e,detectedField:i,isPrimary:e.primary,onEdit:()=>{u(e),c(!0)},onUpdateField:S,onDelete:()=>{var a;let n;return a=e.key,void((n=r.filter(e=>e.key!==a)).length>0&&!n.some(e=>e.primary)&&(n[0]={...n[0],primary:!0}),t({fields:n}),C())},onMoveUp:()=>(e=>{if(0===e)return;let a=[...r];[a[e-1],a[e]]=[a[e],a[e-1]],a.forEach((e,t)=>e.order=t),t({fields:a})})(a),onMoveDown:()=>(e=>{if(e===r.length-1)return;let a=[...r];[a[e],a[e+1]]=[a[e+1],a[e]],a.forEach((e,t)=>e.order=t),t({fields:a})})(a),canMoveUp:a>0,canMoveDown:a<r.length-1,componentType:l})})),n().createElement("div",{className:i4["fields-step__actions"]},n().createElement(o.$nd,{kind:"primary",renderIcon:b.OM,onClick:()=>{u(null),c(!0)}},"Add Field")),w&&r.some(e=>"TIMESTAMP"===e.type)&&n().createElement("div",{className:i4["fields-step__timestamp-config"]},n().createElement("div",{className:i4["fields-step__timestamp-header"]},n().createElement("h4",null,"Timestamp Format"),n().createElement("p",{className:i4["fields-step__timestamp-description"]},"Configure how timestamp fields are displayed")),n().createElement("div",{className:i4["fields-step__timestamp-settings"]},n().createElement("div",{className:i4["fields-step__timestamp-field"]},n().createElement("label",null,"Input unit"),n().createElement(o.l6P,{id:"timestamp-unit",size:"sm",value:f.unit,onChange:e=>{y({...f,unit:e.target.value})}},n().createElement(o.ebT,{value:"milliseconds",text:"Milliseconds"}),n().createElement(o.ebT,{value:"seconds",text:"Seconds"}))),n().createElement("div",{className:i4["fields-step__timestamp-field"]},n().createElement("label",null,"Display format"),n().createElement(o.ksK,{id:"timestamp-format",labelText:"",size:"sm",value:f.format,onChange:e=>{y({...f,format:e.target.value})},placeholder:"e.g., 15 Aug 2026, 19:23"})),n().createElement("div",{className:i4["fields-step__timestamp-field"]},n().createElement(o.lMk,{id:"timestamp-relative",size:"sm",labelText:"Show relative time",labelA:"No",labelB:"Yes",toggled:f.relative,onToggle:e=>{y({...f,relative:e})}}),n().createElement("span",{className:i4["fields-step__timestamp-helper"]},'Display timestamps as "2 minutes ago" instead of absolute time'))))),n().createElement(oe,{open:d,onClose:()=>c(!1),onSave:e=>{let a=r.findIndex(t=>t.key===e.key);if(a>=0){let n=[...r];n[a]=e,t({fields:n})}else t({fields:[...r,{...e,order:r.length}]});C()},field:m,detectedFields:h,componentType:l}))}let oa={"preview-step__header":"-esm-report-builder__preview-step__preview-step__header___8GGTm","preview-design-head":"-esm-report-builder__preview-step__preview-design-head___MrfTM","preview-design-head__icon":"-esm-report-builder__preview-step__preview-design-head__icon___Xw-Zn","preview-design-head__title":"-esm-report-builder__preview-step__preview-design-head__title___BYiU5","preview-design-head__desc":"-esm-report-builder__preview-step__preview-design-head__desc___JVYw3","preview-section":"-esm-report-builder__preview-step__preview-section___YQDjm","preview-section__divider":"-esm-report-builder__preview-step__preview-section__divider___vsFh6","preview-summary":"-esm-report-builder__preview-step__preview-summary___RRaW9","preview-summary__item":"-esm-report-builder__preview-step__preview-summary__item___5xg1m","preview-summary__icon":"-esm-report-builder__preview-step__preview-summary__icon___4rLgH","preview-summary__label":"-esm-report-builder__preview-step__preview-summary__label___VX+bA","preview-summary__value":"-esm-report-builder__preview-step__preview-summary__value___Kubko","preview-checklist":"-esm-report-builder__preview-step__preview-checklist___NkLbI","preview-checklist__item":"-esm-report-builder__preview-step__preview-checklist__item___I4I1I","preview-checklist__icon":"-esm-report-builder__preview-step__preview-checklist__icon___r0U1M","preview-checklist__icon--pass":"-esm-report-builder__preview-step__preview-checklist__icon--pass___a8+LE","preview-checklist__icon--fail":"-esm-report-builder__preview-step__preview-checklist__icon--fail___j5pDe","preview-checklist__label":"-esm-report-builder__preview-step__preview-checklist__label___bM9w-","preview-checklist__sub":"-esm-report-builder__preview-step__preview-checklist__sub___t+WSb","preview-save":"-esm-report-builder__preview-step__preview-save___Oe0PP"},on={NONE:"None",OPENMRS:"OpenMRS Session",BASIC:"Basic Auth",API_KEY:"API Key",BEARER_TOKEN:"Bearer Token"};function ol(){let{state:e,saveMonitor:t}=i$(),r=(0,i.Zp)(),[l,d]=(0,a.useState)(!1),[p,_]=(0,a.useState)(null),[E,f]=(0,a.useState)(!1),[b,y]=(0,a.useState)(0),h=(0,a.useMemo)(()=>(0,iO.stateToSavePayload)(e),[e]),v=function(e){if(e)return i1.find(t=>t.type===e||(t.aliases?.includes(e)??!1))}(e.componentType),S=(0,a.useMemo)(()=>(0,iO.yn)(e),[e]),T=(0,a.useMemo)(()=>(0,iO.lp)(e),[e]),C=0===S.length&&T.valid,w=e.fields.filter(e=>"STATUS"===e.type),N=w.every(e=>(e.statusMappings?.length??0)>0),I=[{icon:n().createElement(s.qz,null),label:"Data source",value:`${e.endpoint.method} ${e.endpoint.url||"—"}`},{icon:n().createElement(g.Zn,null),label:"Authentication",value:on[e.endpoint.auth?.type]||e.endpoint.auth?.type||"None"},{icon:n().createElement(tb.Ss,null),label:"Component",value:v?.label||e.componentType||"—"},{icon:n().createElement(nb.M4,null),label:"Timeout",value:`${e.general.timeout} sec`},{icon:n().createElement(u.wM,null),label:"Refresh",value:`${e.general.refreshInterval} sec`},{icon:n().createElement(m.vd,null),label:"Category",value:e.general.category||"—"}],k=[{pass:e.testResult?e.testResult.success:"edit"===e.mode&&!!e.endpoint.url,label:e.testResult?"Endpoint tested":"edit"===e.mode?"Endpoint configured":"Endpoint tested",sub:e.testResult?e.testResult.success?"Successfully connected and returned data":`Test failed: ${e.testResult.error||"unknown error"}`:"edit"===e.mode?"Endpoint configured and saved previously":"Run the endpoint test in the Data Source step"},{pass:e.fields.length>0,label:"Fields mapped",sub:e.fields.length>0?`${e.fields.length} field${1===e.fields.length?"":"s"} mapped to response paths`:"Map at least one response field"},{pass:0===w.length||N,label:"Status mapping complete",sub:0===w.length?"No status fields configured":N?"Status and thresholds configured":"Add status mappings to all STATUS fields"},{pass:T.valid,label:"Preview ready",sub:T.valid?"Monitor preview generated successfully":"Fix configuration errors to generate the preview"}],A=async()=>{d(!0),_(null);try{await t(),r("/admin/etl-monitors")}catch(e){_(e?.message||"Failed to save monitor")}finally{d(!1)}},R=async()=>{try{await navigator.clipboard.writeText(h.displayConfigJson||""),f(!0),window.setTimeout(()=>f(!1),2e3)}catch{}};return n().createElement("div",{className:oa["preview-step"]},n().createElement("div",{className:oa["preview-step__header"]},n().createElement("h2",null,"Preview & publish"),n().createElement("p",{className:oa["preview-step__description"]},"Review the monitor before saving it to the dashboard.")),p&&n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Save Failed",subtitle:p,onCloseButtonClick:()=>_(null),style:{marginBottom:"1rem"}}),n().createElement(l1,{loading:!1,onRefresh:()=>y(e=>e+1),actions:[{label:E?"Copied!":"Copy configuration JSON",onClick:R}]},v&&n().createElement("div",{className:oa["preview-design-head"]},n().createElement("span",{className:oa["preview-design-head__icon"],style:{backgroundColor:`${v.accent}1A`,color:v.accent}},v.icon),n().createElement("div",{className:oa["preview-design-head__text"]},n().createElement("h3",{className:oa["preview-design-head__title"]},v.label),n().createElement("p",{className:oa["preview-design-head__desc"]},v.description))),n().createElement("div",{key:b},n().createElement(iF,{state:e}))),n().createElement("div",{className:oa["preview-section"]},n().createElement("h4",null,"Configuration summary"),n().createElement("div",{className:oa["preview-summary"]},I.map(e=>n().createElement("div",{key:e.label,className:oa["preview-summary__item"]},n().createElement("span",{className:oa["preview-summary__icon"]},e.icon),n().createElement("div",{className:oa["preview-summary__text"]},n().createElement("div",{className:oa["preview-summary__label"]},e.label),n().createElement("div",{className:oa["preview-summary__value"]},e.value))))),n().createElement("div",{className:oa["preview-section__divider"]}),n().createElement("h4",null,"Validation checklist"),n().createElement("div",{className:oa["preview-checklist"]},k.map(e=>n().createElement("div",{key:e.label,className:oa["preview-checklist__item"]},n().createElement("span",{className:[oa["preview-checklist__icon"],e.pass?oa["preview-checklist__icon--pass"]:oa["preview-checklist__icon--fail"]].join(" ")},e.pass?n().createElement(U._j,null):n().createElement(es.$D,null)),n().createElement("div",null,n().createElement("div",{className:oa["preview-checklist__label"]},e.label),n().createElement("div",{className:oa["preview-checklist__sub"]},e.sub)))))),n().createElement("div",{className:oa["preview-save"]},n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:E?U.MG:c.QR,onClick:R},E?"Copied!":"Copy JSON"),n().createElement(o.$nd,{kind:"primary",renderIcon:g.eM,onClick:A,disabled:l||!C,title:C?void 0:S.join(", ")||"Configuration incomplete"},l?"Saving…":"Save Monitor")))}function oi(){let e=(0,i.Zp)(),[t]=(0,l.ok)(),r=t.get("mode")||"create",a=t.get("monitor");return n().createElement(iM,{mode:r,monitorId:a??void 0},n().createElement(oo,{onClose:()=>{e("/admin/etl-monitors")},mode:r}))}function oo({onClose:e,mode:t}){let{state:r,saveMonitor:a,updateState:l}=i$(),{has:i}=v(),{currentStep:d,goToNextStep:c,goToPreviousStep:m,canGoNext:u,canGoPrevious:p}=iU(),[_,f]=n().useState(null),[b,h]=n().useState(!1),S=(0,iO.yn)(r),T=!!r.parseError,C=i(y.RB.ETLMONITOR_ADD,y.RB.ETLMONITOR_EDIT),w=async()=>{if(S.length>0)return void f("Please fix validation errors before saving");h(!0),f(null);try{await a(),e()}catch(e){f(e?.message||"Failed to save monitor")}finally{h(!1)}},N=n().useMemo(()=>[{id:"general",label:"Basic information",sublabel:"Name & details"},{id:"data-source",label:"Data Source",sublabel:"Endpoint & test"},{id:"design",label:"Design",sublabel:"Choose layout"},{id:"fields",label:"Fields",sublabel:"Map data"},{id:"preview",label:"Preview",sublabel:"Review & save"}],[]),I=N.findIndex(e=>e.id===d),k=r.general.name||"New Monitor",A=r.general.categoryLabel||r.general.category||"ETL Monitor";return n().createElement("div",{className:iB["etl-monitor-builder-page"]},n().createElement("header",{className:iB["builder-header"]},n().createElement("div",{className:iB["builder-header__breadcrumb"]},n().createElement("span",{className:iB["builder-header__category"]},A),n().createElement("span",{className:iB["builder-header__separator"]},"/"),n().createElement("span",{className:iB["builder-header__name"]},k)),n().createElement("div",{className:iB["builder-header__title"]},"create"===t?"New ETL Monitor":"Edit ETL Monitor"),n().createElement("div",{className:iB["builder-header__actions"]},p&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:E.nk,onClick:()=>{p&&m()}},"Back"),u&&n().createElement(o.$nd,{kind:"primary",size:"sm",renderIcon:E.Qp,onClick:()=>{u&&c()}},"Continue"),!u&&"preview"===d&&n().createElement(o.$nd,{kind:"primary",size:"sm",renderIcon:g.eM,onClick:w,disabled:b||S.length>0||!C,title:C?void 0:"Requires ETL monitor privileges"},b?"Saving…":"Save Monitor"))),n().createElement("div",{className:iB["builder-content"]},n().createElement("div",{className:iB["builder-grid"]},n().createElement("div",{className:iB["builder-sidebar"]},n().createElement("nav",{className:iB["builder-steps-nav"],"aria-label":"Wizard steps"},n().createElement("ul",{className:iB["builder-steps-list"]},N.map((e,t)=>{let r=t<I?"completed":t===I?"current":"upcoming";return n().createElement("li",{key:e.id,className:`${iB["builder-step-item"]} ${iB[`builder-step-item--${r}`]}`},n().createElement("button",{type:"button",className:iB["builder-step-button"],"aria-current":"current"===r?"step":void 0},n().createElement("span",{className:iB["builder-step-number"]},"completed"===r?n().createElement(U._j,{size:16}):t+1),n().createElement("div",{className:iB["builder-step-content"]},n().createElement("span",{className:iB["builder-step-label"]},e.label),e.sublabel&&n().createElement("span",{className:iB["builder-step-sublabel"]},e.sublabel))))}))),n().createElement("div",{className:iB["builder-help-section"]},n().createElement(s._V,{size:16,className:iB["builder-help-icon"]}),n().createElement("div",{className:iB["builder-help-content"]},n().createElement("span",{className:iB["builder-help-label"]},"Need help?"),n().createElement("a",{href:"#",className:iB["builder-help-link"],onClick:e=>{e.preventDefault()}},"Learn how to create ETL monitors")))),n().createElement("div",{className:iB["builder-main"]},_&&n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:_,onClose:()=>f(null),style:{marginBottom:"1rem"}}),T&&"edit"===t&&n().createElement(o.jeF,{kind:"warning",title:"Configuration Parsing Issue",subtitle:`Some monitor configuration fields could not be parsed: ${r.parseError}. You may need to reconfigure these fields.`,style:{marginBottom:"1rem"},lowContrast:!0,hideCloseButton:!0}),S.length>0&&"preview"===d&&n().createElement(o.jeF,{kind:"error",title:"Validation Errors",subtitle:S.join(", "),style:{marginBottom:"1rem"},lowContrast:!0}),n().createElement("div",{className:iB["builder-step-content"]},(()=>{switch(d){case"general":default:return n().createElement(iW,null);case"data-source":return n().createElement(iZ,null);case"design":return n().createElement(i3,null);case"fields":return n().createElement(or,null);case"preview":return n().createElement(ol,null)}})())),n().createElement("div",{className:iB["builder-preview"]},"preview"===d?n().createElement(iG,null):n().createElement("div",{className:iB["builder-preview-panel"]},n().createElement("div",{className:iB["builder-preview-header"]},n().createElement("h4",null,"Live Preview"),n().createElement("p",{className:iB["builder-preview-description"]},"See how your monitor will appear in real-time")),n().createElement("div",{className:iB["builder-preview-content"]},r.componentType&&r.fields.length>0?n().createElement(n().Fragment,null,n().createElement(iF,{state:r}),r.componentType&&n().createElement("div",{className:iB["builder-preview-settings"]},n().createElement("div",{className:iB["builder-preview-settings-header"]},n().createElement("h5",null,"Selected Design Settings")),n().createElement("div",{className:iB["builder-preview-settings-content"]},n().createElement("div",{className:iB["builder-preview-setting"]},n().createElement("label",null,"Component"),n().createElement(o.vwO,{type:"purple"},r.componentType)),n().createElement("div",{className:iB["builder-preview-setting"]},n().createElement("label",null,"Density"),n().createElement(o.l6P,{id:"density-select",size:"sm",inline:!0,value:r.density||"compact",onChange:e=>{l({density:e.target.value})}},n().createElement(o.ebT,{value:"compact",text:"Compact"}),n().createElement(o.ebT,{value:"default",text:"Default"}),n().createElement(o.ebT,{value:"spacious",text:"Spacious"}))),n().createElement("div",{className:iB["builder-preview-setting"]},n().createElement("label",null,"Section"),n().createElement(o.l6P,{id:"section-select",size:"sm",inline:!0,value:r.layout?.section||"overview",onChange:e=>{l({layout:{section:e.target.value,span:r.layout?.span??{sm:4,md:4,lg:4},priority:r.layout?.priority??1}})}},n().createElement(o.ebT,{value:"overview",text:"Overview"}),n().createElement(o.ebT,{value:"execution",text:"Execution"}),n().createElement(o.ebT,{value:"history",text:"History"}),n().createElement(o.ebT,{value:"errors",text:"Errors"}),n().createElement(o.ebT,{value:"configuration",text:"Configuration"})))),n().createElement("div",{className:iB["builder-preview-settings-note"]},n().createElement(tw.$$,{size:12}),n().createElement("span",null,"You can change the design or settings later. Your data and mappings will be preserved."))),n().createElement("div",{className:iB["builder-preview-config"]},n().createElement("div",{className:iB["builder-preview-config-header"]},n().createElement("h5",null,"Generated Configuration (JSON)")),n().createElement("pre",{className:iB["builder-preview-json"]},JSON.stringify({schemaVersion:2,component:r.componentType,fields:r.fields.map(e=>({key:e.key,label:e.label,path:e.path,type:e.type}))},null,2)))):n().createElement("div",{className:iB["builder-preview-empty"]},n().createElement("p",null,"Configure your data source and select a design to see the live preview"))))))))}function os({state:e}){let[t,a]=n().useState(null);n().useEffect(()=>{Promise.resolve().then(r.bind(r,6434)).then(e=>{a(()=>e.MonitorRenderer)})},[]);let l=n().useMemo(()=>e.componentType&&e.fields&&0!==e.fields.length?{schemaVersion:2,component:e.componentType,data:{rootPath:"$"},fields:e.fields,layout:e.layout,emptyState:e.emptyState,componentConfig:e.componentConfig,presentation:{title:e.general.name||"Preview Monitor",description:e.general.description}}:null,[e]),i=n().useMemo(()=>{let t={};return e.fields?.forEach(e=>{let r=e.path.startsWith("$.")?e.path.slice(2):e.key;switch(e.type){case"STATUS":t[r]="UP";break;case"PERCENTAGE":t[r]=67;break;case"TIMESTAMP":t[r]=Date.now();break;case"DURATION":t[r]=5432;break;case"BOOLEAN":t[r]=!0;break;case"NUMBER":case"INTEGER":case"DECIMAL":t[r]=100;break;default:t[r]=`Sample ${e.label}`}}),t},[e.fields]),o=e.testResult?.data||e.detectedSchema?.rawSample||i;return l?t?n().createElement("div",{className:"builder-preview-renderer"},n().createElement(t,{config:l,data:o,loading:!1,error:null})):n().createElement("div",{className:"builder-preview-placeholder"},n().createElement("p",{style:{color:"var(--cds-text-secondary, #666)"}},"Loading preview renderer...")):n().createElement("div",{className:"builder-preview-placeholder"},n().createElement("p",{style:{color:"var(--cds-text-secondary, #666)"}},e.componentType?"Configure fields to see the live preview":"Select a component type to see the preview"))}function od({open:e,mode:t,onClose:r,onSave:a}){let{state:l}=i$(),{currentStep:i,goToNextStep:s,goToPreviousStep:d,canGoNext:c,canGoPrevious:m}=iU(),[u,p]=n().useState(null),[_,f]=n().useState(!1),b=(0,iO.yn)(l),y=!!l.parseError,h=async()=>{if(b.length>0)return void p("Please fix validation errors before saving");f(!0),p(null);try{let e={name:l.general.name.trim(),code:l.general.code.trim()||void 0,description:l.general.description.trim()||void 0,monitorType:l.componentType,category:l.general.category.trim()||void 0,refreshInterval:l.general.refreshInterval,timeout:l.general.timeout,active:l.general.active,configJson:JSON.stringify({apiEndpoint:{url:l.endpoint.url,method:l.endpoint.method,auth:{type:l.endpoint.auth.type,useSession:l.endpoint.auth.useSession,username:l.endpoint.auth.username,password:l.endpoint.auth.password,headerName:l.endpoint.auth.headerName,apiKey:l.endpoint.auth.apiKey,token:l.endpoint.auth.token}}}),displayConfigJson:JSON.stringify({schemaVersion:2,component:l.componentType,fields:l.fields,layout:l.layout,emptyState:l.emptyState,componentConfig:l.componentConfig})};await a(e),r()}catch(e){p(e?.message||"Failed to save monitor")}finally{f(!1)}},v=()=>{(!l.isDirty||window.confirm("You have unsaved changes. Are you sure you want to close?"))&&r()},S=[{id:"general",label:"General"},{id:"data-source",label:"Data Source"},{id:"design",label:"Design"},{id:"fields",label:"Fields"},{id:"preview",label:"Preview"}],T=S.findIndex(e=>e.id===i);return n().createElement(o.aFV,{open:e,onRequestClose:v,modalHeading:"create"===t?"New ETL Monitor":"Edit ETL Monitor",primaryButtonText:_?"Saving…":"Save",secondaryButtonText:"Cancel",onSecondarySubmit:v,onRequestSubmit:h,primaryButtonDisabled:_||b.length>0,size:"lg",className:"etl-monitor-builder-modal"},n().createElement("div",{className:"etl-monitor-builder-modal__content"},n().createElement(o.xA9,{className:"etl-monitor-builder-modal__grid"},n().createElement(o.VPZ,{sm:4,md:2,lg:3,className:"etl-monitor-builder-modal__sidebar"},n().createElement("nav",{className:"builder-steps-nav"},n().createElement("ul",{className:"builder-steps-list"},S.map((e,t)=>{let r=t<T,a=e.id===i,l=t<=T;return n().createElement("li",{key:e.id,className:["builder-step-item",a&&"builder-step-item--current",r&&"builder-step-item--completed",!l&&"builder-step-item--disabled"].filter(Boolean).join(" ")},n().createElement("button",{type:"button",disabled:!l,onClick:()=>{},className:"builder-step-button"},n().createElement("span",{className:"builder-step-number"},r?"✓":t+1),n().createElement("span",{className:"builder-step-label"},e.label)))})))),n().createElement(o.VPZ,{sm:12,md:14,lg:13,className:"etl-monitor-builder-modal__main"},n().createElement("div",{className:"builder-step-content"},u&&n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:u,onClose:()=>p(null),style:{marginBottom:"1rem"}}),y&&"edit"===t&&n().createElement(o.jeF,{kind:"warning",title:"Configuration Parsing Issue",subtitle:`Some monitor configuration fields could not be parsed: ${l.parseError}. You may need to reconfigure these fields.`,style:{marginBottom:"1rem"},lowContrast:!0,hideCloseButton:!0}),b.length>0&&"preview"===i&&n().createElement(o.jeF,{kind:"error",title:"Validation Errors",subtitle:b.join(", "),style:{marginBottom:"1rem"},lowContrast:!0}),(()=>{switch(i){case"general":default:return n().createElement(iW,null);case"data-source":return n().createElement(iZ,null);case"design":return n().createElement(i3,null);case"fields":return n().createElement(or,null);case"preview":return n().createElement(ol,null)}})()),n().createElement("div",{className:"builder-step-footer"},n().createElement(o.BJc,{orientation:"horizontal",gap:4},m&&n().createElement(o.$nd,{kind:"secondary",renderIcon:E.nk,onClick:()=>{m&&d()}},"Previous"),c&&n().createElement(o.$nd,{kind:"primary",renderIcon:E.Qp,onClick:()=>{c&&s()}},"Next"),!c&&"preview"===i&&n().createElement(o.$nd,{kind:"primary",renderIcon:g.eM,onClick:h,disabled:_||b.length>0},_?"Saving…":"Save Monitor")))),n().createElement(o.VPZ,{sm:4,md:6,lg:8,className:"etl-monitor-builder-modal__preview"},n().createElement("div",{className:"builder-preview-panel"},n().createElement("div",{className:"builder-preview-header"},n().createElement("h4",null,"Live Preview"),n().createElement("span",{className:"builder-preview-badge"},l.componentType||"Select a component")),n().createElement("div",{className:"builder-preview-content"},n().createElement(os,{state:l})))))))}function oc({open:e,mode:t,monitorId:r,onClose:a,onSave:l}){return e?n().createElement(iM,{mode:t,monitorId:r},n().createElement(od,{open:e,mode:t,monitorId:r,onClose:a,onSave:l})):null}let om=[{key:"name",header:"Name"},{key:"code",header:"Code"},{key:"monitorType",header:"Type"},{key:"category",header:"Category"},{key:"refreshInterval",header:"Refresh"},{key:"status",header:"Status"},{key:"actions",header:"Actions"}],ou={name:"",code:"",description:"",monitorType:"STATUS_CARD",category:"",refreshInterval:30,timeout:10,active:!0,apiUrl:"",apiMethod:"GET",authType:"NONE",authUsername:"",authPassword:"",authHeaderName:"",authApiKey:"",authToken:"",displayColumnsJson:""},op=[{value:"STATUS_CARD",label:"Status Card"},{value:"METRICS_GRID",label:"Metric Card"},{value:"PROGRESS",label:"Progress Card"},{value:"TABLE",label:"Table Card"},{value:"DETAILS",label:"Details Card"},{value:"SUMMARY_CARD",label:"Summary Card"},{value:"LOG",label:"Log / Timeline Card"},{value:"ERROR_LOG",label:"Error Log Card"},{value:"TIME_SERIES",label:"Time Series Chart"},{value:"PROGRESS_BAR",label:"Progress Bar (legacy)"},{value:"DATA_TABLE",label:"Data Table (legacy)"}],o_=[{value:"NONE",label:"None"},{value:"BASIC",label:"Basic Auth"},{value:"API_KEY",label:"API Key"},{value:"BEARER_TOKEN",label:"Bearer Token"},{value:"OPENMRS",label:"OpenMRS Session"}];function og(){let e=(0,i.Zp)(),{has:t}=v(),r=t(y.RB.ETLMONITOR_ADD,y.RB.ETLMONITOR_EDIT),a=t(y.RB.ETLMONITOR_PURGE),[l,s]=n().useState(""),[d,c]=n().useState([]),[m,u]=n().useState(!1),[p,_]=n().useState(null),[g,E]=n().useState(!1),[f,h]=n().useState("create"),[S,T]=n().useState(null),[C,w]=n().useState(ou),[N,I]=n().useState(!1),[k,A]=n().useState(!1),R=n().useCallback(async e=>{u(!0),_(null);try{let t=await lA(l,e);c(t)}catch(e){_(e?.message??"Failed to load ETL monitors")}finally{u(!1)}},[l]);n().useEffect(()=>{let e=new AbortController;return R(e.signal),()=>e.abort()},[R]);let O=async()=>{if(!C.name.trim()||!C.apiUrl.trim())return void _("Name and API URL are required");I(!0),_(null);try{let e,t={name:C.name.trim(),code:C.code.trim()||void 0,description:C.description.trim()||void 0,monitorType:C.monitorType,category:C.category.trim()||void 0,refreshInterval:C.refreshInterval,timeout:C.timeout,active:C.active,configJson:(e={apiEndpoint:{url:C.apiUrl,method:C.apiMethod,authType:C.authType}},"BASIC"===C.authType?e.apiEndpoint.authConfig={username:C.authUsername,password:C.authPassword}:"API_KEY"===C.authType?e.apiEndpoint.authConfig={headerName:C.authHeaderName,apiKey:C.authApiKey}:"BEARER_TOKEN"===C.authType?e.apiEndpoint.authConfig={token:C.authToken}:"OPENMRS"===C.authType&&(e.apiEndpoint.authConfig={useSession:"true"}),JSON.stringify(e,null,2)),displayConfigJson:C.displayColumnsJson.trim()||void 0};"create"===f?await lD(t):S?.uuid&&await lx(S.uuid,t),E(!1);let r=new AbortController;await R(r.signal)}catch(e){_(e?.message??"Failed to save ETL monitor")}finally{I(!1)}},D=async e=>{if(e?.uuid&&window.confirm(`Retire ETL monitor "${e.name}"?`))try{await lL(e.uuid);let t=new AbortController;await R(t.signal)}catch(e){_(e?.message??"Failed to retire ETL monitor")}},x=d.map(e=>({id:e.uuid,name:e.name,code:e.code||"—",monitorType:e.monitorType||"—",category:e.category||"—",refreshInterval:`${e.refreshInterval}s`,status:!1===e.active||e.retired?"Inactive":"Active",actions:""}));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"ETL Monitors",subtitle:"Configure and monitor external ETL processes. Set up API endpoints and define how to extract and display data.",actions:r?n().createElement(o.BJc,{orientation:"horizontal",gap:2},n().createElement(o.$nd,{size:"sm",renderIcon:b.OM,onClick:()=>e("/admin/etl-monitors/builder?mode=create")},"New Monitor"),n().createElement(o.$nd,{size:"sm",kind:"ghost",onClick:()=>{h("create"),T(null),w(ou),E(!0)}},"Advanced (JSON)")):void 0}),n().createElement("div",{style:{padding:"0 1rem 1rem",display:"grid",gap:"1rem"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search ETL monitors…",value:l,onChange:e=>s(e.target.value)}),p?n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:p}):null,m?n().createElement(o.OOb,{rowCount:5,columnCount:7,showHeader:!1,showToolbar:!1}):n().createElement(o.bQt,{rows:x,headers:om},({rows:t,headers:l,getHeaderProps:i,getRowProps:s})=>n().createElement(o.K3K,null,n().createElement(o.XIK,{useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,l.map(e=>n().createElement(o.A0N,{key:e.key,...i({header:e})},e.header)))),n().createElement(o.BFY,null,t.map(t=>{let l=d.find(e=>e.uuid===t.id);return n().createElement(o.Hjg,{key:t.id,...s({row:t})},n().createElement(o.nA6,null,t.cells[0].value),n().createElement(o.nA6,null,t.cells[1].value),n().createElement(o.nA6,null,t.cells[2].value),n().createElement(o.nA6,null,t.cells[3].value),n().createElement(o.nA6,null,t.cells[4].value),n().createElement(o.nA6,null,l?.active===!1||l?.retired?n().createElement(o.vwO,{type:"gray"},"Inactive"):n().createElement(o.vwO,{type:"green"},"Active")),n().createElement(o.nA6,null,n().createElement("div",{style:{display:"flex",gap:"0.5rem"}},r&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:es.ff,iconDescription:"Edit",hasIconOnly:!0,onClick:()=>l&&void e(`/admin/etl-monitors/builder?mode=edit&monitor=${l.uuid}`)}),a&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:P.zH,iconDescription:"Retire",hasIconOnly:!0,onClick:()=>l&&D(l)}))))})))))),n().createElement(o.aFV,{open:g,modalHeading:"create"===f?"New ETL Monitor":"Edit ETL Monitor",primaryButtonText:N?"Saving…":"Save",secondaryButtonText:"Cancel",onRequestClose:()=>!N&&E(!1),onRequestSubmit:O,primaryButtonDisabled:N||!C.name.trim()||!C.apiUrl.trim(),size:"lg"},n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"monitor-name",labelText:"Name",placeholder:"e.g., Uganda ETL Status",value:C.name,onChange:e=>w(t=>({...t,name:e.target.value}))}),n().createElement(o.ksK,{id:"monitor-code",labelText:"Code",placeholder:"e.g., uganda-etl-status",value:C.code,onChange:e=>w(t=>({...t,code:e.target.value}))}),n().createElement(o.fs1,{id:"monitor-description",labelText:"Description",rows:2,value:C.description,onChange:e=>w(t=>({...t,description:e.target.value}))}),n().createElement(o.l6P,{id:"monitor-type",labelText:"Monitor Type",value:C.monitorType,onChange:e=>w(t=>({...t,monitorType:e.target.value}))},op.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement(o.ksK,{id:"monitor-category",labelText:"Category",placeholder:"e.g., Uganda ETL",value:C.category,onChange:e=>w(t=>({...t,category:e.target.value}))}),n().createElement(o.BJc,{orientation:"horizontal",gap:5},n().createElement("div",null,n().createElement("label",{htmlFor:"refresh-interval",style:{display:"block",marginBottom:"0.5rem"}},"Refresh Interval (seconds)"),n().createElement(o.Q7x,{id:"refresh-interval",min:5,max:3600,value:C.refreshInterval,onChange:e=>{let t=parseInt(e.target.value)||30;w(e=>({...e,refreshInterval:t}))}})),n().createElement("div",null,n().createElement("label",{htmlFor:"timeout",style:{display:"block",marginBottom:"0.5rem"}},"Timeout (seconds)"),n().createElement(o.Q7x,{id:"timeout",min:1,max:300,value:C.timeout,onChange:e=>{let t=parseInt(e.target.value)||10;w(e=>({...e,timeout:t}))}}))),n().createElement(o.lMk,{id:"monitor-active",labelText:"Active",toggled:C.active,onToggle:e=>w(t=>({...t,active:e}))}),n().createElement("div",{style:{padding:"1rem",background:"var(--cds-background, #f4f4f4)",borderRadius:"0.5rem"}},n().createElement("h4",{style:{margin:"0 0 1rem 0"}},"API Endpoint Configuration"),n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"api-url",labelText:"API URL",placeholder:"/ws/rest/v1/ugandareportsetl/etl/status",value:C.apiUrl,onChange:e=>w(t=>({...t,apiUrl:e.target.value})),helperText:"Can be relative (starts with /) or absolute"}),n().createElement(o.l6P,{id:"api-method",labelText:"HTTP Method",value:C.apiMethod,onChange:e=>w(t=>({...t,apiMethod:e.target.value}))},n().createElement(o.ebT,{value:"GET",text:"GET"}),n().createElement(o.ebT,{value:"POST",text:"POST"})),n().createElement(o.l6P,{id:"auth-type",labelText:"Authentication",value:C.authType,onChange:e=>w(t=>({...t,authType:e.target.value}))},o_.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),(()=>{switch(C.authType){case"BASIC":return n().createElement(o.BJc,{gap:3},n().createElement(o.ksK,{id:"auth-username",labelText:"Username",value:C.authUsername,onChange:e=>w(t=>({...t,authUsername:e.target.value}))}),n().createElement(o.ksK,{id:"auth-password",labelText:"Password",type:"password",value:C.authPassword,onChange:e=>w(t=>({...t,authPassword:e.target.value}))}));case"API_KEY":return n().createElement(o.BJc,{gap:3},n().createElement(o.ksK,{id:"auth-header-name",labelText:"Header Name",placeholder:"e.g., X-API-Key",value:C.authHeaderName,onChange:e=>w(t=>({...t,authHeaderName:e.target.value}))}),n().createElement(o.ksK,{id:"auth-api-key",labelText:"API Key",type:"password",value:C.authApiKey,onChange:e=>w(t=>({...t,authApiKey:e.target.value}))}));case"BEARER_TOKEN":return n().createElement(o.ksK,{id:"auth-token",labelText:"Bearer Token",type:"password",value:C.authToken,onChange:e=>w(t=>({...t,authToken:e.target.value}))});case"OPENMRS":return n().createElement(o.jeF,{kind:"info",title:"Using OpenMRS Session",subtitle:"The monitor will use your current OpenMRS session. No additional credentials needed.",lowContrast:!0});default:return null}})())),n().createElement("div",{style:{padding:"1rem",background:"var(--cds-background, #f4f4f4)",borderRadius:"0.5rem"}},n().createElement("h4",{style:{margin:"0 0 1rem 0"}},"Display Configuration (JSON)"),n().createElement(o.fs1,{id:"display-config",labelText:"Display Configuration JSON",rows:6,value:C.displayColumnsJson,placeholder:`{
|
|
308
308
|
"columns": [
|
|
309
309
|
{
|
|
310
310
|
"key": "status",
|