@openmrs/esm-report-builder 0.1.1-pre.128 → 0.1.1-pre.129
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 +36 -6
- package/dist/128.js.map +1 -1
- package/dist/openmrs-esm-report-builder.js +1 -1
- package/dist/openmrs-esm-report-builder.js.buildmanifest.json +4 -4
- package/dist/routes.json +1 -1
- package/package.json +1 -1
- package/src/components/data-visualizer/data-visualizer.resource.ts +5 -0
- package/src/features/report-visualizer/ReportVisualizerPage.tsx +144 -26
- package/src/features/report-visualizer/components/ReportWorkspace/ReportSummary.tsx +14 -9
- package/src/features/report-visualizer/components/ReportWorkspace/ReportWorkspacePanel.tsx +1 -1
package/dist/128.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";(globalThis.webpackChunk_openmrs_esm_report_builder=globalThis.webpackChunk_openmrs_esm_report_builder||[]).push([["128"],{8159(e,t,r){r.d(t,{Kk:()=>d,Km:()=>o,X0:()=>s,fz:()=>m,lp:()=>c,stateToSavePayload:()=>u,yn:()=>p,zK:()=>i});var a=r(3155),n=r(6149);let l=["TABLE","DATA_TABLE","ERROR_LOG","LOG","TIME_SERIES"];function i(e){let t=[];return e.name&&""!==e.name.trim()||t.push("Name is required"),e.code&&""!==e.code.trim()?/^[a-z0-9-]+$/.test(e.code)||t.push("Code must contain only lowercase letters, numbers, and hyphens"):t.push("Code is required"),(e.refreshInterval<5||e.refreshInterval>3600)&&t.push("Refresh interval must be between 5 and 3600 seconds"),(e.timeout<1||e.timeout>300)&&t.push("Timeout must be between 1 and 300 seconds"),{valid:0===t.length,errors:t}}function o(e,t,r=!1){let a=[];return e.url&&""!==e.url.trim()?e.url.startsWith("/")||a.push("URL must be a relative path starting with /"):a.push("API URL is required"),t?t.success||a.push("Endpoint test failed: "+(t.error||"Unknown error")):r||a.push("Endpoint must be tested before proceeding"),{valid:0===a.length,errors:a}}function s(e){let t=[];return e||t.push("Please select a component type"),{valid:0===t.length,errors:t}}function d(e,t,r,a){let i=[];if(!e||0===e.length)return i.push("At least one field must be configured"),{valid:!1,errors:i};for(let r of("STATUS_CARD"===t&&(e.some(e=>e.primary)||i.push("Status Card requires a primary field"),e.some(e=>"STATUS"===e.type)||i.push("Status Card requires at least one STATUS field")),"PROGRESS"===t&&(e.some(e=>"PERCENTAGE"===e.type)||i.push("Progress component requires a PERCENTAGE field")),e))r.path&&""!==r.path.trim()||i.push(`Field "${r.label}" is missing a path`);let o=[];if(null!=r){let i=l.includes(t);for(let t of e)t.path&&""!==t.path.trim()&&((0,n.G2)(t.path,r,a,i)||o.push(`Field "${t.label}" path "${t.path}" doesn't match the tested response`+(i?" — use a row-relative path like $.fieldName":"")))}return{valid:0===i.length,errors:i,warnings:o.length>0?o:void 0}}function c(e){let t=[];try{let r=m(e);r.schemaVersion&&2===r.schemaVersion||t.push("Invalid schema version"),r.component||t.push("Component type is missing"),r.fields&&0!==r.fields.length||t.push("No fields configured")}catch(e){t.push("Failed to generate configuration: "+(e instanceof Error?e.message:"Unknown error"))}return{valid:0===t.length,errors:t}}function m(e){let t={schemaVersion:2,component:e.componentType||"SUMMARY_CARD",data:{rootPath:"$"},fields:e.fields.map(e=>({key:e.key,label:e.label,path:e.path,type:e.type,primary:e.primary,description:e.description,defaultValue:e.defaultValue,statusMap:e.statusMappings?.reduce((e,t)=>(e[t.rawValue]={label:t.label,tone:t.tone},e),{}),format:e.format,hidden:e.hidden,order:e.order}))};return e.layout?t.layout={...e.layout,section:e.layout.section}:t.layout=(0,a.kK)(e.componentType||"SUMMARY_CARD"),e.emptyState?t.emptyState=e.emptyState:t.emptyState=(0,a.Qc)(e.componentType||"SUMMARY_CARD"),t.presentation={...t.presentation,title:t.presentation?.title||e.general.name||void 0,description:t.presentation?.description||e.general.description||void 0,density:e.density||"compact"},e.componentConfig&&(t.componentConfig={},e.componentConfig.statusFieldKey&&(t.componentConfig.statusFieldKey=e.componentConfig.statusFieldKey),e.componentConfig.icon&&(t.componentConfig.icon=e.componentConfig.icon),void 0!==e.componentConfig.progressMin&&(t.componentConfig.progressMin=e.componentConfig.progressMin),void 0!==e.componentConfig.progressMax&&(t.componentConfig.progressMax=e.componentConfig.progressMax),void 0!==e.componentConfig.labelsAbove&&(t.componentConfig.labelsAbove=e.componentConfig.labelsAbove),void 0!==e.componentConfig.selectable&&(t.componentConfig.selectable=e.componentConfig.selectable),void 0!==e.componentConfig.maxRows&&(t.componentConfig.maxRows=e.componentConfig.maxRows),e.componentConfig.groups&&(t.componentConfig.groups=e.componentConfig.groups)),e.detectedSchema?.arrayPath&&(t.data.arrayPath=e.detectedSchema.arrayPath),t}function u(e){let t=m(e);return{name:e.general.name.trim(),code:e.general.code.trim()||void 0,description:e.general.description.trim()||void 0,monitorType:e.componentType,category:e.general.category.trim()||void 0,refreshInterval:e.general.refreshInterval,timeout:e.general.timeout,active:e.general.active,configJson:JSON.stringify({apiEndpoint:{url:e.endpoint.url,method:e.endpoint.method,auth:{type:e.endpoint.auth.type,useSession:e.endpoint.auth.useSession,username:e.endpoint.auth.username,password:e.endpoint.auth.password,headerName:e.endpoint.auth.headerName,apiKey:e.endpoint.auth.apiKey,token:e.endpoint.auth.token}}}),displayConfigJson:JSON.stringify(t)}}function p(e){let t=[];return t.push(...i(e.general).errors),t.push(...o(e.endpoint,e.testResult,"edit"===e.mode).errors),t.push(...s(e.componentType).errors),t.push(...d(e.fields,e.componentType).errors),t}},6434(e,t,r){r.d(t,{MonitorRenderer:()=>I});var a=r(4587),n=r.n(a),l=r(3270),i=r(5576),o=r(9249);let s={"monitor-status-card":"-esm-report-builder__monitor-renderers__monitor-status-card___53ZgD","monitor-summary-card":"-esm-report-builder__monitor-renderers__monitor-summary-card___bYr-T","monitor-progress":"-esm-report-builder__monitor-renderers__monitor-progress___ojKib","monitor-table":"-esm-report-builder__monitor-renderers__monitor-table___uVBoJ","monitor-metrics-grid":"-esm-report-builder__monitor-renderers__monitor-metrics-grid___ixITI","monitor-error-log":"-esm-report-builder__monitor-renderers__monitor-error-log___Hi5A2","monitor-details":"-esm-report-builder__monitor-renderers__monitor-details___+T7FM","monitor-status-card__header":"-esm-report-builder__monitor-renderers__monitor-status-card__header___MOp22","monitor-summary-card__header":"-esm-report-builder__monitor-renderers__monitor-summary-card__header___7XHBW","monitor-progress__header":"-esm-report-builder__monitor-renderers__monitor-progress__header___TvakY","monitor-table__header":"-esm-report-builder__monitor-renderers__monitor-table__header___qrnoy","monitor-metrics-grid__header":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__header___NWyjG","monitor-error-log__header":"-esm-report-builder__monitor-renderers__monitor-error-log__header___Xcrqx","monitor-details__header":"-esm-report-builder__monitor-renderers__monitor-details__header___x77eQ","monitor-status-card__title":"-esm-report-builder__monitor-renderers__monitor-status-card__title___tIMTA","monitor-summary-card__title":"-esm-report-builder__monitor-renderers__monitor-summary-card__title___SCQaa","monitor-progress__title":"-esm-report-builder__monitor-renderers__monitor-progress__title___RJpJi","monitor-table__title":"-esm-report-builder__monitor-renderers__monitor-table__title___reI88","monitor-metrics-grid__title":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__title___baUv3","monitor-error-log__title":"-esm-report-builder__monitor-renderers__monitor-error-log__title___vLloc","monitor-details__title":"-esm-report-builder__monitor-renderers__monitor-details__title___sDrpT","monitor-status-card__subtitle":"-esm-report-builder__monitor-renderers__monitor-status-card__subtitle___DWp5P","monitor-status-card__body":"-esm-report-builder__monitor-renderers__monitor-status-card__body___GjQgq","monitor-summary-card__body":"-esm-report-builder__monitor-renderers__monitor-summary-card__body___TQK1e","monitor-progress__body":"-esm-report-builder__monitor-renderers__monitor-progress__body___RbfN5","monitor-table__body":"-esm-report-builder__monitor-renderers__monitor-table__body___G-kPJ","monitor-metrics-grid__body":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__body___VCTsK","monitor-error-log__body":"-esm-report-builder__monitor-renderers__monitor-error-log__body___6Q0jW","monitor-details__body":"-esm-report-builder__monitor-renderers__monitor-details__body___bzGMB","monitor-status":"-esm-report-builder__monitor-renderers__monitor-status___R2IHW","monitor-status__indicator":"-esm-report-builder__monitor-renderers__monitor-status__indicator___M1vlf","monitor-status__dot":"-esm-report-builder__monitor-renderers__monitor-status__dot___G4fNJ","monitor-status__icon":"-esm-report-builder__monitor-renderers__monitor-status__icon___byuOm","monitor-status__content":"-esm-report-builder__monitor-renderers__monitor-status__content___Iod5T","monitor-status__label":"-esm-report-builder__monitor-renderers__monitor-status__label___2O9f2","monitor-status__description":"-esm-report-builder__monitor-renderers__monitor-status__description___SV-3T","monitor-status--success":"-esm-report-builder__monitor-renderers__monitor-status--success___g-g5a","monitor-status--critical":"-esm-report-builder__monitor-renderers__monitor-status--critical___F7yMK","monitor-status--warning":"-esm-report-builder__monitor-renderers__monitor-status--warning___eNvwA","monitor-status--info":"-esm-report-builder__monitor-renderers__monitor-status--info___Wg054","monitor-status--neutral":"-esm-report-builder__monitor-renderers__monitor-status--neutral___DF38z","monitor-status-card__fields":"-esm-report-builder__monitor-renderers__monitor-status-card__fields___iSCds","monitor-status-card__field":"-esm-report-builder__monitor-renderers__monitor-status-card__field___IyAp6","monitor-status-card__field-label":"-esm-report-builder__monitor-renderers__monitor-status-card__field-label___oA49U","monitor-status-card__field-value":"-esm-report-builder__monitor-renderers__monitor-status-card__field-value___gy1N3","monitor-status-card__timestamp":"-esm-report-builder__monitor-renderers__monitor-status-card__timestamp___F82l1","monitor-summary-card__metrics":"-esm-report-builder__monitor-renderers__monitor-summary-card__metrics___EoUz-","monitor-summary-card__metric":"-esm-report-builder__monitor-renderers__monitor-summary-card__metric___fNXNo","monitor-summary-card__metric-label":"-esm-report-builder__monitor-renderers__monitor-summary-card__metric-label___K9CaT","monitor-summary-card__metric-value":"-esm-report-builder__monitor-renderers__monitor-summary-card__metric-value___feOSl","monitor-progress__bar-container":"-esm-report-builder__monitor-renderers__monitor-progress__bar-container___83GH6","monitor-progress__bar":"-esm-report-builder__monitor-renderers__monitor-progress__bar___r0FNi","monitor-progress__info":"-esm-report-builder__monitor-renderers__monitor-progress__info___pIX5c","monitor-progress__percentage":"-esm-report-builder__monitor-renderers__monitor-progress__percentage___lDASu","monitor-progress__stage":"-esm-report-builder__monitor-renderers__monitor-progress__stage___Z7k-s","monitor-progress__idle":"-esm-report-builder__monitor-renderers__monitor-progress__idle___VFeyJ","monitor-progress__idle-text":"-esm-report-builder__monitor-renderers__monitor-progress__idle-text___CaF+R","monitor-progress__fields":"-esm-report-builder__monitor-renderers__monitor-progress__fields___vdqQa","monitor-progress__field":"-esm-report-builder__monitor-renderers__monitor-progress__field___VJPIc","monitor-progress__field-label":"-esm-report-builder__monitor-renderers__monitor-progress__field-label___CGY7g","monitor-progress__field-value":"-esm-report-builder__monitor-renderers__monitor-progress__field-value___yAXtg","monitor-table__empty":"-esm-report-builder__monitor-renderers__monitor-table__empty___ZZ62i","monitor-table__element":"-esm-report-builder__monitor-renderers__monitor-table__element___UI+IE","monitor-table__th--sorted":"-esm-report-builder__monitor-renderers__monitor-table__th--sorted___KDlF3","monitor-table__th-content":"-esm-report-builder__monitor-renderers__monitor-table__th-content___ApR-b","monitor-table__sort-icon":"-esm-report-builder__monitor-renderers__monitor-table__sort-icon___QfgMN","monitor-metrics-grid__items":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__items___4dh+y","monitor-metrics-grid__item":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__item___PzZAI","monitor-metrics-grid__item-label":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__item-label___6lRZq","monitor-metrics-grid__item-value":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__item-value___xnlpI","monitor-error-log__count":"-esm-report-builder__monitor-renderers__monitor-error-log__count___+q3KJ","monitor-error-log__empty":"-esm-report-builder__monitor-renderers__monitor-error-log__empty___atadP","monitor-error-log__items":"-esm-report-builder__monitor-renderers__monitor-error-log__items___v+Rdo","monitor-error-log__item":"-esm-report-builder__monitor-renderers__monitor-error-log__item___Y3lkH","monitor-error-log__item-indicator":"-esm-report-builder__monitor-renderers__monitor-error-log__item-indicator___rWMbY","monitor-error-log__item--critical":"-esm-report-builder__monitor-renderers__monitor-error-log__item--critical___KauTB","monitor-error-log__item--warning":"-esm-report-builder__monitor-renderers__monitor-error-log__item--warning___VRV7K","monitor-error-log__item--info":"-esm-report-builder__monitor-renderers__monitor-error-log__item--info___fXGXR","monitor-error-log__item--neutral":"-esm-report-builder__monitor-renderers__monitor-error-log__item--neutral___PyH9F","monitor-error-log__item-content":"-esm-report-builder__monitor-renderers__monitor-error-log__item-content___Gju1C","monitor-error-log__item-field":"-esm-report-builder__monitor-renderers__monitor-error-log__item-field___v58uY","monitor-error-log__item-field-label":"-esm-report-builder__monitor-renderers__monitor-error-log__item-field-label___mLp+c","monitor-error-log__item-field-value":"-esm-report-builder__monitor-renderers__monitor-error-log__item-field-value___20O6O","monitor-details__group":"-esm-report-builder__monitor-renderers__monitor-details__group___uamQH","monitor-details__group-title":"-esm-report-builder__monitor-renderers__monitor-details__group-title___qqEmA","monitor-details__items":"-esm-report-builder__monitor-renderers__monitor-details__items___xcRHN","monitor-details__item":"-esm-report-builder__monitor-renderers__monitor-details__item___5Jmo5","monitor-details__item-label":"-esm-report-builder__monitor-renderers__monitor-details__item-label___e4lbH","monitor-details__item-value":"-esm-report-builder__monitor-renderers__monitor-details__item-value___YMqEn","monitor-empty-state":"-esm-report-builder__monitor-renderers__monitor-empty-state___VffXz","monitor-loading-state":"-esm-report-builder__monitor-renderers__monitor-loading-state___-hfT6","monitor-error-state":"-esm-report-builder__monitor-renderers__monitor-error-state___ng3ms","monitor-empty-state__icon":"-esm-report-builder__monitor-renderers__monitor-empty-state__icon___z6Bbi","monitor-error-state__icon":"-esm-report-builder__monitor-renderers__monitor-error-state__icon___d9CkF","monitor-empty-state__title":"-esm-report-builder__monitor-renderers__monitor-empty-state__title___FV3qO","monitor-error-state__title":"-esm-report-builder__monitor-renderers__monitor-error-state__title___5C4uJ","monitor-empty-state__description":"-esm-report-builder__monitor-renderers__monitor-empty-state__description___cCfhh","monitor-error-state__description":"-esm-report-builder__monitor-renderers__monitor-error-state__description___fjWAs","monitor-loading-state__text":"-esm-report-builder__monitor-renderers__monitor-loading-state__text___63Cvg","monitor-loading-state__spinner":"-esm-report-builder__monitor-renderers__monitor-loading-state__spinner___o0u93",spin:"-esm-report-builder__monitor-renderers__spin___6V+Kf","monitor-fallback":"-esm-report-builder__monitor-renderers__monitor-fallback___N+WVD","monitor-fallback__header":"-esm-report-builder__monitor-renderers__monitor-fallback__header___60h+Q","monitor-fallback__content":"-esm-report-builder__monitor-renderers__monitor-fallback__content___BKRtZ","monitor-fallback__note":"-esm-report-builder__monitor-renderers__monitor-fallback__note___ST95l","monitor-fallback__data":"-esm-report-builder__monitor-renderers__monitor-fallback__data___xNiCH","monitor-preview-wrapper":"-esm-report-builder__monitor-renderers__monitor-preview-wrapper___7AVP6","status-card-premium":"-esm-report-builder__monitor-renderers__status-card-premium___+ptx1","status-card-premium--success":"-esm-report-builder__monitor-renderers__status-card-premium--success___BvfgP","status-card-premium--critical":"-esm-report-builder__monitor-renderers__status-card-premium--critical___uEnLK","status-card-premium--warning":"-esm-report-builder__monitor-renderers__status-card-premium--warning___nYQj0","status-card-premium--info":"-esm-report-builder__monitor-renderers__status-card-premium--info___XfCK9","status-card-premium--neutral":"-esm-report-builder__monitor-renderers__status-card-premium--neutral___qGUtm","status-card-premium__header":"-esm-report-builder__monitor-renderers__status-card-premium__header___qYNYk","status-card-premium__icon-tile":"-esm-report-builder__monitor-renderers__status-card-premium__icon-tile___0vJ4u","status-card-premium__title":"-esm-report-builder__monitor-renderers__status-card-premium__title___hh4ls","status-card-premium__body":"-esm-report-builder__monitor-renderers__status-card-premium__body___+z+m0","status-card-premium__status-row":"-esm-report-builder__monitor-renderers__status-card-premium__status-row___kv1Rq","status-card-premium__status-value":"-esm-report-builder__monitor-renderers__status-card-premium__status-value___3N3NC","status-card-premium__dot":"-esm-report-builder__monitor-renderers__status-card-premium__dot___n0Kb6","status-card-premium__description":"-esm-report-builder__monitor-renderers__status-card-premium__description___B1i4M","status-card-premium__footer":"-esm-report-builder__monitor-renderers__status-card-premium__footer___M4oPf","status-card-premium__meta":"-esm-report-builder__monitor-renderers__status-card-premium__meta___8pUhF","status-card-premium__meta-label":"-esm-report-builder__monitor-renderers__status-card-premium__meta-label___R8ByV","status-card-premium__meta-value":"-esm-report-builder__monitor-renderers__status-card-premium__meta-value___15CB2","monitor-empty-state__icon--success":"-esm-report-builder__monitor-renderers__monitor-empty-state__icon--success___5KcuA","monitor-empty-state__icon--critical":"-esm-report-builder__monitor-renderers__monitor-empty-state__icon--critical___OSlbC","monitor-empty-state__icon--warning":"-esm-report-builder__monitor-renderers__monitor-empty-state__icon--warning___1xwS-","monitor-empty-state__icon--info":"-esm-report-builder__monitor-renderers__monitor-empty-state__icon--info___ENXZ2","metrics-grid-renderer__head":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__head___ijGOW","metrics-grid-renderer__head-icon":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__head-icon___ngXof","metrics-grid-renderer__head-text":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__head-text___b7d8q","metrics-grid-renderer__head-title":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__head-title___MBb55","metrics-grid-renderer__head-sub":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__head-sub___bKUtC","metrics-grid-renderer__grid":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__grid___DHca-","metrics-grid-renderer__grid--hero":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__grid--hero___CFIpK","metrics-grid-renderer__tile":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__tile___X8ljG","metrics-grid-renderer__tile-icon":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__tile-icon___473n7","metrics-grid-renderer__tile-body":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__tile-body___ApVH-","metrics-grid-renderer__tile-label":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__tile-label___Osxif","metrics-grid-renderer__tile-value":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__tile-value___Zcbri","metrics-grid-renderer__tile-sub":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__tile-sub___--zbj","metrics-grid-renderer__footer":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__footer___ONGp2","table-renderer__progress":"-esm-report-builder__monitor-renderers__table-renderer__progress___+nuJF","table-renderer__progress-label":"-esm-report-builder__monitor-renderers__table-renderer__progress-label___xpDxM","table-renderer__progress-track":"-esm-report-builder__monitor-renderers__table-renderer__progress-track___hQLHC","table-renderer__progress-fill":"-esm-report-builder__monitor-renderers__table-renderer__progress-fill___Ld3cq","table-renderer__footer":"-esm-report-builder__monitor-renderers__table-renderer__footer___cIaIO","table-renderer__footer-count":"-esm-report-builder__monitor-renderers__table-renderer__footer-count___tLj0p","table-renderer__footer-link":"-esm-report-builder__monitor-renderers__table-renderer__footer-link___T94G1","details-renderer__timestamp":"-esm-report-builder__monitor-renderers__details-renderer__timestamp___9TuXm","details-renderer__timestamp-sub":"-esm-report-builder__monitor-renderers__details-renderer__timestamp-sub___J+v0-","cds--tag":"-esm-report-builder__monitor-renderers__cds--tag___KV49d","log-renderer__title":"-esm-report-builder__monitor-renderers__log-renderer__title___XuaX8","log-renderer__empty":"-esm-report-builder__monitor-renderers__log-renderer__empty___QMzSW","log-renderer__timeline":"-esm-report-builder__monitor-renderers__log-renderer__timeline___nXwUr","log-renderer__entry":"-esm-report-builder__monitor-renderers__log-renderer__entry___8q9DO","log-renderer__time":"-esm-report-builder__monitor-renderers__log-renderer__time___1hgMZ","log-renderer__message":"-esm-report-builder__monitor-renderers__log-renderer__message___goTWm","status-card-premium__pill":"-esm-report-builder__monitor-renderers__status-card-premium__pill___PJaRc","time-series-renderer":"-esm-report-builder__monitor-renderers__time-series-renderer___1mNjT","time-series-renderer__head":"-esm-report-builder__monitor-renderers__time-series-renderer__head___w-ZlI","time-series-renderer__icon":"-esm-report-builder__monitor-renderers__time-series-renderer__icon___SYplh","time-series-renderer__head-text":"-esm-report-builder__monitor-renderers__time-series-renderer__head-text___FlaUH","time-series-renderer__label":"-esm-report-builder__monitor-renderers__time-series-renderer__label___NYBSD","time-series-renderer__value":"-esm-report-builder__monitor-renderers__time-series-renderer__value___AkDwZ","time-series-renderer__head-delta":"-esm-report-builder__monitor-renderers__time-series-renderer__head-delta___CN98m","time-series-renderer__delta":"-esm-report-builder__monitor-renderers__time-series-renderer__delta___-wpZ3","time-series-renderer__delta--up":"-esm-report-builder__monitor-renderers__time-series-renderer__delta--up___HdvZS","time-series-renderer__delta--down":"-esm-report-builder__monitor-renderers__time-series-renderer__delta--down___5xRFY","time-series-renderer__delta-note":"-esm-report-builder__monitor-renderers__time-series-renderer__delta-note___y720Z","time-series-renderer__empty":"-esm-report-builder__monitor-renderers__time-series-renderer__empty___4tsWC","time-series-renderer__chart":"-esm-report-builder__monitor-renderers__time-series-renderer__chart___7CzDl","time-series-renderer__grid":"-esm-report-builder__monitor-renderers__time-series-renderer__grid___xMtm4","time-series-renderer__tick":"-esm-report-builder__monitor-renderers__time-series-renderer__tick___-wlje","time-series-renderer__crosshair":"-esm-report-builder__monitor-renderers__time-series-renderer__crosshair___v2OW6","time-series-renderer__line":"-esm-report-builder__monitor-renderers__time-series-renderer__line___VsT-C","time-series-renderer__area":"-esm-report-builder__monitor-renderers__time-series-renderer__area___2vVNP","time-series-renderer__dot":"-esm-report-builder__monitor-renderers__time-series-renderer__dot___Ro0nu","time-series-renderer__tooltip":"-esm-report-builder__monitor-renderers__time-series-renderer__tooltip___KrQID","time-series-renderer__tooltip-value":"-esm-report-builder__monitor-renderers__time-series-renderer__tooltip-value___HoQXF","time-series-renderer__tooltip-time":"-esm-report-builder__monitor-renderers__time-series-renderer__tooltip-time___d8YtO"};var d=r(4676);function c(e){if(!e)return"neutral";let t=String(e).toUpperCase();return"UP"===t||"ACTIVE"===t||"SUCCESS"===t||"OK"===t||"HEALTHY"===t?"success":"DOWN"===t||"ERROR"===t||"FAILED"===t||"CRITICAL"===t||"UNHEALTHY"===t?"critical":"WARNING"===t||"DEGRADED"===t?"warning":"INFO"===t||"PENDING"===t?"info":"neutral"}function m(e,t){if(null==e)return"-";if("STATUS"===t.type&&t.statusMap&&null!=e){let r=String(e),a=t.statusMap[r]||t.statusMap[r.toLowerCase()];return a?.label||e}return"TIMESTAMP"===t.type&&e?(0,d.fw)(e,{pastOnly:!0}):"boolean"===t.type?e?"Yes":"No":e}var u=r(8574),p=r(9610),_=r(6149);let g=function({config:e,fields:t,arrayData:r}){let a=r||[],l=(t||[]).filter(e=>!e.hidden),i=e.componentConfig?.maxRows||50,o=a.slice(0,i);return n().createElement("div",{className:s["table-renderer"]},n().createElement("div",{className:s["table-renderer__header"]},e.presentation?.title&&n().createElement("h4",{className:s["table-renderer__title"]},e.presentation.title)),0===o.length?n().createElement("div",{className:s["table-renderer__empty"]},"No data to display"):n().createElement("div",{className:s["table-renderer__table-wrapper"]},n().createElement(u.XIK,{size:"sm"},n().createElement(u.ndF,null,n().createElement(u.Hjg,null,l.map(e=>n().createElement(u.A0N,{key:e.key},e.label)))),n().createElement(u.BFY,null,o.map((t,r)=>n().createElement(u.Hjg,{key:t._id||r},l.map(r=>{let a,l=void 0===(a=(0,_.Qj)(t,r,e.data?.arrayPath))?"-":a;return n().createElement(u.nA6,{key:r.key},((e,t)=>{if(null==e)return"-";if("STATUS"===t.type){let r=t.statusMap?.[String(e)];if(r){let t={success:"green",critical:"red",warning:"purple",info:"blue",neutral:"gray"}[r.tone]||"gray";return n().createElement(u.vwO,{type:t},r.label||e)}let a=String(e).toLowerCase();return a.includes("up")||a.includes("success")||a.includes("ok")?n().createElement(u.vwO,{type:"green"},e):a.includes("down")||a.includes("error")||a.includes("fail")?n().createElement(u.vwO,{type:"red"},e):n().createElement(u.vwO,{type:"gray"},e)}if("PERCENTAGE"===t.type){let r="number"==typeof e?Math.max(0,Math.min(100,e)):parseFloat(String(e).replace("%",""))||0;return n().createElement("span",{className:s["table-renderer__progress"]},n().createElement("span",{className:s["table-renderer__progress-label"]},(0,_.nM)(e,t)),n().createElement("span",{className:s["table-renderer__progress-track"]},n().createElement("span",{className:s["table-renderer__progress-fill"],style:{width:`${r}%`}})))}return(0,_.nM)(e,t)})(l,r))})))))),a.length>i&&n().createElement("div",{className:s["table-renderer__footer"]},n().createElement("span",{className:s["table-renderer__footer-count"]},"Showing ",i," of ",a.length," rows"),e.componentConfig?.viewAllUrl&&n().createElement("a",{href:e.componentConfig.viewAllUrl,className:s["table-renderer__footer-link"]},e.componentConfig.viewAllLabel||"View all"," ",n().createElement(p.Qp,{size:12}))))};var E=r(771),f=r(3335);let b={document:E.yo,timer:i.M4,trend:f.BS,clock:i.gX,grid:o.xA,chart:f._C,badge:p.Ex,calendar:f.Vv};function y(e){return e?b[e]:void 0}let h="#8a3ffc";function v(e,t){let r=new Date(e);return isNaN(r.getTime())?String(e):"DATE"===t?r.toLocaleDateString():r.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit"})}let S={STATUS_CARD:function({config:e,fields:t,rawData:r,data:a}){let d=r||a,u=t||(d?function(e,t){if(!e||"object"!=typeof e)return[];let r=[];if(t.fields&&Array.isArray(t.fields))for(let a of t.fields){let t=function(e,t){if(!e||!t)return;let r=t;r.startsWith("$.")&&(r=r.slice(2));let a=r.split("."),n=e;for(let e of a)if(!n||"object"!=typeof n||!(e in n))return;else n=n[e];return n}(e,a.key),n="neutral";if("STATUS"===a.type&&a.statusMap&&null!=t){let e=String(t),r=a.statusMap[e]||a.statusMap[e.toLowerCase()];n=r?.tone||c(t)}r.push({key:a.key,label:a.label||a.key,value:t,formattedValue:m(t,a),type:a.type||"string",primary:a.primary||!1,hidden:a.hidden||!1,statusTone:n,statusMap:a.statusMap})}else Object.keys(e).forEach((t,a)=>{let n=e[t];r.push({key:t,label:t,value:n,formattedValue:m(n,{type:typeof n}),type:typeof n,primary:0===a,hidden:!1,statusTone:c(n)})});return r}(d,e):[])||[],p=u.find(e=>e.primary),_=u.find(e=>"STATUS"===e.type)||p,g=_?.formattedValue,E=_?.statusTone||c(g),f=e.presentation?.title||"Status Monitor",b=e.presentation?.description,y=u.filter(e=>!e.hidden&&e.key!==_?.key).slice(0,3);return n().createElement("div",{className:[s["status-card-premium"],s[`status-card-premium--${E}`]].join(" ")},n().createElement("div",{className:s["status-card-premium__header"]},n().createElement("span",{className:s["status-card-premium__icon-tile"]},n().createElement(l.Zn,{size:22})),n().createElement("h3",{className:s["status-card-premium__title"]},f),_&&n().createElement("span",{className:[s["status-card-premium__pill"],s[`status-card-premium__pill--${E}`]].join(" ")},g||"Unknown")),n().createElement("div",{className:s["status-card-premium__body"]},n().createElement("div",{className:s["status-card-premium__status-row"]},n().createElement("span",{className:s["status-card-premium__status-value"]},g||"Unknown"),n().createElement("span",{className:s["status-card-premium__dot"]})),b&&n().createElement("p",{className:s["status-card-premium__description"]},b)),y.length>0&&n().createElement("div",{className:s["status-card-premium__footer"]},y.map(e=>n().createElement("div",{key:e.key,className:s["status-card-premium__meta"]},n().createElement("span",{className:s["status-card-premium__meta-label"]},"TIMESTAMP"===e.type?n().createElement(i.gX,{size:12}):n().createElement(o.xA,{size:12}),e.label),n().createElement("span",{className:s["status-card-premium__meta-value"]},e.formattedValue??"—")))))},SUMMARY_CARD:function({config:e,fields:t,data:r}){let a=(t||(r?function(e,t){if(!e||"object"!=typeof e)return[];let r=[];if(t.fields&&Array.isArray(t.fields))for(let a of t.fields){let t=function(e,t){if(!e||!t)return;let r=t.split("."),a=e;for(let e of r)if(!a||"object"!=typeof a||!(e in a))return;else a=a[e];return a}(e,a.key);r.push({key:a.key,label:a.label||a.key,value:t,formattedValue:function(e,t){if(null==e)return"-";if("date"===t.type&&e)try{return new Date(e).toLocaleDateString()}catch{return e}return"boolean"===t.type?e?"Yes":"No":e}(t,a),type:a.type||"string",primary:a.primary||!1,hidden:a.hidden||!1,order:a.order,statusTone:"STATUS"===a.type&&null!=t?function(e,t){let r=String(e),a=t.statusMap?.[r]??t.statusMap?.[r.toLowerCase()];return a?.tone}(t,a):void 0})}else Object.keys(e).forEach((t,a)=>{let n=e[t];r.push({key:t,label:t,value:n,formattedValue:n,type:typeof n,primary:0===a,hidden:!1,order:a})});return r}(r,e):[])).filter(e=>!e.hidden);return n().createElement("div",{className:s["monitor-summary-card"]},n().createElement("div",{className:s["monitor-summary-card__header"]},e.presentation?.title&&n().createElement("h4",{className:s["monitor-summary-card__title"]},e.presentation.title)),n().createElement("div",{className:s["monitor-summary-card__body"]},n().createElement("div",{className:s["monitor-summary-card__metrics"]},a.map(e=>n().createElement("div",{key:e.key,className:s["monitor-summary-card__metric"]},n().createElement("div",{className:s["monitor-summary-card__metric-label"]},e.label),n().createElement("div",{className:s["monitor-summary-card__metric-value"]},e.formattedValue))))))},PROGRESS:function({config:e,fields:t,data:r}){let a=t||(r?function(e,t){if(!e||"object"!=typeof e)return[];let r=[];if(t.fields&&Array.isArray(t.fields))for(let a of t.fields){let t=function(e,t){if(!e||!t)return;let r=t.split("."),a=e;for(let e of r)if(!a||"object"!=typeof a||!(e in a))return;else a=a[e];return a}(e,a.key);r.push({key:a.key,label:a.label||a.key,value:t,formattedValue:function(e,t){if(null==e)return"-";if("percentage"===t.type&&"number"==typeof e)return`${Math.round(e)}%`;if("date"===t.type&&e)try{return new Date(e).toLocaleDateString()}catch{return e}return"boolean"===t.type?e?"Yes":"No":e}(t,a),type:a.type||"string",primary:a.primary||!1,hidden:a.hidden||!1,order:a.order})}else Object.keys(e).forEach((t,a)=>{let n=e[t];r.push({key:t,label:t,value:n,formattedValue:n,type:typeof n,primary:0===a,hidden:!1,order:a})});return r}(r,e):[])||[],l=a.find(e=>"PERCENTAGE"===e.type)||a.find(e=>e.primary)||a[0],i=a.find(t=>t.key===e.componentConfig?.stageFieldKey)||a.find(e=>"TEXT"===e.type),o=0,d=l?.value;if("number"==typeof d)o=Math.min(100,Math.max(0,d));else if(l?.formattedValue!=null){let e=parseFloat(String(l.formattedValue).replace("%",""));isNaN(e)||(o=Math.min(100,Math.max(0,e)))}let c=i?.formattedValue;return n().createElement("div",{className:s["monitor-progress"]},n().createElement("div",{className:s["monitor-progress__header"]},e.presentation?.title&&n().createElement("h4",{className:s["monitor-progress__title"]},e.presentation.title)),n().createElement("div",{className:s["monitor-progress__body"]},n().createElement("div",{className:s["monitor-progress__info"]},n().createElement("div",{className:s["monitor-progress__percentage"]},o,"%"),n().createElement("div",{className:s["monitor-progress__stage"]},c||"In Progress")),n().createElement("div",{className:s["monitor-progress__bar-container"]},n().createElement("div",{className:s["monitor-progress__bar"],style:{width:`${o}%`}})),a.length>2&&n().createElement("div",{className:s["monitor-progress__fields"]},a.filter(e=>e.key!==l?.key&&e.key!==i?.key&&!e.hidden).slice(0,3).map(e=>n().createElement("div",{key:e.key,className:s["monitor-progress__field"]},n().createElement("span",{className:s["monitor-progress__field-label"]},e.label,":"),n().createElement("span",{className:s["monitor-progress__field-value"]},e.formattedValue))))))},DATA_TABLE:g,TABLE:g,METRICS_GRID:function({config:e,fields:t}){let r=(t||[]).filter(e=>!e.hidden),a=e.componentConfig||{},l=a.icons||{},o=a.iconColors||{},d=a.valueColors||{},c=r.find(e=>"TIMESTAMP"===e.type),m=r.filter(e=>e!==c),u=1===m.length,p=y(a.icon||"chart");return n().createElement("div",{className:s["metrics-grid-renderer"]},!u&&n().createElement("div",{className:s["metrics-grid-renderer__head"]},p&&n().createElement("span",{className:s["metrics-grid-renderer__head-icon"],style:{backgroundColor:`${h}1A`,color:h}},n().createElement(p,{size:24})),n().createElement("div",{className:s["metrics-grid-renderer__head-text"]},e.presentation?.title&&n().createElement("h4",{className:s["metrics-grid-renderer__head-title"]},e.presentation.title),e.presentation?.description&&n().createElement("p",{className:s["metrics-grid-renderer__head-sub"]},e.presentation.description))),n().createElement("div",{className:[s["metrics-grid-renderer__grid"],u&&s["metrics-grid-renderer__grid--hero"]].filter(Boolean).join(" ")},m.map(e=>{let t=y(l[e.key]),r=o[e.key],a=d[e.key],i=e.formattedValue??"—";return n().createElement("div",{key:e.key,className:s["metrics-grid-renderer__tile"]},t&&n().createElement("span",{className:s["metrics-grid-renderer__tile-icon"],style:r?{backgroundColor:`${r}1A`,color:r}:void 0},n().createElement(t,{size:24})),n().createElement("div",{className:s["metrics-grid-renderer__tile-body"]},n().createElement("span",{className:s["metrics-grid-renderer__tile-label"]},e.label),n().createElement("span",{className:s["metrics-grid-renderer__tile-value"],style:a?{color:a}:void 0},i),e.description&&n().createElement("span",{className:s["metrics-grid-renderer__tile-sub"]},e.description)))})),c?.formattedValue!=null&&n().createElement("div",{className:s["metrics-grid-renderer__footer"]},n().createElement(i.gX,{size:14}),n().createElement("span",null,"Updated ",c.formattedValue)))},ERROR_LOG:function({config:e,arrayData:t,rawData:r}){let a=(t&&t.length>0?t:Array.isArray(r)?r:r&&"object"==typeof r?[r]:[]).map((t,r)=>{let a={...t,id:String(t?.id??t?._id??r)};return e.fields?.forEach(e=>{e.type&&"TEXT"!==e.type&&null!=a[e.key]&&(a[e.key]=(0,_.nM)(a[e.key],e))}),a});if(!a||0===a.length)return n().createElement("div",{className:s["error-log-empty"]},n().createElement("p",null,"No error logs available"));let l=(e.fields?.length?e.fields.map(e=>({key:e.key,header:e.label||e.key})):[{key:"timestamp",header:"Timestamp"},{key:"level",header:"Level"},{key:"message",header:"Message"}]).map(e=>({key:e.key,header:e.header}));return n().createElement("div",{className:s["error-log-renderer"]},e.presentation?.title&&n().createElement("h4",{className:s["error-log-renderer__title"]},e.presentation.title),n().createElement(u.bQt,{rows:a,headers:l},({rows:e,headers:t,getHeaderProps:r,getTableProps:a})=>n().createElement(u.K3K,null,n().createElement(u.XIK,a(),n().createElement(u.ndF,null,n().createElement(u.Hjg,null,t.map(e=>n().createElement(u.A0N,{...r({header:e}),key:e.key},e.header||e.key)))),n().createElement(u.BFY,null,e.map(e=>n().createElement(u.Hjg,{key:e.id},e.cells.map(e=>n().createElement(u.nA6,{key:e.id},e.value)))))))))},DETAILS:function({config:e,fields:t,data:r}){let a=(t||(r?function(e,t){if(!e||"object"!=typeof e)return[];let r=[];if(t.fields&&Array.isArray(t.fields))for(let a of t.fields){let t=function(e,t){if(!e||!t)return;let r=t.split("."),a=e;for(let e of r)if(!a||"object"!=typeof a||!(e in a))return;else a=a[e];return a}(e,a.key),n="neutral";if("STATUS"===a.type&&a.statusMap&&null!=t){let e=String(t),r=a.statusMap[e];n=r?.tone||"neutral"}r.push({key:a.key,label:a.label||a.key,value:t,formattedValue:function(e,t){if(null==e)return"-";if("date"===t.type&&e)try{return new Date(e).toLocaleDateString()}catch{return e}return"boolean"===t.type?e?"Yes":"No":e}(t,a),type:a.type||"string",primary:a.primary||!1,hidden:a.hidden||!1,statusTone:n,statusMap:a.statusMap,order:a.order})}else Object.keys(e).forEach((t,a)=>{let n=e[t];r.push({key:t,label:t,value:n,formattedValue:n,type:typeof n,primary:0===a,hidden:!1,order:a})});return r}(r,e):[])||[]).filter(e=>!e.hidden),l="ERROR_LOG"===e.component;return n().createElement("div",{className:s["details-renderer"]},n().createElement("div",{className:s["details-renderer__header"]},e.presentation?.title&&n().createElement("h4",{className:s["details-renderer__title"]},e.presentation.title)),0===a.length?n().createElement("div",{className:s["details-renderer__empty"]},"No details to display"):n().createElement(u.r9c,null,n().createElement(u.GRJ,null,a.map(e=>n().createElement(u.Cvq,{key:e.key},n().createElement(u.Um2,{style:{width:"40%"}},n().createElement("strong",null,e.label)),n().createElement(u.Um2,null,l&&"STATUS"===e.type?n().createElement(u.vwO,{type:"ERROR"===e.value?"red":"gray"},e.formattedValue):"STATUS"===e.type&&e.statusTone?n().createElement(u.vwO,{type:"success"===e.statusTone?"green":"critical"===e.statusTone?"red":"warning"===e.statusTone?"purple":"gray"},e.formattedValue):"TIMESTAMP"===e.type&&e.format?.timestamp?.display?n().createElement("span",{className:s["details-renderer__timestamp"]},n().createElement("span",{className:s["details-renderer__value"]},e.formattedValue),n().createElement("span",{className:s["details-renderer__timestamp-sub"]},(0,d.fw)(e.value))):n().createElement("span",{className:s["details-renderer__value"]},e.formattedValue)))))))},LOG:function({config:e,fields:t,arrayData:r,rawData:a}){let l=r&&r.length>0?r:Array.isArray(a)?a:a&&"object"==typeof a?[a]:[],i=t||[],o=i.find(e=>"TIMESTAMP"===e.type),d=i.find(e=>"TIMESTAMP"!==e.type),c=e.componentConfig?.maxRows||10;return n().createElement("div",{className:s["log-renderer"]},e.presentation?.title&&n().createElement("h4",{className:s["log-renderer__title"]},e.presentation.title),0===l.length?n().createElement("div",{className:s["log-renderer__empty"]},"No events recorded"):n().createElement("ul",{className:s["log-renderer__timeline"]},l.slice(0,c).map((t,r)=>{var a,l;let i=o?(a=e.data?.arrayPath,(0,_.Qj)(t,o,a)):void 0,c=null!=i?String((0,_.nM)(i,o)):"—",m=d?(l=e.data?.arrayPath,(0,_.Qj)(t,d,l)):void 0,u=null!=m&&""!==m?String(m):"—";return n().createElement("li",{key:t?.id??r,className:s["log-renderer__entry"]},n().createElement("span",{className:s["log-renderer__marker"]}),n().createElement("span",{className:s["log-renderer__time"]},c),n().createElement("span",{className:s["log-renderer__message"]},u))})))},TIME_SERIES:function({config:e,fields:t,arrayData:r,rawData:l}){let i=(0,a.useRef)(null),o=(0,a.useRef)(null),[d,c]=(0,a.useState)(280),[m,u]=(0,a.useState)(null),p=t||[],g=p.find(e=>"TIMESTAMP"===e.type),E=p.find(e=>e.primary)||p.find(e=>["PERCENTAGE","NUMBER","INTEGER","DECIMAL","DURATION"].includes(e.type))||p.find(e=>"TIMESTAMP"!==e.type),f=y(Object.values(e.componentConfig?.icons||{})[0]),b=(0,a.useMemo)(()=>{let t=r&&r.length>0?r:Array.isArray(l)?l:[],a=(t,r)=>(0,_.Qj)(t,r,e.data?.arrayPath);return g&&E?t.map(e=>({x:a(e,g),y:a(e,E)})).filter(e=>null!=e.x&&null!=e.y&&"number"==typeof e.y).sort((e,t)=>e.x-t.x):[]},[r,l,g,E,e]);n().useEffect(()=>{let e=o.current;if(!e||"u"<typeof ResizeObserver)return;let t=new ResizeObserver(e=>{let t=e[0]?.contentRect?.width;t&&t>40&&c(Math.floor(t))});return t.observe(e),()=>t.disconnect()},[]);let h=Math.max(40,d-38-12),S=b.length?b[0].x:0,T=b.length?b[b.length-1].x:1,C=b.map(e=>e.y),w=Math.min(0,...C),N=b.length?Math.max(...C):1,I=e=>38+(e-S)/(T-S||1)*h,k=e=>8+(1-(e-w)/(N-w||1))*94,A=b.map((e,t)=>`${0===t?"M":"L"}${I(e.x).toFixed(1)},${k(e.y).toFixed(1)}`).join(" "),R=k(w),O=b.length?`${A} L${I(b[b.length-1].x).toFixed(1)},${R.toFixed(1)} L${I(b[0].x).toFixed(1)},${R.toFixed(1)} Z`:"",D=(0,a.useMemo)(()=>{if(b.length<2)return null;let e=b[0].y,t=b[b.length-1].y;if(!e)return null;let r=(t-e)/Math.abs(e)*100;return isFinite(r)?r:null},[b]),x=b.length?b[b.length-1].y:null,L=null!=x?(0,_.nM)(x,E||{}):"—",M=e.componentConfig?.deltaLabel||"vs previous period",$=[w,w+(N-w)/2,N],P=null!=m?b[m]:null;return n().createElement("div",{className:s["time-series-renderer"]},n().createElement("div",{className:s["time-series-renderer__head"]},f?n().createElement("span",{className:s["time-series-renderer__icon"]},n().createElement(f,{size:20})):null,n().createElement("div",{className:s["time-series-renderer__head-text"]},n().createElement("span",{className:s["time-series-renderer__label"]},E?.label||e.presentation?.title||"Trend"),n().createElement("span",{className:s["time-series-renderer__value"]},L)),null!=D&&n().createElement("span",{className:s["time-series-renderer__head-delta"]},n().createElement("span",{className:`${s["time-series-renderer__delta"]} ${D>=0?s["time-series-renderer__delta--up"]:s["time-series-renderer__delta--down"]}`},D>=0?"↑":"↓"," ",Math.abs(D).toFixed(1),"%"),n().createElement("span",{className:s["time-series-renderer__delta-note"]},M))),0===b.length?n().createElement("div",{className:s["time-series-renderer__empty"]},"No time series data"):n().createElement("div",{className:s["time-series-renderer__chart"],ref:o},n().createElement("svg",{ref:i,width:d,height:120,role:"img","aria-label":`${E?.label||"Trend"} over time`,tabIndex:0,onMouseMove:e=>{if(!b.length||!i.current)return;let t=i.current.getBoundingClientRect(),r=(e.clientX-t.left)/t.width*d,a=0,n=1/0;b.forEach((e,t)=>{let l=Math.abs(I(e.x)-r);l<n&&(n=l,a=t)}),u(a)},onMouseLeave:()=>u(null),onKeyDown:e=>{if(b.length)if("ArrowLeft"===e.key||"ArrowRight"===e.key){e.preventDefault();let t="ArrowLeft"===e.key?-1:1;u(e=>{let r=e??b.length-1;return Math.max(0,Math.min(b.length-1,r+t))})}else"Escape"===e.key&&u(null)},onBlur:()=>u(null)},$.map((e,t)=>n().createElement("g",{key:t},n().createElement("line",{x1:38,x2:d-12,y1:k(e),y2:k(e),className:s["time-series-renderer__grid"]}),n().createElement("text",{x:32,y:k(e),textAnchor:"end",dominantBaseline:"middle",className:s["time-series-renderer__tick"]},function(e,t){if("DURATION"===t){let t=Math.floor(e/1e3);if(t<60)return`${t}s`;let r=Math.floor(t/60);return r<60?`${r}m`:`${Math.floor(r/60)}h`}return Math.abs(e)>=1e3?new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e):String(Math.round(e))}(e,E?.type)))),P&&n().createElement("line",{x1:I(P.x),x2:I(P.x),y1:8,y2:102,className:s["time-series-renderer__crosshair"]}),n().createElement("path",{d:O,className:s["time-series-renderer__area"]}),n().createElement("path",{d:A,className:s["time-series-renderer__line"]}),P&&n().createElement("circle",{cx:I(P.x),cy:k(P.y),r:4.5,className:s["time-series-renderer__dot"]}),b.length>0&&n().createElement("circle",{cx:I(b[b.length-1].x),cy:k(b[b.length-1].y),r:4.5,className:s["time-series-renderer__dot"]}),[0,Math.floor((b.length-1)/2),b.length-1].map((e,t)=>e<0||!b[e]?null:n().createElement("text",{key:t,x:I(b[e].x),y:116,textAnchor:0===t?"start":2===t?"end":"middle",className:s["time-series-renderer__tick"]},v(b[e].x,g?.format?.timestamp?.display==="date"?"DATE":void 0)))),P&&n().createElement("div",{className:s["time-series-renderer__tooltip"],style:{left:`${I(P.x)/d*100}%`,top:0}},n().createElement("span",{className:s["time-series-renderer__tooltip-value"]},(0,_.nM)(P.y,E||{})),n().createElement("span",{className:s["time-series-renderer__tooltip-time"]},v(P.x)))))}};function T({config:e}){let t=e.emptyState,r=t?.tone||"neutral";return n().createElement("div",{className:s["monitor-empty-state"]},n().createElement("div",{className:[s["monitor-empty-state__icon"],s[`monitor-empty-state__icon--${r}`]].join(" ")},n().createElement("svg",{width:"48",height:"48",viewBox:"0 0 48 48",fill:"none"},n().createElement("circle",{cx:"24",cy:"24",r:"20",stroke:"currentColor",strokeWidth:"2.5",fill:"none"}),n().createElement("path",{d:"M16 24L22 30L32 18",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"}))),n().createElement("h4",{className:s["monitor-empty-state__title"]},t?.title||"No Data"),n().createElement("p",{className:s["monitor-empty-state__description"]},t?.description||"No data available at this time."))}function C(){return n().createElement("div",{className:s["monitor-loading-state"]},n().createElement("div",{className:s["monitor-loading-state__spinner"]}),n().createElement("p",{className:s["monitor-loading-state__text"]},"Loading monitor data..."))}function w({error:e}){return n().createElement("div",{className:s["monitor-error-state"]},n().createElement("div",{className:s["monitor-error-state__icon"]},n().createElement("svg",{width:"32",height:"32",viewBox:"0 0 32 32",fill:"none"},n().createElement("circle",{cx:"16",cy:"16",r:"14",stroke:"#da1e28",strokeWidth:"2",fill:"none"}),n().createElement("path",{d:"M16 10V16M16 20V22",stroke:"#da1e28",strokeWidth:"2",strokeLinecap:"round"}))),n().createElement("h4",{className:s["monitor-error-state__title"]},"Unable to Load Monitor"),n().createElement("p",{className:s["monitor-error-state__description"]},e))}function N({config:e,data:t}){return n().createElement("div",{className:s["monitor-fallback"]},n().createElement("div",{className:s["monitor-fallback__header"]},n().createElement("h5",null,e.presentation?.title||"Monitor")),n().createElement("div",{className:s["monitor-fallback__content"]},n().createElement("p",{className:s["monitor-fallback__note"]},"Component type ",n().createElement("code",null,e.component)," is not yet supported."),t&&n().createElement("pre",{className:s["monitor-fallback__data"]},JSON.stringify(t,null,2))))}function I({config:e,data:t,loading:r,error:a}){let l=S[e.component];if(r)return n().createElement(C,null);if(a)return n().createElement(w,{error:a});if((0,_.ez)(t,e))return n().createElement(T,{config:e});if(!l)return n().createElement(N,{config:e,data:t});let i=(0,_.Nx)(t,e);if(["STATUS_CARD","SUMMARY_CARD","PROGRESS"].includes(e.component))return n().createElement(l,{config:e,fields:i,data:t});let o=["TABLE","DATA_TABLE","ERROR_LOG","LOG","TIME_SERIES"].includes(e.component)?(0,_.Mj)(t,e):null;return n().createElement(l,{config:e,fields:i,arrayData:o,rawData:t})}},6149(e,t,r){r.d(t,{G2:()=>m,Mj:()=>o,Nx:()=>i,Qj:()=>c,ez:()=>n,nM:()=>p});var a=r(4676);function n(e,t){if(null==e||""===e)return!0;switch(t.component){case"TABLE":case"DATA_TABLE":case"ERROR_LOG":case"LOG":return 0===l(e,t).length;case"STATUS_CARD":case"SUMMARY_CARD":case"PROGRESS":return!1;default:if(Array.isArray(e))return 0===e.length;if("object"==typeof e)return 0===Object.keys(e).length;return!1}}function l(e,t){if(Array.isArray(e))return e;if(!e||"object"!=typeof e)return[];let r=t.data?.arrayPath;if(r&&"$"!==r){let t=r.replace(/^\$\.?/,"");if(t){let r=t.split(".").reduce((e,t)=>null==e?void 0:e[t],e);if(Array.isArray(r))return r}}return Array.isArray(e.data)?e.data:Array.isArray(e.items)?e.items:Array.isArray(e.results)?e.results:[e]}function i(e,t){if(!e||"object"!=typeof e)return[];let r=e,a=t.data?.rootPath;if(a&&"$"!==a){let t=d(e,a);null!=t&&"object"==typeof t&&(r=t)}return Array.isArray(t.fields)&&t.fields.length>0?t.fields.map(e=>{let t=d(r,e.path||e.key);return{key:e.key,label:e.label||e.key,value:t,formattedValue:u(t,e),type:e.type||"TEXT",primary:!!e.primary,hidden:!!e.hidden,order:e.order,path:e.path,description:e.description,statusMap:e.statusMap,statusTone:"STATUS"===e.type?function(e,t){let r;if(null==e||!t)return;let a=String(e),n=t[a]??t[a.toLowerCase()]??t[a.toUpperCase()];return n?.tone||(["UP","ACTIVE","SUCCESS","OK","HEALTHY","COMPLETED"].includes(r=String(e).toUpperCase())?"success":["DOWN","ERROR","FAILED","CRITICAL","UNHEALTHY"].includes(r)?"critical":["WARNING","DEGRADED","PENDING"].includes(r)?"warning":"neutral")}(t,e.statusMap):void 0}}):Object.keys(r).map((e,t)=>{var a;let n="boolean"==typeof(a=r[e])?"BOOLEAN":"number"==typeof a?"NUMBER":a instanceof Date?"TIMESTAMP":"TEXT",l={key:e,label:e,path:`$.${e}`,type:n};return{key:e,label:e,value:r[e],formattedValue:u(r[e],l),type:n,primary:0===t,hidden:!1,order:t,path:`$.${e}`}})}function o(e,t){return l(e,t).map((e,t)=>null!==e&&"object"==typeof e?{...e}:{value:e,_rowIndex:t})}function s(e){return e.split(".").flatMap(e=>{let t=e.match(/^(\w+)\[(\*|\d+)\]$/);if(t)return"*"===t[2]?[t[1],0]:[t[1],parseInt(t[2],10)];let r=e.match(/^\[(\*|\d+)\]$/);return r?"*"===r[1]?[0]:[parseInt(r[1],10)]:[e]})}function d(e,t){if(!e||!t)return;let r=t;if("$"===r||"$."===r)return e;(r=r.replace(/^\$\[\*?\d*\]\.?/,"$.")).startsWith("$.")?r=r.slice(2):r.startsWith("$")&&(r=r.slice(1));let a=e;for(let e of s(r)){if(null==a)return;a=a[e]}return a}function c(e,t,r){if(!e||"object"!=typeof e||!t)return;let a=t.path||(t.key?`$.${t.key}`:"");if(!a)return;if(a=a.replace(/^\$\[\*?\d*\]\.?/,"$."),r&&"$"!==r){let t=r.replace(/\[\*?\]$/,"");if(a===t)return e;a.startsWith(`${t}.`)?a=`$.${a.slice(t.length+1)}`:a.startsWith(`${t}[*].`)&&(a=`$.${a.slice(t.length+4)}`)}if(!a.startsWith("$."))return t.key&&t.key in e?e[t.key]:void 0;let n=e;for(let e of s(a.slice(2))){if(null==n)return;n=n[e]}return n}function m(e,t,r,a){if(!e||null==t)return!0;if(a){let a=l(t,{data:{arrayPath:r}});return 0===a.length||void 0!==c(a[0],{path:e},r)}return void 0!==d(t,e)}function u(e,t){if(null==e||""===e)return t.defaultValue??"—";switch(t.type){case"STATUS":if(t.statusMap){let r=String(e),a=t.statusMap[r]??t.statusMap[r.toLowerCase()]??t.statusMap[r.toUpperCase()];if(a?.label)return a.label}return String(e);case"PERCENTAGE":return"number"==typeof e?`${Math.round(e)}%`:String(e);case"TIMESTAMP":{let r=t.format?.timestamp?.display;if("datetime"===r||"date"===r||"time"===r){let t=new Date(e);if(!isNaN(t.getTime())){if("date"===r)return t.toLocaleDateString();if("time"===r)return t.toLocaleTimeString();return t.toLocaleString()}}return(0,a.fw)(e)}case"DURATION":{if("number"!=typeof e)return String(e);let r=Math.floor(e*(t.format?.duration?.inputUnit==="seconds"?1e3:t.format?.duration?.inputUnit==="minutes"?6e4:1)/1e3);if(r<60)return`${r}s`;let a=Math.floor(r/60);if(a<60)return`${a}m ${r%60}s`;let n=Math.floor(a/60);return`${n}h ${a%60}m`}case"BOOLEAN":return e?"Yes":"No";case"NUMBER":case"INTEGER":case"DECIMAL":if("number"==typeof e&&t.format?.number?.decimals!==void 0)return e.toFixed(t.format.number.decimals);return e;default:return"object"==typeof e?JSON.stringify(e):e}}function p(e,t){return u(e,t)}},5022(e,t,r){r.d(t,{RB:()=>l,Ue:()=>a,XT:()=>i,bO:()=>o});let a="Task: reportbuilder.",n=e=>`${a}${e}`,l={REPORT_VIEW:n("report.view"),REPORT_ADD:n("report.add"),REPORT_EDIT:n("report.edit"),REPORT_PURGE:n("report.purge"),REPORT_COMPILE:n("report.compile"),REPORT_RUN:n("report.run"),INDICATOR_VIEW:n("indicator.view"),INDICATOR_ADD:n("indicator.add"),INDICATOR_EDIT:n("indicator.edit"),INDICATOR_PURGE:n("indicator.purge"),SECTION_VIEW:n("section.view"),SECTION_ADD:n("section.add"),SECTION_EDIT:n("section.edit"),SECTION_PURGE:n("section.purge"),THEME_VIEW:n("theme.view"),THEME_ADD:n("theme.add"),THEME_EDIT:n("theme.edit"),THEME_PURGE:n("theme.purge"),DASHBOARD_VIEW:n("dashboard.view"),DASHBOARD_ADD:n("dashboard.add"),DASHBOARD_EDIT:n("dashboard.edit"),DASHBOARD_PURGE:n("dashboard.purge"),CATEGORY_VIEW:n("category.view"),CATEGORY_ADD:n("category.add"),CATEGORY_EDIT:n("category.edit"),CATEGORY_PURGE:n("category.purge"),AGEGROUP_VIEW:n("agegroup.view"),AGEGROUP_ADD:n("agegroup.add"),AGEGROUP_EDIT:n("agegroup.edit"),AGEGROUP_PURGE:n("agegroup.purge"),LIBRARY_VIEW:n("library.view"),LIBRARY_ADD:n("library.add"),LIBRARY_EDIT:n("library.edit"),LIBRARY_PURGE:n("library.purge"),ETLSOURCE_VIEW:n("etlsource.view"),ETLSOURCE_ADD:n("etlsource.add"),ETLSOURCE_EDIT:n("etlsource.edit"),ETLSOURCE_PURGE:n("etlsource.purge"),ETLMONITOR_VIEW:n("etlmonitor.view"),ETLMONITOR_ADD:n("etlmonitor.add"),ETLMONITOR_EDIT:n("etlmonitor.edit"),ETLMONITOR_PURGE:n("etlmonitor.purge"),SCHEMA_VIEW:n("schema.view"),SQL_EXECUTE:n("sql.execute"),PACKAGE_IMPORT:n("package.import"),PACKAGE_EXPORT:n("package.export")},i=e=>e.replace(a,""),o={"/":[l.REPORT_VIEW],"/reports":[l.REPORT_VIEW],"/new":[l.REPORT_ADD],"/edit/:reportId":[l.REPORT_EDIT],"/run":[l.REPORT_RUN],"/run-reports":[l.REPORT_RUN],"/indicators":[l.INDICATOR_VIEW],"/sections":[l.SECTION_VIEW],"/dashboards":[l.DASHBOARD_VIEW],"/dashboards/:code":[l.DASHBOARD_VIEW],"/etl-dashboard":[l.DASHBOARD_VIEW],"/linelist":[l.REPORT_VIEW],"/linelist/new":[l.REPORT_ADD],"/linelist/edit/:reportId":[l.REPORT_EDIT],"/linelist/run/:reportId":[l.REPORT_RUN],"/admin":[l.REPORT_VIEW],"/admin/report-categories":[l.CATEGORY_VIEW],"/admin/age-categories":[l.AGEGROUP_VIEW],"/admin/age-groups":[l.AGEGROUP_VIEW],"/admin/report-library":[l.LIBRARY_VIEW],"/admin/themes":[l.THEME_VIEW],"/admin/etl-sources":[l.ETLSOURCE_VIEW],"/admin/etl-tasks":[l.PACKAGE_IMPORT],"/admin/etl-browser":[l.ETLSOURCE_VIEW],"/admin/etl-monitors":[l.ETLMONITOR_VIEW],"/admin/etl-monitors/builder":[l.ETLMONITOR_VIEW],"/admin/dashboards":[l.DASHBOARD_VIEW],"/import-export":[l.PACKAGE_IMPORT,l.PACKAGE_EXPORT]}},2075(e,t,r){r.d(t,{rp:()=>u,CB:()=>c,ah:()=>f,cz:()=>p,jg:()=>y,getLinelistReport:()=>m,U:()=>E,Nj:()=>b,m:()=>s,sY:()=>d,oq:()=>_});var a=r(9669),n=r(300);function l(e){return{type:"SQL",name:e.name,config:{sql:e.config.sql.replace(/':(\w+)'/g,":$1").replace(/":(\w+)"/g,":$1"),...e.config.filterMap&&{filterMap:e.config.filterMap}}}}let i="/reportbuilder/report";function o(e){return{...e,configJson:e.configJson?(0,n.j)(e.configJson):e.configJson,metaJson:e.metaJson?(0,n.j)(e.metaJson):e.metaJson}}function s(e){if(!e.configJson)return null;try{let t=JSON.parse(e.configJson);if(t&&"object"==typeof t&&"LINE_LIST"===t.type)return t}catch(e){console.error("Failed to parse linelist config:",e)}return null}function d(e){if(e.metaJson)try{let t=JSON.parse(e.metaJson);if(t?.parameters&&Array.isArray(t.parameters)&&t.parameters.length>0)return t.parameters}catch(e){console.warn("Failed to parse metaJson parameters:",e)}let t=s(e);return t?.parameters||[]}async function c(e,t){var r;let n=e?.q?.trim(),l=e?.includeRetired===!0,d=e?.v??"default",c=new URLSearchParams;return c.set("v",d),n&&c.set("q",n),l&&c.set("includeRetired","true"),(!(r=await (0,a.wO)(`${i}?${c.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid).map(o).filter(e=>"LINE_LIST"===e.reportType||s(e)?.type==="LINE_LIST")}async function m(e,t,r="full"){return o(await (0,a.wO)(`${i}/${encodeURIComponent(e)}?v=${r}`,t))}async function u(e,t){return o(await (0,a.oV)(i,e,t))}async function p(e,t,r){return o(await (0,a.oV)(`${i}/${encodeURIComponent(e)}`,t,r))}async function _(e,t="Retired from Report Builder",r){let a=new URLSearchParams;return a.set("reason",t),g(`${i}/${encodeURIComponent(e)}?${a.toString()}`,r)}async function g(e,t){let r=await fetch(e,{method:"DELETE",signal:t});if(!r.ok)throw Error(await r.text()||"Failed to delete resource")}async function E(e,t){let r=e.reportDefinitionUuid||e.reportLibraryUuid;if(!r)return{success:!1,error:"Either reportDefinitionUuid or reportLibraryUuid is required"};let a=new URLSearchParams;a.set("uuid",r),a.set("renderType","list"),e.parameters?Object.entries(e.parameters).forEach(([e,t])=>{null!=t&&""!==t&&a.set(e,String(t))}):(e.startDate&&a.set("startDate",e.startDate),e.endDate&&a.set("endDate",e.endDate)),e.maxRows&&a.set("maxRows",String(e.maxRows));let n=await fetch(`/openmrs/ws/rest/v1/reportbuilder/reportingDefinition?${a.toString()}`,{method:"GET",signal:t,headers:{"Content-Type":"application/json"}});return n.ok?{success:!0,data:await n.json()}:{success:!1,error:await n.text()||"Failed to evaluate linelist report"}}async function f(e,t,r){let n={reportUuid:e,category:t};return console.log("compileLinelistReport sending:",n),(0,a.oV)("/reportbuilder/reportcompile",n,r)}function b(e,t,r){var a;let n,i,o={...(n={},(e.dataSources||[]).forEach(e=>{e.columns&&Object.entries(e.columns).forEach(([e,t])=>{n[e]={name:t.name,type:t.type,sourceTable:t.sourceTable}})}),i=(e.dataSetDefinitions||[]).map(t=>{let r=l(e.baseCohortDefinition);return{name:t.name,type:"PATIENT_DATA_SET",rowFilter:r,columns:(t.columns||[]).map(e=>{let t=function(e,t){let r=e.dataDefinition||{},a=r.type,n=r.config||{},l=n.sql||"",i=e._metadata||e._meta||null,o=/^\s*SELECT\s/i.test(l)||/:patientId\b/i.test(l),s=l.match(/`?(\w+)`?\.\s*`?(\w+)`?/);if(o)return{name:e.name,dataDefinition:{type:"SQL",config:{sql:l}},...e.repeatResolution?{repeatResolution:e.repeatResolution}:{},...i?{_metadata:i}:{}};if("CALCULATION"===a){let t,r=n.onDate;return t=!0===r||void 0===r||""===r?":startDate":"string"==typeof r?r.startsWith(":")?r:r.replace("${startDate}",":startDate").replace(/\$\{endDate\}/g,":endDate"):":startDate",{name:e.name,dataDefinition:{type:"CALCULATION",config:{...n,onDate:t}},...i?{_metadata:i}:{}}}if("IDENTIFIER"===a)return{name:e.name,dataDefinition:{type:"IDENTIFIER",config:{...n,preferred:!0}},...e.repeatResolution?{repeatResolution:e.repeatResolution}:{},...i?{_metadata:i}:{}};if("PERSON_ATTRIBUTE"===a||"PERSON_NAME"===a)return{name:e.name,dataDefinition:{type:a,config:n},...e.repeatResolution?{repeatResolution:e.repeatResolution}:{},...i?{_metadata:i}:{}};if("SQL"===a&&s){let[,r,a]=s,n=function(e,t,r,a){let n=r.toLowerCase();if("person"===t){if(n.includes("name")||n.includes("full_name"))return{name:e,dataDefinition:{type:"PERSON_NAME",config:{type:"FULL_NAME",preferred:!0}}};if("gender"===n||"sex"===n)return{name:e,dataDefinition:{type:"PERSON_ATTRIBUTE",config:{type:"GENDER"}}};if(n.includes("birthdate")||n.includes("birth_date"))return{name:e,dataDefinition:{type:"PERSON_ATTRIBUTE",config:{type:"BIRTHDATE"}},converter:{type:"BIRTHDATE_AGE",config:{format:"MMM dd,yyyy"}}};if(n.includes("death"))return{name:e,dataDefinition:{type:"PERSON_ATTRIBUTE",config:{type:"DEATH_DATE"}}}}if("person_address"===t)return{name:e,dataDefinition:{type:"PERSON_ADDRESS",config:{type:"ADDRESS_FIELD",field:({address1:"address1",address2:"address2",address3:"address3",address4:"address4",address5:"address5",city_village:"address5",state_province:"stateProvince",country:"country",postal_code:"postalCode",county_district:"countyDistrict",latitude:"latitude",longitude:"longitude"})[n]||r}}};if(t.startsWith("mamba_")||t.startsWith("etl_")){let l=a?.[e],i=l?.type==="DATE"||n.includes("date"),o=`SELECT e.${r} FROM ${t} e WHERE e.patient_id = :patientId`;if(/encounter|obs|visit|appointment/i.test(t)&&(o+=" AND e.voided = 0"),i){let e=n.includes("return_visit")?"return_visit_date":r;o+=` AND e.${e} BETWEEN :startDate AND :endDate ORDER BY e.${e} DESC LIMIT 1`}else o+=" LIMIT 1";return{name:e,dataDefinition:{type:"SQL",config:{sql:o}}}}return{name:e,dataDefinition:{type:"SQL",config:{sql:`\`${t}\`.\`${r}\``}}}}(e.name,r,a,t);if(n)return{...n,...e.repeatResolution?{repeatResolution:e.repeatResolution}:{},...i?{_metadata:i}:{}}}return{name:e.name,dataDefinition:{type:a||"SQL",config:n},...e.repeatResolution?{repeatResolution:e.repeatResolution}:{},...i?{_metadata:i}:{}}}(e,n);return{...t,key:t.key||t.name.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")}})}}),{name:t.name,description:t.description,parameters:(a=e.parameters)&&0!==a.length?a.map(e=>({name:e.name,label:e.label,type:e.type,required:e.required??!1})):[{name:"startDate",label:"Start Date",type:"DATE",required:!0},{name:"endDate",label:"End Date",type:"DATE",required:!0}],baseCohortDefinition:l(e.baseCohortDefinition),dataSetDefinitions:i,category:t.categoryUuid||"FACILITY_REPORTS",reportType:"LINELIST",...e.limit?{limit:e.limit}:{}}),_builder:{dataSources:e.dataSources,populationSources:r?.populationSources,rowGrain:e.rowGrain,templateId:e.templateId,buildMethod:r?.buildMethod||e.buildMethod,indicatorRules:r?.indicatorRules||e.indicatorRules,categoryUuid:e.categoryUuid,visualFilter:r?.visualFilter,filterMap:r?.filterMap}};return{name:t.name,description:t.description,code:t.code,reportType:"LINE_LIST",configJson:JSON.stringify(o),metaJson:r?JSON.stringify(r):void 0}}async function y(e,t){let{reportUuid:r,config:a,parameters:n={},maxRows:l=100,cachedReportDefinitionUuid:i}=e;try{let e,o=i;if(!o){let e=await f(r,a.categoryUuid,t);if(!e.compiled||!e.reportDefinitionUuid)return{success:!1,error:"Failed to compile report for preview"};o=e.reportDefinitionUuid}let s=a.parameters||[],d={};for(let e of s)e.defaultValue&&(d[e.name]=e.defaultValue),n&&void 0!==n[e.name]&&(d[e.name]=n[e.name]);0===s.length&&(d.startDate=n.startDate||((e=new Date).setDate(e.getDate()-30),e.toISOString().split("T")[0]),d.endDate=n.endDate||new Date().toISOString().split("T")[0]);let c={reportDefinitionUuid:o,parameters:d,maxRows:l},m=await E(c,t);if(!m.success)return{success:!1,error:m.error||"Failed to evaluate report for preview"};let u=m.data,p=u?Object.values(u)[0]:null,_=u?._html?u._html[0]?.html:null;if(!p||!Array.isArray(p)||0===p.length)return{success:!0,data:{columns:[],rows:[],rowCount:0,html:_}};let g=Object.keys(p[0]);return{success:!0,data:{columns:g,rows:p,rowCount:p.length,html:_}}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Preview failed"}}}},9669(e,t,r){r.d(t,{hI:()=>s,oV:()=>o,wO:()=>i});var a=r(3633),n=r(1672);async function l(e){try{return await e()}catch(e){throw(0,n._R)(e)}}async function i(e,t){return l(async()=>{let r=`${a.restBaseUrl}${e.startsWith("/")?e:`/${e}`}`;return(await (0,a.openmrsFetch)(r,{signal:t})).data})}async function o(e,t,r){return l(async()=>{let n=`${a.restBaseUrl}${e.startsWith("/")?e:`/${e}`}`;return(await (0,a.openmrsFetch)(n,{method:"POST",headers:{"Content-Type":"application/json"},body:t,signal:r})).data})}async function s(e,t){return l(async()=>{let r=`${a.restBaseUrl}${e.startsWith("/")?e:`/${e}`}`;return(await (0,a.openmrsFetch)(r,{method:"DELETE",signal:t})).data})}},8803(e,t,r){r.r(t),r.d(t,{default:()=>dh});var a=r(4587),n=r.n(a),l=r(4976),i=r(7767),o=r(8574),s=r(9249),d=r(9564),c=r(1397),m=r(1660),u=r(4499),p=r(4535),_=r(3335),g=r(3270),E=r(9610),f=r(3989),b=r(2137),y=r(5022),h=r(3633);function v(){let e=(0,h.useSession)(),t=e?.user,r=(0,a.useMemo)(()=>{let e=new Set;for(let r of t?.privileges??[])e.add(r.name),e.add(r.display);return e},[t]),n=(0,a.useMemo)(()=>!!t?.roles?.some(e=>"System Developer"===e.display),[t]),l=(0,a.useCallback)((...e)=>0===e.length||n||e.some(e=>r.has(e)),[r,n]);return{has:l,hasAll:(0,a.useCallback)((...e)=>0===e.length||n||e.every(e=>r.has(e)),[r,n]),isSuperUser:n,isAuthenticated:!!e?.authenticated,canAuthor:l(y.RB.REPORT_ADD,y.RB.REPORT_EDIT),canRun:l(y.RB.REPORT_RUN),canPublish:l(y.RB.PACKAGE_IMPORT,y.RB.PACKAGE_EXPORT),canManageEtl:l(y.RB.ETLSOURCE_ADD,y.RB.ETLSOURCE_EDIT,y.RB.ETLMONITOR_ADD,y.RB.ETLMONITOR_EDIT)}}let S="-esm-report-builder__report-builder-shell__shell___e5zQZ",T="-esm-report-builder__report-builder-shell__leftNav___Q9bGN",C="-esm-report-builder__report-builder-shell__main___p4fac",w=[{items:[{label:"Home",path:"/",icon:s.ww,required:[y.RB.REPORT_VIEW]},{label:"Run Reports",path:"/run",icon:d.jG,required:[y.RB.REPORT_RUN]},{label:"Dashboards",path:"/dashboards",icon:c.xh,required:[y.RB.DASHBOARD_VIEW]}]},{title:"Report Design",icon:m.vd,items:[{label:"Aggregate Reports",path:"/reports",icon:u.pl,required:[y.RB.REPORT_VIEW],activePaths:["/new","/edit"]},{label:"Linelist Reports",path:"/linelist",icon:p.B8,required:[y.RB.REPORT_VIEW]},{label:"Indicators",path:"/indicators",icon:_.n5,required:[y.RB.INDICATOR_VIEW]},{label:"Sections",path:"/sections",icon:p.zg,required:[y.RB.SECTION_VIEW]}]},{title:"Admin",icon:g.wB,activePaths:["/admin"],items:[{label:"Import / Export",path:"/import-export",icon:E.Qp,required:[y.RB.PACKAGE_IMPORT,y.RB.PACKAGE_EXPORT]},{label:"Dashboards",path:"/admin/dashboards",required:[y.RB.DASHBOARD_VIEW]},{label:"Report Categories",path:"/admin/report-categories",required:[y.RB.CATEGORY_VIEW]},{label:"Report Library",path:"/admin/report-library",required:[y.RB.LIBRARY_VIEW]},{label:"Data Themes",path:"/admin/themes",required:[y.RB.THEME_VIEW]},{label:"Age Categories",path:"/admin/age-categories",required:[y.RB.AGEGROUP_VIEW]},{label:"Age Groups",path:"/admin/age-groups",required:[y.RB.AGEGROUP_VIEW]}]},{title:"ETL",icon:c.EN,items:[{label:"Sources",path:"/admin/etl-sources",icon:c.EN,required:[y.RB.ETLSOURCE_VIEW]},{label:"Tasks",path:"/admin/etl-tasks",icon:f.YZ,required:[y.RB.PACKAGE_IMPORT]},{label:"Data Browser",path:"/admin/etl-browser",icon:f.vx,required:[y.RB.ETLSOURCE_VIEW]},{label:"Monitoring",path:"/admin/etl-monitors",icon:b.Il,required:[y.RB.ETLMONITOR_VIEW]}]}],N=()=>n().createElement("div",{className:S},n().createElement("aside",{className:T}),n().createElement("main",{className:C},n().createElement(o.OuH,{description:"Loading…"}))),I=()=>{let e=(0,i.Zp)(),t=(0,i.zy)(),{has:r}=v(),a=(e,r)=>t.pathname===e||t.pathname.startsWith(`${e}/`)||(r??[]).some(e=>t.pathname===e||t.pathname.startsWith(`${e}/`)),l=n().useMemo(()=>w.map(e=>({...e,items:e.items.filter(e=>r(...e.required))})).filter(e=>e.items.length>0),[r]);return n().createElement("div",{className:S},n().createElement("aside",{className:T},n().createElement(o.f8J,{expanded:!0,isPersistent:!1,"aria-label":"Report Builder navigation"},n().createElement(o.BC4,null,0===l.length&&n().createElement(o.ldn,null,"No accessible sections — contact your administrator"),l.map(t=>t.title?n().createElement(o.whj,{key:t.title,renderIcon:t.icon,title:t.title,isActive:t.items.some(e=>a(e.path,e.activePaths))||(t.activePaths??[]).some(e=>a(e)),defaultExpanded:!1},t.items.map(t=>n().createElement(o.ldn,{key:t.path,renderIcon:t.icon,isActive:a(t.path,t.activePaths),onClick:()=>e(t.path)},t.label))):t.items.map(t=>n().createElement(o.VxE,{key:t.path,renderIcon:t.icon,isActive:a(t.path,t.activePaths),onClick:()=>e(t.path)},t.label)))))),n().createElement("main",{className:C},n().createElement(i.sv,null)))},k=()=>n().createElement(a.Suspense,{fallback:n().createElement(N,null)},n().createElement(I,null));var A=r(587);let R="-esm-report-builder__report-builder-landing-page__card___pW8QE",O="-esm-report-builder__report-builder-landing-page__cardIllustration___uvcVt",D="-esm-report-builder__report-builder-landing-page__illCircle___e6GFs",x="-esm-report-builder__report-builder-landing-page__cardTitle___PNSRg",L="-esm-report-builder__report-builder-landing-page__cardBody___+Lg5s",M="-esm-report-builder__report-builder-landing-page__cardActions___PGmJw",$="-esm-report-builder__report-builder-landing-page__cardButton___2JTf-";var P=r(2383),U=r(9184);let B=()=>n().createElement("svg",{height:"64",width:"64",viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg",xmlSpace:"preserve",fillRule:"evenodd",clipRule:"evenodd",strokeLinejoin:"round",strokeMiterlimit:"2"},n().createElement("path",{d:"M27 31.36H8a.36.36 0 0 1-.36-.36v-1.64H6a.36.36 0 0 1-.36-.36v-1.64H5a.36.36 0 0 1-.36-.36V3A.36.36 0 0 1 5 2.64h4.64V2a.36.36 0 0 1 .36-.36h1.64V1A.36.36 0 0 1 12 .64h4a.36.36 0 0 1 .36.36v.64H18a.36.36 0 0 1 .36.36v.64H23a.36.36 0 0 1 .36.36v1.64H25a.36.36 0 0 1 .36.36v1.64H27a.36.36 0 0 1 .36.36v24a.36.36 0 0 1-.36.36Z",fill:"#d2e5e5"}),n().createElement("path",{d:"M8.36 30.64h18.28V7.36h-1.28V29a.36.36 0 0 1-.36.36H8.36v1.28Z",fill:"#8abab8"}),n().createElement("path",{d:"M5.36 26.64h17.28V3.36h-4.28V4a.36.36 0 0 1-.36.36h-8A.36.36 0 0 1 9.64 4v-.64H5.36v23.28Z",fill:"#8abab8"}),n().createElement("path",{fill:"#fff",d:"M7.5 12.64h13v.72h-13zM7.5 8.64h13v.72h-13zM7.5 20.64h13v.72h-13zM7.5 16.64h13v.72h-13z"}),n().createElement("path",{d:"M10.36 3.64h7.28V2.36H16a.36.36 0 0 1-.36-.36v-.64h-3.28V2a.36.36 0 0 1-.36.36h-1.64v1.28ZM6.36 28.64h18.28V5.36h-1.28V27a.36.36 0 0 1-.36.36H6.36v1.28Z",fill:"#8abab8"})),F="-esm-report-builder__header__metaItem___NGbY6",z="-esm-report-builder__header__metaDot___l+Lag",q="-esm-report-builder__header__value___h5VzH";async function j(e,t,r=!0){return await new Promise(e=>setTimeout(e,500)),{title:"AI Assist (Preview)",body:`Coming soon ✅
|
|
1
|
+
"use strict";(globalThis.webpackChunk_openmrs_esm_report_builder=globalThis.webpackChunk_openmrs_esm_report_builder||[]).push([["128"],{8159(e,t,r){r.d(t,{Kk:()=>d,Km:()=>o,X0:()=>s,fz:()=>m,lp:()=>c,stateToSavePayload:()=>u,yn:()=>p,zK:()=>i});var a=r(3155),n=r(6149);let l=["TABLE","DATA_TABLE","ERROR_LOG","LOG","TIME_SERIES"];function i(e){let t=[];return e.name&&""!==e.name.trim()||t.push("Name is required"),e.code&&""!==e.code.trim()?/^[a-z0-9-]+$/.test(e.code)||t.push("Code must contain only lowercase letters, numbers, and hyphens"):t.push("Code is required"),(e.refreshInterval<5||e.refreshInterval>3600)&&t.push("Refresh interval must be between 5 and 3600 seconds"),(e.timeout<1||e.timeout>300)&&t.push("Timeout must be between 1 and 300 seconds"),{valid:0===t.length,errors:t}}function o(e,t,r=!1){let a=[];return e.url&&""!==e.url.trim()?e.url.startsWith("/")||a.push("URL must be a relative path starting with /"):a.push("API URL is required"),t?t.success||a.push("Endpoint test failed: "+(t.error||"Unknown error")):r||a.push("Endpoint must be tested before proceeding"),{valid:0===a.length,errors:a}}function s(e){let t=[];return e||t.push("Please select a component type"),{valid:0===t.length,errors:t}}function d(e,t,r,a){let i=[];if(!e||0===e.length)return i.push("At least one field must be configured"),{valid:!1,errors:i};for(let r of("STATUS_CARD"===t&&(e.some(e=>e.primary)||i.push("Status Card requires a primary field"),e.some(e=>"STATUS"===e.type)||i.push("Status Card requires at least one STATUS field")),"PROGRESS"===t&&(e.some(e=>"PERCENTAGE"===e.type)||i.push("Progress component requires a PERCENTAGE field")),e))r.path&&""!==r.path.trim()||i.push(`Field "${r.label}" is missing a path`);let o=[];if(null!=r){let i=l.includes(t);for(let t of e)t.path&&""!==t.path.trim()&&((0,n.G2)(t.path,r,a,i)||o.push(`Field "${t.label}" path "${t.path}" doesn't match the tested response`+(i?" — use a row-relative path like $.fieldName":"")))}return{valid:0===i.length,errors:i,warnings:o.length>0?o:void 0}}function c(e){let t=[];try{let r=m(e);r.schemaVersion&&2===r.schemaVersion||t.push("Invalid schema version"),r.component||t.push("Component type is missing"),r.fields&&0!==r.fields.length||t.push("No fields configured")}catch(e){t.push("Failed to generate configuration: "+(e instanceof Error?e.message:"Unknown error"))}return{valid:0===t.length,errors:t}}function m(e){let t={schemaVersion:2,component:e.componentType||"SUMMARY_CARD",data:{rootPath:"$"},fields:e.fields.map(e=>({key:e.key,label:e.label,path:e.path,type:e.type,primary:e.primary,description:e.description,defaultValue:e.defaultValue,statusMap:e.statusMappings?.reduce((e,t)=>(e[t.rawValue]={label:t.label,tone:t.tone},e),{}),format:e.format,hidden:e.hidden,order:e.order}))};return e.layout?t.layout={...e.layout,section:e.layout.section}:t.layout=(0,a.kK)(e.componentType||"SUMMARY_CARD"),e.emptyState?t.emptyState=e.emptyState:t.emptyState=(0,a.Qc)(e.componentType||"SUMMARY_CARD"),t.presentation={...t.presentation,title:t.presentation?.title||e.general.name||void 0,description:t.presentation?.description||e.general.description||void 0,density:e.density||"compact"},e.componentConfig&&(t.componentConfig={},e.componentConfig.statusFieldKey&&(t.componentConfig.statusFieldKey=e.componentConfig.statusFieldKey),e.componentConfig.icon&&(t.componentConfig.icon=e.componentConfig.icon),void 0!==e.componentConfig.progressMin&&(t.componentConfig.progressMin=e.componentConfig.progressMin),void 0!==e.componentConfig.progressMax&&(t.componentConfig.progressMax=e.componentConfig.progressMax),void 0!==e.componentConfig.labelsAbove&&(t.componentConfig.labelsAbove=e.componentConfig.labelsAbove),void 0!==e.componentConfig.selectable&&(t.componentConfig.selectable=e.componentConfig.selectable),void 0!==e.componentConfig.maxRows&&(t.componentConfig.maxRows=e.componentConfig.maxRows),e.componentConfig.groups&&(t.componentConfig.groups=e.componentConfig.groups)),e.detectedSchema?.arrayPath&&(t.data.arrayPath=e.detectedSchema.arrayPath),t}function u(e){let t=m(e);return{name:e.general.name.trim(),code:e.general.code.trim()||void 0,description:e.general.description.trim()||void 0,monitorType:e.componentType,category:e.general.category.trim()||void 0,refreshInterval:e.general.refreshInterval,timeout:e.general.timeout,active:e.general.active,configJson:JSON.stringify({apiEndpoint:{url:e.endpoint.url,method:e.endpoint.method,auth:{type:e.endpoint.auth.type,useSession:e.endpoint.auth.useSession,username:e.endpoint.auth.username,password:e.endpoint.auth.password,headerName:e.endpoint.auth.headerName,apiKey:e.endpoint.auth.apiKey,token:e.endpoint.auth.token}}}),displayConfigJson:JSON.stringify(t)}}function p(e){let t=[];return t.push(...i(e.general).errors),t.push(...o(e.endpoint,e.testResult,"edit"===e.mode).errors),t.push(...s(e.componentType).errors),t.push(...d(e.fields,e.componentType).errors),t}},6434(e,t,r){r.d(t,{MonitorRenderer:()=>I});var a=r(4587),n=r.n(a),l=r(3270),i=r(5576),o=r(9249);let s={"monitor-status-card":"-esm-report-builder__monitor-renderers__monitor-status-card___53ZgD","monitor-summary-card":"-esm-report-builder__monitor-renderers__monitor-summary-card___bYr-T","monitor-progress":"-esm-report-builder__monitor-renderers__monitor-progress___ojKib","monitor-table":"-esm-report-builder__monitor-renderers__monitor-table___uVBoJ","monitor-metrics-grid":"-esm-report-builder__monitor-renderers__monitor-metrics-grid___ixITI","monitor-error-log":"-esm-report-builder__monitor-renderers__monitor-error-log___Hi5A2","monitor-details":"-esm-report-builder__monitor-renderers__monitor-details___+T7FM","monitor-status-card__header":"-esm-report-builder__monitor-renderers__monitor-status-card__header___MOp22","monitor-summary-card__header":"-esm-report-builder__monitor-renderers__monitor-summary-card__header___7XHBW","monitor-progress__header":"-esm-report-builder__monitor-renderers__monitor-progress__header___TvakY","monitor-table__header":"-esm-report-builder__monitor-renderers__monitor-table__header___qrnoy","monitor-metrics-grid__header":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__header___NWyjG","monitor-error-log__header":"-esm-report-builder__monitor-renderers__monitor-error-log__header___Xcrqx","monitor-details__header":"-esm-report-builder__monitor-renderers__monitor-details__header___x77eQ","monitor-status-card__title":"-esm-report-builder__monitor-renderers__monitor-status-card__title___tIMTA","monitor-summary-card__title":"-esm-report-builder__monitor-renderers__monitor-summary-card__title___SCQaa","monitor-progress__title":"-esm-report-builder__monitor-renderers__monitor-progress__title___RJpJi","monitor-table__title":"-esm-report-builder__monitor-renderers__monitor-table__title___reI88","monitor-metrics-grid__title":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__title___baUv3","monitor-error-log__title":"-esm-report-builder__monitor-renderers__monitor-error-log__title___vLloc","monitor-details__title":"-esm-report-builder__monitor-renderers__monitor-details__title___sDrpT","monitor-status-card__subtitle":"-esm-report-builder__monitor-renderers__monitor-status-card__subtitle___DWp5P","monitor-status-card__body":"-esm-report-builder__monitor-renderers__monitor-status-card__body___GjQgq","monitor-summary-card__body":"-esm-report-builder__monitor-renderers__monitor-summary-card__body___TQK1e","monitor-progress__body":"-esm-report-builder__monitor-renderers__monitor-progress__body___RbfN5","monitor-table__body":"-esm-report-builder__monitor-renderers__monitor-table__body___G-kPJ","monitor-metrics-grid__body":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__body___VCTsK","monitor-error-log__body":"-esm-report-builder__monitor-renderers__monitor-error-log__body___6Q0jW","monitor-details__body":"-esm-report-builder__monitor-renderers__monitor-details__body___bzGMB","monitor-status":"-esm-report-builder__monitor-renderers__monitor-status___R2IHW","monitor-status__indicator":"-esm-report-builder__monitor-renderers__monitor-status__indicator___M1vlf","monitor-status__dot":"-esm-report-builder__monitor-renderers__monitor-status__dot___G4fNJ","monitor-status__icon":"-esm-report-builder__monitor-renderers__monitor-status__icon___byuOm","monitor-status__content":"-esm-report-builder__monitor-renderers__monitor-status__content___Iod5T","monitor-status__label":"-esm-report-builder__monitor-renderers__monitor-status__label___2O9f2","monitor-status__description":"-esm-report-builder__monitor-renderers__monitor-status__description___SV-3T","monitor-status--success":"-esm-report-builder__monitor-renderers__monitor-status--success___g-g5a","monitor-status--critical":"-esm-report-builder__monitor-renderers__monitor-status--critical___F7yMK","monitor-status--warning":"-esm-report-builder__monitor-renderers__monitor-status--warning___eNvwA","monitor-status--info":"-esm-report-builder__monitor-renderers__monitor-status--info___Wg054","monitor-status--neutral":"-esm-report-builder__monitor-renderers__monitor-status--neutral___DF38z","monitor-status-card__fields":"-esm-report-builder__monitor-renderers__monitor-status-card__fields___iSCds","monitor-status-card__field":"-esm-report-builder__monitor-renderers__monitor-status-card__field___IyAp6","monitor-status-card__field-label":"-esm-report-builder__monitor-renderers__monitor-status-card__field-label___oA49U","monitor-status-card__field-value":"-esm-report-builder__monitor-renderers__monitor-status-card__field-value___gy1N3","monitor-status-card__timestamp":"-esm-report-builder__monitor-renderers__monitor-status-card__timestamp___F82l1","monitor-summary-card__metrics":"-esm-report-builder__monitor-renderers__monitor-summary-card__metrics___EoUz-","monitor-summary-card__metric":"-esm-report-builder__monitor-renderers__monitor-summary-card__metric___fNXNo","monitor-summary-card__metric-label":"-esm-report-builder__monitor-renderers__monitor-summary-card__metric-label___K9CaT","monitor-summary-card__metric-value":"-esm-report-builder__monitor-renderers__monitor-summary-card__metric-value___feOSl","monitor-progress__bar-container":"-esm-report-builder__monitor-renderers__monitor-progress__bar-container___83GH6","monitor-progress__bar":"-esm-report-builder__monitor-renderers__monitor-progress__bar___r0FNi","monitor-progress__info":"-esm-report-builder__monitor-renderers__monitor-progress__info___pIX5c","monitor-progress__percentage":"-esm-report-builder__monitor-renderers__monitor-progress__percentage___lDASu","monitor-progress__stage":"-esm-report-builder__monitor-renderers__monitor-progress__stage___Z7k-s","monitor-progress__idle":"-esm-report-builder__monitor-renderers__monitor-progress__idle___VFeyJ","monitor-progress__idle-text":"-esm-report-builder__monitor-renderers__monitor-progress__idle-text___CaF+R","monitor-progress__fields":"-esm-report-builder__monitor-renderers__monitor-progress__fields___vdqQa","monitor-progress__field":"-esm-report-builder__monitor-renderers__monitor-progress__field___VJPIc","monitor-progress__field-label":"-esm-report-builder__monitor-renderers__monitor-progress__field-label___CGY7g","monitor-progress__field-value":"-esm-report-builder__monitor-renderers__monitor-progress__field-value___yAXtg","monitor-table__empty":"-esm-report-builder__monitor-renderers__monitor-table__empty___ZZ62i","monitor-table__element":"-esm-report-builder__monitor-renderers__monitor-table__element___UI+IE","monitor-table__th--sorted":"-esm-report-builder__monitor-renderers__monitor-table__th--sorted___KDlF3","monitor-table__th-content":"-esm-report-builder__monitor-renderers__monitor-table__th-content___ApR-b","monitor-table__sort-icon":"-esm-report-builder__monitor-renderers__monitor-table__sort-icon___QfgMN","monitor-metrics-grid__items":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__items___4dh+y","monitor-metrics-grid__item":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__item___PzZAI","monitor-metrics-grid__item-label":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__item-label___6lRZq","monitor-metrics-grid__item-value":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__item-value___xnlpI","monitor-error-log__count":"-esm-report-builder__monitor-renderers__monitor-error-log__count___+q3KJ","monitor-error-log__empty":"-esm-report-builder__monitor-renderers__monitor-error-log__empty___atadP","monitor-error-log__items":"-esm-report-builder__monitor-renderers__monitor-error-log__items___v+Rdo","monitor-error-log__item":"-esm-report-builder__monitor-renderers__monitor-error-log__item___Y3lkH","monitor-error-log__item-indicator":"-esm-report-builder__monitor-renderers__monitor-error-log__item-indicator___rWMbY","monitor-error-log__item--critical":"-esm-report-builder__monitor-renderers__monitor-error-log__item--critical___KauTB","monitor-error-log__item--warning":"-esm-report-builder__monitor-renderers__monitor-error-log__item--warning___VRV7K","monitor-error-log__item--info":"-esm-report-builder__monitor-renderers__monitor-error-log__item--info___fXGXR","monitor-error-log__item--neutral":"-esm-report-builder__monitor-renderers__monitor-error-log__item--neutral___PyH9F","monitor-error-log__item-content":"-esm-report-builder__monitor-renderers__monitor-error-log__item-content___Gju1C","monitor-error-log__item-field":"-esm-report-builder__monitor-renderers__monitor-error-log__item-field___v58uY","monitor-error-log__item-field-label":"-esm-report-builder__monitor-renderers__monitor-error-log__item-field-label___mLp+c","monitor-error-log__item-field-value":"-esm-report-builder__monitor-renderers__monitor-error-log__item-field-value___20O6O","monitor-details__group":"-esm-report-builder__monitor-renderers__monitor-details__group___uamQH","monitor-details__group-title":"-esm-report-builder__monitor-renderers__monitor-details__group-title___qqEmA","monitor-details__items":"-esm-report-builder__monitor-renderers__monitor-details__items___xcRHN","monitor-details__item":"-esm-report-builder__monitor-renderers__monitor-details__item___5Jmo5","monitor-details__item-label":"-esm-report-builder__monitor-renderers__monitor-details__item-label___e4lbH","monitor-details__item-value":"-esm-report-builder__monitor-renderers__monitor-details__item-value___YMqEn","monitor-empty-state":"-esm-report-builder__monitor-renderers__monitor-empty-state___VffXz","monitor-loading-state":"-esm-report-builder__monitor-renderers__monitor-loading-state___-hfT6","monitor-error-state":"-esm-report-builder__monitor-renderers__monitor-error-state___ng3ms","monitor-empty-state__icon":"-esm-report-builder__monitor-renderers__monitor-empty-state__icon___z6Bbi","monitor-error-state__icon":"-esm-report-builder__monitor-renderers__monitor-error-state__icon___d9CkF","monitor-empty-state__title":"-esm-report-builder__monitor-renderers__monitor-empty-state__title___FV3qO","monitor-error-state__title":"-esm-report-builder__monitor-renderers__monitor-error-state__title___5C4uJ","monitor-empty-state__description":"-esm-report-builder__monitor-renderers__monitor-empty-state__description___cCfhh","monitor-error-state__description":"-esm-report-builder__monitor-renderers__monitor-error-state__description___fjWAs","monitor-loading-state__text":"-esm-report-builder__monitor-renderers__monitor-loading-state__text___63Cvg","monitor-loading-state__spinner":"-esm-report-builder__monitor-renderers__monitor-loading-state__spinner___o0u93",spin:"-esm-report-builder__monitor-renderers__spin___6V+Kf","monitor-fallback":"-esm-report-builder__monitor-renderers__monitor-fallback___N+WVD","monitor-fallback__header":"-esm-report-builder__monitor-renderers__monitor-fallback__header___60h+Q","monitor-fallback__content":"-esm-report-builder__monitor-renderers__monitor-fallback__content___BKRtZ","monitor-fallback__note":"-esm-report-builder__monitor-renderers__monitor-fallback__note___ST95l","monitor-fallback__data":"-esm-report-builder__monitor-renderers__monitor-fallback__data___xNiCH","monitor-preview-wrapper":"-esm-report-builder__monitor-renderers__monitor-preview-wrapper___7AVP6","status-card-premium":"-esm-report-builder__monitor-renderers__status-card-premium___+ptx1","status-card-premium--success":"-esm-report-builder__monitor-renderers__status-card-premium--success___BvfgP","status-card-premium--critical":"-esm-report-builder__monitor-renderers__status-card-premium--critical___uEnLK","status-card-premium--warning":"-esm-report-builder__monitor-renderers__status-card-premium--warning___nYQj0","status-card-premium--info":"-esm-report-builder__monitor-renderers__status-card-premium--info___XfCK9","status-card-premium--neutral":"-esm-report-builder__monitor-renderers__status-card-premium--neutral___qGUtm","status-card-premium__header":"-esm-report-builder__monitor-renderers__status-card-premium__header___qYNYk","status-card-premium__icon-tile":"-esm-report-builder__monitor-renderers__status-card-premium__icon-tile___0vJ4u","status-card-premium__title":"-esm-report-builder__monitor-renderers__status-card-premium__title___hh4ls","status-card-premium__body":"-esm-report-builder__monitor-renderers__status-card-premium__body___+z+m0","status-card-premium__status-row":"-esm-report-builder__monitor-renderers__status-card-premium__status-row___kv1Rq","status-card-premium__status-value":"-esm-report-builder__monitor-renderers__status-card-premium__status-value___3N3NC","status-card-premium__dot":"-esm-report-builder__monitor-renderers__status-card-premium__dot___n0Kb6","status-card-premium__description":"-esm-report-builder__monitor-renderers__status-card-premium__description___B1i4M","status-card-premium__footer":"-esm-report-builder__monitor-renderers__status-card-premium__footer___M4oPf","status-card-premium__meta":"-esm-report-builder__monitor-renderers__status-card-premium__meta___8pUhF","status-card-premium__meta-label":"-esm-report-builder__monitor-renderers__status-card-premium__meta-label___R8ByV","status-card-premium__meta-value":"-esm-report-builder__monitor-renderers__status-card-premium__meta-value___15CB2","monitor-empty-state__icon--success":"-esm-report-builder__monitor-renderers__monitor-empty-state__icon--success___5KcuA","monitor-empty-state__icon--critical":"-esm-report-builder__monitor-renderers__monitor-empty-state__icon--critical___OSlbC","monitor-empty-state__icon--warning":"-esm-report-builder__monitor-renderers__monitor-empty-state__icon--warning___1xwS-","monitor-empty-state__icon--info":"-esm-report-builder__monitor-renderers__monitor-empty-state__icon--info___ENXZ2","metrics-grid-renderer__head":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__head___ijGOW","metrics-grid-renderer__head-icon":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__head-icon___ngXof","metrics-grid-renderer__head-text":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__head-text___b7d8q","metrics-grid-renderer__head-title":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__head-title___MBb55","metrics-grid-renderer__head-sub":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__head-sub___bKUtC","metrics-grid-renderer__grid":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__grid___DHca-","metrics-grid-renderer__grid--hero":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__grid--hero___CFIpK","metrics-grid-renderer__tile":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__tile___X8ljG","metrics-grid-renderer__tile-icon":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__tile-icon___473n7","metrics-grid-renderer__tile-body":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__tile-body___ApVH-","metrics-grid-renderer__tile-label":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__tile-label___Osxif","metrics-grid-renderer__tile-value":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__tile-value___Zcbri","metrics-grid-renderer__tile-sub":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__tile-sub___--zbj","metrics-grid-renderer__footer":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__footer___ONGp2","table-renderer__progress":"-esm-report-builder__monitor-renderers__table-renderer__progress___+nuJF","table-renderer__progress-label":"-esm-report-builder__monitor-renderers__table-renderer__progress-label___xpDxM","table-renderer__progress-track":"-esm-report-builder__monitor-renderers__table-renderer__progress-track___hQLHC","table-renderer__progress-fill":"-esm-report-builder__monitor-renderers__table-renderer__progress-fill___Ld3cq","table-renderer__footer":"-esm-report-builder__monitor-renderers__table-renderer__footer___cIaIO","table-renderer__footer-count":"-esm-report-builder__monitor-renderers__table-renderer__footer-count___tLj0p","table-renderer__footer-link":"-esm-report-builder__monitor-renderers__table-renderer__footer-link___T94G1","details-renderer__timestamp":"-esm-report-builder__monitor-renderers__details-renderer__timestamp___9TuXm","details-renderer__timestamp-sub":"-esm-report-builder__monitor-renderers__details-renderer__timestamp-sub___J+v0-","cds--tag":"-esm-report-builder__monitor-renderers__cds--tag___KV49d","log-renderer__title":"-esm-report-builder__monitor-renderers__log-renderer__title___XuaX8","log-renderer__empty":"-esm-report-builder__monitor-renderers__log-renderer__empty___QMzSW","log-renderer__timeline":"-esm-report-builder__monitor-renderers__log-renderer__timeline___nXwUr","log-renderer__entry":"-esm-report-builder__monitor-renderers__log-renderer__entry___8q9DO","log-renderer__time":"-esm-report-builder__monitor-renderers__log-renderer__time___1hgMZ","log-renderer__message":"-esm-report-builder__monitor-renderers__log-renderer__message___goTWm","status-card-premium__pill":"-esm-report-builder__monitor-renderers__status-card-premium__pill___PJaRc","time-series-renderer":"-esm-report-builder__monitor-renderers__time-series-renderer___1mNjT","time-series-renderer__head":"-esm-report-builder__monitor-renderers__time-series-renderer__head___w-ZlI","time-series-renderer__icon":"-esm-report-builder__monitor-renderers__time-series-renderer__icon___SYplh","time-series-renderer__head-text":"-esm-report-builder__monitor-renderers__time-series-renderer__head-text___FlaUH","time-series-renderer__label":"-esm-report-builder__monitor-renderers__time-series-renderer__label___NYBSD","time-series-renderer__value":"-esm-report-builder__monitor-renderers__time-series-renderer__value___AkDwZ","time-series-renderer__head-delta":"-esm-report-builder__monitor-renderers__time-series-renderer__head-delta___CN98m","time-series-renderer__delta":"-esm-report-builder__monitor-renderers__time-series-renderer__delta___-wpZ3","time-series-renderer__delta--up":"-esm-report-builder__monitor-renderers__time-series-renderer__delta--up___HdvZS","time-series-renderer__delta--down":"-esm-report-builder__monitor-renderers__time-series-renderer__delta--down___5xRFY","time-series-renderer__delta-note":"-esm-report-builder__monitor-renderers__time-series-renderer__delta-note___y720Z","time-series-renderer__empty":"-esm-report-builder__monitor-renderers__time-series-renderer__empty___4tsWC","time-series-renderer__chart":"-esm-report-builder__monitor-renderers__time-series-renderer__chart___7CzDl","time-series-renderer__grid":"-esm-report-builder__monitor-renderers__time-series-renderer__grid___xMtm4","time-series-renderer__tick":"-esm-report-builder__monitor-renderers__time-series-renderer__tick___-wlje","time-series-renderer__crosshair":"-esm-report-builder__monitor-renderers__time-series-renderer__crosshair___v2OW6","time-series-renderer__line":"-esm-report-builder__monitor-renderers__time-series-renderer__line___VsT-C","time-series-renderer__area":"-esm-report-builder__monitor-renderers__time-series-renderer__area___2vVNP","time-series-renderer__dot":"-esm-report-builder__monitor-renderers__time-series-renderer__dot___Ro0nu","time-series-renderer__tooltip":"-esm-report-builder__monitor-renderers__time-series-renderer__tooltip___KrQID","time-series-renderer__tooltip-value":"-esm-report-builder__monitor-renderers__time-series-renderer__tooltip-value___HoQXF","time-series-renderer__tooltip-time":"-esm-report-builder__monitor-renderers__time-series-renderer__tooltip-time___d8YtO"};var d=r(4676);function c(e){if(!e)return"neutral";let t=String(e).toUpperCase();return"UP"===t||"ACTIVE"===t||"SUCCESS"===t||"OK"===t||"HEALTHY"===t?"success":"DOWN"===t||"ERROR"===t||"FAILED"===t||"CRITICAL"===t||"UNHEALTHY"===t?"critical":"WARNING"===t||"DEGRADED"===t?"warning":"INFO"===t||"PENDING"===t?"info":"neutral"}function m(e,t){if(null==e)return"-";if("STATUS"===t.type&&t.statusMap&&null!=e){let r=String(e),a=t.statusMap[r]||t.statusMap[r.toLowerCase()];return a?.label||e}return"TIMESTAMP"===t.type&&e?(0,d.fw)(e,{pastOnly:!0}):"boolean"===t.type?e?"Yes":"No":e}var u=r(8574),p=r(9610),_=r(6149);let g=function({config:e,fields:t,arrayData:r}){let a=r||[],l=(t||[]).filter(e=>!e.hidden),i=e.componentConfig?.maxRows||50,o=a.slice(0,i);return n().createElement("div",{className:s["table-renderer"]},n().createElement("div",{className:s["table-renderer__header"]},e.presentation?.title&&n().createElement("h4",{className:s["table-renderer__title"]},e.presentation.title)),0===o.length?n().createElement("div",{className:s["table-renderer__empty"]},"No data to display"):n().createElement("div",{className:s["table-renderer__table-wrapper"]},n().createElement(u.XIK,{size:"sm"},n().createElement(u.ndF,null,n().createElement(u.Hjg,null,l.map(e=>n().createElement(u.A0N,{key:e.key},e.label)))),n().createElement(u.BFY,null,o.map((t,r)=>n().createElement(u.Hjg,{key:t._id||r},l.map(r=>{let a,l=void 0===(a=(0,_.Qj)(t,r,e.data?.arrayPath))?"-":a;return n().createElement(u.nA6,{key:r.key},((e,t)=>{if(null==e)return"-";if("STATUS"===t.type){let r=t.statusMap?.[String(e)];if(r){let t={success:"green",critical:"red",warning:"purple",info:"blue",neutral:"gray"}[r.tone]||"gray";return n().createElement(u.vwO,{type:t},r.label||e)}let a=String(e).toLowerCase();return a.includes("up")||a.includes("success")||a.includes("ok")?n().createElement(u.vwO,{type:"green"},e):a.includes("down")||a.includes("error")||a.includes("fail")?n().createElement(u.vwO,{type:"red"},e):n().createElement(u.vwO,{type:"gray"},e)}if("PERCENTAGE"===t.type){let r="number"==typeof e?Math.max(0,Math.min(100,e)):parseFloat(String(e).replace("%",""))||0;return n().createElement("span",{className:s["table-renderer__progress"]},n().createElement("span",{className:s["table-renderer__progress-label"]},(0,_.nM)(e,t)),n().createElement("span",{className:s["table-renderer__progress-track"]},n().createElement("span",{className:s["table-renderer__progress-fill"],style:{width:`${r}%`}})))}return(0,_.nM)(e,t)})(l,r))})))))),a.length>i&&n().createElement("div",{className:s["table-renderer__footer"]},n().createElement("span",{className:s["table-renderer__footer-count"]},"Showing ",i," of ",a.length," rows"),e.componentConfig?.viewAllUrl&&n().createElement("a",{href:e.componentConfig.viewAllUrl,className:s["table-renderer__footer-link"]},e.componentConfig.viewAllLabel||"View all"," ",n().createElement(p.Qp,{size:12}))))};var E=r(771),f=r(3335);let b={document:E.yo,timer:i.M4,trend:f.BS,clock:i.gX,grid:o.xA,chart:f._C,badge:p.Ex,calendar:f.Vv};function y(e){return e?b[e]:void 0}let h="#8a3ffc";function v(e,t){let r=new Date(e);return isNaN(r.getTime())?String(e):"DATE"===t?r.toLocaleDateString():r.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit"})}let S={STATUS_CARD:function({config:e,fields:t,rawData:r,data:a}){let d=r||a,u=t||(d?function(e,t){if(!e||"object"!=typeof e)return[];let r=[];if(t.fields&&Array.isArray(t.fields))for(let a of t.fields){let t=function(e,t){if(!e||!t)return;let r=t;r.startsWith("$.")&&(r=r.slice(2));let a=r.split("."),n=e;for(let e of a)if(!n||"object"!=typeof n||!(e in n))return;else n=n[e];return n}(e,a.key),n="neutral";if("STATUS"===a.type&&a.statusMap&&null!=t){let e=String(t),r=a.statusMap[e]||a.statusMap[e.toLowerCase()];n=r?.tone||c(t)}r.push({key:a.key,label:a.label||a.key,value:t,formattedValue:m(t,a),type:a.type||"string",primary:a.primary||!1,hidden:a.hidden||!1,statusTone:n,statusMap:a.statusMap})}else Object.keys(e).forEach((t,a)=>{let n=e[t];r.push({key:t,label:t,value:n,formattedValue:m(n,{type:typeof n}),type:typeof n,primary:0===a,hidden:!1,statusTone:c(n)})});return r}(d,e):[])||[],p=u.find(e=>e.primary),_=u.find(e=>"STATUS"===e.type)||p,g=_?.formattedValue,E=_?.statusTone||c(g),f=e.presentation?.title||"Status Monitor",b=e.presentation?.description,y=u.filter(e=>!e.hidden&&e.key!==_?.key).slice(0,3);return n().createElement("div",{className:[s["status-card-premium"],s[`status-card-premium--${E}`]].join(" ")},n().createElement("div",{className:s["status-card-premium__header"]},n().createElement("span",{className:s["status-card-premium__icon-tile"]},n().createElement(l.Zn,{size:22})),n().createElement("h3",{className:s["status-card-premium__title"]},f),_&&n().createElement("span",{className:[s["status-card-premium__pill"],s[`status-card-premium__pill--${E}`]].join(" ")},g||"Unknown")),n().createElement("div",{className:s["status-card-premium__body"]},n().createElement("div",{className:s["status-card-premium__status-row"]},n().createElement("span",{className:s["status-card-premium__status-value"]},g||"Unknown"),n().createElement("span",{className:s["status-card-premium__dot"]})),b&&n().createElement("p",{className:s["status-card-premium__description"]},b)),y.length>0&&n().createElement("div",{className:s["status-card-premium__footer"]},y.map(e=>n().createElement("div",{key:e.key,className:s["status-card-premium__meta"]},n().createElement("span",{className:s["status-card-premium__meta-label"]},"TIMESTAMP"===e.type?n().createElement(i.gX,{size:12}):n().createElement(o.xA,{size:12}),e.label),n().createElement("span",{className:s["status-card-premium__meta-value"]},e.formattedValue??"—")))))},SUMMARY_CARD:function({config:e,fields:t,data:r}){let a=(t||(r?function(e,t){if(!e||"object"!=typeof e)return[];let r=[];if(t.fields&&Array.isArray(t.fields))for(let a of t.fields){let t=function(e,t){if(!e||!t)return;let r=t.split("."),a=e;for(let e of r)if(!a||"object"!=typeof a||!(e in a))return;else a=a[e];return a}(e,a.key);r.push({key:a.key,label:a.label||a.key,value:t,formattedValue:function(e,t){if(null==e)return"-";if("date"===t.type&&e)try{return new Date(e).toLocaleDateString()}catch{return e}return"boolean"===t.type?e?"Yes":"No":e}(t,a),type:a.type||"string",primary:a.primary||!1,hidden:a.hidden||!1,order:a.order,statusTone:"STATUS"===a.type&&null!=t?function(e,t){let r=String(e),a=t.statusMap?.[r]??t.statusMap?.[r.toLowerCase()];return a?.tone}(t,a):void 0})}else Object.keys(e).forEach((t,a)=>{let n=e[t];r.push({key:t,label:t,value:n,formattedValue:n,type:typeof n,primary:0===a,hidden:!1,order:a})});return r}(r,e):[])).filter(e=>!e.hidden);return n().createElement("div",{className:s["monitor-summary-card"]},n().createElement("div",{className:s["monitor-summary-card__header"]},e.presentation?.title&&n().createElement("h4",{className:s["monitor-summary-card__title"]},e.presentation.title)),n().createElement("div",{className:s["monitor-summary-card__body"]},n().createElement("div",{className:s["monitor-summary-card__metrics"]},a.map(e=>n().createElement("div",{key:e.key,className:s["monitor-summary-card__metric"]},n().createElement("div",{className:s["monitor-summary-card__metric-label"]},e.label),n().createElement("div",{className:s["monitor-summary-card__metric-value"]},e.formattedValue))))))},PROGRESS:function({config:e,fields:t,data:r}){let a=t||(r?function(e,t){if(!e||"object"!=typeof e)return[];let r=[];if(t.fields&&Array.isArray(t.fields))for(let a of t.fields){let t=function(e,t){if(!e||!t)return;let r=t.split("."),a=e;for(let e of r)if(!a||"object"!=typeof a||!(e in a))return;else a=a[e];return a}(e,a.key);r.push({key:a.key,label:a.label||a.key,value:t,formattedValue:function(e,t){if(null==e)return"-";if("percentage"===t.type&&"number"==typeof e)return`${Math.round(e)}%`;if("date"===t.type&&e)try{return new Date(e).toLocaleDateString()}catch{return e}return"boolean"===t.type?e?"Yes":"No":e}(t,a),type:a.type||"string",primary:a.primary||!1,hidden:a.hidden||!1,order:a.order})}else Object.keys(e).forEach((t,a)=>{let n=e[t];r.push({key:t,label:t,value:n,formattedValue:n,type:typeof n,primary:0===a,hidden:!1,order:a})});return r}(r,e):[])||[],l=a.find(e=>"PERCENTAGE"===e.type)||a.find(e=>e.primary)||a[0],i=a.find(t=>t.key===e.componentConfig?.stageFieldKey)||a.find(e=>"TEXT"===e.type),o=0,d=l?.value;if("number"==typeof d)o=Math.min(100,Math.max(0,d));else if(l?.formattedValue!=null){let e=parseFloat(String(l.formattedValue).replace("%",""));isNaN(e)||(o=Math.min(100,Math.max(0,e)))}let c=i?.formattedValue;return n().createElement("div",{className:s["monitor-progress"]},n().createElement("div",{className:s["monitor-progress__header"]},e.presentation?.title&&n().createElement("h4",{className:s["monitor-progress__title"]},e.presentation.title)),n().createElement("div",{className:s["monitor-progress__body"]},n().createElement("div",{className:s["monitor-progress__info"]},n().createElement("div",{className:s["monitor-progress__percentage"]},o,"%"),n().createElement("div",{className:s["monitor-progress__stage"]},c||"In Progress")),n().createElement("div",{className:s["monitor-progress__bar-container"]},n().createElement("div",{className:s["monitor-progress__bar"],style:{width:`${o}%`}})),a.length>2&&n().createElement("div",{className:s["monitor-progress__fields"]},a.filter(e=>e.key!==l?.key&&e.key!==i?.key&&!e.hidden).slice(0,3).map(e=>n().createElement("div",{key:e.key,className:s["monitor-progress__field"]},n().createElement("span",{className:s["monitor-progress__field-label"]},e.label,":"),n().createElement("span",{className:s["monitor-progress__field-value"]},e.formattedValue))))))},DATA_TABLE:g,TABLE:g,METRICS_GRID:function({config:e,fields:t}){let r=(t||[]).filter(e=>!e.hidden),a=e.componentConfig||{},l=a.icons||{},o=a.iconColors||{},d=a.valueColors||{},c=r.find(e=>"TIMESTAMP"===e.type),m=r.filter(e=>e!==c),u=1===m.length,p=y(a.icon||"chart");return n().createElement("div",{className:s["metrics-grid-renderer"]},!u&&n().createElement("div",{className:s["metrics-grid-renderer__head"]},p&&n().createElement("span",{className:s["metrics-grid-renderer__head-icon"],style:{backgroundColor:`${h}1A`,color:h}},n().createElement(p,{size:24})),n().createElement("div",{className:s["metrics-grid-renderer__head-text"]},e.presentation?.title&&n().createElement("h4",{className:s["metrics-grid-renderer__head-title"]},e.presentation.title),e.presentation?.description&&n().createElement("p",{className:s["metrics-grid-renderer__head-sub"]},e.presentation.description))),n().createElement("div",{className:[s["metrics-grid-renderer__grid"],u&&s["metrics-grid-renderer__grid--hero"]].filter(Boolean).join(" ")},m.map(e=>{let t=y(l[e.key]),r=o[e.key],a=d[e.key],i=e.formattedValue??"—";return n().createElement("div",{key:e.key,className:s["metrics-grid-renderer__tile"]},t&&n().createElement("span",{className:s["metrics-grid-renderer__tile-icon"],style:r?{backgroundColor:`${r}1A`,color:r}:void 0},n().createElement(t,{size:24})),n().createElement("div",{className:s["metrics-grid-renderer__tile-body"]},n().createElement("span",{className:s["metrics-grid-renderer__tile-label"]},e.label),n().createElement("span",{className:s["metrics-grid-renderer__tile-value"],style:a?{color:a}:void 0},i),e.description&&n().createElement("span",{className:s["metrics-grid-renderer__tile-sub"]},e.description)))})),c?.formattedValue!=null&&n().createElement("div",{className:s["metrics-grid-renderer__footer"]},n().createElement(i.gX,{size:14}),n().createElement("span",null,"Updated ",c.formattedValue)))},ERROR_LOG:function({config:e,arrayData:t,rawData:r}){let a=(t&&t.length>0?t:Array.isArray(r)?r:r&&"object"==typeof r?[r]:[]).map((t,r)=>{let a={...t,id:String(t?.id??t?._id??r)};return e.fields?.forEach(e=>{e.type&&"TEXT"!==e.type&&null!=a[e.key]&&(a[e.key]=(0,_.nM)(a[e.key],e))}),a});if(!a||0===a.length)return n().createElement("div",{className:s["error-log-empty"]},n().createElement("p",null,"No error logs available"));let l=(e.fields?.length?e.fields.map(e=>({key:e.key,header:e.label||e.key})):[{key:"timestamp",header:"Timestamp"},{key:"level",header:"Level"},{key:"message",header:"Message"}]).map(e=>({key:e.key,header:e.header}));return n().createElement("div",{className:s["error-log-renderer"]},e.presentation?.title&&n().createElement("h4",{className:s["error-log-renderer__title"]},e.presentation.title),n().createElement(u.bQt,{rows:a,headers:l},({rows:e,headers:t,getHeaderProps:r,getTableProps:a})=>n().createElement(u.K3K,null,n().createElement(u.XIK,a(),n().createElement(u.ndF,null,n().createElement(u.Hjg,null,t.map(e=>n().createElement(u.A0N,{...r({header:e}),key:e.key},e.header||e.key)))),n().createElement(u.BFY,null,e.map(e=>n().createElement(u.Hjg,{key:e.id},e.cells.map(e=>n().createElement(u.nA6,{key:e.id},e.value)))))))))},DETAILS:function({config:e,fields:t,data:r}){let a=(t||(r?function(e,t){if(!e||"object"!=typeof e)return[];let r=[];if(t.fields&&Array.isArray(t.fields))for(let a of t.fields){let t=function(e,t){if(!e||!t)return;let r=t.split("."),a=e;for(let e of r)if(!a||"object"!=typeof a||!(e in a))return;else a=a[e];return a}(e,a.key),n="neutral";if("STATUS"===a.type&&a.statusMap&&null!=t){let e=String(t),r=a.statusMap[e];n=r?.tone||"neutral"}r.push({key:a.key,label:a.label||a.key,value:t,formattedValue:function(e,t){if(null==e)return"-";if("date"===t.type&&e)try{return new Date(e).toLocaleDateString()}catch{return e}return"boolean"===t.type?e?"Yes":"No":e}(t,a),type:a.type||"string",primary:a.primary||!1,hidden:a.hidden||!1,statusTone:n,statusMap:a.statusMap,order:a.order})}else Object.keys(e).forEach((t,a)=>{let n=e[t];r.push({key:t,label:t,value:n,formattedValue:n,type:typeof n,primary:0===a,hidden:!1,order:a})});return r}(r,e):[])||[]).filter(e=>!e.hidden),l="ERROR_LOG"===e.component;return n().createElement("div",{className:s["details-renderer"]},n().createElement("div",{className:s["details-renderer__header"]},e.presentation?.title&&n().createElement("h4",{className:s["details-renderer__title"]},e.presentation.title)),0===a.length?n().createElement("div",{className:s["details-renderer__empty"]},"No details to display"):n().createElement(u.r9c,null,n().createElement(u.GRJ,null,a.map(e=>n().createElement(u.Cvq,{key:e.key},n().createElement(u.Um2,{style:{width:"40%"}},n().createElement("strong",null,e.label)),n().createElement(u.Um2,null,l&&"STATUS"===e.type?n().createElement(u.vwO,{type:"ERROR"===e.value?"red":"gray"},e.formattedValue):"STATUS"===e.type&&e.statusTone?n().createElement(u.vwO,{type:"success"===e.statusTone?"green":"critical"===e.statusTone?"red":"warning"===e.statusTone?"purple":"gray"},e.formattedValue):"TIMESTAMP"===e.type&&e.format?.timestamp?.display?n().createElement("span",{className:s["details-renderer__timestamp"]},n().createElement("span",{className:s["details-renderer__value"]},e.formattedValue),n().createElement("span",{className:s["details-renderer__timestamp-sub"]},(0,d.fw)(e.value))):n().createElement("span",{className:s["details-renderer__value"]},e.formattedValue)))))))},LOG:function({config:e,fields:t,arrayData:r,rawData:a}){let l=r&&r.length>0?r:Array.isArray(a)?a:a&&"object"==typeof a?[a]:[],i=t||[],o=i.find(e=>"TIMESTAMP"===e.type),d=i.find(e=>"TIMESTAMP"!==e.type),c=e.componentConfig?.maxRows||10;return n().createElement("div",{className:s["log-renderer"]},e.presentation?.title&&n().createElement("h4",{className:s["log-renderer__title"]},e.presentation.title),0===l.length?n().createElement("div",{className:s["log-renderer__empty"]},"No events recorded"):n().createElement("ul",{className:s["log-renderer__timeline"]},l.slice(0,c).map((t,r)=>{var a,l;let i=o?(a=e.data?.arrayPath,(0,_.Qj)(t,o,a)):void 0,c=null!=i?String((0,_.nM)(i,o)):"—",m=d?(l=e.data?.arrayPath,(0,_.Qj)(t,d,l)):void 0,u=null!=m&&""!==m?String(m):"—";return n().createElement("li",{key:t?.id??r,className:s["log-renderer__entry"]},n().createElement("span",{className:s["log-renderer__marker"]}),n().createElement("span",{className:s["log-renderer__time"]},c),n().createElement("span",{className:s["log-renderer__message"]},u))})))},TIME_SERIES:function({config:e,fields:t,arrayData:r,rawData:l}){let i=(0,a.useRef)(null),o=(0,a.useRef)(null),[d,c]=(0,a.useState)(280),[m,u]=(0,a.useState)(null),p=t||[],g=p.find(e=>"TIMESTAMP"===e.type),E=p.find(e=>e.primary)||p.find(e=>["PERCENTAGE","NUMBER","INTEGER","DECIMAL","DURATION"].includes(e.type))||p.find(e=>"TIMESTAMP"!==e.type),f=y(Object.values(e.componentConfig?.icons||{})[0]),b=(0,a.useMemo)(()=>{let t=r&&r.length>0?r:Array.isArray(l)?l:[],a=(t,r)=>(0,_.Qj)(t,r,e.data?.arrayPath);return g&&E?t.map(e=>({x:a(e,g),y:a(e,E)})).filter(e=>null!=e.x&&null!=e.y&&"number"==typeof e.y).sort((e,t)=>e.x-t.x):[]},[r,l,g,E,e]);n().useEffect(()=>{let e=o.current;if(!e||"u"<typeof ResizeObserver)return;let t=new ResizeObserver(e=>{let t=e[0]?.contentRect?.width;t&&t>40&&c(Math.floor(t))});return t.observe(e),()=>t.disconnect()},[]);let h=Math.max(40,d-38-12),S=b.length?b[0].x:0,T=b.length?b[b.length-1].x:1,C=b.map(e=>e.y),w=Math.min(0,...C),N=b.length?Math.max(...C):1,I=e=>38+(e-S)/(T-S||1)*h,k=e=>8+(1-(e-w)/(N-w||1))*94,A=b.map((e,t)=>`${0===t?"M":"L"}${I(e.x).toFixed(1)},${k(e.y).toFixed(1)}`).join(" "),R=k(w),O=b.length?`${A} L${I(b[b.length-1].x).toFixed(1)},${R.toFixed(1)} L${I(b[0].x).toFixed(1)},${R.toFixed(1)} Z`:"",D=(0,a.useMemo)(()=>{if(b.length<2)return null;let e=b[0].y,t=b[b.length-1].y;if(!e)return null;let r=(t-e)/Math.abs(e)*100;return isFinite(r)?r:null},[b]),x=b.length?b[b.length-1].y:null,L=null!=x?(0,_.nM)(x,E||{}):"—",M=e.componentConfig?.deltaLabel||"vs previous period",$=[w,w+(N-w)/2,N],P=null!=m?b[m]:null;return n().createElement("div",{className:s["time-series-renderer"]},n().createElement("div",{className:s["time-series-renderer__head"]},f?n().createElement("span",{className:s["time-series-renderer__icon"]},n().createElement(f,{size:20})):null,n().createElement("div",{className:s["time-series-renderer__head-text"]},n().createElement("span",{className:s["time-series-renderer__label"]},E?.label||e.presentation?.title||"Trend"),n().createElement("span",{className:s["time-series-renderer__value"]},L)),null!=D&&n().createElement("span",{className:s["time-series-renderer__head-delta"]},n().createElement("span",{className:`${s["time-series-renderer__delta"]} ${D>=0?s["time-series-renderer__delta--up"]:s["time-series-renderer__delta--down"]}`},D>=0?"↑":"↓"," ",Math.abs(D).toFixed(1),"%"),n().createElement("span",{className:s["time-series-renderer__delta-note"]},M))),0===b.length?n().createElement("div",{className:s["time-series-renderer__empty"]},"No time series data"):n().createElement("div",{className:s["time-series-renderer__chart"],ref:o},n().createElement("svg",{ref:i,width:d,height:120,role:"img","aria-label":`${E?.label||"Trend"} over time`,tabIndex:0,onMouseMove:e=>{if(!b.length||!i.current)return;let t=i.current.getBoundingClientRect(),r=(e.clientX-t.left)/t.width*d,a=0,n=1/0;b.forEach((e,t)=>{let l=Math.abs(I(e.x)-r);l<n&&(n=l,a=t)}),u(a)},onMouseLeave:()=>u(null),onKeyDown:e=>{if(b.length)if("ArrowLeft"===e.key||"ArrowRight"===e.key){e.preventDefault();let t="ArrowLeft"===e.key?-1:1;u(e=>{let r=e??b.length-1;return Math.max(0,Math.min(b.length-1,r+t))})}else"Escape"===e.key&&u(null)},onBlur:()=>u(null)},$.map((e,t)=>n().createElement("g",{key:t},n().createElement("line",{x1:38,x2:d-12,y1:k(e),y2:k(e),className:s["time-series-renderer__grid"]}),n().createElement("text",{x:32,y:k(e),textAnchor:"end",dominantBaseline:"middle",className:s["time-series-renderer__tick"]},function(e,t){if("DURATION"===t){let t=Math.floor(e/1e3);if(t<60)return`${t}s`;let r=Math.floor(t/60);return r<60?`${r}m`:`${Math.floor(r/60)}h`}return Math.abs(e)>=1e3?new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e):String(Math.round(e))}(e,E?.type)))),P&&n().createElement("line",{x1:I(P.x),x2:I(P.x),y1:8,y2:102,className:s["time-series-renderer__crosshair"]}),n().createElement("path",{d:O,className:s["time-series-renderer__area"]}),n().createElement("path",{d:A,className:s["time-series-renderer__line"]}),P&&n().createElement("circle",{cx:I(P.x),cy:k(P.y),r:4.5,className:s["time-series-renderer__dot"]}),b.length>0&&n().createElement("circle",{cx:I(b[b.length-1].x),cy:k(b[b.length-1].y),r:4.5,className:s["time-series-renderer__dot"]}),[0,Math.floor((b.length-1)/2),b.length-1].map((e,t)=>e<0||!b[e]?null:n().createElement("text",{key:t,x:I(b[e].x),y:116,textAnchor:0===t?"start":2===t?"end":"middle",className:s["time-series-renderer__tick"]},v(b[e].x,g?.format?.timestamp?.display==="date"?"DATE":void 0)))),P&&n().createElement("div",{className:s["time-series-renderer__tooltip"],style:{left:`${I(P.x)/d*100}%`,top:0}},n().createElement("span",{className:s["time-series-renderer__tooltip-value"]},(0,_.nM)(P.y,E||{})),n().createElement("span",{className:s["time-series-renderer__tooltip-time"]},v(P.x)))))}};function T({config:e}){let t=e.emptyState,r=t?.tone||"neutral";return n().createElement("div",{className:s["monitor-empty-state"]},n().createElement("div",{className:[s["monitor-empty-state__icon"],s[`monitor-empty-state__icon--${r}`]].join(" ")},n().createElement("svg",{width:"48",height:"48",viewBox:"0 0 48 48",fill:"none"},n().createElement("circle",{cx:"24",cy:"24",r:"20",stroke:"currentColor",strokeWidth:"2.5",fill:"none"}),n().createElement("path",{d:"M16 24L22 30L32 18",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"}))),n().createElement("h4",{className:s["monitor-empty-state__title"]},t?.title||"No Data"),n().createElement("p",{className:s["monitor-empty-state__description"]},t?.description||"No data available at this time."))}function C(){return n().createElement("div",{className:s["monitor-loading-state"]},n().createElement("div",{className:s["monitor-loading-state__spinner"]}),n().createElement("p",{className:s["monitor-loading-state__text"]},"Loading monitor data..."))}function w({error:e}){return n().createElement("div",{className:s["monitor-error-state"]},n().createElement("div",{className:s["monitor-error-state__icon"]},n().createElement("svg",{width:"32",height:"32",viewBox:"0 0 32 32",fill:"none"},n().createElement("circle",{cx:"16",cy:"16",r:"14",stroke:"#da1e28",strokeWidth:"2",fill:"none"}),n().createElement("path",{d:"M16 10V16M16 20V22",stroke:"#da1e28",strokeWidth:"2",strokeLinecap:"round"}))),n().createElement("h4",{className:s["monitor-error-state__title"]},"Unable to Load Monitor"),n().createElement("p",{className:s["monitor-error-state__description"]},e))}function N({config:e,data:t}){return n().createElement("div",{className:s["monitor-fallback"]},n().createElement("div",{className:s["monitor-fallback__header"]},n().createElement("h5",null,e.presentation?.title||"Monitor")),n().createElement("div",{className:s["monitor-fallback__content"]},n().createElement("p",{className:s["monitor-fallback__note"]},"Component type ",n().createElement("code",null,e.component)," is not yet supported."),t&&n().createElement("pre",{className:s["monitor-fallback__data"]},JSON.stringify(t,null,2))))}function I({config:e,data:t,loading:r,error:a}){let l=S[e.component];if(r)return n().createElement(C,null);if(a)return n().createElement(w,{error:a});if((0,_.ez)(t,e))return n().createElement(T,{config:e});if(!l)return n().createElement(N,{config:e,data:t});let i=(0,_.Nx)(t,e);if(["STATUS_CARD","SUMMARY_CARD","PROGRESS"].includes(e.component))return n().createElement(l,{config:e,fields:i,data:t});let o=["TABLE","DATA_TABLE","ERROR_LOG","LOG","TIME_SERIES"].includes(e.component)?(0,_.Mj)(t,e):null;return n().createElement(l,{config:e,fields:i,arrayData:o,rawData:t})}},6149(e,t,r){r.d(t,{G2:()=>m,Mj:()=>o,Nx:()=>i,Qj:()=>c,ez:()=>n,nM:()=>p});var a=r(4676);function n(e,t){if(null==e||""===e)return!0;switch(t.component){case"TABLE":case"DATA_TABLE":case"ERROR_LOG":case"LOG":return 0===l(e,t).length;case"STATUS_CARD":case"SUMMARY_CARD":case"PROGRESS":return!1;default:if(Array.isArray(e))return 0===e.length;if("object"==typeof e)return 0===Object.keys(e).length;return!1}}function l(e,t){if(Array.isArray(e))return e;if(!e||"object"!=typeof e)return[];let r=t.data?.arrayPath;if(r&&"$"!==r){let t=r.replace(/^\$\.?/,"");if(t){let r=t.split(".").reduce((e,t)=>null==e?void 0:e[t],e);if(Array.isArray(r))return r}}return Array.isArray(e.data)?e.data:Array.isArray(e.items)?e.items:Array.isArray(e.results)?e.results:[e]}function i(e,t){if(!e||"object"!=typeof e)return[];let r=e,a=t.data?.rootPath;if(a&&"$"!==a){let t=d(e,a);null!=t&&"object"==typeof t&&(r=t)}return Array.isArray(t.fields)&&t.fields.length>0?t.fields.map(e=>{let t=d(r,e.path||e.key);return{key:e.key,label:e.label||e.key,value:t,formattedValue:u(t,e),type:e.type||"TEXT",primary:!!e.primary,hidden:!!e.hidden,order:e.order,path:e.path,description:e.description,statusMap:e.statusMap,statusTone:"STATUS"===e.type?function(e,t){let r;if(null==e||!t)return;let a=String(e),n=t[a]??t[a.toLowerCase()]??t[a.toUpperCase()];return n?.tone||(["UP","ACTIVE","SUCCESS","OK","HEALTHY","COMPLETED"].includes(r=String(e).toUpperCase())?"success":["DOWN","ERROR","FAILED","CRITICAL","UNHEALTHY"].includes(r)?"critical":["WARNING","DEGRADED","PENDING"].includes(r)?"warning":"neutral")}(t,e.statusMap):void 0}}):Object.keys(r).map((e,t)=>{var a;let n="boolean"==typeof(a=r[e])?"BOOLEAN":"number"==typeof a?"NUMBER":a instanceof Date?"TIMESTAMP":"TEXT",l={key:e,label:e,path:`$.${e}`,type:n};return{key:e,label:e,value:r[e],formattedValue:u(r[e],l),type:n,primary:0===t,hidden:!1,order:t,path:`$.${e}`}})}function o(e,t){return l(e,t).map((e,t)=>null!==e&&"object"==typeof e?{...e}:{value:e,_rowIndex:t})}function s(e){return e.split(".").flatMap(e=>{let t=e.match(/^(\w+)\[(\*|\d+)\]$/);if(t)return"*"===t[2]?[t[1],0]:[t[1],parseInt(t[2],10)];let r=e.match(/^\[(\*|\d+)\]$/);return r?"*"===r[1]?[0]:[parseInt(r[1],10)]:[e]})}function d(e,t){if(!e||!t)return;let r=t;if("$"===r||"$."===r)return e;(r=r.replace(/^\$\[\*?\d*\]\.?/,"$.")).startsWith("$.")?r=r.slice(2):r.startsWith("$")&&(r=r.slice(1));let a=e;for(let e of s(r)){if(null==a)return;a=a[e]}return a}function c(e,t,r){if(!e||"object"!=typeof e||!t)return;let a=t.path||(t.key?`$.${t.key}`:"");if(!a)return;if(a=a.replace(/^\$\[\*?\d*\]\.?/,"$."),r&&"$"!==r){let t=r.replace(/\[\*?\]$/,"");if(a===t)return e;a.startsWith(`${t}.`)?a=`$.${a.slice(t.length+1)}`:a.startsWith(`${t}[*].`)&&(a=`$.${a.slice(t.length+4)}`)}if(!a.startsWith("$."))return t.key&&t.key in e?e[t.key]:void 0;let n=e;for(let e of s(a.slice(2))){if(null==n)return;n=n[e]}return n}function m(e,t,r,a){if(!e||null==t)return!0;if(a){let a=l(t,{data:{arrayPath:r}});return 0===a.length||void 0!==c(a[0],{path:e},r)}return void 0!==d(t,e)}function u(e,t){if(null==e||""===e)return t.defaultValue??"—";switch(t.type){case"STATUS":if(t.statusMap){let r=String(e),a=t.statusMap[r]??t.statusMap[r.toLowerCase()]??t.statusMap[r.toUpperCase()];if(a?.label)return a.label}return String(e);case"PERCENTAGE":return"number"==typeof e?`${Math.round(e)}%`:String(e);case"TIMESTAMP":{let r=t.format?.timestamp?.display;if("datetime"===r||"date"===r||"time"===r){let t=new Date(e);if(!isNaN(t.getTime())){if("date"===r)return t.toLocaleDateString();if("time"===r)return t.toLocaleTimeString();return t.toLocaleString()}}return(0,a.fw)(e)}case"DURATION":{if("number"!=typeof e)return String(e);let r=Math.floor(e*(t.format?.duration?.inputUnit==="seconds"?1e3:t.format?.duration?.inputUnit==="minutes"?6e4:1)/1e3);if(r<60)return`${r}s`;let a=Math.floor(r/60);if(a<60)return`${a}m ${r%60}s`;let n=Math.floor(a/60);return`${n}h ${a%60}m`}case"BOOLEAN":return e?"Yes":"No";case"NUMBER":case"INTEGER":case"DECIMAL":if("number"==typeof e&&t.format?.number?.decimals!==void 0)return e.toFixed(t.format.number.decimals);return e;default:return"object"==typeof e?JSON.stringify(e):e}}function p(e,t){return u(e,t)}},5022(e,t,r){r.d(t,{RB:()=>l,Ue:()=>a,XT:()=>i,bO:()=>o});let a="Task: reportbuilder.",n=e=>`${a}${e}`,l={REPORT_VIEW:n("report.view"),REPORT_ADD:n("report.add"),REPORT_EDIT:n("report.edit"),REPORT_PURGE:n("report.purge"),REPORT_COMPILE:n("report.compile"),REPORT_RUN:n("report.run"),INDICATOR_VIEW:n("indicator.view"),INDICATOR_ADD:n("indicator.add"),INDICATOR_EDIT:n("indicator.edit"),INDICATOR_PURGE:n("indicator.purge"),SECTION_VIEW:n("section.view"),SECTION_ADD:n("section.add"),SECTION_EDIT:n("section.edit"),SECTION_PURGE:n("section.purge"),THEME_VIEW:n("theme.view"),THEME_ADD:n("theme.add"),THEME_EDIT:n("theme.edit"),THEME_PURGE:n("theme.purge"),DASHBOARD_VIEW:n("dashboard.view"),DASHBOARD_ADD:n("dashboard.add"),DASHBOARD_EDIT:n("dashboard.edit"),DASHBOARD_PURGE:n("dashboard.purge"),CATEGORY_VIEW:n("category.view"),CATEGORY_ADD:n("category.add"),CATEGORY_EDIT:n("category.edit"),CATEGORY_PURGE:n("category.purge"),AGEGROUP_VIEW:n("agegroup.view"),AGEGROUP_ADD:n("agegroup.add"),AGEGROUP_EDIT:n("agegroup.edit"),AGEGROUP_PURGE:n("agegroup.purge"),LIBRARY_VIEW:n("library.view"),LIBRARY_ADD:n("library.add"),LIBRARY_EDIT:n("library.edit"),LIBRARY_PURGE:n("library.purge"),ETLSOURCE_VIEW:n("etlsource.view"),ETLSOURCE_ADD:n("etlsource.add"),ETLSOURCE_EDIT:n("etlsource.edit"),ETLSOURCE_PURGE:n("etlsource.purge"),ETLMONITOR_VIEW:n("etlmonitor.view"),ETLMONITOR_ADD:n("etlmonitor.add"),ETLMONITOR_EDIT:n("etlmonitor.edit"),ETLMONITOR_PURGE:n("etlmonitor.purge"),SCHEMA_VIEW:n("schema.view"),SQL_EXECUTE:n("sql.execute"),PACKAGE_IMPORT:n("package.import"),PACKAGE_EXPORT:n("package.export")},i=e=>e.replace(a,""),o={"/":[l.REPORT_VIEW],"/reports":[l.REPORT_VIEW],"/new":[l.REPORT_ADD],"/edit/:reportId":[l.REPORT_EDIT],"/run":[l.REPORT_RUN],"/run-reports":[l.REPORT_RUN],"/indicators":[l.INDICATOR_VIEW],"/sections":[l.SECTION_VIEW],"/dashboards":[l.DASHBOARD_VIEW],"/dashboards/:code":[l.DASHBOARD_VIEW],"/etl-dashboard":[l.DASHBOARD_VIEW],"/linelist":[l.REPORT_VIEW],"/linelist/new":[l.REPORT_ADD],"/linelist/edit/:reportId":[l.REPORT_EDIT],"/linelist/run/:reportId":[l.REPORT_RUN],"/admin":[l.REPORT_VIEW],"/admin/report-categories":[l.CATEGORY_VIEW],"/admin/age-categories":[l.AGEGROUP_VIEW],"/admin/age-groups":[l.AGEGROUP_VIEW],"/admin/report-library":[l.LIBRARY_VIEW],"/admin/themes":[l.THEME_VIEW],"/admin/etl-sources":[l.ETLSOURCE_VIEW],"/admin/etl-tasks":[l.PACKAGE_IMPORT],"/admin/etl-browser":[l.ETLSOURCE_VIEW],"/admin/etl-monitors":[l.ETLMONITOR_VIEW],"/admin/etl-monitors/builder":[l.ETLMONITOR_VIEW],"/admin/dashboards":[l.DASHBOARD_VIEW],"/import-export":[l.PACKAGE_IMPORT,l.PACKAGE_EXPORT]}},2075(e,t,r){r.d(t,{rp:()=>u,CB:()=>c,ah:()=>f,cz:()=>p,jg:()=>y,getLinelistReport:()=>m,U:()=>E,Nj:()=>b,m:()=>s,sY:()=>d,oq:()=>_});var a=r(9669),n=r(300);function l(e){return{type:"SQL",name:e.name,config:{sql:e.config.sql.replace(/':(\w+)'/g,":$1").replace(/":(\w+)"/g,":$1"),...e.config.filterMap&&{filterMap:e.config.filterMap}}}}let i="/reportbuilder/report";function o(e){return{...e,configJson:e.configJson?(0,n.j)(e.configJson):e.configJson,metaJson:e.metaJson?(0,n.j)(e.metaJson):e.metaJson}}function s(e){if(!e.configJson)return null;try{let t=JSON.parse(e.configJson);if(t&&"object"==typeof t&&"LINE_LIST"===t.type)return t}catch(e){console.error("Failed to parse linelist config:",e)}return null}function d(e){if(e.metaJson)try{let t=JSON.parse(e.metaJson);if(t?.parameters&&Array.isArray(t.parameters)&&t.parameters.length>0)return t.parameters}catch(e){console.warn("Failed to parse metaJson parameters:",e)}let t=s(e);return t?.parameters||[]}async function c(e,t){var r;let n=e?.q?.trim(),l=e?.includeRetired===!0,d=e?.v??"default",c=new URLSearchParams;return c.set("v",d),n&&c.set("q",n),l&&c.set("includeRetired","true"),(!(r=await (0,a.wO)(`${i}?${c.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid).map(o).filter(e=>"LINE_LIST"===e.reportType||s(e)?.type==="LINE_LIST")}async function m(e,t,r="full"){return o(await (0,a.wO)(`${i}/${encodeURIComponent(e)}?v=${r}`,t))}async function u(e,t){return o(await (0,a.oV)(i,e,t))}async function p(e,t,r){return o(await (0,a.oV)(`${i}/${encodeURIComponent(e)}`,t,r))}async function _(e,t="Retired from Report Builder",r){let a=new URLSearchParams;return a.set("reason",t),g(`${i}/${encodeURIComponent(e)}?${a.toString()}`,r)}async function g(e,t){let r=await fetch(e,{method:"DELETE",signal:t});if(!r.ok)throw Error(await r.text()||"Failed to delete resource")}async function E(e,t){let r=e.reportDefinitionUuid||e.reportLibraryUuid;if(!r)return{success:!1,error:"Either reportDefinitionUuid or reportLibraryUuid is required"};let a=new URLSearchParams;a.set("uuid",r),a.set("renderType","list"),e.parameters?Object.entries(e.parameters).forEach(([e,t])=>{null!=t&&""!==t&&a.set(e,String(t))}):(e.startDate&&a.set("startDate",e.startDate),e.endDate&&a.set("endDate",e.endDate)),e.maxRows&&a.set("maxRows",String(e.maxRows));let n=await fetch(`/openmrs/ws/rest/v1/reportbuilder/reportingDefinition?${a.toString()}`,{method:"GET",signal:t,headers:{"Content-Type":"application/json"}});return n.ok?{success:!0,data:await n.json()}:{success:!1,error:await n.text()||"Failed to evaluate linelist report"}}async function f(e,t,r){let n={reportUuid:e,category:t};return console.log("compileLinelistReport sending:",n),(0,a.oV)("/reportbuilder/reportcompile",n,r)}function b(e,t,r){var a;let n,i,o={...(n={},(e.dataSources||[]).forEach(e=>{e.columns&&Object.entries(e.columns).forEach(([e,t])=>{n[e]={name:t.name,type:t.type,sourceTable:t.sourceTable}})}),i=(e.dataSetDefinitions||[]).map(t=>{let r=l(e.baseCohortDefinition);return{name:t.name,type:"PATIENT_DATA_SET",rowFilter:r,columns:(t.columns||[]).map(e=>{let t=function(e,t){let r=e.dataDefinition||{},a=r.type,n=r.config||{},l=n.sql||"",i=e._metadata||e._meta||null,o=/^\s*SELECT\s/i.test(l)||/:patientId\b/i.test(l),s=l.match(/`?(\w+)`?\.\s*`?(\w+)`?/);if(o)return{name:e.name,dataDefinition:{type:"SQL",config:{sql:l}},...e.repeatResolution?{repeatResolution:e.repeatResolution}:{},...i?{_metadata:i}:{}};if("CALCULATION"===a){let t,r=n.onDate;return t=!0===r||void 0===r||""===r?":startDate":"string"==typeof r?r.startsWith(":")?r:r.replace("${startDate}",":startDate").replace(/\$\{endDate\}/g,":endDate"):":startDate",{name:e.name,dataDefinition:{type:"CALCULATION",config:{...n,onDate:t}},...i?{_metadata:i}:{}}}if("IDENTIFIER"===a)return{name:e.name,dataDefinition:{type:"IDENTIFIER",config:{...n,preferred:!0}},...e.repeatResolution?{repeatResolution:e.repeatResolution}:{},...i?{_metadata:i}:{}};if("PERSON_ATTRIBUTE"===a||"PERSON_NAME"===a)return{name:e.name,dataDefinition:{type:a,config:n},...e.repeatResolution?{repeatResolution:e.repeatResolution}:{},...i?{_metadata:i}:{}};if("SQL"===a&&s){let[,r,a]=s,n=function(e,t,r,a){let n=r.toLowerCase();if("person"===t){if(n.includes("name")||n.includes("full_name"))return{name:e,dataDefinition:{type:"PERSON_NAME",config:{type:"FULL_NAME",preferred:!0}}};if("gender"===n||"sex"===n)return{name:e,dataDefinition:{type:"PERSON_ATTRIBUTE",config:{type:"GENDER"}}};if(n.includes("birthdate")||n.includes("birth_date"))return{name:e,dataDefinition:{type:"PERSON_ATTRIBUTE",config:{type:"BIRTHDATE"}},converter:{type:"BIRTHDATE_AGE",config:{format:"MMM dd,yyyy"}}};if(n.includes("death"))return{name:e,dataDefinition:{type:"PERSON_ATTRIBUTE",config:{type:"DEATH_DATE"}}}}if("person_address"===t)return{name:e,dataDefinition:{type:"PERSON_ADDRESS",config:{type:"ADDRESS_FIELD",field:({address1:"address1",address2:"address2",address3:"address3",address4:"address4",address5:"address5",city_village:"address5",state_province:"stateProvince",country:"country",postal_code:"postalCode",county_district:"countyDistrict",latitude:"latitude",longitude:"longitude"})[n]||r}}};if(t.startsWith("mamba_")||t.startsWith("etl_")){let l=a?.[e],i=l?.type==="DATE"||n.includes("date"),o=`SELECT e.${r} FROM ${t} e WHERE e.patient_id = :patientId`;if(/encounter|obs|visit|appointment/i.test(t)&&(o+=" AND e.voided = 0"),i){let e=n.includes("return_visit")?"return_visit_date":r;o+=` AND e.${e} BETWEEN :startDate AND :endDate ORDER BY e.${e} DESC LIMIT 1`}else o+=" LIMIT 1";return{name:e,dataDefinition:{type:"SQL",config:{sql:o}}}}return{name:e,dataDefinition:{type:"SQL",config:{sql:`\`${t}\`.\`${r}\``}}}}(e.name,r,a,t);if(n)return{...n,...e.repeatResolution?{repeatResolution:e.repeatResolution}:{},...i?{_metadata:i}:{}}}return{name:e.name,dataDefinition:{type:a||"SQL",config:n},...e.repeatResolution?{repeatResolution:e.repeatResolution}:{},...i?{_metadata:i}:{}}}(e,n);return{...t,key:t.key||t.name.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")}})}}),{name:t.name,description:t.description,parameters:(a=e.parameters)&&0!==a.length?a.map(e=>({name:e.name,label:e.label,type:e.type,required:e.required??!1})):[{name:"startDate",label:"Start Date",type:"DATE",required:!0},{name:"endDate",label:"End Date",type:"DATE",required:!0}],baseCohortDefinition:l(e.baseCohortDefinition),dataSetDefinitions:i,category:t.categoryUuid||"FACILITY_REPORTS",reportType:"LINELIST",...e.limit?{limit:e.limit}:{}}),_builder:{dataSources:e.dataSources,populationSources:r?.populationSources,rowGrain:e.rowGrain,templateId:e.templateId,buildMethod:r?.buildMethod||e.buildMethod,indicatorRules:r?.indicatorRules||e.indicatorRules,categoryUuid:e.categoryUuid,visualFilter:r?.visualFilter,filterMap:r?.filterMap}};return{name:t.name,description:t.description,code:t.code,reportType:"LINE_LIST",configJson:JSON.stringify(o),metaJson:r?JSON.stringify(r):void 0}}async function y(e,t){let{reportUuid:r,config:a,parameters:n={},maxRows:l=100,cachedReportDefinitionUuid:i}=e;try{let e,o=i;if(!o){let e=await f(r,a.categoryUuid,t);if(!e.compiled||!e.reportDefinitionUuid)return{success:!1,error:"Failed to compile report for preview"};o=e.reportDefinitionUuid}let s=a.parameters||[],d={};for(let e of s)e.defaultValue&&(d[e.name]=e.defaultValue),n&&void 0!==n[e.name]&&(d[e.name]=n[e.name]);0===s.length&&(d.startDate=n.startDate||((e=new Date).setDate(e.getDate()-30),e.toISOString().split("T")[0]),d.endDate=n.endDate||new Date().toISOString().split("T")[0]);let c={reportDefinitionUuid:o,parameters:d,maxRows:l},m=await E(c,t);if(!m.success)return{success:!1,error:m.error||"Failed to evaluate report for preview"};let u=m.data,p=u?Object.values(u)[0]:null,_=u?._html?u._html[0]?.html:null;if(!p||!Array.isArray(p)||0===p.length)return{success:!0,data:{columns:[],rows:[],rowCount:0,html:_}};let g=Object.keys(p[0]);return{success:!0,data:{columns:g,rows:p,rowCount:p.length,html:_}}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Preview failed"}}}},9669(e,t,r){r.d(t,{hI:()=>s,oV:()=>o,wO:()=>i});var a=r(3633),n=r(1672);async function l(e){try{return await e()}catch(e){throw(0,n._R)(e)}}async function i(e,t){return l(async()=>{let r=`${a.restBaseUrl}${e.startsWith("/")?e:`/${e}`}`;return(await (0,a.openmrsFetch)(r,{signal:t})).data})}async function o(e,t,r){return l(async()=>{let n=`${a.restBaseUrl}${e.startsWith("/")?e:`/${e}`}`;return(await (0,a.openmrsFetch)(n,{method:"POST",headers:{"Content-Type":"application/json"},body:t,signal:r})).data})}async function s(e,t){return l(async()=>{let r=`${a.restBaseUrl}${e.startsWith("/")?e:`/${e}`}`;return(await (0,a.openmrsFetch)(r,{method:"DELETE",signal:t})).data})}},8803(e,t,r){r.r(t),r.d(t,{default:()=>dv});var a=r(4587),n=r.n(a),l=r(4976),i=r(7767),o=r(8574),s=r(9249),d=r(9564),c=r(1397),m=r(1660),u=r(4499),p=r(4535),_=r(3335),g=r(3270),E=r(9610),f=r(3989),b=r(2137),y=r(5022),h=r(3633);function v(){let e=(0,h.useSession)(),t=e?.user,r=(0,a.useMemo)(()=>{let e=new Set;for(let r of t?.privileges??[])e.add(r.name),e.add(r.display);return e},[t]),n=(0,a.useMemo)(()=>!!t?.roles?.some(e=>"System Developer"===e.display),[t]),l=(0,a.useCallback)((...e)=>0===e.length||n||e.some(e=>r.has(e)),[r,n]);return{has:l,hasAll:(0,a.useCallback)((...e)=>0===e.length||n||e.every(e=>r.has(e)),[r,n]),isSuperUser:n,isAuthenticated:!!e?.authenticated,canAuthor:l(y.RB.REPORT_ADD,y.RB.REPORT_EDIT),canRun:l(y.RB.REPORT_RUN),canPublish:l(y.RB.PACKAGE_IMPORT,y.RB.PACKAGE_EXPORT),canManageEtl:l(y.RB.ETLSOURCE_ADD,y.RB.ETLSOURCE_EDIT,y.RB.ETLMONITOR_ADD,y.RB.ETLMONITOR_EDIT)}}let S="-esm-report-builder__report-builder-shell__shell___e5zQZ",T="-esm-report-builder__report-builder-shell__leftNav___Q9bGN",C="-esm-report-builder__report-builder-shell__main___p4fac",w=[{items:[{label:"Home",path:"/",icon:s.ww,required:[y.RB.REPORT_VIEW]},{label:"Run Reports",path:"/run",icon:d.jG,required:[y.RB.REPORT_RUN]},{label:"Dashboards",path:"/dashboards",icon:c.xh,required:[y.RB.DASHBOARD_VIEW]}]},{title:"Report Design",icon:m.vd,items:[{label:"Aggregate Reports",path:"/reports",icon:u.pl,required:[y.RB.REPORT_VIEW],activePaths:["/new","/edit"]},{label:"Linelist Reports",path:"/linelist",icon:p.B8,required:[y.RB.REPORT_VIEW]},{label:"Indicators",path:"/indicators",icon:_.n5,required:[y.RB.INDICATOR_VIEW]},{label:"Sections",path:"/sections",icon:p.zg,required:[y.RB.SECTION_VIEW]}]},{title:"Admin",icon:g.wB,activePaths:["/admin"],items:[{label:"Import / Export",path:"/import-export",icon:E.Qp,required:[y.RB.PACKAGE_IMPORT,y.RB.PACKAGE_EXPORT]},{label:"Dashboards",path:"/admin/dashboards",required:[y.RB.DASHBOARD_VIEW]},{label:"Report Categories",path:"/admin/report-categories",required:[y.RB.CATEGORY_VIEW]},{label:"Report Library",path:"/admin/report-library",required:[y.RB.LIBRARY_VIEW]},{label:"Data Themes",path:"/admin/themes",required:[y.RB.THEME_VIEW]},{label:"Age Categories",path:"/admin/age-categories",required:[y.RB.AGEGROUP_VIEW]},{label:"Age Groups",path:"/admin/age-groups",required:[y.RB.AGEGROUP_VIEW]}]},{title:"ETL",icon:c.EN,items:[{label:"Sources",path:"/admin/etl-sources",icon:c.EN,required:[y.RB.ETLSOURCE_VIEW]},{label:"Tasks",path:"/admin/etl-tasks",icon:f.YZ,required:[y.RB.PACKAGE_IMPORT]},{label:"Data Browser",path:"/admin/etl-browser",icon:f.vx,required:[y.RB.ETLSOURCE_VIEW]},{label:"Monitoring",path:"/admin/etl-monitors",icon:b.Il,required:[y.RB.ETLMONITOR_VIEW]}]}],N=()=>n().createElement("div",{className:S},n().createElement("aside",{className:T}),n().createElement("main",{className:C},n().createElement(o.OuH,{description:"Loading…"}))),I=()=>{let e=(0,i.Zp)(),t=(0,i.zy)(),{has:r}=v(),a=(e,r)=>t.pathname===e||t.pathname.startsWith(`${e}/`)||(r??[]).some(e=>t.pathname===e||t.pathname.startsWith(`${e}/`)),l=n().useMemo(()=>w.map(e=>({...e,items:e.items.filter(e=>r(...e.required))})).filter(e=>e.items.length>0),[r]);return n().createElement("div",{className:S},n().createElement("aside",{className:T},n().createElement(o.f8J,{expanded:!0,isPersistent:!1,"aria-label":"Report Builder navigation"},n().createElement(o.BC4,null,0===l.length&&n().createElement(o.ldn,null,"No accessible sections — contact your administrator"),l.map(t=>t.title?n().createElement(o.whj,{key:t.title,renderIcon:t.icon,title:t.title,isActive:t.items.some(e=>a(e.path,e.activePaths))||(t.activePaths??[]).some(e=>a(e)),defaultExpanded:!1},t.items.map(t=>n().createElement(o.ldn,{key:t.path,renderIcon:t.icon,isActive:a(t.path,t.activePaths),onClick:()=>e(t.path)},t.label))):t.items.map(t=>n().createElement(o.VxE,{key:t.path,renderIcon:t.icon,isActive:a(t.path,t.activePaths),onClick:()=>e(t.path)},t.label)))))),n().createElement("main",{className:C},n().createElement(i.sv,null)))},k=()=>n().createElement(a.Suspense,{fallback:n().createElement(N,null)},n().createElement(I,null));var A=r(587);let R="-esm-report-builder__report-builder-landing-page__card___pW8QE",O="-esm-report-builder__report-builder-landing-page__cardIllustration___uvcVt",D="-esm-report-builder__report-builder-landing-page__illCircle___e6GFs",x="-esm-report-builder__report-builder-landing-page__cardTitle___PNSRg",L="-esm-report-builder__report-builder-landing-page__cardBody___+Lg5s",M="-esm-report-builder__report-builder-landing-page__cardActions___PGmJw",$="-esm-report-builder__report-builder-landing-page__cardButton___2JTf-";var P=r(2383),U=r(9184);let B=()=>n().createElement("svg",{height:"64",width:"64",viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg",xmlSpace:"preserve",fillRule:"evenodd",clipRule:"evenodd",strokeLinejoin:"round",strokeMiterlimit:"2"},n().createElement("path",{d:"M27 31.36H8a.36.36 0 0 1-.36-.36v-1.64H6a.36.36 0 0 1-.36-.36v-1.64H5a.36.36 0 0 1-.36-.36V3A.36.36 0 0 1 5 2.64h4.64V2a.36.36 0 0 1 .36-.36h1.64V1A.36.36 0 0 1 12 .64h4a.36.36 0 0 1 .36.36v.64H18a.36.36 0 0 1 .36.36v.64H23a.36.36 0 0 1 .36.36v1.64H25a.36.36 0 0 1 .36.36v1.64H27a.36.36 0 0 1 .36.36v24a.36.36 0 0 1-.36.36Z",fill:"#d2e5e5"}),n().createElement("path",{d:"M8.36 30.64h18.28V7.36h-1.28V29a.36.36 0 0 1-.36.36H8.36v1.28Z",fill:"#8abab8"}),n().createElement("path",{d:"M5.36 26.64h17.28V3.36h-4.28V4a.36.36 0 0 1-.36.36h-8A.36.36 0 0 1 9.64 4v-.64H5.36v23.28Z",fill:"#8abab8"}),n().createElement("path",{fill:"#fff",d:"M7.5 12.64h13v.72h-13zM7.5 8.64h13v.72h-13zM7.5 20.64h13v.72h-13zM7.5 16.64h13v.72h-13z"}),n().createElement("path",{d:"M10.36 3.64h7.28V2.36H16a.36.36 0 0 1-.36-.36v-.64h-3.28V2a.36.36 0 0 1-.36.36h-1.64v1.28ZM6.36 28.64h18.28V5.36h-1.28V27a.36.36 0 0 1-.36.36H6.36v1.28Z",fill:"#8abab8"})),F="-esm-report-builder__header__metaItem___NGbY6",z="-esm-report-builder__header__metaDot___l+Lag",q="-esm-report-builder__header__value___h5VzH";async function j(e,t,r=!0){return await new Promise(e=>setTimeout(e,500)),{title:"AI Assist (Preview)",body:`Coming soon ✅
|
|
2
2
|
|
|
3
3
|
Prompt:
|
|
4
4
|
${e}
|
|
@@ -304,7 +304,37 @@ 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:aC(u.dhis2DatasetId)||void 0,periodType:aC(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:aC(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(aN,{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(ak,{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(aA,{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(aR,{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 aD=r(1672);async function ax(e,t){let{data:r}=await (0,aD.jX)((0,h.openmrsFetch)("/ws/rest/v1/reportbuilder/sectionpreview",{method:"POST",headers:{"Content-Type":"application/json"},body:e,signal:t}));return r}function aL(e){return String(e??"").trim().toLowerCase()}function aM(e){return e?e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'"):e}function a$(e){let t=(e.columns??[]).map(aL);return t.includes("age_group")&&t.includes("gender")&&t.includes("value")}function aP(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 aU({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 ax({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&&a$(e)),r=(e,t)=>(e.columns??[]).findIndex(e=>aL(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=aP(e),a=aP(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:aM(e.name||e.code||e.indicatorUuid),kind:e.kind??"",error:e.error??""};for(let e of o)a[e.key]=0;if(!e.error&&a$(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||!a$(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: ${aM(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:aM(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,". ",aM(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 aB=()=>{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),r_({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(aO,{open:d,onClose:()=>c(!1),onSubmit:U,indicators:f,mode:"create",initialSection:null}),n().createElement(aO,{open:R,onClose:()=>{O(!1),x(null)},onSubmit:U,indicators:f,mode:"edit",initialSection:D}),n().createElement(aU,{open:w,onClose:()=>{N(!1),k(null)},section:I}))},aF="-esm-report-builder__report-visualizer__explorerPanel___w0VjU",az="-esm-report-builder__report-visualizer__panelHeader___UvhIe",aq="-esm-report-builder__report-visualizer__panelTitle___gfz5J",aj="-esm-report-builder__report-visualizer__panelContent___F09Qx",aH="-esm-report-builder__report-visualizer__emptyState___AQyxI";var aJ=r(2272),aG=r(4353),aV=r.n(aG);let aW=e=>(0,aD.jX)((0,h.openmrsFetch)(e));async function aK(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,aD.jX)((0,h.openmrsFetch)(`${h.restBaseUrl}/reportbuilder/reportingDefinition?${r.toString()}`,{signal:t}))}async function aQ(e,t){let r=`${h.restBaseUrl}/sendreport?uuid=${e}`,a=new AbortController;return(0,aD.jX)((0,h.openmrsFetch)(r,{method:"POST",signal:a.signal,headers:{"Content-Type":"application/json"},body:{...t}}))}let aY=e=>aV()(e).format("YYYY-MM-DD");function aX(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 aZ="reportVisualizer.preferences",a0={explorerExpanded:!0,explorerWidth:350,rowsPerPage:25,lastActiveView:void 0},a1=({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"}}))},a2=({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}))),a5=({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"}))},a6=({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"}})))}))},a3=[{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 a4(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 a8(e){return aV()(e).format("YYYY-MM-DD")}let a7=({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"}))},a9=({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"})},ne=({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)}})},nt=({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 nr(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 na(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 nn(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 nl(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 ni=({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 nr(!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"}))},no=({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 na(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"}))},ns=({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 nn(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"}))},nd=({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 nl(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"}))},nc=({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"})},nm=({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}=a4(e),n={...t};_.forEach((e,t)=>{0===t?n[e.name]=a8(r):1===t&&(n[e.name]=a8(a))}),l(n)}})(e.target.value),size:"sm"},n().createElement(o.ebT,{value:"",text:"Select period"}),a3.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(a7,{key:e.name,...o});case"NUMBER":return n().createElement(a9,{key:e.name,...o});case"BOOLEAN":return n().createElement(ne,{key:e.name,...o});case"LIST":return n().createElement(nt,{key:e.name,...o});case"LOCATION":return n().createElement(ni,{key:e.name,...o});case"CONCEPT":return n().createElement(no,{key:e.name,...o});case"IDENTIFIER_TYPE":return n().createElement(ns,{key:e.name,...o});case"PERSON_ATTRIBUTE":return n().createElement(nd,{key:e.name,...o});default:return n().createElement(nc,{key:e.name,...o})}})(e))})))},nu=({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")),np=({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:""))},n_=({onExpand:e,onRunReport:t,searchActive:r,categoryCount:a,selectedTagCount:l,matchingReportCount:i,hasDateParams:s,hasLocationParams:c,hasOtherParams:u,hasSelectedReport:E})=>n().createElement("aside",{className:`${aF} -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(np,{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(np,{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(np,{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(np,{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(np,{icon:es.yo,label:"Reports",badge:i})),s&&n().createElement(o.m_M,{align:"right",direction:"right",label:"Date parameters"},n().createElement(np,{icon:_.Vv,label:"Date parameters",badge:!0})),c&&n().createElement(o.m_M,{align:"right",direction:"right",label:"Location parameters"},n().createElement(np,{icon:p.aZ,label:"Location parameters",badge:!0})),u&&n().createElement(o.m_M,{align:"right",direction:"right",label:"Other parameters"},n().createElement(np,{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(np,{icon:d.jG,label:E?"Run report":"Select a report",onClick:t,disabled:!E,isPrimaryAction:!0})))),ng=({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(n_,{onExpand:a,onRunReport:S,searchActive:w,categoryCount:N,selectedTagCount:I,matchingReportCount:k,hasDateParams:A,hasLocationParams:R,hasOtherParams:O,hasSelectedReport:D}):n().createElement("aside",{className:`${aF}`,style:{width:t}},n().createElement("div",{className:az},n().createElement("h3",{className:aq},"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:aj},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(a1,{value:d,onChange:E,disabled:T}),n().createElement(a2,{categories:l,selectedCategory:c,onSelect:f,disabled:T}),i.length>0&&n().createElement(a5,{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(nm,{parameters:p,values:_,errors:g,onChange:h,onReset:v,disabled:C}),n().createElement("div",{style:{marginTop:"0.75rem"}},n().createElement(nu,{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(a6,{reports:s,selectedReportUuid:u,onSelect:y,loading:T}))))},nE=({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})))},nf=({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"))))},nb=({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(nE,{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(nf,{onExport:i,disabled:d,loading:d})));var ny=r(5576);let nh=({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(ny.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")))),nv=({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}))},nS={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"},nT=({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}}))))))))},nC=({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(nT,{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 nS[t]?nS[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)}}))}))},nw=({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:az},e?n().createElement(nb,{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:aq},"Report Workspace")),n().createElement("div",{className:aj},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:aH},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:aH},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(nh,{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(nC,{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(nC,{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(nC,{data:t.data,columns:t.columns||[],onRefresh:u,title:e.name})),"REPORT_LAYOUT"===l&&a&&n().createElement(nv,{htmlContent:a,reportName:e.name}),"REPORT_LAYOUT"===l&&!a&&t?.data&&n().createElement(nC,{data:t.data,columns:t.columns||[],onRefresh:u,title:e.name}))))},nN=()=>{let e,{preferences:t,setExplorerExpanded:r,setLastActiveView:l,isLoaded:i}=function(){let[e,t]=(0,a.useState)(a0),[r,n]=(0,a.useState)(!1);(0,a.useEffect)(()=>{try{let e=localStorage.getItem(aZ);if(e){let r=JSON.parse(e);t({...a0,...r})}}catch(e){console.error("Failed to load preferences:",e)}finally{n(!0)}},[]),(0,a.useEffect)(()=>{if(r)try{localStorage.setItem(aZ,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(a0)},[]),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,aJ.u)(e,aW);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=aX(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=>{aX(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,aJ.u)(e,aW);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||aY(new Date),endDate:F.endDate||aY(new Date),renderType:"html",parameters:F};console.log("Executing report:",U.name),console.log("Request params:",e);let t=await aK(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||aY(new Date),endDate:F.endDate||aY(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,aD.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 aQ(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(ng,{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(nw,{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})))},nI=[{key:"name",header:"Name"},{key:"code",header:"Code"},{key:"domain",header:"Domain"},{key:"description",header:"Description"},{key:"actions",header:""}];function nk({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:nI},({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 nA=[{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 nR({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})},nA.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 nO(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 nD(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(nO).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 nx(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 nL(e,t){let r=await (0,W.wO)(`/etltablecolumn?table=${encodeURIComponent(e)}`,t);return Array.isArray(r)?nx(r):nx(r?.columns??r?.results??[])}function nM(e){return"string"==typeof e?String(e):e?.name??e?.table??e?.tableName??""}function n$({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),nD(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),nL(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(nM).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:"patient_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 nP=["string","number","date","datetime","boolean","coded","json"];function nU({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})},nP.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 nB=["CONCEPT_SEARCH","QUESTION_ANSWER_CONCEPT_SEARCH","TEXT","NUMBER","DATE_RANGE","BOOLEAN","LOCATION_PICKER","CODED_LIST"],nF=["EQUALS","IN","NOT_IN","LIKE","BETWEEN","GTE","LTE","IS_NULL","IS_NOT_NULL"],nz=["conceptUuid","conceptId","string","number","date","datetime","boolean"];function nq(){return`${Date.now()}_${Math.random().toString(16).slice(2)}`}function nj(e,t){let r=(e??"").trim(),a=(t??"").trim();return r&&a?`QA(${r},${a})`:""}function nH(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:nq(),_columnMode:"qa",_qaQuestionCol:n.questionCol,_qaAnswerCol:n.answerCol};if("QUESTION_ANSWER_CONCEPT_SEARCH"===e.handler)return{...e,_id:nq(),_columnMode:"qa",_qaQuestionCol:"",_qaAnswerCol:""};let l=t.includes(e.column);return{...e,_id:nq(),_columnMode:l?"pick":"custom"}})}function nJ({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(()=>nH(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(nH(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:nj(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:nj(t._qaQuestionCol??"",t._qaAnswerCol??"")}):g(t._id,{handler:r,_columnMode:"qa"===t._columnMode?"pick":t._columnMode,column:"qa"===t._columnMode?"":t.column})}},nB.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:nj(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:nj(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:nj(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})},nF.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})},nz.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:nq(),_columnMode:"pick",key:`cond_${e+1}`,label:"",handler:"CONCEPT_SEARCH",column:"",operator:"IN",valueType:"conceptUuid"})])}},"Add condition")))}var nG=r(810);let nV=[{key:"Report",label:"Report",Icon:u.pl},{key:"ChartColumn",label:"Chart",Icon:_.n5},{key:"Medication",label:"Medication",Icon:nG.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:tN.$$},{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}],nW=["BASE","FINAL"];function nK(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 nQ({value:e,onChange:t,open:r}){var a;let l=nK(e.color),i=(a=e.icon,nV.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:[...nV],disabled:!r,itemToString:e=>e?e.label:"",selectedItem:nV.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:nK(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:nK(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:nW,disabled:!r,itemToString:e=>e?String(e):"",initialSelectedItems:e.allowedIndicatorKinds??[],onChange:r=>{let a=r?.selectedItems??[];t({...e,allowedIndicatorKinds:a})},label:"Select kinds"})))}function nY({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 nX={sourceTable:"",patientIdColumn:"",dateColumn:"",locationColumn:"",fields:[],conditions:[]},nZ={icon:"",color:"#0f62fe",category:"",order:0,beta:!1,descriptionShort:"",allowedIndicatorKinds:["BASE","FINAL"]};function n0(e){return(e??"").toUpperCase().replace(/[^A-Z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,30)}function n1(e,t){try{if(!e)return t;return JSON.parse(e)??t}catch{return t}}function n2(e){return JSON.stringify({metaJson:e},null,2)}function n5({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(nX),[y,h]=n().useState(JSON.stringify(nX,null,2)),[v,S]=n().useState(nZ),[T,C]=n().useState(n2(nZ)),[,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=n1(e,nX),r=t&&"object"==typeof t&&t.configJson&&"object"==typeof t.configJson?t.configJson:t,a={...nX,...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=n1(r.metaJson,nZ))&&"object"==typeof e&&e.metaJson&&"object"==typeof e.metaJson?{...nZ,...e.metaJson}:{...nZ,...e};S(a),C(n2(a))}else c(""),u(""),_("OBSERVATIONS"),E(""),b(nX),h(JSON.stringify(nX,null,2)),S(nZ),C(n2(nZ))},[e,r]),n().useEffect(()=>{if(!e)return;let t=new AbortController;return I(!0),A(null),w([]),nD(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([]),nL(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??nX,null,2))},[f]),n().useEffect(()=>{C(n2(v??nZ))},[v]);let $=e&&!N&&!k,P=$&&!!d.trim()&&!!(m.trim()||n0(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()||n0(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(nR,{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(n$,{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(nU,{config:f,onChange:b,open:e}):null,"conditions"===i?n().createElement(nJ,{open:e,config:f,onChange:b,columns:R,loadingCols:D}):null,"metadata"===i?n().createElement(nQ,{value:v,onChange:S,open:e}):null,"preview"===i?n().createElement(nY,{config:f,metaJson:T,onConfigJson:h}):null)):null))}function n6(){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),tx(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 tL(e);S(t),g(!0)}catch(e){p(e?.message??"Failed to load theme for editing")}finally{m(!1)}},w=async e=>{await tP(e,!1);let t=new AbortController;await T(t.signal)},N=async e=>{if("create"===E)await tM(e);else{if(!e.uuid)throw Error("Missing uuid for update");await t$(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(nk,{rows:s,onEdit:C,onDelete:w,canEdit:r,canDelete:a}),n().createElement(n5,{open:_,mode:E,initial:h,onClose:()=>g(!1),onSave:N}))}let n3={minHeight:"10rem"};function n4(){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:n3,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 n8=[{key:"name",header:"Name"},{key:"description",header:"Description"},{key:"status",header:"Status"},{key:"actions",header:"Actions"}],n7={name:"",description:""},n9=()=>{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(n7),[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(n7),_(!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:n8},({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}))}))))},le=()=>{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),rM(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))))))))))))},lt=[{key:"label",header:"Label"},{key:"category",header:"Category"},{key:"range",header:"Range (days)"},{key:"sortOrder",header:"Sort Order"},{key:"status",header:"Status"}],lr=()=>{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),rM(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:lt},({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")))})))))))},la="/reportbuilder/reportlibrary";async function ln(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)(`${la}?${a.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid)}async function ll(e,t){return(0,W.oV)(la,e,t)}async function li(e,t,r){return(0,W.oV)(`${la}/${encodeURIComponent(e)}`,t,r)}async function lo(e,t="Retired from report library",r){return(0,W.hI)(`${la}/${encodeURIComponent(e)}?reason=${encodeURIComponent(t)}`,r)}let ls=[{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"}],ld={name:"",description:"",code:"",sourceType:"LEGACY",reportType:"AGGREGATE",reportDefinitionUuid:"",reportBuilderReportUuid:"",category:"",migrated:!1,metaJson:"{}"};function lc(e){return e?"string"==typeof e?e:e.uuid??"":""}function lm(e){return e?"string"==typeof e?e:e.name??e.uuid??"—":"—"}function lu(){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(ld),[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([ln(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 ll(e):S?.uuid&&await li(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 lo(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)||lm(t.category).toLowerCase().includes(e),a=!k||t.sourceType===k,n=!R||t.reportType===R,l=!D||lc(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:lm(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(ld),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:ls},({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,lm(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:lc(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 lp="/reportbuilder/etlsource";async function l_(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)(`${lp}?${a.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid)}async function lg(e,t){return(0,W.oV)(lp,e,t)}async function lE(e,t,r){return(0,W.oV)(`${lp}/${encodeURIComponent(e)}`,t,r)}async function lf(e,t="Retired from Report Builder Admin",r){let a=new URLSearchParams;return a.set("reason",t),(0,W.hI)(`${lp}/${encodeURIComponent(e)}?${a.toString()}`,r)}let lb=[{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"}],ly={name:"",code:"",description:"",tablePatterns:"",schemaName:"",sourceType:"",active:!0};function lh(){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(ly),[C,w]=n().useState(!1),N=n().useCallback(async e=>{c(!0),u(null);try{let t=await l_(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 lg(e):f?.uuid&&await lE(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 lf(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(ly),_(!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:lb},({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 lv=r(6942),lS=r.n(lv);async function lT(e){try{let t=await (0,aD.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 lC(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 lT(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 lw(e){try{let t=await (0,aD.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 lN=["password","secret","token","authorization","cookie","session","sessionid","jsessionid","apikey","api_key","apikey","auth","credentials","private","key"];async function lI(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 lN.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 lk(e){return e?Array.isArray(e)?e:Array.isArray(e.results)?e.results:[]:[]}let lA="/reportbuilder/etl-monitor";async function lR(e,t){let r=new URLSearchParams;return r.set("v","full"),e?.trim()&&r.set("q",e.trim()),lk(await (0,W.wO)(`${lA}?${r.toString()}`,t)).filter(e=>!!e?.uuid)}async function lO(e){let t=new URLSearchParams;return t.set("v","full"),t.set("activeOnly","true"),lk(await (0,W.wO)(`${lA}?${t.toString()}`,e)).filter(e=>!!e?.uuid)}async function lD(e,t){let r=new URLSearchParams;return r.set("v","full"),(0,W.wO)(`${lA}/${encodeURIComponent(e)}?${r.toString()}`,t)}async function lx(e,t){return(0,W.oV)(lA,e,t)}async function lL(e,t,r){return(0,W.oV)(`${lA}/${encodeURIComponent(e)}`,t,r)}async function lM(e,t="Retired from Report Builder Admin",r){let a=new URLSearchParams;return a.set("reason",t),(0,W.hI)(`${lA}/${encodeURIComponent(e)}?${a.toString()}`,r)}async function l$(e,t){let r=await lD(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 lP=r(4676);let lU=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function lB(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 lF(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()} ${lU[e.getMonth()]}, ${l}`}function lz(e){let t=lB(e);return t?lF(t):null==e||""===e?"—":String(e)}function lq(e,t){let r=lB(e);return r&&"number"==typeof t&&isFinite(t)&&!(t<=0)?new Date(r.getTime()+1e3*t):null}function lj(e){return e?lF(e):"Not scheduled"}let lH=/duration|elapsed|runtime/i,lJ=/sec/i,lG=/milli|_ms\b|ms$/i;function lV(e,t){return lG.test(t)?e:lJ.test(t)||e<1e3?1e3*e:e}let lW=/^(status|state)$/i;function lK(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:lW.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 lQ={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"},lY={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"},lX={STATUS_CARD:"STATUS_CARD",PROGRESS_BAR:"PROGRESS",DATA_TABLE:"TABLE",TIME_SERIES:"TABLE",ERROR_LOG:"TABLE",METRICS_GRID:"METRICS_GRID"};function lZ(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&&lX[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)&&lQ[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=lY[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 l0(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 l1=r(6434);function l2({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 l5={"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 l6({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:`${l5["etl-monitor-card-shell"]} ${l5[`etl-monitor-card-shell--${c}`]}`},n().createElement("div",{className:l5["etl-monitor-card-shell__header"]},n().createElement("h4",{className:l5["etl-monitor-card-shell__title"]},e),n().createElement("div",{className:l5["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:l5["etl-monitor-card-shell__content"]},r&&n().createElement("div",{className:l5["etl-monitor-card-shell__loading"]},n().createElement(o.OuH,{description:"Loading..."})),!r&&a&&n().createElement("div",{className:l5["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 l3({icon:e,message:t,description:r}){return n().createElement("div",{className:l5["etl-monitor-card-shell__empty"]},e||n().createElement(tb.BF,{size:32}),n().createElement("p",{className:l5["etl-monitor-card-shell__empty-message"]},t),r&&n().createElement("p",{className:l5["etl-monitor-card-shell__empty-description"]},r))}function l4({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=l0(e.displayConfigJson),r=2===t.version?t.config:lZ(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(l2,{loading:a,onRefresh:l,actions:[{label:"Edit monitor",onClick:()=>c(`${d}?mode=edit&monitor=${e.uuid}`)}]},n().createElement(l1.MonitorRenderer,{config:u,data:t?.rawResponse,loading:a,error:r??null})):n().createElement(l6,{title:m,loading:a,error:r,onRefresh:l,size:"lg"},n().createElement(l3,{message:"Invalid monitor configuration"}))}let l8={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"},l7=/running|in.?progress|processing/i,l9=/fail|error/i,ie="All types";function it(e){return e?.name==="AbortError"||/abort/i.test(String(e?.message))}function ir(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 ia({label:e,value:t}){return n().createElement("div",{className:l8.metaItem},n().createElement("span",{className:l8.metaLabel},e),n().createElement("span",{className:l8.metaValue,title:t},t))}function il({icon:e,iconTone:t,label:r,value:a,subtext:l}){return n().createElement(o.FAs,{className:l8.kpiCard},n().createElement("span",{className:lS()(l8.kpiIcon,l8[`kpiIcon${t}`])},e),n().createElement("div",{className:l8.kpiText},n().createElement("span",{className:l8.kpiLabel},r),n().createElement("span",{className:l8.kpiValue},a),n().createElement("span",{className:l8.kpiSubtext},l)))}function ii({tab:e,label:t,count:r,activeTab:a,onSelect:l}){return n().createElement("button",{type:"button",className:lS()(l8.filterTab,a===e&&l8.filterTabActive),onClick:()=>l(e)},t,n().createElement("span",{className:l8.countChip},r))}function io(){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)(ie),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?lC(r,e):Promise.resolve({tasks:[],unknownNames:[]}),l.length>0?lR(void 0,e).catch(e=>(it(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){it(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 l$(e,t);k(t=>({...t,[e]:r})),x(t=>{let r={...t};return delete r[e],r})}catch(t){it(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?lK(Y,l7):void 0,[Q,Y]),Z=(0,a.useMemo)(()=>Q.length>0?lK(Y,l9):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=lq(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=>ir(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!==ie&&!e.unknown&&ir(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 lw(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:l8.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:l8.kpiGrid},n().createElement(il,{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:lz(er)}):e("noMonitorsHint","No monitors configured")}),n().createElement(il,{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(il,{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(il,{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(il,{icon:n().createElement(ny.gX,{size:22}),iconTone:"info",label:e("nextScheduledRun","Next scheduled run"),value:ea?lj(ea.date):e("dash","—"),subtext:ea?.name??e("notScheduled","Not scheduled")})),n().createElement("section",null,n().createElement("div",{className:l8.toolbar},n().createElement("div",null,n().createElement("h4",{className:l8.toolbarHeading},e("configuredTasks","Configured Tasks")),n().createElement("p",{className:l8.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:l8.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:l8.searchBox}),n().createElement(o.msM,{id:"etl-task-type-filter",size:"sm",type:"inline",titleText:e("filter","Filter"),label:B,items:[ie,...en],selectedItem:B,onChange:({selectedItem:e})=>F(e??ie)}),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:l8.filterTabs},n().createElement(ii,{tab:"all",label:e("all","All"),count:K.length,activeTab:$,onSelect:P}),n().createElement(ii,{tab:"active",label:e("active","Active"),count:ei,activeTab:$,onSelect:P}),n().createElement(ii,{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:l8.emptyState},n().createElement(g.wB,{size:48,className:l8.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:l8.emptyState},n().createElement(g.wB,{size:48,className:l8.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:l8.emptyState},n().createElement(g.wB,{size:48,className:l8.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:l8.tasksGrid},el.map(t=>{var r;let a,l;if(t.unknown)return n().createElement(o.FAs,{key:t.name,className:l8.taskCard},n().createElement("div",{className:l8.cardHead},n().createElement("span",{className:lS()(l8.cardIcon,l8.cardIconMuted)},n().createElement(_._C,{size:20})),n().createElement("div",{className:l8.cardHeadText},n().createElement("h4",{className:l8.cardTitle},t.name),n().createElement("p",{className:l8.cardDescription},e("unknownTaskDescription","Configured in etlTasks.tasks but no matching OpenMRS task definition was found."))),n().createElement("span",{className:lS()(l8.statusPill,l8.statusPillUnknown)},e("unknown","Unknown"))),n().createElement("div",{className:l8.metaRow},n().createElement(ia,{label:e("lastRun","Last run"),value:"—"}),n().createElement(ia,{label:e("duration","Duration"),value:"—"}),n().createElement(ia,{label:e("nextRun","Next run"),value:e("notScheduled","Not scheduled")})),n().createElement("div",{className:l8.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=lq(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(lH.test(t)){let r=function(e,t){if(null==t||""===t)return null;if("number"==typeof t&&isFinite(t))return(0,lP.a3)(lV(t,e));if("string"==typeof t){let r=t.trim();if(!r)return null;let a=Number(r);return isNaN(a)||""===r?r:(0,lP.a3)(lV(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:l8.taskCard},n().createElement("div",{className:l8.cardHead},n().createElement("span",{className:l8.cardIcon},n().createElement(_._C,{size:20})),n().createElement("div",{className:l8.cardHeadText},n().createElement("h4",{className:l8.cardTitle,title:t.name},t.name),n().createElement("p",{className:l8.cardDescription,title:t.definition?.description||t.definition?.taskClass},t.definition?.description||t.definition?.taskClass)),n().createElement("span",{className:lS()(l8.statusPill,i?l8.statusPillActive:l8.statusPillInactive)},i?e("active","Active"):e("inactive","Inactive"))),n().createElement("div",{className:l8.metaRow},n().createElement(ia,{label:e("lastRun","Last run"),value:lz(t.definition?.lastExecutionTime)}),n().createElement(ia,{label:e("duration","Duration"),value:c}),n().createElement(ia,{label:e("nextRun","Next run"),value:lj(s)})),n().createElement("div",{className:l8.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:l8.monitorMissing},e("monitorNotFound","Monitor not found"))),m&&n().createElement("div",{className:l8.executingStatus},n().createElement(o.OuH,{description:e("executingTask","Executing task...")})))}))),n().createElement("section",{ref:z},n().createElement("div",{className:l8.sectionHeading},n().createElement("h4",{className:l8.toolbarHeading},e("liveExecution","Live Execution")),n().createElement("p",{className:l8.toolbarSubtext},e("liveExecutionHint","Monitor progress and status for currently running ETL tasks."))),ep?n().createElement("div",{className:l8.monitorsGrid},j.map(t=>t.monitor?n().createElement(l4,{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:l8.monitorMissingCard},n().createElement("p",{className:l8.monitorMissingTitle},t.ref),n().createElement("p",{className:l8.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:l8.liveEmpty},n().createElement(g.wB,{size:40,className:l8.emptyStateIcon}),n().createElement("p",{className:l8.liveEmptyTitle},e("noTaskRunning","No ETL task currently running")),n().createElement("p",{className:l8.liveEmptyHint},ea?n().createElement(n().Fragment,null,e("nextScheduledIs","The next scheduled task is")," ",n().createElement("strong",null,ea.name," — ",lj(ea.date)),"."):e("liveExecutionConfigureHint","Configure etlTasks.progressMonitors to see live progress from your ETL monitors here."))))))}function is(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),nD(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 id(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),nL(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 ic=r(4213);function im(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 iu={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 ip({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:iu.pane},n().createElement("div",{className:iu.paneHeader},!s&&n().createElement(n().Fragment,null,n().createElement("span",{className:iu.paneTitle},"Data Sources"),n().createElement("span",{className:iu.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:iu.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:iu.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:iu.treeEmpty},"No sources match"),E.length>0&&n().createElement("ul",{className:iu.sourceList},E.map(e=>n().createElement("li",{key:e.id},n().createElement("button",{type:"button",className:lS()(iu.sourceRow,r===e.id&&iu.sourceRowSelected),onClick:()=>u(e.id)},n().createElement("span",{className:iu.sourceRowIcon},n().createElement(c.EN,{size:16})),n().createElement("span",{className:iu.sourceRowName},e.name),n().createElement(o.vwO,{size:"sm",type:"gray"},e.tables.length))))))))}function i_({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:iu.pane},n().createElement("div",{className:iu.paneHeader},!s&&n().createElement(n().Fragment,null,n().createElement("span",{className:iu.paneTitle},e),n().createElement("span",{className:iu.paneActions},c&&n().createElement("button",{type:"button",className:iu.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:iu.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:iu.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:iu.treeEmpty},"No tables match"),g.length>0&&n().createElement("ul",{className:iu.tableList},g.map(e=>{let t,a;return n().createElement("li",{key:e.name},n().createElement("button",{type:"button",className:lS()(iu.tableRow,r===e.name&&iu.tableRowSelected),onClick:()=>u(e.name)},n().createElement("span",{className:iu.tableRowIcon},n().createElement(f.vx,{size:18})),n().createElement("span",{className:iu.tableRowText},n().createElement("span",{className:iu.tableName},e.name),n().createElement("span",{className:iu.tableMeta},(t="number"==typeof e.rows?`${e.rows.toLocaleString()} rows`:"rows unknown",a=e.updateTime?(0,lP.fw)(e.updateTime,{pastOnly:!0}):"—",`${t} • ${a}`)))))})))))}let ig=[{key:"name",header:"Column"},{key:"type",header:"Data type"}];function iE({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:iu.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:iu.toolbar},n().createElement(o.vwO,{size:"sm",type:"cool-gray"},e.length," columns")),n().createElement(o.bQt,{rows:a,headers:ig,size:"sm"},({rows:e,headers:t,getHeaderProps:r,getRowProps:a,getTableProps:l})=>n().createElement(o.K3K,{className:iu.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 ib({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,lP.fw)(l,{pastOnly:!0}):"—"},{label:"Columns",value:r.length?String(r.length):"—"}];return n().createElement("div",null,n().createElement("div",{className:iu.metadataFacts},s.map(e=>n().createElement("div",{key:e.label,className:iu.infoCell},n().createElement("span",{className:iu.infoLabel},e.label),n().createElement("span",{className:iu.infoValue},e.value)))),n().createElement("h6",{className:iu.metadataHeading},"Column types"),0===i.byType.length?n().createElement("p",{className:iu.truncateNote},"Column metadata not loaded yet."):n().createElement("div",{className:iu.metadataTypes},i.byType.map(e=>n().createElement(o.vwO,{key:e.type,size:"sm",type:"cool-gray"},e.type,": ",e.count))))}let iy=[10,25,50,100];function ih({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:iu.toolbar},n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:u.wM,onClick:i},"Retry")),n().createElement("p",{className:iu.truncateNote},'Preview needs the "sql.execute" privilege and a valid table name.')):t?n().createElement("div",null,n().createElement("div",{className:iu.toolbar},n().createElement(o.vji,{size:"sm",className:iu.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:iu.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(im).join(",")];for(let e of t??[])r.push(e.map(im).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,ic.saveAs)(a,n)},disabled:0===t.rows.length},"Export CSV")),y&&n().createElement("p",{className:iu.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:iu.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:iu.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:iy,totalItems:g.length,onChange:({page:e,pageSize:t})=>{_(t),m(e)}}))):null}function iv(){return n().createElement("div",{className:iu.emptyState},n().createElement(tN.$$,{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 iS({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,lP.fw)(t.updateTime,{pastOnly:!0}):"—"}];return n().createElement("div",{className:iu.infoStrip},r.map(e=>n().createElement("div",{key:e.label,className:iu.infoCell},n().createElement("span",{className:iu.infoLabel},e.label),n().createElement("span",{className:iu.infoValue},e.value))))}let iT=["data","columns","metadata","relationships"];function iC({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 rB({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,lP.fw)(e.updateTime,{pastOnly:!0}):"—"}`];return n().createElement("div",{className:`${iu.pane} ${iu.detailPane}`},n().createElement("div",{className:iu.detailHeader},n().createElement("span",{className:iu.detailIcon},n().createElement(f.vx,{size:22})),n().createElement("div",{className:iu.detailHeaderText},n().createElement("h4",{className:iu.detailTitle,title:e.name},"Table: ",e.name),n().createElement("p",{className:iu.detailMeta},c.join(" "))),n().createElement("div",{className:iu.detailActions},n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:u.wM,onClick:d.refresh},"Refresh"))),n().createElement("div",{className:iu.detailBody},n().createElement(o.tUM,{selectedIndex:iT.indexOf(i),onChange:({selectedIndex:e})=>s(iT[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(ih,{table:e.name,data:d.data,loading:"loading"===d.status,error:d.error,onRefresh:d.refresh})),n().createElement(o.KpK,null,n().createElement(iE,{columns:r,loading:a,error:l})),n().createElement(o.KpK,null,n().createElement(ib,{table:e,source:t,columns:r})),n().createElement(o.KpK,null,n().createElement(iv,null)))),n().createElement(iS,{source:t,table:e})))}function iw(){return n().createElement("div",{className:`${iu.pane} ${iu.detailPane}`},n().createElement(o.FAs,{className:iu.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 iN(){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),nD(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(`.${iu.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),l_(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=id(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:iu.browserGrid},n().createElement("aside",{className:iu.paneWrap,style:{width:N?48:k}},n().createElement(ip,{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:iu.resizeHandle,role:"separator","aria-orientation":"vertical",onMouseDown:B}),n().createElement("aside",{className:iu.paneWrap,style:{width:O?48:x}},n().createElement(i_,{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:lS()(iu.resizeHandle,iu.resizeHandleBeforeDetail),role:"separator","aria-orientation":"vertical",onMouseDown:F}),Y?n().createElement(iC,{table:Y,source:Z,columns:er.columns,columnsLoading:er.loading,columnsError:er.error,activeTab:S,onTabChange:T}):n().createElement(iw,null)))}function iI(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 ik=["general","data-source","design","fields","preview"];function iA(e){let t=ik.indexOf(e);return -1===t||t===ik.length-1?null:ik[t+1]}function iR(e){let t=ik.indexOf(e);return t<=0?null:ik[t-1]}function iO(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 iD=r(8159);let ix=(0,a.createContext)(null);function iL(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,iD.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,iD.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,iD.X0)(e.componentType);a.design={componentSelected:t.valid,componentValid:t.valid};break}case"fields":{let t=(0,iD.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,iD.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 iI(e.mode);case"LOAD_MONITOR":return function(e){let t,r=iI("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(iM)):(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 iM(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 i$({children:e,mode:t,monitorId:l}){let[i,o]=(0,a.useReducer)(iL,iI("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),lD(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=>iO(e,i),[i]),_=(0,a.useCallback)(e=>iO(e,i),[i]),g=(0,a.useCallback)(()=>(0,iD.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 lL(s.uuid,n):await lx(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(ix.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(ix.Provider,{value:b},e))}function iP(){let e=(0,a.useContext)(ix);if(!e)throw Error("useBuilderContext must be used within BuilderProvider");return e}function iU(){let{updateState:e}=iP();return e}function iB(){let{state:e,dispatch:t,canAdvance:r}=iP(),l=(0,a.useCallback)(a=>{let n=ik.indexOf(e.currentStep),l=ik.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(ik[t])){e=!1;break}e&&t({type:"SET_CURRENT_STEP",payload:a})}},[e.currentStep,r,t]),i=(0,a.useCallback)(()=>{let t=iA(e.currentStep);t&&l(t)},[e.currentStep,l]),o=(0,a.useCallback)(()=>{let t=iR(e.currentStep);t&&l(t)},[e.currentStep,l]);return n().useMemo(()=>({currentStep:e.currentStep,goToStep:l,goToNextStep:i,goToPreviousStep:o,canGoNext:!!iA(e.currentStep),canGoPrevious:!!iR(e.currentStep)}),[e.currentStep,l,i,o])}let iF={"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 iz({state:e}){let t=(0,iD.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)]=iq(e):n[e.key]=iq(e)}),"DATA_TABLE"===a||"TABLE"===a||"ERROR_LOG"===a){let e=t.data?.arrayPath||"$.data";n[e.startsWith("$.")?e.slice(2):"data"]=[ij(r,0),ij(r,1,{status:"COMPLETED",result:"SUCCESS"}),ij(r,2,{status:"FAILED",result:"ERROR"})]}return n}(e,t);return n().createElement(l1.MonitorRenderer,{config:t,data:r,loading:!1,error:null})}function iq(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 ij(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]=iq(e,t)}),a}let iH="-esm-report-builder__generated-config-panel__generated-config-panel__tab___8Gn1P",iJ="-esm-report-builder__generated-config-panel__generated-config-panel__tab--active___J75Iw",iG=/("(?:\\.|[^"\\])*")(\s*:)?|\b(true|false|null)\b|(-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)/g;function iV(){let{state:e}=iP(),[t,r]=(0,a.useState)("json"),[l,i]=(0,a.useState)(!1),s=(0,a.useMemo)(()=>(0,iD.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(iG.lastIndex=0;t=iG.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=iG.lastIndex;return a<e.length&&r.push(e.slice(a)),r})(d),[d]),u=(0,a.useMemo)(()=>(0,iD.yn)(e),[e]),p=(0,a.useMemo)(()=>(0,iD.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:[iH,"visual"===t&&iJ].filter(Boolean).join(" "),onClick:()=>r("visual")},"Visual"),n().createElement("button",{type:"button",role:"tab","aria-selected":"json"===t,className:[iH,"json"===t&&iJ].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(iz,{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 iW=[{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 iK(){let{state:e}=iP(),t=iU(),{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,iD.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=iW.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..."}),iW.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(tN.$$,{size:16}),n().createElement("span",null,"You can configure the data source and design in the next steps.")))}let iQ="-esm-report-builder__data-source-step__data-source-step__auth-description___mPeA8",iY=[{value:"GET",label:"GET"},{value:"POST",label:"POST"},{value:"PUT",label:"PUT"},{value:"DELETE",label:"DELETE"}],iX=[{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 iZ({authType:e,authConfig:t,onChange:r}){return"NONE"===e?n().createElement("div",{className:iQ},"No authentication will be used for this endpoint."):"OPENMRS"===e?n().createElement("div",{className:iQ},"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 i0(){let{state:e}=iP(),t=iU(),{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 lI({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)},iY.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}}))}},iX.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(iZ,{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 i1=r(3654);let i2=[{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(i1.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(ny.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 i5({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(l1.MonitorRenderer,{config:t.config,data:t.data,loading:!1,error:null})}function i6(e,t){return!!t&&(t===e.type||(e.aliases?.includes(t)??!1))}function i3({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(i5,{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 i4(){let{state:e}=iP(),t=iU(),{componentType:r,detectedSchema:a}=e,l=()=>a?.recommendedComponent?a.recommendedComponent:null,i=l(),s=!!a&&a.fields.length>0,d=i2.find(e=>i6(e,r)),c=i?i2.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"},i2.map(e=>n().createElement(i3,{key:e.type,config:e,selected:i6(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(tN.$$,{size:16}),"Selected: ",d.label),n().createElement("p",null,d.description))),s&&c&&i6(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(tN.$$,{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 i8={"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"},i7=[{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"}],i9=[{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 oe({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:i8["status-mapping-modal"]},n().createElement("p",{className:i8["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:i8["status-mapping-row"]},n().createElement("div",{className:i8["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:i8["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:i8["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})},i9.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label})))))))))}function ot({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:i8["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?"},i7.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:i8["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 or({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:i8["field-row"]},n().createElement("div",{className:i8["field-row__drag"]},n().createElement("div",{className:i8["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:i8["field-row__content"]},n().createElement("div",{className:i8["field-row__main"]},n().createElement("div",{className:i8["field-row__info"]},n().createElement("div",{className:i8["field-row__header"]},n().createElement("span",{className:i8["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:i8["field-row__meta"]},n().createElement("span",{className:i8["field-row__path"]},e.path),n().createElement(o.vwO,{type:"purple",size:"sm"},e.type))),n().createElement("div",{className:i8["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(oe,{open:_,onClose:()=>g(!1),onSave:t=>{i({...e,statusMappings:t}),g(!1)},currentMappings:e.statusMappings||[],detectedValues:t?.sampleValue?[String(t.sampleValue)]:[]}))}function oa(){let{state:e}=iP(),t=iU(),{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,iD.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:i8["fields-step"]},n().createElement("div",{className:i8["fields-step__header"]},n().createElement("h2",null,"Field Mapping"),n().createElement("p",{className:i8["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:i8["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:i8["fields-step__list"]},n().createElement("div",{className:i8["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:i8["fields-step__fields"]},r.map((e,a)=>{let i=h.find(t=>t.path===e.path);return n().createElement(or,{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:i8["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:i8["fields-step__timestamp-config"]},n().createElement("div",{className:i8["fields-step__timestamp-header"]},n().createElement("h4",null,"Timestamp Format"),n().createElement("p",{className:i8["fields-step__timestamp-description"]},"Configure how timestamp fields are displayed")),n().createElement("div",{className:i8["fields-step__timestamp-settings"]},n().createElement("div",{className:i8["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:i8["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:i8["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:i8["fields-step__timestamp-helper"]},'Display timestamps as "2 minutes ago" instead of absolute time'))))),n().createElement(ot,{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 on={"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"},ol={NONE:"None",OPENMRS:"OpenMRS Session",BASIC:"Basic Auth",API_KEY:"API Key",BEARER_TOKEN:"Bearer Token"};function oi(){let{state:e,saveMonitor:t}=iP(),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,iD.stateToSavePayload)(e),[e]),v=function(e){if(e)return i2.find(t=>t.type===e||(t.aliases?.includes(e)??!1))}(e.componentType),S=(0,a.useMemo)(()=>(0,iD.yn)(e),[e]),T=(0,a.useMemo)(()=>(0,iD.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:ol[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(ny.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:on["preview-step"]},n().createElement("div",{className:on["preview-step__header"]},n().createElement("h2",null,"Preview & publish"),n().createElement("p",{className:on["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(l2,{loading:!1,onRefresh:()=>y(e=>e+1),actions:[{label:E?"Copied!":"Copy configuration JSON",onClick:R}]},v&&n().createElement("div",{className:on["preview-design-head"]},n().createElement("span",{className:on["preview-design-head__icon"],style:{backgroundColor:`${v.accent}1A`,color:v.accent}},v.icon),n().createElement("div",{className:on["preview-design-head__text"]},n().createElement("h3",{className:on["preview-design-head__title"]},v.label),n().createElement("p",{className:on["preview-design-head__desc"]},v.description))),n().createElement("div",{key:b},n().createElement(iz,{state:e}))),n().createElement("div",{className:on["preview-section"]},n().createElement("h4",null,"Configuration summary"),n().createElement("div",{className:on["preview-summary"]},I.map(e=>n().createElement("div",{key:e.label,className:on["preview-summary__item"]},n().createElement("span",{className:on["preview-summary__icon"]},e.icon),n().createElement("div",{className:on["preview-summary__text"]},n().createElement("div",{className:on["preview-summary__label"]},e.label),n().createElement("div",{className:on["preview-summary__value"]},e.value))))),n().createElement("div",{className:on["preview-section__divider"]}),n().createElement("h4",null,"Validation checklist"),n().createElement("div",{className:on["preview-checklist"]},k.map(e=>n().createElement("div",{key:e.label,className:on["preview-checklist__item"]},n().createElement("span",{className:[on["preview-checklist__icon"],e.pass?on["preview-checklist__icon--pass"]:on["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:on["preview-checklist__label"]},e.label),n().createElement("div",{className:on["preview-checklist__sub"]},e.sub)))))),n().createElement("div",{className:on["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 oo(){let e=(0,i.Zp)(),[t]=(0,l.ok)(),r=t.get("mode")||"create",a=t.get("monitor");return n().createElement(i$,{mode:r,monitorId:a??void 0},n().createElement(os,{onClose:()=>{e("/admin/etl-monitors")},mode:r}))}function os({onClose:e,mode:t}){let{state:r,saveMonitor:a,updateState:l}=iP(),{has:i}=v(),{currentStep:d,goToNextStep:c,goToPreviousStep:m,canGoNext:u,canGoPrevious:p}=iB(),[_,f]=n().useState(null),[b,h]=n().useState(!1),S=(0,iD.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:iF["etl-monitor-builder-page"]},n().createElement("header",{className:iF["builder-header"]},n().createElement("div",{className:iF["builder-header__breadcrumb"]},n().createElement("span",{className:iF["builder-header__category"]},A),n().createElement("span",{className:iF["builder-header__separator"]},"/"),n().createElement("span",{className:iF["builder-header__name"]},k)),n().createElement("div",{className:iF["builder-header__title"]},"create"===t?"New ETL Monitor":"Edit ETL Monitor"),n().createElement("div",{className:iF["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:iF["builder-content"]},n().createElement("div",{className:iF["builder-grid"]},n().createElement("div",{className:iF["builder-sidebar"]},n().createElement("nav",{className:iF["builder-steps-nav"],"aria-label":"Wizard steps"},n().createElement("ul",{className:iF["builder-steps-list"]},N.map((e,t)=>{let r=t<I?"completed":t===I?"current":"upcoming";return n().createElement("li",{key:e.id,className:`${iF["builder-step-item"]} ${iF[`builder-step-item--${r}`]}`},n().createElement("button",{type:"button",className:iF["builder-step-button"],"aria-current":"current"===r?"step":void 0},n().createElement("span",{className:iF["builder-step-number"]},"completed"===r?n().createElement(U._j,{size:16}):t+1),n().createElement("div",{className:iF["builder-step-content"]},n().createElement("span",{className:iF["builder-step-label"]},e.label),e.sublabel&&n().createElement("span",{className:iF["builder-step-sublabel"]},e.sublabel))))}))),n().createElement("div",{className:iF["builder-help-section"]},n().createElement(s._V,{size:16,className:iF["builder-help-icon"]}),n().createElement("div",{className:iF["builder-help-content"]},n().createElement("span",{className:iF["builder-help-label"]},"Need help?"),n().createElement("a",{href:"#",className:iF["builder-help-link"],onClick:e=>{e.preventDefault()}},"Learn how to create ETL monitors")))),n().createElement("div",{className:iF["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:iF["builder-step-content"]},(()=>{switch(d){case"general":default:return n().createElement(iK,null);case"data-source":return n().createElement(i0,null);case"design":return n().createElement(i4,null);case"fields":return n().createElement(oa,null);case"preview":return n().createElement(oi,null)}})())),n().createElement("div",{className:iF["builder-preview"]},"preview"===d?n().createElement(iV,null):n().createElement("div",{className:iF["builder-preview-panel"]},n().createElement("div",{className:iF["builder-preview-header"]},n().createElement("h4",null,"Live Preview"),n().createElement("p",{className:iF["builder-preview-description"]},"See how your monitor will appear in real-time")),n().createElement("div",{className:iF["builder-preview-content"]},r.componentType&&r.fields.length>0?n().createElement(n().Fragment,null,n().createElement(iz,{state:r}),r.componentType&&n().createElement("div",{className:iF["builder-preview-settings"]},n().createElement("div",{className:iF["builder-preview-settings-header"]},n().createElement("h5",null,"Selected Design Settings")),n().createElement("div",{className:iF["builder-preview-settings-content"]},n().createElement("div",{className:iF["builder-preview-setting"]},n().createElement("label",null,"Component"),n().createElement(o.vwO,{type:"purple"},r.componentType)),n().createElement("div",{className:iF["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:iF["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:iF["builder-preview-settings-note"]},n().createElement(tN.$$,{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:iF["builder-preview-config"]},n().createElement("div",{className:iF["builder-preview-config-header"]},n().createElement("h5",null,"Generated Configuration (JSON)")),n().createElement("pre",{className:iF["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:iF["builder-preview-empty"]},n().createElement("p",null,"Configure your data source and select a design to see the live preview"))))))))}function od({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 oc({open:e,mode:t,onClose:r,onSave:a}){let{state:l}=iP(),{currentStep:i,goToNextStep:s,goToPreviousStep:d,canGoNext:c,canGoPrevious:m}=iB(),[u,p]=n().useState(null),[_,f]=n().useState(!1),b=(0,iD.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(iK,null);case"data-source":return n().createElement(i0,null);case"design":return n().createElement(i4,null);case"fields":return n().createElement(oa,null);case"preview":return n().createElement(oi,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(od,{state:l})))))))}function om({open:e,mode:t,monitorId:r,onClose:a,onSave:l}){return e?n().createElement(i$,{mode:t,monitorId:r},n().createElement(oc,{open:e,mode:t,monitorId:r,onClose:a,onSave:l})):null}let ou=[{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"}],op={name:"",code:"",description:"",monitorType:"STATUS_CARD",category:"",refreshInterval:30,timeout:10,active:!0,apiUrl:"",apiMethod:"GET",authType:"NONE",authUsername:"",authPassword:"",authHeaderName:"",authApiKey:"",authToken:"",displayColumnsJson:""},o_=[{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)"}],og=[{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 oE(){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(op),[N,I]=n().useState(!1),[k,A]=n().useState(!1),R=n().useCallback(async e=>{u(!0),_(null);try{let t=await lR(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 lx(t):S?.uuid&&await lL(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 lM(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(op),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:ou},({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}))},o_.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}))},og.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:aC(u.dhis2DatasetId)||void 0,periodType:aC(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:aC(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(aN,{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(ak,{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(aA,{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(aR,{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 aD=r(1672);async function ax(e,t){let{data:r}=await (0,aD.jX)((0,h.openmrsFetch)("/ws/rest/v1/reportbuilder/sectionpreview",{method:"POST",headers:{"Content-Type":"application/json"},body:e,signal:t}));return r}function aL(e){return String(e??"").trim().toLowerCase()}function aM(e){return e?e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'"):e}function a$(e){let t=(e.columns??[]).map(aL);return t.includes("age_group")&&t.includes("gender")&&t.includes("value")}function aP(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 aU({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 ax({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&&a$(e)),r=(e,t)=>(e.columns??[]).findIndex(e=>aL(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=aP(e),a=aP(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:aM(e.name||e.code||e.indicatorUuid),kind:e.kind??"",error:e.error??""};for(let e of o)a[e.key]=0;if(!e.error&&a$(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||!a$(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: ${aM(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:aM(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,". ",aM(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 aB=()=>{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),r_({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(aO,{open:d,onClose:()=>c(!1),onSubmit:U,indicators:f,mode:"create",initialSection:null}),n().createElement(aO,{open:R,onClose:()=>{O(!1),x(null)},onSubmit:U,indicators:f,mode:"edit",initialSection:D}),n().createElement(aU,{open:w,onClose:()=>{N(!1),k(null)},section:I}))},aF="-esm-report-builder__report-visualizer__explorerPanel___w0VjU",az="-esm-report-builder__report-visualizer__panelHeader___UvhIe",aq="-esm-report-builder__report-visualizer__panelTitle___gfz5J",aj="-esm-report-builder__report-visualizer__panelContent___F09Qx",aH="-esm-report-builder__report-visualizer__emptyState___AQyxI";var aJ=r(2272),aG=r(4353),aV=r.n(aG);let aW=e=>(0,aD.jX)((0,h.openmrsFetch)(e));async function aK(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,aD.jX)((0,h.openmrsFetch)(`${h.restBaseUrl}/reportbuilder/reportingDefinition?${r.toString()}`,{signal:t}))}async function aQ(e,t){let r=`${h.restBaseUrl}/sendreport?uuid=${e}`,a=new AbortController;return(0,aD.jX)((0,h.openmrsFetch)(r,{method:"POST",signal:a.signal,headers:{"Content-Type":"application/json"},body:{...t}}))}let aY=e=>aV()(e).format("YYYY-MM-DD");function aX(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 aZ="reportVisualizer.preferences",a0={explorerExpanded:!0,explorerWidth:350,rowsPerPage:25,lastActiveView:void 0},a1=({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"}}))},a2=({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}))),a5=({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"}))},a6=({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"}})))}))},a3=[{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 a4(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 a8(e){return aV()(e).format("YYYY-MM-DD")}let a7=({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"}))},a9=({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"})},ne=({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)}})},nt=({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 nr(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 na(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 nn(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 nl(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 ni=({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 nr(!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"}))},no=({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 na(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"}))},ns=({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 nn(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"}))},nd=({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 nl(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"}))},nc=({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"})},nm=({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}=a4(e),n={...t};_.forEach((e,t)=>{0===t?n[e.name]=a8(r):1===t&&(n[e.name]=a8(a))}),l(n)}})(e.target.value),size:"sm"},n().createElement(o.ebT,{value:"",text:"Select period"}),a3.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(a7,{key:e.name,...o});case"NUMBER":return n().createElement(a9,{key:e.name,...o});case"BOOLEAN":return n().createElement(ne,{key:e.name,...o});case"LIST":return n().createElement(nt,{key:e.name,...o});case"LOCATION":return n().createElement(ni,{key:e.name,...o});case"CONCEPT":return n().createElement(no,{key:e.name,...o});case"IDENTIFIER_TYPE":return n().createElement(ns,{key:e.name,...o});case"PERSON_ATTRIBUTE":return n().createElement(nd,{key:e.name,...o});default:return n().createElement(nc,{key:e.name,...o})}})(e))})))},nu=({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")),np=({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:""))},n_=({onExpand:e,onRunReport:t,searchActive:r,categoryCount:a,selectedTagCount:l,matchingReportCount:i,hasDateParams:s,hasLocationParams:c,hasOtherParams:u,hasSelectedReport:E})=>n().createElement("aside",{className:`${aF} -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(np,{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(np,{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(np,{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(np,{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(np,{icon:es.yo,label:"Reports",badge:i})),s&&n().createElement(o.m_M,{align:"right",direction:"right",label:"Date parameters"},n().createElement(np,{icon:_.Vv,label:"Date parameters",badge:!0})),c&&n().createElement(o.m_M,{align:"right",direction:"right",label:"Location parameters"},n().createElement(np,{icon:p.aZ,label:"Location parameters",badge:!0})),u&&n().createElement(o.m_M,{align:"right",direction:"right",label:"Other parameters"},n().createElement(np,{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(np,{icon:d.jG,label:E?"Run report":"Select a report",onClick:t,disabled:!E,isPrimaryAction:!0})))),ng=({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(n_,{onExpand:a,onRunReport:S,searchActive:w,categoryCount:N,selectedTagCount:I,matchingReportCount:k,hasDateParams:A,hasLocationParams:R,hasOtherParams:O,hasSelectedReport:D}):n().createElement("aside",{className:`${aF}`,style:{width:t}},n().createElement("div",{className:az},n().createElement("h3",{className:aq},"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:aj},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(a1,{value:d,onChange:E,disabled:T}),n().createElement(a2,{categories:l,selectedCategory:c,onSelect:f,disabled:T}),i.length>0&&n().createElement(a5,{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(nm,{parameters:p,values:_,errors:g,onChange:h,onReset:v,disabled:C}),n().createElement("div",{style:{marginTop:"0.75rem"}},n().createElement(nu,{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(a6,{reports:s,selectedReportUuid:u,onSelect:y,loading:T}))))},nE=({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})))},nf=({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"))))},nb=({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(nE,{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(nf,{onExport:i,disabled:d,loading:d})));var ny=r(5576);let nh=({rowCount:e,generatedTime:t,parameters:r})=>n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"1rem",flexWrap:"wrap"}},void 0!==e&&n().createElement(n().Fragment,null,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(ny.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")))),nv=({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}))},nS={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"},nT=({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}}))))))))},nC=({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(nT,{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 nS[t]?nS[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)}}))}))},nw=({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:az},e?n().createElement(nb,{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:aq},"Report Workspace")),n().createElement("div",{className:aj},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:aH},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:aH},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?.generatedTime&&n().createElement(nh,{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(nC,{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(nC,{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(nC,{data:t.data,columns:t.columns||[],onRefresh:u,title:e.name})),"REPORT_LAYOUT"===l&&a&&n().createElement(nv,{htmlContent:a,reportName:e.name}),"REPORT_LAYOUT"===l&&!a&&t?.data&&n().createElement(nC,{data:t.data,columns:t.columns||[],onRefresh:u,title:e.name}))))},nN=(e,t)=>(0,h.showNotification)({title:e,kind:"error",critical:!0,description:t}),nI=()=>{let e,{preferences:t,setExplorerExpanded:r,setLastActiveView:l,isLoaded:i}=function(){let[e,t]=(0,a.useState)(a0),[r,n]=(0,a.useState)(!1);(0,a.useEffect)(()=>{try{let e=localStorage.getItem(aZ);if(e){let r=JSON.parse(e);t({...a0,...r})}}catch(e){console.error("Failed to load preferences:",e)}finally{n(!0)}},[]),(0,a.useEffect)(()=>{if(r)try{localStorage.setItem(aZ,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(a0)},[]),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,aJ.u)(e,aW);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=aX(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=>{aX(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,aJ.u)(e,aW);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=>{m&&c(Math.max(280,Math.min(700,e.clientX)))},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||aY(new Date),endDate:F.endDate||aY(new Date),renderType:"html",parameters:F};console.log("Executing report:",U.name),console.log("Request params:",e);let t=await aK(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({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 console.error(`Report execution failed with status ${t.status}`),nN("Error executing report",`Report execution failed with status ${t.status}`)}catch(e){console.error("Failed to run report:",e),nN("Error executing report",e instanceof Error?e.message:"Unknown error")}finally{w(!1)}}},[U,F,j]),ea=(0,a.useCallback)(()=>{let e=N?.data,t=!!e?.length;if(!R&&!t)return void(0,h.showNotification)({title:"Nothing to print",kind:"warning",critical:!1,description:"Run the report first, then export it as PDF"});let r=U?.name??"Report",a=F?.startDate||aY(new Date),n=F?.endDate||aY(new Date),l=e=>String(e??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),i="";if(R)i=R;else if(t){let t=N.columns?.length?N.columns:Object.keys(e[0]).map(e=>({key:e,header:e})),r=`<tr>${t.map(e=>`<th>${l(e.header??e.key)}</th>`).join("")}</tr>`,a=e.map(e=>`<tr>${t.map(t=>`<td>${l(e[t.key])}</td>`).join("")}</tr>`).join("");i=`<table>${r}${a}</table>`}if(!i)return void(0,h.showNotification)({title:"Nothing to print",kind:"warning",critical:!1,description:"Run the report first, then export it as PDF"});let o=document.createElement("iframe");o.setAttribute("title","Report print preview"),o.style.position="fixed",o.style.right="0",o.style.bottom="0",o.style.width="0",o.style.height="0",o.style.border="0",document.body.appendChild(o);let s=o.contentDocument;s.open(),s.write(`<!doctype html>
|
|
308
|
+
<html lang="en">
|
|
309
|
+
<head>
|
|
310
|
+
<meta charset="utf-8" />
|
|
311
|
+
<title>${l(r)}</title>
|
|
312
|
+
<style>
|
|
313
|
+
@page { size: A4 landscape; margin: 10mm; }
|
|
314
|
+
body {
|
|
315
|
+
font-family: 'IBM Plex Sans', 'Helvetica Neue', Arial, sans-serif;
|
|
316
|
+
color: #000;
|
|
317
|
+
background: #fff;
|
|
318
|
+
margin: 0;
|
|
319
|
+
/* Print shaded table headers etc. as they appear on screen */
|
|
320
|
+
print-color-adjust: exact;
|
|
321
|
+
-webkit-print-color-adjust: exact;
|
|
322
|
+
}
|
|
323
|
+
.print-header h1 { font-size: 14pt; margin: 0 0 2pt; }
|
|
324
|
+
.print-header p { font-size: 8pt; color: #444; margin: 0 0 10pt; }
|
|
325
|
+
table { border-collapse: collapse; width: 100%; }
|
|
326
|
+
th, td { border: 1px solid #8d8d8d; padding: 2pt 4pt; font-size: 8pt; text-align: left; }
|
|
327
|
+
th { background: #e0e0e0; }
|
|
328
|
+
</style>
|
|
329
|
+
</head>
|
|
330
|
+
<body>
|
|
331
|
+
<div class="print-header">
|
|
332
|
+
<h1>${l(r)}</h1>
|
|
333
|
+
<p>Generated ${new Date().toLocaleString()} · Start date: ${l(a)} · End date: ${l(n)}${N?.rowCount>0?` · ${N.rowCount} records`:""}</p>
|
|
334
|
+
</div>
|
|
335
|
+
${i}
|
|
336
|
+
</body>
|
|
337
|
+
</html>`),s.close(),o.contentWindow.addEventListener("afterprint",()=>o.remove()),o.contentWindow.focus(),o.contentWindow.print(),setTimeout(()=>o.remove(),6e4)},[R,N,U,F]),en=(0,a.useCallback)(async e=>{if(U){if("PDF"===e)return void ea();try{var t;let r,a,n=U.reportDefinitionUuid||U.uuid,l=await (t={uuid:n,startDate:F.startDate||aY(new Date),endDate:F.endDate||aY(new Date),format:"CSV"===e?"csv":"excel"},r=new AbortController,a=`${h.restBaseUrl}/reportbuilder/reportDownload?startDate=${t.startDate}&endDate=${t.endDate}&uuid=${t.uuid}`,t.format&&(a+=`&format=${t.format}`),"cqi"===t.reportCategory&&(a+=`&cohortList=${t.reportingCohort}`),(0,aD.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 console.error(`Export failed with status ${l.status}`),nN("Error exporting report",`Export failed with status ${l.status}`)}catch(e){console.error("Failed to export report:",e),nN("Error exporting report",e instanceof Error?e.message:"Unknown error")}}},[U,F,ea]),el=(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 aQ(e,k);200===t.status?(0,h.showToast)({title:"Report sent to DHIS2",kind:"success",critical:!0,description:`Report ${U.name} sent successfully`}):(console.error(`DHIS2 send failed with status ${t.status}`),nN("Error sending to DHIS2",`DHIS2 send failed with status ${t.status}`))}catch(e){console.error("Failed to send to DHIS2:",e),nN("Error sending to DHIS2",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(ng,{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(nw,{explorerCollapsed:o,selectedReport:U,reportResults:N,runningReport:C,htmlContent:R,activeView:S,onViewChange:et,capabilities:J,onExport:en,onSendToDhis2:J.sendToDhis2?el:void 0,parameterValues:F})))},nk=[{key:"name",header:"Name"},{key:"code",header:"Code"},{key:"domain",header:"Domain"},{key:"description",header:"Description"},{key:"actions",header:""}];function nA({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:nk},({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 nR=[{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 nO({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})},nR.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 nD(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 nx(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(nD).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 nL(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 nM(e,t){let r=await (0,W.wO)(`/etltablecolumn?table=${encodeURIComponent(e)}`,t);return Array.isArray(r)?nL(r):nL(r?.columns??r?.results??[])}function n$(e){return"string"==typeof e?String(e):e?.name??e?.table??e?.tableName??""}function nP({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),nx(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),nM(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(n$).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:"patient_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 nU=["string","number","date","datetime","boolean","coded","json"];function nB({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})},nU.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 nF=["CONCEPT_SEARCH","QUESTION_ANSWER_CONCEPT_SEARCH","TEXT","NUMBER","DATE_RANGE","BOOLEAN","LOCATION_PICKER","CODED_LIST"],nz=["EQUALS","IN","NOT_IN","LIKE","BETWEEN","GTE","LTE","IS_NULL","IS_NOT_NULL"],nq=["conceptUuid","conceptId","string","number","date","datetime","boolean"];function nj(){return`${Date.now()}_${Math.random().toString(16).slice(2)}`}function nH(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:nj(),_columnMode:"qa",_qaQuestionCol:n.questionCol,_qaAnswerCol:n.answerCol};if("QUESTION_ANSWER_CONCEPT_SEARCH"===e.handler)return{...e,_id:nj(),_columnMode:"qa",_qaQuestionCol:"",_qaAnswerCol:""};let l=t.includes(e.column);return{...e,_id:nj(),_columnMode:l?"pick":"custom"}})}function nG({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:nH(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:nH(t._qaQuestionCol??"",t._qaAnswerCol??"")}):g(t._id,{handler:r,_columnMode:"qa"===t._columnMode?"pick":t._columnMode,column:"qa"===t._columnMode?"":t.column})}},nF.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:nH(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:nH(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:nH(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})},nz.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})},nq.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:nj(),_columnMode:"pick",key:`cond_${e+1}`,label:"",handler:"CONCEPT_SEARCH",column:"",operator:"IN",valueType:"conceptUuid"})])}},"Add condition")))}var nV=r(810);let nW=[{key:"Report",label:"Report",Icon:u.pl},{key:"ChartColumn",label:"Chart",Icon:_.n5},{key:"Medication",label:"Medication",Icon:nV.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:tN.$$},{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}],nK=["BASE","FINAL"];function nQ(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 nY({value:e,onChange:t,open:r}){var a;let l=nQ(e.color),i=(a=e.icon,nW.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:[...nW],disabled:!r,itemToString:e=>e?e.label:"",selectedItem:nW.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:nQ(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:nQ(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:nK,disabled:!r,itemToString:e=>e?String(e):"",initialSelectedItems:e.allowedIndicatorKinds??[],onChange:r=>{let a=r?.selectedItems??[];t({...e,allowedIndicatorKinds:a})},label:"Select kinds"})))}function nX({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 nZ={sourceTable:"",patientIdColumn:"",dateColumn:"",locationColumn:"",fields:[],conditions:[]},n0={icon:"",color:"#0f62fe",category:"",order:0,beta:!1,descriptionShort:"",allowedIndicatorKinds:["BASE","FINAL"]};function n1(e){return(e??"").toUpperCase().replace(/[^A-Z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,30)}function n2(e,t){try{if(!e)return t;return JSON.parse(e)??t}catch{return t}}function n5(e){return JSON.stringify({metaJson:e},null,2)}function n6({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(nZ),[y,h]=n().useState(JSON.stringify(nZ,null,2)),[v,S]=n().useState(n0),[T,C]=n().useState(n5(n0)),[,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=n2(e,nZ),r=t&&"object"==typeof t&&t.configJson&&"object"==typeof t.configJson?t.configJson:t,a={...nZ,...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=n2(r.metaJson,n0))&&"object"==typeof e&&e.metaJson&&"object"==typeof e.metaJson?{...n0,...e.metaJson}:{...n0,...e};S(a),C(n5(a))}else c(""),u(""),_("OBSERVATIONS"),E(""),b(nZ),h(JSON.stringify(nZ,null,2)),S(n0),C(n5(n0))},[e,r]),n().useEffect(()=>{if(!e)return;let t=new AbortController;return I(!0),A(null),w([]),nx(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([]),nM(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??nZ,null,2))},[f]),n().useEffect(()=>{C(n5(v??n0))},[v]);let $=e&&!N&&!k,P=$&&!!d.trim()&&!!(m.trim()||n1(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()||n1(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(nO,{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(nP,{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(nB,{config:f,onChange:b,open:e}):null,"conditions"===i?n().createElement(nG,{open:e,config:f,onChange:b,columns:R,loadingCols:D}):null,"metadata"===i?n().createElement(nY,{value:v,onChange:S,open:e}):null,"preview"===i?n().createElement(nX,{config:f,metaJson:T,onConfigJson:h}):null)):null))}function n3(){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),tx(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 tL(e);S(t),g(!0)}catch(e){p(e?.message??"Failed to load theme for editing")}finally{m(!1)}},w=async e=>{await tP(e,!1);let t=new AbortController;await T(t.signal)},N=async e=>{if("create"===E)await tM(e);else{if(!e.uuid)throw Error("Missing uuid for update");await t$(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(nA,{rows:s,onEdit:C,onDelete:w,canEdit:r,canDelete:a}),n().createElement(n6,{open:_,mode:E,initial:h,onClose:()=>g(!1),onSave:N}))}let n4={minHeight:"10rem"};function n8(){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:n4,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 n7=[{key:"name",header:"Name"},{key:"description",header:"Description"},{key:"status",header:"Status"},{key:"actions",header:"Actions"}],n9={name:"",description:""},le=()=>{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(n9),[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(n9),_(!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:n7},({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}))}))))},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),rM(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))))))))))))},lr=[{key:"label",header:"Label"},{key:"category",header:"Category"},{key:"range",header:"Range (days)"},{key:"sortOrder",header:"Sort Order"},{key:"status",header:"Status"}],la=()=>{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),rM(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:lr},({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")))})))))))},ln="/reportbuilder/reportlibrary";async function ll(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)(`${ln}?${a.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid)}async function li(e,t){return(0,W.oV)(ln,e,t)}async function lo(e,t,r){return(0,W.oV)(`${ln}/${encodeURIComponent(e)}`,t,r)}async function ls(e,t="Retired from report library",r){return(0,W.hI)(`${ln}/${encodeURIComponent(e)}?reason=${encodeURIComponent(t)}`,r)}let ld=[{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"}],lc={name:"",description:"",code:"",sourceType:"LEGACY",reportType:"AGGREGATE",reportDefinitionUuid:"",reportBuilderReportUuid:"",category:"",migrated:!1,metaJson:"{}"};function lm(e){return e?"string"==typeof e?e:e.uuid??"":""}function lu(e){return e?"string"==typeof e?e:e.name??e.uuid??"—":"—"}function lp(){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(lc),[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([ll(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 li(e):S?.uuid&&await lo(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 ls(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)||lu(t.category).toLowerCase().includes(e),a=!k||t.sourceType===k,n=!R||t.reportType===R,l=!D||lm(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:lu(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(lc),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:ld},({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,lu(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:lm(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 l_="/reportbuilder/etlsource";async function lg(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)(`${l_}?${a.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid)}async function lE(e,t){return(0,W.oV)(l_,e,t)}async function lf(e,t,r){return(0,W.oV)(`${l_}/${encodeURIComponent(e)}`,t,r)}async function lb(e,t="Retired from Report Builder Admin",r){let a=new URLSearchParams;return a.set("reason",t),(0,W.hI)(`${l_}/${encodeURIComponent(e)}?${a.toString()}`,r)}let ly=[{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"}],lh={name:"",code:"",description:"",tablePatterns:"",schemaName:"",sourceType:"",active:!0};function lv(){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(lh),[C,w]=n().useState(!1),N=n().useCallback(async e=>{c(!0),u(null);try{let t=await lg(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 lE(e):f?.uuid&&await lf(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 lb(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(lh),_(!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:ly},({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 lS=r(6942),lT=r.n(lS);async function lC(e){try{let t=await (0,aD.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 lw(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 lC(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 lN(e){try{let t=await (0,aD.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 lI=["password","secret","token","authorization","cookie","session","sessionid","jsessionid","apikey","api_key","apikey","auth","credentials","private","key"];async function lk(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 lI.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 lA(e){return e?Array.isArray(e)?e:Array.isArray(e.results)?e.results:[]:[]}let lR="/reportbuilder/etl-monitor";async function lO(e,t){let r=new URLSearchParams;return r.set("v","full"),e?.trim()&&r.set("q",e.trim()),lA(await (0,W.wO)(`${lR}?${r.toString()}`,t)).filter(e=>!!e?.uuid)}async function lD(e){let t=new URLSearchParams;return t.set("v","full"),t.set("activeOnly","true"),lA(await (0,W.wO)(`${lR}?${t.toString()}`,e)).filter(e=>!!e?.uuid)}async function lx(e,t){let r=new URLSearchParams;return r.set("v","full"),(0,W.wO)(`${lR}/${encodeURIComponent(e)}?${r.toString()}`,t)}async function lL(e,t){return(0,W.oV)(lR,e,t)}async function lM(e,t,r){return(0,W.oV)(`${lR}/${encodeURIComponent(e)}`,t,r)}async function l$(e,t="Retired from Report Builder Admin",r){let a=new URLSearchParams;return a.set("reason",t),(0,W.hI)(`${lR}/${encodeURIComponent(e)}?${a.toString()}`,r)}async function lP(e,t){let r=await lx(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 lU=r(4676);let lB=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function lF(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 lz(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()} ${lB[e.getMonth()]}, ${l}`}function lq(e){let t=lF(e);return t?lz(t):null==e||""===e?"—":String(e)}function lj(e,t){let r=lF(e);return r&&"number"==typeof t&&isFinite(t)&&!(t<=0)?new Date(r.getTime()+1e3*t):null}function lH(e){return e?lz(e):"Not scheduled"}let lJ=/duration|elapsed|runtime/i,lG=/sec/i,lV=/milli|_ms\b|ms$/i;function lW(e,t){return lV.test(t)?e:lG.test(t)||e<1e3?1e3*e:e}let lK=/^(status|state)$/i;function lQ(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:lK.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 lY={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"},lX={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"},lZ={STATUS_CARD:"STATUS_CARD",PROGRESS_BAR:"PROGRESS",DATA_TABLE:"TABLE",TIME_SERIES:"TABLE",ERROR_LOG:"TABLE",METRICS_GRID:"METRICS_GRID"};function l0(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&&lZ[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)&&lY[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=lX[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 l1(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 l2=r(6434);function l5({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 l6={"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 l3({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:`${l6["etl-monitor-card-shell"]} ${l6[`etl-monitor-card-shell--${c}`]}`},n().createElement("div",{className:l6["etl-monitor-card-shell__header"]},n().createElement("h4",{className:l6["etl-monitor-card-shell__title"]},e),n().createElement("div",{className:l6["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:l6["etl-monitor-card-shell__content"]},r&&n().createElement("div",{className:l6["etl-monitor-card-shell__loading"]},n().createElement(o.OuH,{description:"Loading..."})),!r&&a&&n().createElement("div",{className:l6["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 l4({icon:e,message:t,description:r}){return n().createElement("div",{className:l6["etl-monitor-card-shell__empty"]},e||n().createElement(tb.BF,{size:32}),n().createElement("p",{className:l6["etl-monitor-card-shell__empty-message"]},t),r&&n().createElement("p",{className:l6["etl-monitor-card-shell__empty-description"]},r))}function l8({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=l1(e.displayConfigJson),r=2===t.version?t.config:l0(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(l5,{loading:a,onRefresh:l,actions:[{label:"Edit monitor",onClick:()=>c(`${d}?mode=edit&monitor=${e.uuid}`)}]},n().createElement(l2.MonitorRenderer,{config:u,data:t?.rawResponse,loading:a,error:r??null})):n().createElement(l3,{title:m,loading:a,error:r,onRefresh:l,size:"lg"},n().createElement(l4,{message:"Invalid monitor configuration"}))}let l7={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"},l9=/running|in.?progress|processing/i,ie=/fail|error/i,it="All types";function ir(e){return e?.name==="AbortError"||/abort/i.test(String(e?.message))}function ia(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 il({label:e,value:t}){return n().createElement("div",{className:l7.metaItem},n().createElement("span",{className:l7.metaLabel},e),n().createElement("span",{className:l7.metaValue,title:t},t))}function ii({icon:e,iconTone:t,label:r,value:a,subtext:l}){return n().createElement(o.FAs,{className:l7.kpiCard},n().createElement("span",{className:lT()(l7.kpiIcon,l7[`kpiIcon${t}`])},e),n().createElement("div",{className:l7.kpiText},n().createElement("span",{className:l7.kpiLabel},r),n().createElement("span",{className:l7.kpiValue},a),n().createElement("span",{className:l7.kpiSubtext},l)))}function io({tab:e,label:t,count:r,activeTab:a,onSelect:l}){return n().createElement("button",{type:"button",className:lT()(l7.filterTab,a===e&&l7.filterTabActive),onClick:()=>l(e)},t,n().createElement("span",{className:l7.countChip},r))}function is(){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)(it),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?lw(r,e):Promise.resolve({tasks:[],unknownNames:[]}),l.length>0?lO(void 0,e).catch(e=>(ir(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){ir(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 lP(e,t);k(t=>({...t,[e]:r})),x(t=>{let r={...t};return delete r[e],r})}catch(t){ir(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?lQ(Y,l9):void 0,[Q,Y]),Z=(0,a.useMemo)(()=>Q.length>0?lQ(Y,ie):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=lj(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=>ia(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!==it&&!e.unknown&&ia(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 lN(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:l7.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:l7.kpiGrid},n().createElement(ii,{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:lq(er)}):e("noMonitorsHint","No monitors configured")}),n().createElement(ii,{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(ii,{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(ii,{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(ii,{icon:n().createElement(ny.gX,{size:22}),iconTone:"info",label:e("nextScheduledRun","Next scheduled run"),value:ea?lH(ea.date):e("dash","—"),subtext:ea?.name??e("notScheduled","Not scheduled")})),n().createElement("section",null,n().createElement("div",{className:l7.toolbar},n().createElement("div",null,n().createElement("h4",{className:l7.toolbarHeading},e("configuredTasks","Configured Tasks")),n().createElement("p",{className:l7.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:l7.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:l7.searchBox}),n().createElement(o.msM,{id:"etl-task-type-filter",size:"sm",type:"inline",titleText:e("filter","Filter"),label:B,items:[it,...en],selectedItem:B,onChange:({selectedItem:e})=>F(e??it)}),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:l7.filterTabs},n().createElement(io,{tab:"all",label:e("all","All"),count:K.length,activeTab:$,onSelect:P}),n().createElement(io,{tab:"active",label:e("active","Active"),count:ei,activeTab:$,onSelect:P}),n().createElement(io,{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:l7.emptyState},n().createElement(g.wB,{size:48,className:l7.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:l7.emptyState},n().createElement(g.wB,{size:48,className:l7.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:l7.emptyState},n().createElement(g.wB,{size:48,className:l7.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:l7.tasksGrid},el.map(t=>{var r;let a,l;if(t.unknown)return n().createElement(o.FAs,{key:t.name,className:l7.taskCard},n().createElement("div",{className:l7.cardHead},n().createElement("span",{className:lT()(l7.cardIcon,l7.cardIconMuted)},n().createElement(_._C,{size:20})),n().createElement("div",{className:l7.cardHeadText},n().createElement("h4",{className:l7.cardTitle},t.name),n().createElement("p",{className:l7.cardDescription},e("unknownTaskDescription","Configured in etlTasks.tasks but no matching OpenMRS task definition was found."))),n().createElement("span",{className:lT()(l7.statusPill,l7.statusPillUnknown)},e("unknown","Unknown"))),n().createElement("div",{className:l7.metaRow},n().createElement(il,{label:e("lastRun","Last run"),value:"—"}),n().createElement(il,{label:e("duration","Duration"),value:"—"}),n().createElement(il,{label:e("nextRun","Next run"),value:e("notScheduled","Not scheduled")})),n().createElement("div",{className:l7.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=lj(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,lU.a3)(lW(t,e));if("string"==typeof t){let r=t.trim();if(!r)return null;let a=Number(r);return isNaN(a)||""===r?r:(0,lU.a3)(lW(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:l7.taskCard},n().createElement("div",{className:l7.cardHead},n().createElement("span",{className:l7.cardIcon},n().createElement(_._C,{size:20})),n().createElement("div",{className:l7.cardHeadText},n().createElement("h4",{className:l7.cardTitle,title:t.name},t.name),n().createElement("p",{className:l7.cardDescription,title:t.definition?.description||t.definition?.taskClass},t.definition?.description||t.definition?.taskClass)),n().createElement("span",{className:lT()(l7.statusPill,i?l7.statusPillActive:l7.statusPillInactive)},i?e("active","Active"):e("inactive","Inactive"))),n().createElement("div",{className:l7.metaRow},n().createElement(il,{label:e("lastRun","Last run"),value:lq(t.definition?.lastExecutionTime)}),n().createElement(il,{label:e("duration","Duration"),value:c}),n().createElement(il,{label:e("nextRun","Next run"),value:lH(s)})),n().createElement("div",{className:l7.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:l7.monitorMissing},e("monitorNotFound","Monitor not found"))),m&&n().createElement("div",{className:l7.executingStatus},n().createElement(o.OuH,{description:e("executingTask","Executing task...")})))}))),n().createElement("section",{ref:z},n().createElement("div",{className:l7.sectionHeading},n().createElement("h4",{className:l7.toolbarHeading},e("liveExecution","Live Execution")),n().createElement("p",{className:l7.toolbarSubtext},e("liveExecutionHint","Monitor progress and status for currently running ETL tasks."))),ep?n().createElement("div",{className:l7.monitorsGrid},j.map(t=>t.monitor?n().createElement(l8,{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:l7.monitorMissingCard},n().createElement("p",{className:l7.monitorMissingTitle},t.ref),n().createElement("p",{className:l7.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:l7.liveEmpty},n().createElement(g.wB,{size:40,className:l7.emptyStateIcon}),n().createElement("p",{className:l7.liveEmptyTitle},e("noTaskRunning","No ETL task currently running")),n().createElement("p",{className:l7.liveEmptyHint},ea?n().createElement(n().Fragment,null,e("nextScheduledIs","The next scheduled task is")," ",n().createElement("strong",null,ea.name," — ",lH(ea.date)),"."):e("liveExecutionConfigureHint","Configure etlTasks.progressMonitors to see live progress from your ETL monitors here."))))))}function id(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),nx(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 ic(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),nM(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 im=r(4213);function iu(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 ip={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 i_({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:ip.pane},n().createElement("div",{className:ip.paneHeader},!s&&n().createElement(n().Fragment,null,n().createElement("span",{className:ip.paneTitle},"Data Sources"),n().createElement("span",{className:ip.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:ip.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:ip.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:ip.treeEmpty},"No sources match"),E.length>0&&n().createElement("ul",{className:ip.sourceList},E.map(e=>n().createElement("li",{key:e.id},n().createElement("button",{type:"button",className:lT()(ip.sourceRow,r===e.id&&ip.sourceRowSelected),onClick:()=>u(e.id)},n().createElement("span",{className:ip.sourceRowIcon},n().createElement(c.EN,{size:16})),n().createElement("span",{className:ip.sourceRowName},e.name),n().createElement(o.vwO,{size:"sm",type:"gray"},e.tables.length))))))))}function ig({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:ip.pane},n().createElement("div",{className:ip.paneHeader},!s&&n().createElement(n().Fragment,null,n().createElement("span",{className:ip.paneTitle},e),n().createElement("span",{className:ip.paneActions},c&&n().createElement("button",{type:"button",className:ip.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:ip.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:ip.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:ip.treeEmpty},"No tables match"),g.length>0&&n().createElement("ul",{className:ip.tableList},g.map(e=>{let t,a;return n().createElement("li",{key:e.name},n().createElement("button",{type:"button",className:lT()(ip.tableRow,r===e.name&&ip.tableRowSelected),onClick:()=>u(e.name)},n().createElement("span",{className:ip.tableRowIcon},n().createElement(f.vx,{size:18})),n().createElement("span",{className:ip.tableRowText},n().createElement("span",{className:ip.tableName},e.name),n().createElement("span",{className:ip.tableMeta},(t="number"==typeof e.rows?`${e.rows.toLocaleString()} rows`:"rows unknown",a=e.updateTime?(0,lU.fw)(e.updateTime,{pastOnly:!0}):"—",`${t} • ${a}`)))))})))))}let iE=[{key:"name",header:"Column"},{key:"type",header:"Data type"}];function ib({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:ip.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:ip.toolbar},n().createElement(o.vwO,{size:"sm",type:"cool-gray"},e.length," columns")),n().createElement(o.bQt,{rows:a,headers:iE,size:"sm"},({rows:e,headers:t,getHeaderProps:r,getRowProps:a,getTableProps:l})=>n().createElement(o.K3K,{className:ip.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 iy({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,lU.fw)(l,{pastOnly:!0}):"—"},{label:"Columns",value:r.length?String(r.length):"—"}];return n().createElement("div",null,n().createElement("div",{className:ip.metadataFacts},s.map(e=>n().createElement("div",{key:e.label,className:ip.infoCell},n().createElement("span",{className:ip.infoLabel},e.label),n().createElement("span",{className:ip.infoValue},e.value)))),n().createElement("h6",{className:ip.metadataHeading},"Column types"),0===i.byType.length?n().createElement("p",{className:ip.truncateNote},"Column metadata not loaded yet."):n().createElement("div",{className:ip.metadataTypes},i.byType.map(e=>n().createElement(o.vwO,{key:e.type,size:"sm",type:"cool-gray"},e.type,": ",e.count))))}let ih=[10,25,50,100];function iv({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:ip.toolbar},n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:u.wM,onClick:i},"Retry")),n().createElement("p",{className:ip.truncateNote},'Preview needs the "sql.execute" privilege and a valid table name.')):t?n().createElement("div",null,n().createElement("div",{className:ip.toolbar},n().createElement(o.vji,{size:"sm",className:ip.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:ip.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(iu).join(",")];for(let e of t??[])r.push(e.map(iu).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,im.saveAs)(a,n)},disabled:0===t.rows.length},"Export CSV")),y&&n().createElement("p",{className:ip.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:ip.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:ip.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:ih,totalItems:g.length,onChange:({page:e,pageSize:t})=>{_(t),m(e)}}))):null}function iS(){return n().createElement("div",{className:ip.emptyState},n().createElement(tN.$$,{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 iT({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,lU.fw)(t.updateTime,{pastOnly:!0}):"—"}];return n().createElement("div",{className:ip.infoStrip},r.map(e=>n().createElement("div",{key:e.label,className:ip.infoCell},n().createElement("span",{className:ip.infoLabel},e.label),n().createElement("span",{className:ip.infoValue},e.value))))}let iC=["data","columns","metadata","relationships"];function iw({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 rB({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,lU.fw)(e.updateTime,{pastOnly:!0}):"—"}`];return n().createElement("div",{className:`${ip.pane} ${ip.detailPane}`},n().createElement("div",{className:ip.detailHeader},n().createElement("span",{className:ip.detailIcon},n().createElement(f.vx,{size:22})),n().createElement("div",{className:ip.detailHeaderText},n().createElement("h4",{className:ip.detailTitle,title:e.name},"Table: ",e.name),n().createElement("p",{className:ip.detailMeta},c.join(" "))),n().createElement("div",{className:ip.detailActions},n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:u.wM,onClick:d.refresh},"Refresh"))),n().createElement("div",{className:ip.detailBody},n().createElement(o.tUM,{selectedIndex:iC.indexOf(i),onChange:({selectedIndex:e})=>s(iC[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(iv,{table:e.name,data:d.data,loading:"loading"===d.status,error:d.error,onRefresh:d.refresh})),n().createElement(o.KpK,null,n().createElement(ib,{columns:r,loading:a,error:l})),n().createElement(o.KpK,null,n().createElement(iy,{table:e,source:t,columns:r})),n().createElement(o.KpK,null,n().createElement(iS,null)))),n().createElement(iT,{source:t,table:e})))}function iN(){return n().createElement("div",{className:`${ip.pane} ${ip.detailPane}`},n().createElement(o.FAs,{className:ip.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 iI(){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),nx(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(`.${ip.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),lg(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=ic(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:ip.browserGrid},n().createElement("aside",{className:ip.paneWrap,style:{width:N?48:k}},n().createElement(i_,{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:ip.resizeHandle,role:"separator","aria-orientation":"vertical",onMouseDown:B}),n().createElement("aside",{className:ip.paneWrap,style:{width:O?48:x}},n().createElement(ig,{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:lT()(ip.resizeHandle,ip.resizeHandleBeforeDetail),role:"separator","aria-orientation":"vertical",onMouseDown:F}),Y?n().createElement(iw,{table:Y,source:Z,columns:er.columns,columnsLoading:er.loading,columnsError:er.error,activeTab:S,onTabChange:T}):n().createElement(iN,null)))}function ik(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 iA=["general","data-source","design","fields","preview"];function iR(e){let t=iA.indexOf(e);return -1===t||t===iA.length-1?null:iA[t+1]}function iO(e){let t=iA.indexOf(e);return t<=0?null:iA[t-1]}function iD(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 ix=r(8159);let iL=(0,a.createContext)(null);function iM(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,ix.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,ix.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,ix.X0)(e.componentType);a.design={componentSelected:t.valid,componentValid:t.valid};break}case"fields":{let t=(0,ix.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,ix.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 ik(e.mode);case"LOAD_MONITOR":return function(e){let t,r=ik("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(i$)):(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 i$(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 iP({children:e,mode:t,monitorId:l}){let[i,o]=(0,a.useReducer)(iM,ik("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),lx(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=>iD(e,i),[i]),_=(0,a.useCallback)(e=>iD(e,i),[i]),g=(0,a.useCallback)(()=>(0,ix.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 lM(s.uuid,n):await lL(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(iL.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(iL.Provider,{value:b},e))}function iU(){let e=(0,a.useContext)(iL);if(!e)throw Error("useBuilderContext must be used within BuilderProvider");return e}function iB(){let{updateState:e}=iU();return e}function iF(){let{state:e,dispatch:t,canAdvance:r}=iU(),l=(0,a.useCallback)(a=>{let n=iA.indexOf(e.currentStep),l=iA.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(iA[t])){e=!1;break}e&&t({type:"SET_CURRENT_STEP",payload:a})}},[e.currentStep,r,t]),i=(0,a.useCallback)(()=>{let t=iR(e.currentStep);t&&l(t)},[e.currentStep,l]),o=(0,a.useCallback)(()=>{let t=iO(e.currentStep);t&&l(t)},[e.currentStep,l]);return n().useMemo(()=>({currentStep:e.currentStep,goToStep:l,goToNextStep:i,goToPreviousStep:o,canGoNext:!!iR(e.currentStep),canGoPrevious:!!iO(e.currentStep)}),[e.currentStep,l,i,o])}let iz={"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 iq({state:e}){let t=(0,ix.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)]=ij(e):n[e.key]=ij(e)}),"DATA_TABLE"===a||"TABLE"===a||"ERROR_LOG"===a){let e=t.data?.arrayPath||"$.data";n[e.startsWith("$.")?e.slice(2):"data"]=[iH(r,0),iH(r,1,{status:"COMPLETED",result:"SUCCESS"}),iH(r,2,{status:"FAILED",result:"ERROR"})]}return n}(e,t);return n().createElement(l2.MonitorRenderer,{config:t,data:r,loading:!1,error:null})}function ij(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 iH(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]=ij(e,t)}),a}let iJ="-esm-report-builder__generated-config-panel__generated-config-panel__tab___8Gn1P",iG="-esm-report-builder__generated-config-panel__generated-config-panel__tab--active___J75Iw",iV=/("(?:\\.|[^"\\])*")(\s*:)?|\b(true|false|null)\b|(-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)/g;function iW(){let{state:e}=iU(),[t,r]=(0,a.useState)("json"),[l,i]=(0,a.useState)(!1),s=(0,a.useMemo)(()=>(0,ix.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(iV.lastIndex=0;t=iV.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=iV.lastIndex;return a<e.length&&r.push(e.slice(a)),r})(d),[d]),u=(0,a.useMemo)(()=>(0,ix.yn)(e),[e]),p=(0,a.useMemo)(()=>(0,ix.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&&iG].filter(Boolean).join(" "),onClick:()=>r("visual")},"Visual"),n().createElement("button",{type:"button",role:"tab","aria-selected":"json"===t,className:[iJ,"json"===t&&iG].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(iq,{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 iK=[{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 iQ(){let{state:e}=iU(),t=iB(),{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,ix.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=iK.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..."}),iK.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(tN.$$,{size:16}),n().createElement("span",null,"You can configure the data source and design in the next steps.")))}let iY="-esm-report-builder__data-source-step__data-source-step__auth-description___mPeA8",iX=[{value:"GET",label:"GET"},{value:"POST",label:"POST"},{value:"PUT",label:"PUT"},{value:"DELETE",label:"DELETE"}],iZ=[{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 i0({authType:e,authConfig:t,onChange:r}){return"NONE"===e?n().createElement("div",{className:iY},"No authentication will be used for this endpoint."):"OPENMRS"===e?n().createElement("div",{className:iY},"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 i1(){let{state:e}=iU(),t=iB(),{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 lk({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)},iX.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}}))}},iZ.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(i0,{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 i2=r(3654);let i5=[{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(i2.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(ny.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 i6({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(l2.MonitorRenderer,{config:t.config,data:t.data,loading:!1,error:null})}function i3(e,t){return!!t&&(t===e.type||(e.aliases?.includes(t)??!1))}function i4({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(i6,{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 i8(){let{state:e}=iU(),t=iB(),{componentType:r,detectedSchema:a}=e,l=()=>a?.recommendedComponent?a.recommendedComponent:null,i=l(),s=!!a&&a.fields.length>0,d=i5.find(e=>i3(e,r)),c=i?i5.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"},i5.map(e=>n().createElement(i4,{key:e.type,config:e,selected:i3(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(tN.$$,{size:16}),"Selected: ",d.label),n().createElement("p",null,d.description))),s&&c&&i3(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(tN.$$,{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 i7={"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"},i9=[{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"}],oe=[{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 ot({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:i7["status-mapping-modal"]},n().createElement("p",{className:i7["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:i7["status-mapping-row"]},n().createElement("div",{className:i7["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:i7["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:i7["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})},oe.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label})))))))))}function or({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:i7["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?"},i9.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:i7["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 oa({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:i7["field-row"]},n().createElement("div",{className:i7["field-row__drag"]},n().createElement("div",{className:i7["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:i7["field-row__content"]},n().createElement("div",{className:i7["field-row__main"]},n().createElement("div",{className:i7["field-row__info"]},n().createElement("div",{className:i7["field-row__header"]},n().createElement("span",{className:i7["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:i7["field-row__meta"]},n().createElement("span",{className:i7["field-row__path"]},e.path),n().createElement(o.vwO,{type:"purple",size:"sm"},e.type))),n().createElement("div",{className:i7["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(ot,{open:_,onClose:()=>g(!1),onSave:t=>{i({...e,statusMappings:t}),g(!1)},currentMappings:e.statusMappings||[],detectedValues:t?.sampleValue?[String(t.sampleValue)]:[]}))}function on(){let{state:e}=iU(),t=iB(),{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,ix.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:i7["fields-step"]},n().createElement("div",{className:i7["fields-step__header"]},n().createElement("h2",null,"Field Mapping"),n().createElement("p",{className:i7["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:i7["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:i7["fields-step__list"]},n().createElement("div",{className:i7["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:i7["fields-step__fields"]},r.map((e,a)=>{let i=h.find(t=>t.path===e.path);return n().createElement(oa,{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:i7["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:i7["fields-step__timestamp-config"]},n().createElement("div",{className:i7["fields-step__timestamp-header"]},n().createElement("h4",null,"Timestamp Format"),n().createElement("p",{className:i7["fields-step__timestamp-description"]},"Configure how timestamp fields are displayed")),n().createElement("div",{className:i7["fields-step__timestamp-settings"]},n().createElement("div",{className:i7["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:i7["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:i7["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:i7["fields-step__timestamp-helper"]},'Display timestamps as "2 minutes ago" instead of absolute time'))))),n().createElement(or,{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 ol={"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"},oi={NONE:"None",OPENMRS:"OpenMRS Session",BASIC:"Basic Auth",API_KEY:"API Key",BEARER_TOKEN:"Bearer Token"};function oo(){let{state:e,saveMonitor:t}=iU(),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,ix.stateToSavePayload)(e),[e]),v=function(e){if(e)return i5.find(t=>t.type===e||(t.aliases?.includes(e)??!1))}(e.componentType),S=(0,a.useMemo)(()=>(0,ix.yn)(e),[e]),T=(0,a.useMemo)(()=>(0,ix.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:oi[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(ny.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:ol["preview-step"]},n().createElement("div",{className:ol["preview-step__header"]},n().createElement("h2",null,"Preview & publish"),n().createElement("p",{className:ol["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(l5,{loading:!1,onRefresh:()=>y(e=>e+1),actions:[{label:E?"Copied!":"Copy configuration JSON",onClick:R}]},v&&n().createElement("div",{className:ol["preview-design-head"]},n().createElement("span",{className:ol["preview-design-head__icon"],style:{backgroundColor:`${v.accent}1A`,color:v.accent}},v.icon),n().createElement("div",{className:ol["preview-design-head__text"]},n().createElement("h3",{className:ol["preview-design-head__title"]},v.label),n().createElement("p",{className:ol["preview-design-head__desc"]},v.description))),n().createElement("div",{key:b},n().createElement(iq,{state:e}))),n().createElement("div",{className:ol["preview-section"]},n().createElement("h4",null,"Configuration summary"),n().createElement("div",{className:ol["preview-summary"]},I.map(e=>n().createElement("div",{key:e.label,className:ol["preview-summary__item"]},n().createElement("span",{className:ol["preview-summary__icon"]},e.icon),n().createElement("div",{className:ol["preview-summary__text"]},n().createElement("div",{className:ol["preview-summary__label"]},e.label),n().createElement("div",{className:ol["preview-summary__value"]},e.value))))),n().createElement("div",{className:ol["preview-section__divider"]}),n().createElement("h4",null,"Validation checklist"),n().createElement("div",{className:ol["preview-checklist"]},k.map(e=>n().createElement("div",{key:e.label,className:ol["preview-checklist__item"]},n().createElement("span",{className:[ol["preview-checklist__icon"],e.pass?ol["preview-checklist__icon--pass"]:ol["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:ol["preview-checklist__label"]},e.label),n().createElement("div",{className:ol["preview-checklist__sub"]},e.sub)))))),n().createElement("div",{className:ol["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 os(){let e=(0,i.Zp)(),[t]=(0,l.ok)(),r=t.get("mode")||"create",a=t.get("monitor");return n().createElement(iP,{mode:r,monitorId:a??void 0},n().createElement(od,{onClose:()=>{e("/admin/etl-monitors")},mode:r}))}function od({onClose:e,mode:t}){let{state:r,saveMonitor:a,updateState:l}=iU(),{has:i}=v(),{currentStep:d,goToNextStep:c,goToPreviousStep:m,canGoNext:u,canGoPrevious:p}=iF(),[_,f]=n().useState(null),[b,h]=n().useState(!1),S=(0,ix.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:iz["etl-monitor-builder-page"]},n().createElement("header",{className:iz["builder-header"]},n().createElement("div",{className:iz["builder-header__breadcrumb"]},n().createElement("span",{className:iz["builder-header__category"]},A),n().createElement("span",{className:iz["builder-header__separator"]},"/"),n().createElement("span",{className:iz["builder-header__name"]},k)),n().createElement("div",{className:iz["builder-header__title"]},"create"===t?"New ETL Monitor":"Edit ETL Monitor"),n().createElement("div",{className:iz["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:iz["builder-content"]},n().createElement("div",{className:iz["builder-grid"]},n().createElement("div",{className:iz["builder-sidebar"]},n().createElement("nav",{className:iz["builder-steps-nav"],"aria-label":"Wizard steps"},n().createElement("ul",{className:iz["builder-steps-list"]},N.map((e,t)=>{let r=t<I?"completed":t===I?"current":"upcoming";return n().createElement("li",{key:e.id,className:`${iz["builder-step-item"]} ${iz[`builder-step-item--${r}`]}`},n().createElement("button",{type:"button",className:iz["builder-step-button"],"aria-current":"current"===r?"step":void 0},n().createElement("span",{className:iz["builder-step-number"]},"completed"===r?n().createElement(U._j,{size:16}):t+1),n().createElement("div",{className:iz["builder-step-content"]},n().createElement("span",{className:iz["builder-step-label"]},e.label),e.sublabel&&n().createElement("span",{className:iz["builder-step-sublabel"]},e.sublabel))))}))),n().createElement("div",{className:iz["builder-help-section"]},n().createElement(s._V,{size:16,className:iz["builder-help-icon"]}),n().createElement("div",{className:iz["builder-help-content"]},n().createElement("span",{className:iz["builder-help-label"]},"Need help?"),n().createElement("a",{href:"#",className:iz["builder-help-link"],onClick:e=>{e.preventDefault()}},"Learn how to create ETL monitors")))),n().createElement("div",{className:iz["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:iz["builder-step-content"]},(()=>{switch(d){case"general":default:return n().createElement(iQ,null);case"data-source":return n().createElement(i1,null);case"design":return n().createElement(i8,null);case"fields":return n().createElement(on,null);case"preview":return n().createElement(oo,null)}})())),n().createElement("div",{className:iz["builder-preview"]},"preview"===d?n().createElement(iW,null):n().createElement("div",{className:iz["builder-preview-panel"]},n().createElement("div",{className:iz["builder-preview-header"]},n().createElement("h4",null,"Live Preview"),n().createElement("p",{className:iz["builder-preview-description"]},"See how your monitor will appear in real-time")),n().createElement("div",{className:iz["builder-preview-content"]},r.componentType&&r.fields.length>0?n().createElement(n().Fragment,null,n().createElement(iq,{state:r}),r.componentType&&n().createElement("div",{className:iz["builder-preview-settings"]},n().createElement("div",{className:iz["builder-preview-settings-header"]},n().createElement("h5",null,"Selected Design Settings")),n().createElement("div",{className:iz["builder-preview-settings-content"]},n().createElement("div",{className:iz["builder-preview-setting"]},n().createElement("label",null,"Component"),n().createElement(o.vwO,{type:"purple"},r.componentType)),n().createElement("div",{className:iz["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:iz["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:iz["builder-preview-settings-note"]},n().createElement(tN.$$,{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:iz["builder-preview-config"]},n().createElement("div",{className:iz["builder-preview-config-header"]},n().createElement("h5",null,"Generated Configuration (JSON)")),n().createElement("pre",{className:iz["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:iz["builder-preview-empty"]},n().createElement("p",null,"Configure your data source and select a design to see the live preview"))))))))}function oc({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 om({open:e,mode:t,onClose:r,onSave:a}){let{state:l}=iU(),{currentStep:i,goToNextStep:s,goToPreviousStep:d,canGoNext:c,canGoPrevious:m}=iF(),[u,p]=n().useState(null),[_,f]=n().useState(!1),b=(0,ix.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(iQ,null);case"data-source":return n().createElement(i1,null);case"design":return n().createElement(i8,null);case"fields":return n().createElement(on,null);case"preview":return n().createElement(oo,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(oc,{state:l})))))))}function ou({open:e,mode:t,monitorId:r,onClose:a,onSave:l}){return e?n().createElement(iP,{mode:t,monitorId:r},n().createElement(om,{open:e,mode:t,monitorId:r,onClose:a,onSave:l})):null}let op=[{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"}],o_={name:"",code:"",description:"",monitorType:"STATUS_CARD",category:"",refreshInterval:30,timeout:10,active:!0,apiUrl:"",apiMethod:"GET",authType:"NONE",authUsername:"",authPassword:"",authHeaderName:"",authApiKey:"",authToken:"",displayColumnsJson:""},og=[{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)"}],oE=[{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 of(){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(o_),[N,I]=n().useState(!1),[k,A]=n().useState(!1),R=n().useCallback(async e=>{u(!0),_(null);try{let t=await lO(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 lL(t):S?.uuid&&await lM(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 l$(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(o_),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:op},({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}))},og.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}))},oE.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
338
|
"columns": [
|
|
309
339
|
{
|
|
310
340
|
"key": "status",
|
|
@@ -314,7 +344,7 @@ ${e}`)}console.log("✅ [Section] All indicators compiled successfully",{total:l
|
|
|
314
344
|
"colorMap": { "true": "running", "false": "success" }
|
|
315
345
|
}
|
|
316
346
|
]
|
|
317
|
-
}`,onChange:e=>w(t=>({...t,displayColumnsJson:e.target.value})),helperText:"Define how to extract and display data from the API response"})))),n().createElement(om,{open:k,mode:"create",monitorId:S?.uuid,onClose:()=>A(!1),onSave:async e=>{try{await lx(e),A(!1),R()}catch(e){throw console.error("Failed to save monitor:",e),e}}}))}let of="/reportbuilder/dashboard";async function ob(e,t){var r;let a=new URLSearchParams;return a.set("v",e?.v??"default"),e?.q?.trim()&&a.set("q",e.q.trim()),e?.type&&a.set("type",e.type),e?.activeOnly&&a.set("activeOnly","true"),e?.includeRetired&&a.set("includeRetired","true"),(r=await (0,W.wO)(`${of}?${a.toString()}`,t))?Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]:[]}async function oy(e,t){return(0,W.wO)(`${of}/${encodeURIComponent(e.trim())}?v=full`,t)}async function oh(e,t){return(0,W.oV)(of,e,t)}async function ov(e,t,r){return(0,W.oV)(`${of}/${encodeURIComponent(e)}`,t,r)}async function oS(e,t=!1,r="Retired from Report Builder Admin",a){let n=new URLSearchParams;t?n.set("purge","true"):n.set("reason",r),await (0,W.hI)(`${of}/${encodeURIComponent(e)}?${n.toString()}`,a)}function oT(e){let[t,r]=n().useState(null),[a,l]=n().useState(!1),[i,o]=n().useState(null),[s,d]=n().useState(!1);return n().useEffect(()=>{if(!e){r(null),d(!1),o(null);return}let t=new AbortController,a=!0;return l(!0),o(null),d(!1),oy(e,t.signal).then(e=>{a&&r(e??null)}).catch(e=>{a&&e?.name!=="AbortError"&&(e?.status===404||e?.response?.status===404||/not found|404/i.test(String(e?.message))?d(!0):o(e?.message??"Failed to load dashboard"))}).finally(()=>{a&&l(!1)}),()=>{a=!1,t.abort()}},[e]),{dashboard:t,isLoading:a,error:i,notFound:s}}var oC=r(3155);let ow=[{key:"overview",label:"Overview",order:10},{key:"execution",label:"Execution",order:20},{key:"history",label:"History",order:30},{key:"errors",label:"Errors",order:40},{key:"configuration",label:"Configuration & Advanced Settings",order:50,collapsed:!0}],oN={sm:4,md:8,lg:8},oI="__other";function ok(e){if(!e||!e.trim())return{version:"unknown",config:null};try{let t=JSON.parse(e);if(t&&1===t.schemaVersion)return{version:1,config:t};return{version:"unknown",config:null,error:`Unsupported schemaVersion: ${t?.schemaVersion}`}}catch(e){return{version:"unknown",config:null,error:e?.message??"Invalid JSON"}}}function oA(){return{schemaVersion:1,sections:[],widgets:[],autoInclude:{etlMonitors:{enabled:!0,arrangeBy:"monitorLayout"}}}}function oR(e,t,r){return Math.min(r,Math.max(t,Math.round(e)))}function oO(e,t){let r=t??oN,a=e??{};if("number"!=typeof a.sm&&"number"!=typeof a.md&&"number"!=typeof a.lg)return{sm:oR(r.sm??4,0,4),md:oR(r.md??8,0,8),lg:oR(r.lg??8,1,16)};let n="number"==typeof a.sm&&Number.isFinite(a.sm)?oR(a.sm,0,4):4,l="number"==typeof a.md&&Number.isFinite(a.md)?oR(a.md,0,8):Math.min(8,2*n),i="number"==typeof a.lg&&Number.isFinite(a.lg)?oR(a.lg,0,16):Math.min(16,Math.max(2*l,4));return 0===i&&(i=oR(r.lg??8,1,16)),{sm:n,md:l,lg:i}}function oD(e){return[...e].sort((e,t)=>{if(e.explicit!==t.explicit)return e.explicit?-1:1;let r=(e.explicitOrder??0)-(t.explicitOrder??0);if(0!==r)return r;let a=(e.priority??999)-(t.priority??999);return 0!==a?a:e.title.toLowerCase().localeCompare(t.title.toLowerCase())})}let ox={success:{label:"Healthy",kind:"success"},warning:{label:"Degraded",kind:"warning"},error:{label:"Errors detected",kind:"warning"}},oL=function({title:e,subtitle:t,status:r,lastRefreshed:a,onRefresh:l,refreshing:i}){let s=ox[r];return n().createElement(G,{title:e,subtitle:t,status:{label:s.label,kind:s.kind},actions:n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"}},a&&n().createElement("span",{style:{fontSize:"0.8125rem",color:"var(--cds-text-secondary, #525252)"}},"Last refreshed: ",a.toLocaleTimeString()),n().createElement(o.$nd,{size:"sm",kind:"ghost",renderIcon:u.wM,onClick:l,disabled:i},"Refresh Now"))})};function oM(e){return!!e&&!(e<=0)&&e}let o$=function({slots:e,renderSlot:t}){let r=e.filter(e=>"UNSUPPORTED"!==e.status);return n().createElement(o.xA9,{className:"-esm-report-builder__dashboards__dashboard-grid___SgeFw",condensed:!0},e.map(e=>{if("UNSUPPORTED"===e.status)return null;let a=r.indexOf(e)+1;return n().createElement(o.VPZ,{key:e.slotKey,sm:oM(e.span.sm),md:oM(e.span.md),lg:oM(e.span.lg),className:"-esm-report-builder__dashboards__dashboard-grid__cell___BeymQ"},t(e,a))}))},oP=function({section:e,renderSlot:t}){let r=n().createElement(o$,{slots:e.slots,renderSlot:t});return n().createElement("section",{className:"-esm-report-builder__dashboards__dashboard-renderer___JUfxw"},e.collapsed?n().createElement(o.nD3,{className:"-esm-report-builder__dashboards__dashboard-section__accordion___nXALg"},n().createElement(o.AsP,{title:`${e.label} (${e.slots.length})`},r)):n().createElement(n().Fragment,null,n().createElement("div",{className:"-esm-report-builder__dashboards__dashboard-section__header___ii3om"},n().createElement("h3",{className:"-esm-report-builder__dashboards__dashboard-section__label___zQPtH"},e.label),n().createElement("span",{className:"-esm-report-builder__dashboards__dashboard-section__count___FMVRo"},e.slots.length," ",1===e.slots.length?"widget":"widgets")),r))},oU=function({title:e,report:t}){let r=(0,i.Zp)();return n().createElement(o.FAs,{className:"-esm-report-builder__dashboards__report-launch-card___s3dCR"},n().createElement("div",{className:"-esm-report-builder__dashboards__report-launch-card__header___RkSE3"},n().createElement("span",{className:"-esm-report-builder__dashboards__report-launch-card__icon___EP+sN"},n().createElement(es.yo,{size:20})),n().createElement("h4",{className:"-esm-report-builder__dashboards__report-launch-card__title___croA4"},e)),t?.description&&n().createElement("p",{className:"-esm-report-builder__dashboards__report-launch-card__description___Fkyas"},t.description),n().createElement("div",{className:"-esm-report-builder__dashboards__report-launch-card__footer___3xm6b"},n().createElement("div",{className:"-esm-report-builder__dashboards__report-launch-card__tags___yy+kc"},t?.reportType&&n().createElement(o.vwO,{size:"sm",type:"blue"},t.reportType),t?.code&&n().createElement(o.vwO,{size:"sm",type:"gray"},t.code)),n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:E.Qp,onClick:()=>r("/run")},"Open in Run Reports")))},oB={"monitor-missing":"The ETL monitor for this widget no longer exists or is inactive.","report-missing":"The report for this widget no longer exists or is retired."},oF=function({title:e,reason:t}){return n().createElement(o.FAs,{className:"-esm-report-builder__dashboards__widget-unavailable-card___v3iFK"},n().createElement("div",{className:"-esm-report-builder__dashboards__widget-unavailable-card__icon___dDZC-"},n().createElement(tb.Cp,{size:24})),n().createElement("h4",{className:"-esm-report-builder__dashboards__widget-unavailable-card__title___aIC18"},e),n().createElement("p",{className:"-esm-report-builder__dashboards__widget-unavailable-card__message___nfSY6"},t?oB[t]:"This widget is currently unavailable."))},oz=function({slot:e,position:t,data:r,error:a,loading:l,onRefreshMonitor:i}){return"UNAVAILABLE"===e.status?n().createElement(oF,{title:e.title,reason:e.unavailableReason}):"UNSUPPORTED"===e.status?null:"ETL"===e.kind&&e.monitor?n().createElement(l4,{monitor:e.monitor,data:r,error:a,loading:l,onRefresh:()=>i(e.monitor.uuid),position:t,title:e.title!==e.monitor.name?e.title:void 0}):"REPORT"===e.kind?n().createElement(oU,{title:e.title,report:e.report}):null},oq=function({synthesized:e}){let t=(0,i.Zp)();return n().createElement(o.FAs,{className:"-esm-report-builder__dashboards__dashboard-empty-state___6h6dB"},n().createElement(c.xh,{size:40,className:"-esm-report-builder__dashboards__dashboard-empty-state__icon___mBM3j"}),n().createElement("h3",{className:"-esm-report-builder__dashboards__dashboard-empty-state__title___Emcss"},"Nothing to show yet"),n().createElement("p",{className:"-esm-report-builder__dashboards__dashboard-empty-state__message___GoHiK"},"This dashboard has no widgets configured."),n().createElement("div",{className:"-esm-report-builder__dashboards__dashboard-empty-state__actions___RjxAc"},n().createElement(o.$nd,{size:"sm",kind:"primary",onClick:()=>t("/admin/dashboards")},"Configure dashboards"),e&&n().createElement(o.$nd,{size:"sm",kind:"ghost",onClick:()=>t("/admin/etl-monitors")},"Manage ETL monitors")))};function oj({code:e,dashboard:t,fallbackConfig:r,titleOverride:a}){let l=(0,i.g)(),s=e??l.code,d=oT(t?void 0:s),c=t??d.dashboard,m=n().useMemo(()=>ok(c?.configJson),[c?.configJson]).config??r??null,{monitors:u,reports:p,isLoading:_,error:g}=function(e){let[t,r]=n().useState([]),[a,l]=n().useState([]),[i,o]=n().useState(!1),[s,d]=n().useState(null),c=n().useMemo(()=>JSON.stringify({w:e?.widgets??[],ai:e?.autoInclude??null}),[e?.widgets,e?.autoInclude]);return n().useEffect(()=>{let e=new AbortController,t=!0;return o(!0),d(null),Promise.all([lO(e.signal).catch(e=>{if(e?.name==="AbortError")throw e;return null}),X({v:"default"},e.signal).catch(e=>{if(e?.name==="AbortError")throw e;return null})]).then(([e,a])=>{t&&(null===e&&null===a&&d("Failed to load dashboard contents"),r(e??[]),l(a??[]))}).catch(()=>{}).finally(()=>{t&&o(!1)}),()=>{t=!1,e.abort()}},[c]),{monitors:t,reports:a,isLoading:i,error:s}}(m),E=n().useMemo(()=>(function(e,t,r){let a={configSynthesized:!1,hadUnknownWidgetTypes:!1},n=e;n||(n=oA(),a.configSynthesized=!0);let l=(n.sections?.length?n.sections:ow.map(e=>({...e}))).map((e,t)=>({s:e,i:t})).sort((e,t)=>(e.s.order??(e.i+1)*10)-(t.s.order??(t.i+1)*10)||e.i-t.i).map(e=>e.s),i=new Set(l.map(e=>e.key)),o=new Map,s=e=>{let t=o.get(e);return t||(t=[],o.set(e,t)),t},d=new Set,c=e=>{let t=e,r=2;for(;d.has(t);)t=`${e}-${r++}`;return d.add(t),t},m=new Set;(n.widgets??[]).forEach((e,n)=>{if(!e||!e.widgetType)return;let l=i.has(e.sectionKey)?e.sectionKey:oI,o=e.order??(n+1)*100,d=oO(e.span,oN),u=e.key||`${e.widgetType}:${e.refUuid??e.refCode??n}`;if("ETL_MONITOR"===e.widgetType){let r=function(e,t,r){if(t){let r=e.find(e=>e.uuid===t);if(r)return r}if(r){let t=e.find(e=>e.code===r);if(t)return t}}(t,e.refUuid,e.refCode);if(!r)return void s(l).push({slotKey:c(u),status:"UNAVAILABLE",explicit:!0,explicitOrder:o,title:e.titleOverride??e.refCode??e.refUuid??"Monitor",sectionKey:l,span:d,unavailableReason:"monitor-missing"});r.uuid&&m.add(r.uuid),s(l).push({slotKey:c(u),status:"OK",kind:"ETL",explicit:!0,explicitOrder:o,title:e.titleOverride??r.name,footerLabel:e.footerLabel,sectionKey:l,span:d,monitor:r})}else if("REPORT"===e.widgetType){let t=function(e,t,r){if(t){let r=e.find(e=>e.uuid===t);if(r)return r}if(r){let t=e.find(e=>e.code===r);if(t)return t}}(r,e.refUuid,e.refCode);s(l).push({slotKey:c(u),status:t?"OK":"UNAVAILABLE",kind:"REPORT",explicit:!0,explicitOrder:o,title:e.titleOverride??t?.name??e.refCode??e.refUuid??"Report",footerLabel:e.footerLabel,sectionKey:l,span:d,report:t,unavailableReason:t?void 0:"report-missing"})}else a.hadUnknownWidgetTypes=!0,s(l).push({slotKey:c(u),status:"UNSUPPORTED",explicit:!0,explicitOrder:o,title:e.titleOverride??e.widgetType,sectionKey:l,span:d,unsupportedWidgetType:e.widgetType})});let u=n.autoInclude?.etlMonitors;if(u?.enabled){let e=u.defaultSpan??oN;for(let r of t.filter(e=>e.uuid&&!m.has(e.uuid)).sort((e,t)=>(e.sortOrder??0)-(t.sortOrder??0)||(e.name??"").toLowerCase().localeCompare((t.name??"").toLowerCase()))){let t=function(e){let t,r;try{let a=l0(e.displayConfigJson);if(2===a.version&&a.config)t=a.config.component,r=a.config.layout;else{let a=lZ(e.displayConfigJson,e.monitorType);a&&(t=a.component,r=a.layout)}}catch{}return r&&r.section?r:(0,oC.kK)(t??"SUMMARY_CARD")}(r),a=null;t.section&&i.has(t.section)?a=t.section:u.defaultSectionKey&&i.has(u.defaultSectionKey)&&(a=u.defaultSectionKey),s(a??oI).push({slotKey:c(`ETL_MONITOR:${r.uuid}`),status:"OK",kind:"ETL",explicit:!1,priority:t.priority??999,title:r.name,sectionKey:a??oI,span:oO(t.span,e),monitor:r})}}let p=l.map(e=>({...e,slots:oD(o.get(e.key)??[])})),_=o.get(oI);_&&_.length>0&&p.push({key:oI,label:"Other",order:9999,slots:oD(_)});let g=p.filter(e=>e.slots.length>0||!0===e.alwaysShow),E=g.flatMap(e=>e.slots.filter(e=>"OK"===e.status&&"ETL"===e.kind&&e.monitor).map(e=>e.monitor)),f=E.map(e=>e.refreshInterval??30);return{sections:g,etlMonitors:E,minRefreshInterval:f.length>0?Math.max(5,Math.min(...f)):30,flags:a}})(m,u,p),[m,u,p]),{dataMap:f,errorMap:b,loadingMap:y,lastRefreshed:h,refreshAll:v,refreshOne:S,aggregateStatus:T}=function(e,t){let[r,a]=n().useState({}),[l,i]=n().useState({}),[o,s]=n().useState({}),[d,c]=n().useState(null),m=n().useMemo(()=>e.map(e=>e.uuid).join(","),[e]),u=n().useCallback(async e=>{s(t=>({...t,[e]:!0}));try{let t=await l$(e);a(r=>({...r,[e]:t})),i(t=>{let r={...t};return delete r[e],r})}catch(t){i(r=>({...r,[e]:t?.message??"Failed to load data"}))}finally{s(t=>({...t,[e]:!1}))}},[]),p=n().useCallback(()=>{let e=m.split(",").filter(Boolean);0!==e.length&&Promise.all(e.map(e=>u(e))).then(()=>c(new Date))},[m,u]);n().useEffect(()=>{p()},[p]),n().useEffect(()=>{if(!m)return;let e=setInterval(()=>p(),1e3*Math.max(5,t));return()=>clearInterval(e)},[m,t,p]);let _=n().useCallback(()=>p(),[p]),g=n().useCallback(e=>u(e),[u]),E=n().useMemo(()=>Object.values(l).filter(Boolean).length>0?"error":m.split(",").filter(Boolean).some(e=>!r[e])?"warning":"success",[l,r,m]);return{dataMap:r,errorMap:l,loadingMap:o,lastRefreshed:d,refreshAll:_,refreshOne:g,aggregateStatus:E}}(E.etlMonitors,E.minRefreshInterval),C=!t&&d.isLoading||_,w=a??c?.name??"Dashboard",N=c?.description,I=(e,t)=>n().createElement(oz,{slot:e,position:t,data:e.monitor?.uuid?f[e.monitor.uuid]:void 0,error:e.monitor?.uuid?b[e.monitor.uuid]:void 0,loading:!!e.monitor?.uuid&&!!y[e.monitor.uuid],onRefreshMonitor:S});return!t&&d.notFound?n().createElement(o.BJc,{gap:5},n().createElement(o.jeF,{kind:"error",lowContrast:!0,hideCloseButton:!0,title:"Dashboard not found",subtitle:`No dashboard exists for "${s??"unknown"}".`}),n().createElement(oq,null)):!t&&d.error?n().createElement(o.BJc,{gap:5},n().createElement(oL,{title:w,subtitle:N,status:"error",lastRefreshed:null,onRefresh:(d.error,v)}),n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Error",subtitle:d.error})):C?n().createElement(o.BJc,{gap:5},n().createElement(oL,{title:w,subtitle:N,status:"success",lastRefreshed:null,onRefresh:v,refreshing:!0}),n().createElement(o.OuH,{description:"Loading dashboard…",className:"-esm-report-builder__dashboards__dashboard-loading___hN0dF"})):n().createElement(o.BJc,{gap:5},n().createElement(oL,{title:w,subtitle:N,status:T,lastRefreshed:h,onRefresh:v}),(g||E.flags.configSynthesized)&&n().createElement(o.jeF,{kind:"warning",lowContrast:!0,title:"Dashboard configuration",subtitle:g||"This dashboard’s configuration is invalid — showing all active ETL monitors instead."}),0===E.sections.length?n().createElement(oq,{synthesized:E.flags.configSynthesized}):E.sections.map(e=>n().createElement(oP,{key:e.key,section:e,renderSlot:I})))}let oH=[{key:"name",header:"Name"},{key:"code",header:"Code"},{key:"dashboardType",header:"Type"},{key:"description",header:"Description"},{key:"open",header:""}];function oJ(){let e=(0,i.Zp)(),[t,r]=n().useState([]),[a,l]=n().useState(!1),[s,d]=n().useState(null);n().useEffect(()=>{let e=new AbortController,t=!0;return l(!0),d(null),ob({activeOnly:!0,v:"default"},e.signal).then(e=>{t&&r((e??[]).filter(e=>e.uuid))}).catch(e=>{t&&e?.name!=="AbortError"&&d(e?.message??"Failed to load dashboards")}).finally(()=>{t&&l(!1)}),()=>{t=!1,e.abort()}},[]);let m=t.some(e=>"etl-dashboard"===e.code),u=t.map(e=>({id:e.uuid,name:e.name,code:e.code||"—",dashboardType:e.dashboardType||"CUSTOM",description:e.description||"—"}));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Dashboards",subtitle:"Configured dashboards composing ETL monitors, reports and other widgets."}),n().createElement("div",{style:{padding:"0 1rem 1rem",display:"grid",gap:"1rem"}},s&&n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:s}),a?n().createElement(o.OOb,{rowCount:3,columnCount:5,showHeader:!1,showToolbar:!1}):n().createElement(n().Fragment,null,!m&&n().createElement(o.FAs,{className:"-esm-report-builder__dashboards__dashboards-index__auto-tile___JZajk"},n().createElement("div",{className:"-esm-report-builder__dashboards__dashboards-index__auto-main___YFN7h"},n().createElement(c.xh,{size:20,className:"-esm-report-builder__dashboards__dashboards-index__auto-icon___-MirL"}),n().createElement("div",null,n().createElement("strong",null,"ETL Monitors (auto)"),n().createElement("p",{className:"-esm-report-builder__dashboards__dashboards-index__auto-note___Sve8a"},"All active ETL monitors, arranged automatically — no configuration yet."))),n().createElement(o.$nd,{size:"sm",kind:"ghost",renderIcon:E.Qp,onClick:()=>e("/etl-dashboard")},"Open")),0===u.length?!m&&null:n().createElement(o.bQt,{rows:u,headers:oH},({rows:r,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,r.map(r=>{let a=t.find(e=>e.uuid===r.id);return n().createElement(o.Hjg,{key:r.id,...i({row:r})},n().createElement(o.nA6,null,r.cells[0].value),n().createElement(o.nA6,null,r.cells[1].value),n().createElement(o.nA6,null,n().createElement(o.vwO,{size:"sm",type:"purple"},r.cells[2].value)),n().createElement(o.nA6,null,r.cells[3].value),n().createElement(o.nA6,null,n().createElement(o.$nd,{size:"sm",kind:"ghost",renderIcon:E.Qp,iconDescription:"Open dashboard",hasIconOnly:!0,onClick:()=>a?.code&&e(`/dashboards/${a.code}`)})))}))))),!a&&0===t.length&&n().createElement("p",{className:"-esm-report-builder__dashboards__dashboards-index__empty-note___a8B0v"},"No dashboards configured yet. Create one under Admin → Dashboards."))))}let oG=oA(),oV=function(){let{dashboard:e,isLoading:t}=oT("etl-dashboard");return!t&&e?.uuid?n().createElement(oj,{dashboard:e}):n().createElement(oj,{fallbackConfig:oG,titleOverride:"ETL Monitor Dashboard"})},oW="-esm-report-builder__dashboards-admin__dashboard-form-modal__errors___OVqEo",oK="-esm-report-builder__dashboards-admin__dashboard-widgets-editor__row-fields___N7eOV",oQ="-esm-report-builder__dashboards-admin__dashboard-editor__hint___rHHUP",oY="-esm-report-builder__dashboards-admin__dashboard-editor__row-actions___4sHig",oX=[{key:"name",header:"Name"},{key:"code",header:"Code"},{key:"dashboardType",header:"Type"},{key:"active",header:"Status"},{key:"sortOrder",header:"Order"},{key:"description",header:"Description"},{key:"actions",header:"Actions"}];function oZ({rows:e,loading:t,onEdit:r,onDelete:a,canEdit:l=!0,canDelete:i=!0}){if(t&&0===e.length)return n().createElement(o.OOb,{rowCount:4,columnCount:7,showHeader:!1,showToolbar:!1});let s=e.map(e=>({id:e.uuid,name:e.name,code:e.code||"—",dashboardType:e.dashboardType||"CUSTOM",active:!1===e.active||e.retired?"Inactive":"Active",sortOrder:e.sortOrder??0,description:e.description||"—"}));return n().createElement(o.bQt,{rows:s,headers:oX},({rows:t,headers:s,getHeaderProps:d,getRowProps:c})=>n().createElement(o.K3K,null,n().createElement(o.XIK,{useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,s.map(e=>n().createElement(o.A0N,{key:e.key,...d({header:e})},e.header)))),n().createElement(o.BFY,null,t.map(t=>{let s=e.find(e=>e.uuid===t.id);return n().createElement(o.Hjg,{key:t.id,...c({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,n().createElement(o.vwO,{size:"sm",type:"purple"},t.cells[2].value)),n().createElement(o.nA6,null,s?.active===!1||s?.retired?n().createElement(o.vwO,{size:"sm",type:"gray"},"Inactive"):n().createElement(o.vwO,{size:"sm",type:"green"},"Active")),n().createElement(o.nA6,null,t.cells[4].value),n().createElement(o.nA6,null,t.cells[5].value),n().createElement(o.nA6,null,n().createElement("div",{className:"-esm-report-builder__dashboards-admin__dashboards-table__actions___xwkzF"},l&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:es.ff,iconDescription:"Edit",hasIconOnly:!0,onClick:()=>s&&r(s.uuid)}),i&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:P.zH,iconDescription:"Retire",hasIconOnly:!0,onClick:()=>s&&a(s.uuid)}))))})))))}let o0=/^[a-z0-9][a-z0-9-]{0,49}$/,o1=/^[a-z0-9][a-z0-9-]{0,99}$/;function o2(){return{schemaVersion:1,sections:ow.map(e=>({...e})),widgets:[],autoInclude:{etlMonitors:{enabled:!1}}}}function o5(e){return e&&e.trim()?o0.test(e)?null:"Section key must be lowercase letters, numbers and dashes (max 50)":"Section key is required"}function o6(e){let t=[],r=e.sections??[],a=new Set;for(let e of r){let r=o5(e.key);if(r){t.push(`Section "${e.key||"(blank)"}": ${r}`);continue}a.has(e.key)&&t.push(`Duplicate section key: "${e.key}"`),a.add(e.key),e.label&&e.label.trim()||t.push(`Section "${e.key}" is missing a label`)}return(e.widgets??[]).forEach((e,r)=>{let n=e.titleOverride||e.refUuid||e.refCode||`#${r+1}`;for(let r of(e.widgetType||t.push(`Widget ${n}: widget type is required`),("ETL_MONITOR"===e.widgetType||"REPORT"===e.widgetType)&&(e.refUuid||e.refCode||t.push(`Widget ${n}: provide a UUID or a code reference`),e.refUuid&&e.refCode&&t.push(`Widget ${n}: provide only one of UUID or code reference`)),e.sectionKey&&a.has(e.sectionKey)||t.push(`Widget ${n}: assign it to one of the configured sections`),["sm","md","lg"])){let a=e.span?.[r];void 0!==a&&(a<0||a>({sm:4,md:8,lg:16})[r])&&t.push(`Widget ${n}: span ${r} must be 0-${{sm:4,md:8,lg:16}[r]}`)}}),t}let o3=[{value:"ETL",label:"ETL"},{value:"REPORT",label:"Report"},{value:"CUSTOM",label:"Custom"}];function o4({form:e,onChange:t}){return n().createElement("fieldset",null,n().createElement("legend",null,"Basics"),n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"dashboard-name",labelText:"Name",required:!0,placeholder:"e.g., ETL Dashboard",value:e.name,onChange:e=>t({name:e.target.value})}),n().createElement(o.ksK,{id:"dashboard-code",labelText:"Code",placeholder:"e.g., etl-dashboard",helperText:"Lowercase letters, numbers, dashes. Used in the URL: /dashboards/:code",value:e.code,onChange:e=>t({code:e.target.value})}),n().createElement(o.fs1,{id:"dashboard-description",labelText:"Description",rows:2,value:e.description,onChange:e=>t({description:e.target.value})}),n().createElement(o.l6P,{id:"dashboard-type",labelText:"Dashboard type",value:e.dashboardType,onChange:e=>t({dashboardType:e.target.value})},o3.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement(o.BJc,{orientation:"horizontal",gap:5},n().createElement(o.Q7x,{id:"dashboard-sort-order",label:"Sort order",value:e.sortOrder,onChange:e=>{let r=e.target?.value;void 0!==r&&t({sortOrder:parseInt(r,10)||0})}}),n().createElement(o.Sc0,{id:"dashboard-active",labelText:"Active",checked:e.active,onChange:(e,{checked:r})=>t({active:r})}))))}function o8({config:e,onChange:t}){let r=e.sections??[],a=r=>t({...e,sections:r}),l=(e,t)=>{a(r.map((r,a)=>a===e?{...r,...t}:r))},i=(e,t)=>{let n=e+t;if(n<0||n>=r.length)return;let l=[...r];[l[e],l[n]]=[l[n],l[e]],a(l)};return n().createElement("fieldset",null,n().createElement("legend",null,"Sections"),n().createElement(o.BJc,{gap:3},n().createElement("span",{className:oQ},'Widgets are placed into sections. Empty sections are hidden unless "always show" is set.'),r.map((e,t)=>{let s=o5(e.key);return n().createElement("div",{key:t,className:"-esm-report-builder__dashboards-admin__dashboard-sections-editor__row___RsLl+"},n().createElement("div",{className:"-esm-report-builder__dashboards-admin__dashboard-sections-editor__row-fields___9s6D9"},n().createElement(o.ksK,{id:`section-key-${t}`,labelText:"Key",size:"sm",invalid:!!s,invalidText:s??void 0,value:e.key,onChange:e=>l(t,{key:e.target.value})}),n().createElement(o.ksK,{id:`section-label-${t}`,labelText:"Label",size:"sm",value:e.label,onChange:e=>l(t,{label:e.target.value})}),n().createElement(o.ksK,{id:`section-order-${t}`,labelText:"Order",size:"sm",type:"number",value:String(e.order??(t+1)*10),onChange:e=>l(t,{order:parseInt(e.target.value,10)||0})}),n().createElement(o.Sc0,{id:`section-collapsed-${t}`,labelText:"Collapsed",checked:!!e.collapsed,onChange:(e,{checked:r})=>l(t,{collapsed:r})}),n().createElement(o.Sc0,{id:`section-always-${t}`,labelText:"Always show",checked:!!e.alwaysShow,onChange:(e,{checked:r})=>l(t,{alwaysShow:r})})),n().createElement("div",{className:oY},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:E.Do,iconDescription:"Move up",disabled:0===t,onClick:()=>i(t,-1)}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:E.yd,iconDescription:"Move down",disabled:t===r.length-1,onClick:()=>i(t,1)}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,iconDescription:"Remove section",onClick:()=>a(r.filter((e,r)=>r!==t))})))}),n().createElement("div",null,n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:()=>{a([...r,{key:`section-${r.length+1}`,label:`Section ${r.length+1}`,order:(r.length+1)*10}])}},"Add Section"))))}let o7=[{value:"ETL_MONITOR",label:"ETL Monitor"},{value:"REPORT",label:"Report"}];function o9({config:e,onChange:t}){let[r,a]=n().useState([]),[l,i]=n().useState([]),s=e.sections??[],d=e.widgets??[];n().useEffect(()=>{let e=new AbortController;return lR(void 0,e.signal).then(e=>a(e??[])).catch(()=>a([])),X({v:"default"},e.signal).then(e=>i(e??[])).catch(()=>i([])),()=>e.abort()},[]);let c=r=>t({...e,widgets:r}),m=(e,t)=>{c(d.map((r,a)=>a===e?{...r,...t}:r))};return n().createElement("fieldset",null,n().createElement("legend",null,"Widgets"),n().createElement(o.BJc,{gap:3},n().createElement("span",{className:oQ},"Explicitly placed widgets. Use auto-include below to fill sections with the remaining active ETL monitors."),d.map((e,t)=>n().createElement("div",{key:t,className:"-esm-report-builder__dashboards-admin__dashboard-widgets-editor__row___mxY7U"},n().createElement("div",{className:oK},n().createElement(o.l6P,{id:`widget-type-${t}`,labelText:"Type",size:"sm",value:e.widgetType,onChange:e=>{let a=e.target.value;m(t,{widgetType:a,refUuid:"REPORT"===a?l[0]?.uuid:r[0]?.uuid,refCode:void 0})}},o7.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement(o.l6P,{id:`widget-ref-${t}`,labelText:"REPORT"===e.widgetType?"Report":"ETL monitor",size:"sm",value:e.refUuid??"",onChange:e=>m(t,{refUuid:e.target.value,refCode:void 0})},("REPORT"===e.widgetType?l.map(e=>({value:e.uuid,label:e.code?`${e.name} (${e.code})`:e.name})):r.map(e=>({value:e.uuid,label:e.code?`${e.name} (${e.code})`:e.name}))).map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement(o.l6P,{id:`widget-section-${t}`,labelText:"Section",size:"sm",value:e.sectionKey,onChange:e=>m(t,{sectionKey:e.target.value})},s.map(e=>n().createElement(o.ebT,{key:e.key,value:e.key,text:e.label}))),n().createElement(o.ksK,{id:`widget-order-${t}`,labelText:"Order",size:"sm",type:"number",value:String(e.order??(t+1)*100),onChange:e=>m(t,{order:parseInt(e.target.value,10)||0})})),n().createElement("div",{className:"-esm-report-builder__dashboards-admin__dashboard-widgets-editor__span___BKOZK"},["sm","md","lg"].map(r=>n().createElement(o.ksK,{key:r,id:`widget-span-${r}-${t}`,labelText:`Span ${r}`,size:"sm",type:"number",value:String(e.span?.[r]??({sm:4,md:8,lg:8})[r]),onChange:a=>m(t,{span:{sm:4,md:8,lg:8,...e.span,[r]:parseInt(a.target.value,10)||0}})}))),n().createElement("div",{className:oK},n().createElement(o.ksK,{id:`widget-title-${t}`,labelText:"Title override",size:"sm",value:e.titleOverride??"",onChange:e=>m(t,{titleOverride:e.target.value||void 0})}),n().createElement(o.ksK,{id:`widget-footer-${t}`,labelText:"Footer label",size:"sm",value:e.footerLabel??"",onChange:e=>m(t,{footerLabel:e.target.value||void 0})})),n().createElement("div",{className:oY},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,iconDescription:"Remove widget",onClick:()=>c(d.filter((e,r)=>r!==t))})))),n().createElement("div",null,n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:()=>{c([...d,{widgetType:"ETL_MONITOR",refUuid:r[0]?.uuid,sectionKey:s[0]?.key??"overview",order:(d.length+1)*100}])}},"Add Widget"))))}function se({config:e,onChange:t}){let r=e.autoInclude?.etlMonitors,a=e.sections??[],l=r=>{t({...e,autoInclude:{...e.autoInclude,etlMonitors:{enabled:!1,arrangeBy:"monitorLayout",...e.autoInclude?.etlMonitors,...r}}})};return n().createElement("fieldset",null,n().createElement("legend",null,"Auto-include ETL monitors"),n().createElement(o.BJc,{gap:4},n().createElement("span",{className:oQ},"Active ETL monitors that are not explicitly placed above are added automatically, using each monitor's own section/span/priority from the monitor builder. Explicit placements always win."),n().createElement(o.Sc0,{id:"dashboard-autoinclude-enabled",labelText:"Auto-include active ETL monitors",checked:!!r?.enabled,onChange:(e,{checked:t})=>l({enabled:t})}),n().createElement(o.BJc,{orientation:"horizontal",gap:5},n().createElement(o.l6P,{id:"dashboard-autoinclude-default-section",labelText:"Default section",size:"sm",disabled:!r?.enabled,value:r?.defaultSectionKey??a[0]?.key??"overview",onChange:e=>l({defaultSectionKey:e.target.value})},a.map(e=>n().createElement(o.ebT,{key:e.key,value:e.key,text:e.label}))),n().createElement(o.ksK,{id:"dashboard-autoinclude-default-span-lg",labelText:"Default span (desktop)",size:"sm",type:"number",disabled:!r?.enabled,value:String(r?.defaultSpan?.lg??8),onChange:e=>l({defaultSpan:{sm:4,md:8,lg:parseInt(e.target.value,10)||8}})}))))}function st({config:e,onChange:t,onErrors:r}){let[a,l]=n().useState(()=>JSON.stringify(e,null,2)),[i,s]=n().useState(!1),[d,c]=n().useState([]);return n().createElement("fieldset",null,n().createElement("legend",null,"Configuration JSON"),n().createElement(o.BJc,{gap:3},n().createElement("span",{className:oQ},"Advanced: edit the raw dashboard configuration. Apply validates and syncs the editors above."),n().createElement(o.fs1,{id:"dashboard-json-draft",labelText:"configJson",hideLabel:!0,rows:12,className:"-esm-report-builder__dashboards-admin__dashboard-json-editor__draft___4JtyZ",value:i?a:JSON.stringify(e,null,2),onChange:e=>{l(e.target.value),s(!0)}}),d.length>0&&n().createElement("ul",{className:oW},d.map((e,t)=>n().createElement("li",{key:t},e))),n().createElement("div",{className:oY},n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>{l(JSON.stringify(e,null,2)),c([]),s(!1)},disabled:!i},"Reset"),n().createElement(o.$nd,{kind:"primary",size:"sm",onClick:()=>{let e=function(e){let t;try{t=JSON.parse(e)}catch(e){return{errors:[`Invalid JSON: ${e?.message??"parse error"}`]}}if(!t||"object"!=typeof t)return{errors:["Config must be a JSON object"]};if(1!==t.schemaVersion)return{errors:["schemaVersion must be 1"]};let r=t;return{config:r,errors:o6(r)}}(a);c(e.errors),r(e.errors),0===e.errors.length&&e.config&&(t(e.config),l(JSON.stringify(e.config,null,2)),s(!1))},disabled:!i},"Apply"))))}function sr(e){if(!e)return{name:"",code:"",description:"",dashboardType:"CUSTOM",active:!0,sortOrder:0,config:o2()};let t=ok(e.configJson);return{name:e.name??"",code:e.code??"",description:e.description??"",dashboardType:e.dashboardType??"CUSTOM",active:!1!==e.active,sortOrder:e.sortOrder??0,config:t.config??o2()}}function sa({open:e,mode:t,initial:r,onClose:a,onSave:l}){let[i,s]=n().useState(()=>sr(r)),[d,c]=n().useState([]),[m,u]=n().useState(!1);n().useEffect(()=>{e&&(s(sr(r)),c([]),u(!1))},[e,r?.uuid]);let p=e=>s(t=>({...t,config:e})),_=async()=>{let e,t=(e=[],i.name.trim()||e.push("Name is required"),i.code.trim()&&!o1.test(i.code.trim())&&e.push("Code must be lowercase letters, numbers and dashes"),e.push(...o6(i.config)),e);if(t.length>0)return void c(t);u(!0),c([]);try{await l({name:i.name.trim(),code:i.code.trim()||void 0,description:i.description.trim()||void 0,dashboardType:i.dashboardType,active:i.active,sortOrder:i.sortOrder,configJson:JSON.stringify(i.config)})}catch(e){c([e?.message??"Failed to save dashboard"])}finally{u(!1)}};return n().createElement(o.KXP,{open:e,onClose:()=>!m&&a(),size:"lg"},n().createElement(o.rQ0,{title:"create"===t?"New Dashboard":"Edit Dashboard",label:"Dashboards"}),n().createElement(o.cwr,{hasForm:!0},n().createElement("div",{className:"-esm-report-builder__dashboards-admin__dashboard-form-modal__body___DjraP"},d.length>0&&n().createElement("ul",{className:oW},d.map((e,t)=>n().createElement("li",{key:t},e))),n().createElement(o4,{form:i,onChange:e=>s(t=>({...t,...e}))}),n().createElement(o8,{config:i.config,onChange:p}),n().createElement(o9,{config:i.config,onChange:p}),n().createElement(se,{config:i.config,onChange:p}),n().createElement(st,{config:i.config,onChange:p,onErrors:c}))),n().createElement(o.jlY,{onRequestClose:()=>!m&&a()},n().createElement(o.$nd,{kind:"secondary",onClick:()=>!m&&a()},"Cancel"),n().createElement(o.$nd,{kind:"primary",onClick:_,disabled:m},m?"Saving…":"Save Dashboard")))}function sn(){let{has:e}=v(),t=e(y.RB.DASHBOARD_ADD,y.RB.DASHBOARD_EDIT),r=e(y.RB.DASHBOARD_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=n().useCallback(e=>(c(!0),u(null),ob({q:a,v:"default"},e).then(e=>s((e??[]).filter(e=>!!e.uuid))).catch(e=>{e?.name!=="AbortError"&&u(e?.message??"Failed to load dashboards")}).finally(()=>c(!1))),[a]);n().useEffect(()=>{let e=new AbortController;return S(e.signal),()=>e.abort()},[S]);let T=async e=>{try{E("edit"),u(null),c(!0);let t=await oy(e);h(t),_(!0)}catch(e){u(e?.message??"Failed to load dashboard for editing")}finally{c(!1)}},C=async e=>{let t=i.find(t=>t.uuid===e);if(!window.confirm(`Retire dashboard "${t?.name??e}"?`))return;try{await oS(e,!1)}catch(e){u(e?.message??"Failed to retire dashboard")}let r=new AbortController;await S(r.signal)},w=async e=>{if("create"===g)await oh(e);else{if(!f?.uuid)throw Error("Missing uuid for update");await ov(f.uuid,e)}_(!1);let t=new AbortController;await S(t.signal)};return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Dashboards",subtitle:"Configure dashboards composed of sections and widgets (ETL monitors, reports)."}),t&&n().createElement("div",{style:{display:"flex",justifyContent:"flex-end",padding:"0 1rem"}},n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:b.OM,onClick:()=>{E("create"),h(null),_(!0)}},"Create Dashboard")),n().createElement("div",{style:{padding:"0 1rem",display:"grid",gap:"1rem"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search dashboards…",value:a,onChange:e=>l(e.target.value)}),m&&n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:m,onCloseButtonClick:()=>u(null)}),n().createElement(oZ,{rows:i,loading:d,onEdit:T,onDelete:C,canEdit:t,canDelete:r})),n().createElement(sa,{open:p,mode:g,initial:f,onClose:()=>_(!1),onSave:w}))}var sl=r(2075);let si=()=>{let{has:e}=v(),t=e(y.RB.REPORT_ADD,y.RB.REPORT_EDIT),r=(0,i.Zp)(),[l,s]=(0,a.useState)([]),[c,m]=(0,a.useState)(!0),[p,_]=(0,a.useState)(null),[g,E]=(0,a.useState)(""),[f,h]=(0,a.useState)(null),[S]=(0,a.useState)("all"),[T,C]=(0,a.useState)(""),[w,N]=(0,a.useState)(""),[I,k]=(0,a.useState)("dateModified"),[A,R]=(0,a.useState)(1),[O,D]=(0,a.useState)(10),[x,L]=(0,a.useState)([]),[M,$]=(0,a.useState)([]),[P,U]=(0,a.useState)(new Set),[B,F]=(0,a.useState)(!1),[z,q]=(0,a.useState)(0),[j,H]=(0,a.useState)([]),[J,V]=(0,a.useState)(!1),[W,K]=(0,a.useState)(!1),[Q,Y]=(0,a.useState)("");(0,a.useEffect)(()=>{(async()=>{try{let[e,t]=await Promise.all([en(),tU()]);L(e),$(t)}catch(e){console.error("Failed to load reference data:",e)}})()},[]);let X=(0,a.useCallback)(async()=>{m(!0),_(null);try{let e=(await (0,sl.CB)({includeRetired:"active"!==S})).map(e=>{let t=(0,sl.m)(e),r=x.find(e=>e.uuid===t?.categoryUuid),a=M.find(e=>e.uuid===t?.themeUuid);return{...e,parsedConfig:t,categoryName:r?.name,themeName:a?.name,dataSourceName:t?.dataSourceUuid||"-",rowGrainLabel:t?.rowGrain?.replace("_"," ")||"-"}});s(e)}catch(e){_(e instanceof Error?e.message:"Failed to load linelist reports")}finally{m(!1)}},[S,x,M]);(0,a.useEffect)(()=>{X()},[X]);let Z=(0,a.useCallback)(async()=>{if(f)try{await (0,sl.oq)(f),h(null),X()}catch(e){_(e instanceof Error?e.message:"Failed to delete report")}},[f,X]),ee=(0,a.useCallback)(e=>{r(`/linelist/new?duplicate=${e.uuid}`)},[r]),et=(0,a.useCallback)(e=>{let t=(0,sl.m)(e),r=new Blob([JSON.stringify({name:e.name,description:e.description,code:e.code,config:t},null,2)],{type:"application/json"}),a=URL.createObjectURL(r),n=document.createElement("a");n.href=a,n.download=`${e.name?.replace(/[^a-z0-9]/gi,"_")||"linelist"}.json`,n.click(),URL.revokeObjectURL(a)},[]),er=(0,a.useCallback)(e=>{U(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),ea=(0,a.useCallback)(()=>{0!==P.size&&(K(!0),Y(""))},[P.size]),el=(0,a.useCallback)(async()=>{if(!Q||""===Q.trim())return void alert("Please select a report category before compiling.");K(!1),F(!0),q(0),H([]),V(!1);let e=l.filter(e=>P.has(e.uuid)),t=[];for(let r=0;r<e.length;r++){let a=e[r];try{let e=await (0,sl.ah)(a.uuid,Q);t.push({name:a.name||"Unknown",success:!!e.compiled,error:e.compiled?void 0:"Failed to compile"})}catch(e){t.push({name:a.name||"Unknown",success:!1,error:e instanceof Error?e.message:"Unknown error"})}q((r+1)/e.length*100)}H(t),V(!0),F(!1),U(new Set)},[P,l,Q]),ei=e=>e?({PATIENT:"Patient",ENCOUNTER:"Encounter",OBSERVATION:"Observation",PROGRAM_ENROLLMENT:"Enrollment",APPOINTMENT:"Appointment",ORDER:"Order"})[e]||e:"-",eo=(0,a.useMemo)(()=>{let e=[...l];if(g){let t=g.toLowerCase();e=e.filter(e=>e.name?.toLowerCase().includes(t)||e.code?.toLowerCase().includes(t)||e.description?.toLowerCase().includes(t))}return"active"===S?e=e.filter(e=>!e.retired):"retired"===S&&(e=e.filter(e=>e.retired)),T&&(e=e.filter(e=>e.parsedConfig?.categoryUuid===T)),w&&"all"!==w&&(e=e.filter(e=>e.parsedConfig?.rowGrain===w)),e.sort((e,t)=>{switch(I){case"name":return(e.name||"").localeCompare(t.name||"");case"category":return(e.categoryName||"").localeCompare(t.themeName||"");default:return(t.uuid||"").localeCompare(e.uuid||"")}}),e},[l,g,S,T,w,I]),ed=(0,a.useMemo)(()=>{let e=(A-1)*O;return eo.slice(e,e+O)},[eo,A,O]),ec=(0,a.useCallback)(()=>{P.size===ed.length&&ed.length>0?U(new Set):U(new Set(ed.map(e=>e.uuid)))},[P.size,ed]),em=(0,a.useCallback)(()=>ed.map(e=>({id:e.uuid,uuid:e.uuid,select:e.uuid,name:e.name,code:e.code||"-",rowGrain:ei(e.parsedConfig?.rowGrain),category:e.categoryName||"-",theme:e.themeName||"-",dataSource:e.dataSourceName||"-",lastModified:eu(),actions:e.uuid})),[ed]),eu=()=>"-";return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Linelist Reports",subtitle:"Manage and run patient list reports with configurable parameters."}),p&&n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:p,onClose:()=>_(null)}),n().createElement("div",{className:"-esm-report-builder__linelist-dashboard-page__toolbar___RPkfY"},n().createElement(o.xA9,{fullWidth:!0},n().createElement(o.VPZ,{md:12,lg:16},n().createElement("div",{className:"-esm-report-builder__linelist-dashboard-page__filterBar___Cxo+U"},n().createElement("div",{className:"-esm-report-builder__linelist-dashboard-page__searchWrapper___kJvgz"},n().createElement(o.vji,{labelText:"",placeholder:"Search reports",value:g,onChange:e=>{E(e.target.value),R(1)},size:"md"})),n().createElement("div",{className:"-esm-report-builder__linelist-dashboard-page__filterDropdowns___aaMB+"},n().createElement(o.l6P,{id:"category-filter",labelText:"",value:T,onChange:e=>{C(e.target.value),R(1)},size:"md"},n().createElement(o.ebT,{value:"",text:"All categories"}),x.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.name}))),n().createElement(o.l6P,{id:"theme-filter",labelText:"",value:w,onChange:e=>{N(e.target.value),R(1)},size:"md"},n().createElement(o.ebT,{value:"all",text:"All data themes"}),M.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.name}))),n().createElement(o.l6P,{id:"datasource-filter",labelText:"",value:I,onChange:e=>k(e.target.value),size:"md"},n().createElement(o.ebT,{value:"all",text:"All data sources"}),n().createElement(o.ebT,{value:"dateModified",text:"Observation"}),n().createElement(o.ebT,{value:"name",text:"Encounter"}),n().createElement(o.ebT,{value:"category",text:"Appointment"}))),n().createElement("div",{className:"-esm-report-builder__linelist-dashboard-page__filterActions___6wF1X"},t&&n().createElement(o.$nd,{kind:"ghost",size:"md",renderIcon:b.OM,onClick:()=>r("/linelist/new")},"Create linelist report"),P.size>0&&n().createElement(o.$nd,{kind:"primary",size:"md",renderIcon:d.jG,onClick:ea,disabled:B},"Compile Selected (",P.size,")"),n().createElement(o.$nd,{kind:"ghost",size:"md",renderIcon:u.wM,onClick:X,hasIconOnly:!0,iconDescription:"Refresh"}),n().createElement(o.$nd,{kind:"ghost",size:"md",renderIcon:es.f5,onClick:()=>{let e=new Blob([JSON.stringify(eo.map(e=>({name:e.name,code:e.code,config:e.parsedConfig})),null,2)],{type:"application/json"}),t=URL.createObjectURL(e),r=document.createElement("a");r.href=t,r.download="linelist-reports.json",r.click(),URL.revokeObjectURL(t)},hasIconOnly:!0,iconDescription:"Export"})))))),B&&n().createElement("div",{className:"-esm-report-builder__linelist-dashboard-page__compileProgress___lyzPn"},n().createElement("div",{className:"-esm-report-builder__linelist-dashboard-page__compileProgressHeader___GVNi4"},n().createElement("span",null,"Compiling reports..."),n().createElement("span",null,Math.round(z),"%")),n().createElement(o.z21,{label:"",value:z})),J&&j.length>0&&n().createElement(n().Fragment,null,n().createElement(o.jeF,{kind:j.every(e=>e.success)?"success":j.some(e=>e.success)?"warning":"error",title:"Compile Results",subtitle:`${j.filter(e=>e.success).length} of ${j.length} reports compiled successfully`,onClose:()=>V(!1)}),n().createElement("div",{className:"-esm-report-builder__linelist-dashboard-page__compileResults___T0uLO"},j.map((e,t)=>n().createElement("div",{key:t,className:"-esm-report-builder__linelist-dashboard-page__compileResultItem___k+eIb"},e.success?"✓":"✗"," ",e.name,e.error&&n().createElement("span",{className:"-esm-report-builder__linelist-dashboard-page__error___b7Lma"}," - ",e.error))))),c?n().createElement(o.OOb,{rowCount:10,columnCount:8}):0===eo.length?n().createElement(o.FAs,{className:"-esm-report-builder__linelist-dashboard-page__emptyState___YZE7E"},n().createElement(es.yo,{size:48}),n().createElement("h3",null,"No Linelist Reports Found"),n().createElement("p",null,g||"all"!==S||T||"all"!==w?"No reports match your filters. Try adjusting your search criteria.":"Get started by creating your first linelist report."),!(g||"all"!==S||T||"all"!==w)&&t&&n().createElement(o.$nd,{kind:"primary",renderIcon:b.OM,onClick:()=>r("/linelist/new")},"Create Linelist Report")):n().createElement(n().Fragment,null,n().createElement(o.bQt,{rows:em(),headers:[{key:"select",header:"Select"},{key:"name",header:"Name"},{key:"code",header:"Code"},{key:"category",header:"Category"},{key:"rowGrain",header:"One row represents"},{key:"status",header:"Status"},{key:"lastModified",header:"Last modified"},{key:"actions",header:"Actions"}]},({rows:e,headers:t,getHeaderProps:a,getRowProps:l})=>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,...a({header:e})},"select"===e.key?n().createElement(o.Sc0,{id:"select-all-reports",checked:P.size===ed.length&&ed.length>0,indeterminate:P.size>0&&P.size<ed.length,onChange:ec,labelText:""}):e.header)))),n().createElement(o.BFY,null,e.map(e=>{let t=ed.find(t=>t.uuid===e.id);return n().createElement(o.Hjg,{key:e.id,...l({row:e})},n().createElement(o.nA6,null,n().createElement(o.Sc0,{id:`select-report-${e.id}`,checked:P.has(e.id),onChange:()=>er(e.id),labelText:""})),n().createElement(o.nA6,null,t?.name),n().createElement(o.nA6,null,t?.code||"—"),n().createElement(o.nA6,null,t?.categoryName||"—"),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:"blue",size:"sm"},ei(t?.parsedConfig?.rowGrain))),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:t?.retired?"gray":"green",size:"sm"},t?.retired?"Retired":"Active")),n().createElement(o.nA6,null,"-"),n().createElement(o.nA6,null,n().createElement(o.obU,{flipped:!0},n().createElement(o.XSD,{itemText:"Run",onClick:()=>r(`/linelist/run/${e.id}`)}),n().createElement(o.XSD,{itemText:"Edit",onClick:()=>r(`/linelist/edit/${e.id}`)}),n().createElement(o.XSD,{itemText:"Duplicate",onClick:()=>t&&ee(t)}),n().createElement(o.XSD,{itemText:"Export",onClick:()=>t&&et(t)}))))}))))),n().createElement(o.dKS,{totalItems:eo.length,pageSize:O,pageSizes:[10,25,50],page:A,onChange:({page:e,pageSize:t})=>{R(e),D(t)}})),W&&n().createElement(o.aFV,{open:W,modalHeading:"Compile Reports",modalLabel:"Select Report Category",onRequestClose:()=>K(!1),primaryButtonText:"Compile",primaryButtonDisabled:!Q||""===Q.trim(),onRequestSubmit:el,secondaryButtonText:"Cancel",danger:void 0},n().createElement(o.cwr,null,n().createElement("p",{className:"-esm-report-builder__linelist-dashboard-page__modalDescription___HsP7e"},"Select a report category to apply to all ",P.size," selected report(s) during compilation."),n().createElement(o.l6P,{id:"bulk-compile-category",labelText:"Report Category *",value:Q,onChange:e=>Y(e.target.value)},n().createElement(o.ebT,{value:"",text:"Select a category..."}),x.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.name}))))),f&&n().createElement("div",{className:"-esm-report-builder__linelist-dashboard-page__deleteModalOverlay___mGUzE"},n().createElement(o.FAs,{className:"-esm-report-builder__linelist-dashboard-page__deleteModal___Sl5aT"},n().createElement("h3",null,"Confirm ",l.find(e=>e.uuid===f)?.retired?"Unretire":"Retire"),n().createElement("p",null,"Are you sure you want to ",l.find(e=>e.uuid===f)?.retired?"unretire":"retire","this linelist report? This action cannot be undone."),n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"secondary",onClick:()=>h(null)},"Cancel"),n().createElement(o.$nd,{kind:"danger",onClick:Z},l.find(e=>e.uuid===f)?.retired?"Unretire":"Retire")))))};function so(e,t){let r=()=>{let r=e.population.indicatorRules||e.indicatorRules;if(!r||0===r.length)return e.population.sqlTemplate||"";let a=[];for(let e of r){if(!e.indicatorUuid||!t?.has(e.indicatorUuid))continue;let r=function(e){if(!e)return"";if(e.sqlTemplate?.trim())return e.sqlTemplate.trim();if(e.configJson)try{let t=JSON.parse(e.configJson);for(let e of[t.sqlPreview,t.sqlTemplate,t.base?.sqlPreview,t.base?.sqlTemplate,t.authoring?.base?.sqlPreview,t.authoring?.base?.sqlTemplate,t.baseIndicator?.sqlPreview,t.baseIndicator?.sqlTemplate])if("string"==typeof e&&e.trim())return e.trim()}catch(e){console.warn("Failed to parse indicator configJson:",e)}return""}(t.get(e.indicatorUuid));if(!r){console.warn(`No SQL found for indicator: ${e.name} (${e.indicatorUuid})`);continue}let n=function(e){let t=e.trim().replace(/;+\s*$/,"");if(!t)return"";let r=t.match(/SELECT\s+COUNT\s*\(\s*DISTINCT\s+([a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)?)\s*\)\s+AS\s+(\w+)\s*/i);if(r){let e=r[1],a=t.substring(r[0].length);if(e.includes(".")){let t=e.split(".")[1];return`SELECT DISTINCT ${e} AS ${t} ${a}`.trim()}let n=a.match(/FROM\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+(?:AS\s+)?([a-zA-Z_][a-zA-Z0-9_]*)\b/i),l=n?n[2]:"a";return`SELECT DISTINCT ${l}.${e} AS ${e} ${a}`.trim()}let a=t.match(/^WITH\s+([\s\S]*?)\s*SELECT\s+COUNT\s*\(\s*\*\s*\)\s+AS\s+total\s+FROM\s*\(\s*(SELECT[\s\S]*?)\)\s*X\b/i);if(a){let e=a[1],t=a[2].trim();return`WITH ${e}
|
|
347
|
+
}`,onChange:e=>w(t=>({...t,displayColumnsJson:e.target.value})),helperText:"Define how to extract and display data from the API response"})))),n().createElement(ou,{open:k,mode:"create",monitorId:S?.uuid,onClose:()=>A(!1),onSave:async e=>{try{await lL(e),A(!1),R()}catch(e){throw console.error("Failed to save monitor:",e),e}}}))}let ob="/reportbuilder/dashboard";async function oy(e,t){var r;let a=new URLSearchParams;return a.set("v",e?.v??"default"),e?.q?.trim()&&a.set("q",e.q.trim()),e?.type&&a.set("type",e.type),e?.activeOnly&&a.set("activeOnly","true"),e?.includeRetired&&a.set("includeRetired","true"),(r=await (0,W.wO)(`${ob}?${a.toString()}`,t))?Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]:[]}async function oh(e,t){return(0,W.wO)(`${ob}/${encodeURIComponent(e.trim())}?v=full`,t)}async function ov(e,t){return(0,W.oV)(ob,e,t)}async function oS(e,t,r){return(0,W.oV)(`${ob}/${encodeURIComponent(e)}`,t,r)}async function oT(e,t=!1,r="Retired from Report Builder Admin",a){let n=new URLSearchParams;t?n.set("purge","true"):n.set("reason",r),await (0,W.hI)(`${ob}/${encodeURIComponent(e)}?${n.toString()}`,a)}function oC(e){let[t,r]=n().useState(null),[a,l]=n().useState(!1),[i,o]=n().useState(null),[s,d]=n().useState(!1);return n().useEffect(()=>{if(!e){r(null),d(!1),o(null);return}let t=new AbortController,a=!0;return l(!0),o(null),d(!1),oh(e,t.signal).then(e=>{a&&r(e??null)}).catch(e=>{a&&e?.name!=="AbortError"&&(e?.status===404||e?.response?.status===404||/not found|404/i.test(String(e?.message))?d(!0):o(e?.message??"Failed to load dashboard"))}).finally(()=>{a&&l(!1)}),()=>{a=!1,t.abort()}},[e]),{dashboard:t,isLoading:a,error:i,notFound:s}}var ow=r(3155);let oN=[{key:"overview",label:"Overview",order:10},{key:"execution",label:"Execution",order:20},{key:"history",label:"History",order:30},{key:"errors",label:"Errors",order:40},{key:"configuration",label:"Configuration & Advanced Settings",order:50,collapsed:!0}],oI={sm:4,md:8,lg:8},ok="__other";function oA(e){if(!e||!e.trim())return{version:"unknown",config:null};try{let t=JSON.parse(e);if(t&&1===t.schemaVersion)return{version:1,config:t};return{version:"unknown",config:null,error:`Unsupported schemaVersion: ${t?.schemaVersion}`}}catch(e){return{version:"unknown",config:null,error:e?.message??"Invalid JSON"}}}function oR(){return{schemaVersion:1,sections:[],widgets:[],autoInclude:{etlMonitors:{enabled:!0,arrangeBy:"monitorLayout"}}}}function oO(e,t,r){return Math.min(r,Math.max(t,Math.round(e)))}function oD(e,t){let r=t??oI,a=e??{};if("number"!=typeof a.sm&&"number"!=typeof a.md&&"number"!=typeof a.lg)return{sm:oO(r.sm??4,0,4),md:oO(r.md??8,0,8),lg:oO(r.lg??8,1,16)};let n="number"==typeof a.sm&&Number.isFinite(a.sm)?oO(a.sm,0,4):4,l="number"==typeof a.md&&Number.isFinite(a.md)?oO(a.md,0,8):Math.min(8,2*n),i="number"==typeof a.lg&&Number.isFinite(a.lg)?oO(a.lg,0,16):Math.min(16,Math.max(2*l,4));return 0===i&&(i=oO(r.lg??8,1,16)),{sm:n,md:l,lg:i}}function ox(e){return[...e].sort((e,t)=>{if(e.explicit!==t.explicit)return e.explicit?-1:1;let r=(e.explicitOrder??0)-(t.explicitOrder??0);if(0!==r)return r;let a=(e.priority??999)-(t.priority??999);return 0!==a?a:e.title.toLowerCase().localeCompare(t.title.toLowerCase())})}let oL={success:{label:"Healthy",kind:"success"},warning:{label:"Degraded",kind:"warning"},error:{label:"Errors detected",kind:"warning"}},oM=function({title:e,subtitle:t,status:r,lastRefreshed:a,onRefresh:l,refreshing:i}){let s=oL[r];return n().createElement(G,{title:e,subtitle:t,status:{label:s.label,kind:s.kind},actions:n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"}},a&&n().createElement("span",{style:{fontSize:"0.8125rem",color:"var(--cds-text-secondary, #525252)"}},"Last refreshed: ",a.toLocaleTimeString()),n().createElement(o.$nd,{size:"sm",kind:"ghost",renderIcon:u.wM,onClick:l,disabled:i},"Refresh Now"))})};function o$(e){return!!e&&!(e<=0)&&e}let oP=function({slots:e,renderSlot:t}){let r=e.filter(e=>"UNSUPPORTED"!==e.status);return n().createElement(o.xA9,{className:"-esm-report-builder__dashboards__dashboard-grid___SgeFw",condensed:!0},e.map(e=>{if("UNSUPPORTED"===e.status)return null;let a=r.indexOf(e)+1;return n().createElement(o.VPZ,{key:e.slotKey,sm:o$(e.span.sm),md:o$(e.span.md),lg:o$(e.span.lg),className:"-esm-report-builder__dashboards__dashboard-grid__cell___BeymQ"},t(e,a))}))},oU=function({section:e,renderSlot:t}){let r=n().createElement(oP,{slots:e.slots,renderSlot:t});return n().createElement("section",{className:"-esm-report-builder__dashboards__dashboard-renderer___JUfxw"},e.collapsed?n().createElement(o.nD3,{className:"-esm-report-builder__dashboards__dashboard-section__accordion___nXALg"},n().createElement(o.AsP,{title:`${e.label} (${e.slots.length})`},r)):n().createElement(n().Fragment,null,n().createElement("div",{className:"-esm-report-builder__dashboards__dashboard-section__header___ii3om"},n().createElement("h3",{className:"-esm-report-builder__dashboards__dashboard-section__label___zQPtH"},e.label),n().createElement("span",{className:"-esm-report-builder__dashboards__dashboard-section__count___FMVRo"},e.slots.length," ",1===e.slots.length?"widget":"widgets")),r))},oB=function({title:e,report:t}){let r=(0,i.Zp)();return n().createElement(o.FAs,{className:"-esm-report-builder__dashboards__report-launch-card___s3dCR"},n().createElement("div",{className:"-esm-report-builder__dashboards__report-launch-card__header___RkSE3"},n().createElement("span",{className:"-esm-report-builder__dashboards__report-launch-card__icon___EP+sN"},n().createElement(es.yo,{size:20})),n().createElement("h4",{className:"-esm-report-builder__dashboards__report-launch-card__title___croA4"},e)),t?.description&&n().createElement("p",{className:"-esm-report-builder__dashboards__report-launch-card__description___Fkyas"},t.description),n().createElement("div",{className:"-esm-report-builder__dashboards__report-launch-card__footer___3xm6b"},n().createElement("div",{className:"-esm-report-builder__dashboards__report-launch-card__tags___yy+kc"},t?.reportType&&n().createElement(o.vwO,{size:"sm",type:"blue"},t.reportType),t?.code&&n().createElement(o.vwO,{size:"sm",type:"gray"},t.code)),n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:E.Qp,onClick:()=>r("/run")},"Open in Run Reports")))},oF={"monitor-missing":"The ETL monitor for this widget no longer exists or is inactive.","report-missing":"The report for this widget no longer exists or is retired."},oz=function({title:e,reason:t}){return n().createElement(o.FAs,{className:"-esm-report-builder__dashboards__widget-unavailable-card___v3iFK"},n().createElement("div",{className:"-esm-report-builder__dashboards__widget-unavailable-card__icon___dDZC-"},n().createElement(tb.Cp,{size:24})),n().createElement("h4",{className:"-esm-report-builder__dashboards__widget-unavailable-card__title___aIC18"},e),n().createElement("p",{className:"-esm-report-builder__dashboards__widget-unavailable-card__message___nfSY6"},t?oF[t]:"This widget is currently unavailable."))},oq=function({slot:e,position:t,data:r,error:a,loading:l,onRefreshMonitor:i}){return"UNAVAILABLE"===e.status?n().createElement(oz,{title:e.title,reason:e.unavailableReason}):"UNSUPPORTED"===e.status?null:"ETL"===e.kind&&e.monitor?n().createElement(l8,{monitor:e.monitor,data:r,error:a,loading:l,onRefresh:()=>i(e.monitor.uuid),position:t,title:e.title!==e.monitor.name?e.title:void 0}):"REPORT"===e.kind?n().createElement(oB,{title:e.title,report:e.report}):null},oj=function({synthesized:e}){let t=(0,i.Zp)();return n().createElement(o.FAs,{className:"-esm-report-builder__dashboards__dashboard-empty-state___6h6dB"},n().createElement(c.xh,{size:40,className:"-esm-report-builder__dashboards__dashboard-empty-state__icon___mBM3j"}),n().createElement("h3",{className:"-esm-report-builder__dashboards__dashboard-empty-state__title___Emcss"},"Nothing to show yet"),n().createElement("p",{className:"-esm-report-builder__dashboards__dashboard-empty-state__message___GoHiK"},"This dashboard has no widgets configured."),n().createElement("div",{className:"-esm-report-builder__dashboards__dashboard-empty-state__actions___RjxAc"},n().createElement(o.$nd,{size:"sm",kind:"primary",onClick:()=>t("/admin/dashboards")},"Configure dashboards"),e&&n().createElement(o.$nd,{size:"sm",kind:"ghost",onClick:()=>t("/admin/etl-monitors")},"Manage ETL monitors")))};function oH({code:e,dashboard:t,fallbackConfig:r,titleOverride:a}){let l=(0,i.g)(),s=e??l.code,d=oC(t?void 0:s),c=t??d.dashboard,m=n().useMemo(()=>oA(c?.configJson),[c?.configJson]).config??r??null,{monitors:u,reports:p,isLoading:_,error:g}=function(e){let[t,r]=n().useState([]),[a,l]=n().useState([]),[i,o]=n().useState(!1),[s,d]=n().useState(null),c=n().useMemo(()=>JSON.stringify({w:e?.widgets??[],ai:e?.autoInclude??null}),[e?.widgets,e?.autoInclude]);return n().useEffect(()=>{let e=new AbortController,t=!0;return o(!0),d(null),Promise.all([lD(e.signal).catch(e=>{if(e?.name==="AbortError")throw e;return null}),X({v:"default"},e.signal).catch(e=>{if(e?.name==="AbortError")throw e;return null})]).then(([e,a])=>{t&&(null===e&&null===a&&d("Failed to load dashboard contents"),r(e??[]),l(a??[]))}).catch(()=>{}).finally(()=>{t&&o(!1)}),()=>{t=!1,e.abort()}},[c]),{monitors:t,reports:a,isLoading:i,error:s}}(m),E=n().useMemo(()=>(function(e,t,r){let a={configSynthesized:!1,hadUnknownWidgetTypes:!1},n=e;n||(n=oR(),a.configSynthesized=!0);let l=(n.sections?.length?n.sections:oN.map(e=>({...e}))).map((e,t)=>({s:e,i:t})).sort((e,t)=>(e.s.order??(e.i+1)*10)-(t.s.order??(t.i+1)*10)||e.i-t.i).map(e=>e.s),i=new Set(l.map(e=>e.key)),o=new Map,s=e=>{let t=o.get(e);return t||(t=[],o.set(e,t)),t},d=new Set,c=e=>{let t=e,r=2;for(;d.has(t);)t=`${e}-${r++}`;return d.add(t),t},m=new Set;(n.widgets??[]).forEach((e,n)=>{if(!e||!e.widgetType)return;let l=i.has(e.sectionKey)?e.sectionKey:ok,o=e.order??(n+1)*100,d=oD(e.span,oI),u=e.key||`${e.widgetType}:${e.refUuid??e.refCode??n}`;if("ETL_MONITOR"===e.widgetType){let r=function(e,t,r){if(t){let r=e.find(e=>e.uuid===t);if(r)return r}if(r){let t=e.find(e=>e.code===r);if(t)return t}}(t,e.refUuid,e.refCode);if(!r)return void s(l).push({slotKey:c(u),status:"UNAVAILABLE",explicit:!0,explicitOrder:o,title:e.titleOverride??e.refCode??e.refUuid??"Monitor",sectionKey:l,span:d,unavailableReason:"monitor-missing"});r.uuid&&m.add(r.uuid),s(l).push({slotKey:c(u),status:"OK",kind:"ETL",explicit:!0,explicitOrder:o,title:e.titleOverride??r.name,footerLabel:e.footerLabel,sectionKey:l,span:d,monitor:r})}else if("REPORT"===e.widgetType){let t=function(e,t,r){if(t){let r=e.find(e=>e.uuid===t);if(r)return r}if(r){let t=e.find(e=>e.code===r);if(t)return t}}(r,e.refUuid,e.refCode);s(l).push({slotKey:c(u),status:t?"OK":"UNAVAILABLE",kind:"REPORT",explicit:!0,explicitOrder:o,title:e.titleOverride??t?.name??e.refCode??e.refUuid??"Report",footerLabel:e.footerLabel,sectionKey:l,span:d,report:t,unavailableReason:t?void 0:"report-missing"})}else a.hadUnknownWidgetTypes=!0,s(l).push({slotKey:c(u),status:"UNSUPPORTED",explicit:!0,explicitOrder:o,title:e.titleOverride??e.widgetType,sectionKey:l,span:d,unsupportedWidgetType:e.widgetType})});let u=n.autoInclude?.etlMonitors;if(u?.enabled){let e=u.defaultSpan??oI;for(let r of t.filter(e=>e.uuid&&!m.has(e.uuid)).sort((e,t)=>(e.sortOrder??0)-(t.sortOrder??0)||(e.name??"").toLowerCase().localeCompare((t.name??"").toLowerCase()))){let t=function(e){let t,r;try{let a=l1(e.displayConfigJson);if(2===a.version&&a.config)t=a.config.component,r=a.config.layout;else{let a=l0(e.displayConfigJson,e.monitorType);a&&(t=a.component,r=a.layout)}}catch{}return r&&r.section?r:(0,ow.kK)(t??"SUMMARY_CARD")}(r),a=null;t.section&&i.has(t.section)?a=t.section:u.defaultSectionKey&&i.has(u.defaultSectionKey)&&(a=u.defaultSectionKey),s(a??ok).push({slotKey:c(`ETL_MONITOR:${r.uuid}`),status:"OK",kind:"ETL",explicit:!1,priority:t.priority??999,title:r.name,sectionKey:a??ok,span:oD(t.span,e),monitor:r})}}let p=l.map(e=>({...e,slots:ox(o.get(e.key)??[])})),_=o.get(ok);_&&_.length>0&&p.push({key:ok,label:"Other",order:9999,slots:ox(_)});let g=p.filter(e=>e.slots.length>0||!0===e.alwaysShow),E=g.flatMap(e=>e.slots.filter(e=>"OK"===e.status&&"ETL"===e.kind&&e.monitor).map(e=>e.monitor)),f=E.map(e=>e.refreshInterval??30);return{sections:g,etlMonitors:E,minRefreshInterval:f.length>0?Math.max(5,Math.min(...f)):30,flags:a}})(m,u,p),[m,u,p]),{dataMap:f,errorMap:b,loadingMap:y,lastRefreshed:h,refreshAll:v,refreshOne:S,aggregateStatus:T}=function(e,t){let[r,a]=n().useState({}),[l,i]=n().useState({}),[o,s]=n().useState({}),[d,c]=n().useState(null),m=n().useMemo(()=>e.map(e=>e.uuid).join(","),[e]),u=n().useCallback(async e=>{s(t=>({...t,[e]:!0}));try{let t=await lP(e);a(r=>({...r,[e]:t})),i(t=>{let r={...t};return delete r[e],r})}catch(t){i(r=>({...r,[e]:t?.message??"Failed to load data"}))}finally{s(t=>({...t,[e]:!1}))}},[]),p=n().useCallback(()=>{let e=m.split(",").filter(Boolean);0!==e.length&&Promise.all(e.map(e=>u(e))).then(()=>c(new Date))},[m,u]);n().useEffect(()=>{p()},[p]),n().useEffect(()=>{if(!m)return;let e=setInterval(()=>p(),1e3*Math.max(5,t));return()=>clearInterval(e)},[m,t,p]);let _=n().useCallback(()=>p(),[p]),g=n().useCallback(e=>u(e),[u]),E=n().useMemo(()=>Object.values(l).filter(Boolean).length>0?"error":m.split(",").filter(Boolean).some(e=>!r[e])?"warning":"success",[l,r,m]);return{dataMap:r,errorMap:l,loadingMap:o,lastRefreshed:d,refreshAll:_,refreshOne:g,aggregateStatus:E}}(E.etlMonitors,E.minRefreshInterval),C=!t&&d.isLoading||_,w=a??c?.name??"Dashboard",N=c?.description,I=(e,t)=>n().createElement(oq,{slot:e,position:t,data:e.monitor?.uuid?f[e.monitor.uuid]:void 0,error:e.monitor?.uuid?b[e.monitor.uuid]:void 0,loading:!!e.monitor?.uuid&&!!y[e.monitor.uuid],onRefreshMonitor:S});return!t&&d.notFound?n().createElement(o.BJc,{gap:5},n().createElement(o.jeF,{kind:"error",lowContrast:!0,hideCloseButton:!0,title:"Dashboard not found",subtitle:`No dashboard exists for "${s??"unknown"}".`}),n().createElement(oj,null)):!t&&d.error?n().createElement(o.BJc,{gap:5},n().createElement(oM,{title:w,subtitle:N,status:"error",lastRefreshed:null,onRefresh:(d.error,v)}),n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Error",subtitle:d.error})):C?n().createElement(o.BJc,{gap:5},n().createElement(oM,{title:w,subtitle:N,status:"success",lastRefreshed:null,onRefresh:v,refreshing:!0}),n().createElement(o.OuH,{description:"Loading dashboard…",className:"-esm-report-builder__dashboards__dashboard-loading___hN0dF"})):n().createElement(o.BJc,{gap:5},n().createElement(oM,{title:w,subtitle:N,status:T,lastRefreshed:h,onRefresh:v}),(g||E.flags.configSynthesized)&&n().createElement(o.jeF,{kind:"warning",lowContrast:!0,title:"Dashboard configuration",subtitle:g||"This dashboard’s configuration is invalid — showing all active ETL monitors instead."}),0===E.sections.length?n().createElement(oj,{synthesized:E.flags.configSynthesized}):E.sections.map(e=>n().createElement(oU,{key:e.key,section:e,renderSlot:I})))}let oJ=[{key:"name",header:"Name"},{key:"code",header:"Code"},{key:"dashboardType",header:"Type"},{key:"description",header:"Description"},{key:"open",header:""}];function oG(){let e=(0,i.Zp)(),[t,r]=n().useState([]),[a,l]=n().useState(!1),[s,d]=n().useState(null);n().useEffect(()=>{let e=new AbortController,t=!0;return l(!0),d(null),oy({activeOnly:!0,v:"default"},e.signal).then(e=>{t&&r((e??[]).filter(e=>e.uuid))}).catch(e=>{t&&e?.name!=="AbortError"&&d(e?.message??"Failed to load dashboards")}).finally(()=>{t&&l(!1)}),()=>{t=!1,e.abort()}},[]);let m=t.some(e=>"etl-dashboard"===e.code),u=t.map(e=>({id:e.uuid,name:e.name,code:e.code||"—",dashboardType:e.dashboardType||"CUSTOM",description:e.description||"—"}));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Dashboards",subtitle:"Configured dashboards composing ETL monitors, reports and other widgets."}),n().createElement("div",{style:{padding:"0 1rem 1rem",display:"grid",gap:"1rem"}},s&&n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:s}),a?n().createElement(o.OOb,{rowCount:3,columnCount:5,showHeader:!1,showToolbar:!1}):n().createElement(n().Fragment,null,!m&&n().createElement(o.FAs,{className:"-esm-report-builder__dashboards__dashboards-index__auto-tile___JZajk"},n().createElement("div",{className:"-esm-report-builder__dashboards__dashboards-index__auto-main___YFN7h"},n().createElement(c.xh,{size:20,className:"-esm-report-builder__dashboards__dashboards-index__auto-icon___-MirL"}),n().createElement("div",null,n().createElement("strong",null,"ETL Monitors (auto)"),n().createElement("p",{className:"-esm-report-builder__dashboards__dashboards-index__auto-note___Sve8a"},"All active ETL monitors, arranged automatically — no configuration yet."))),n().createElement(o.$nd,{size:"sm",kind:"ghost",renderIcon:E.Qp,onClick:()=>e("/etl-dashboard")},"Open")),0===u.length?!m&&null:n().createElement(o.bQt,{rows:u,headers:oJ},({rows:r,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,r.map(r=>{let a=t.find(e=>e.uuid===r.id);return n().createElement(o.Hjg,{key:r.id,...i({row:r})},n().createElement(o.nA6,null,r.cells[0].value),n().createElement(o.nA6,null,r.cells[1].value),n().createElement(o.nA6,null,n().createElement(o.vwO,{size:"sm",type:"purple"},r.cells[2].value)),n().createElement(o.nA6,null,r.cells[3].value),n().createElement(o.nA6,null,n().createElement(o.$nd,{size:"sm",kind:"ghost",renderIcon:E.Qp,iconDescription:"Open dashboard",hasIconOnly:!0,onClick:()=>a?.code&&e(`/dashboards/${a.code}`)})))}))))),!a&&0===t.length&&n().createElement("p",{className:"-esm-report-builder__dashboards__dashboards-index__empty-note___a8B0v"},"No dashboards configured yet. Create one under Admin → Dashboards."))))}let oV=oR(),oW=function(){let{dashboard:e,isLoading:t}=oC("etl-dashboard");return!t&&e?.uuid?n().createElement(oH,{dashboard:e}):n().createElement(oH,{fallbackConfig:oV,titleOverride:"ETL Monitor Dashboard"})},oK="-esm-report-builder__dashboards-admin__dashboard-form-modal__errors___OVqEo",oQ="-esm-report-builder__dashboards-admin__dashboard-widgets-editor__row-fields___N7eOV",oY="-esm-report-builder__dashboards-admin__dashboard-editor__hint___rHHUP",oX="-esm-report-builder__dashboards-admin__dashboard-editor__row-actions___4sHig",oZ=[{key:"name",header:"Name"},{key:"code",header:"Code"},{key:"dashboardType",header:"Type"},{key:"active",header:"Status"},{key:"sortOrder",header:"Order"},{key:"description",header:"Description"},{key:"actions",header:"Actions"}];function o0({rows:e,loading:t,onEdit:r,onDelete:a,canEdit:l=!0,canDelete:i=!0}){if(t&&0===e.length)return n().createElement(o.OOb,{rowCount:4,columnCount:7,showHeader:!1,showToolbar:!1});let s=e.map(e=>({id:e.uuid,name:e.name,code:e.code||"—",dashboardType:e.dashboardType||"CUSTOM",active:!1===e.active||e.retired?"Inactive":"Active",sortOrder:e.sortOrder??0,description:e.description||"—"}));return n().createElement(o.bQt,{rows:s,headers:oZ},({rows:t,headers:s,getHeaderProps:d,getRowProps:c})=>n().createElement(o.K3K,null,n().createElement(o.XIK,{useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,s.map(e=>n().createElement(o.A0N,{key:e.key,...d({header:e})},e.header)))),n().createElement(o.BFY,null,t.map(t=>{let s=e.find(e=>e.uuid===t.id);return n().createElement(o.Hjg,{key:t.id,...c({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,n().createElement(o.vwO,{size:"sm",type:"purple"},t.cells[2].value)),n().createElement(o.nA6,null,s?.active===!1||s?.retired?n().createElement(o.vwO,{size:"sm",type:"gray"},"Inactive"):n().createElement(o.vwO,{size:"sm",type:"green"},"Active")),n().createElement(o.nA6,null,t.cells[4].value),n().createElement(o.nA6,null,t.cells[5].value),n().createElement(o.nA6,null,n().createElement("div",{className:"-esm-report-builder__dashboards-admin__dashboards-table__actions___xwkzF"},l&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:es.ff,iconDescription:"Edit",hasIconOnly:!0,onClick:()=>s&&r(s.uuid)}),i&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:P.zH,iconDescription:"Retire",hasIconOnly:!0,onClick:()=>s&&a(s.uuid)}))))})))))}let o1=/^[a-z0-9][a-z0-9-]{0,49}$/,o2=/^[a-z0-9][a-z0-9-]{0,99}$/;function o5(){return{schemaVersion:1,sections:oN.map(e=>({...e})),widgets:[],autoInclude:{etlMonitors:{enabled:!1}}}}function o6(e){return e&&e.trim()?o1.test(e)?null:"Section key must be lowercase letters, numbers and dashes (max 50)":"Section key is required"}function o3(e){let t=[],r=e.sections??[],a=new Set;for(let e of r){let r=o6(e.key);if(r){t.push(`Section "${e.key||"(blank)"}": ${r}`);continue}a.has(e.key)&&t.push(`Duplicate section key: "${e.key}"`),a.add(e.key),e.label&&e.label.trim()||t.push(`Section "${e.key}" is missing a label`)}return(e.widgets??[]).forEach((e,r)=>{let n=e.titleOverride||e.refUuid||e.refCode||`#${r+1}`;for(let r of(e.widgetType||t.push(`Widget ${n}: widget type is required`),("ETL_MONITOR"===e.widgetType||"REPORT"===e.widgetType)&&(e.refUuid||e.refCode||t.push(`Widget ${n}: provide a UUID or a code reference`),e.refUuid&&e.refCode&&t.push(`Widget ${n}: provide only one of UUID or code reference`)),e.sectionKey&&a.has(e.sectionKey)||t.push(`Widget ${n}: assign it to one of the configured sections`),["sm","md","lg"])){let a=e.span?.[r];void 0!==a&&(a<0||a>({sm:4,md:8,lg:16})[r])&&t.push(`Widget ${n}: span ${r} must be 0-${{sm:4,md:8,lg:16}[r]}`)}}),t}let o4=[{value:"ETL",label:"ETL"},{value:"REPORT",label:"Report"},{value:"CUSTOM",label:"Custom"}];function o8({form:e,onChange:t}){return n().createElement("fieldset",null,n().createElement("legend",null,"Basics"),n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"dashboard-name",labelText:"Name",required:!0,placeholder:"e.g., ETL Dashboard",value:e.name,onChange:e=>t({name:e.target.value})}),n().createElement(o.ksK,{id:"dashboard-code",labelText:"Code",placeholder:"e.g., etl-dashboard",helperText:"Lowercase letters, numbers, dashes. Used in the URL: /dashboards/:code",value:e.code,onChange:e=>t({code:e.target.value})}),n().createElement(o.fs1,{id:"dashboard-description",labelText:"Description",rows:2,value:e.description,onChange:e=>t({description:e.target.value})}),n().createElement(o.l6P,{id:"dashboard-type",labelText:"Dashboard type",value:e.dashboardType,onChange:e=>t({dashboardType:e.target.value})},o4.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement(o.BJc,{orientation:"horizontal",gap:5},n().createElement(o.Q7x,{id:"dashboard-sort-order",label:"Sort order",value:e.sortOrder,onChange:e=>{let r=e.target?.value;void 0!==r&&t({sortOrder:parseInt(r,10)||0})}}),n().createElement(o.Sc0,{id:"dashboard-active",labelText:"Active",checked:e.active,onChange:(e,{checked:r})=>t({active:r})}))))}function o7({config:e,onChange:t}){let r=e.sections??[],a=r=>t({...e,sections:r}),l=(e,t)=>{a(r.map((r,a)=>a===e?{...r,...t}:r))},i=(e,t)=>{let n=e+t;if(n<0||n>=r.length)return;let l=[...r];[l[e],l[n]]=[l[n],l[e]],a(l)};return n().createElement("fieldset",null,n().createElement("legend",null,"Sections"),n().createElement(o.BJc,{gap:3},n().createElement("span",{className:oY},'Widgets are placed into sections. Empty sections are hidden unless "always show" is set.'),r.map((e,t)=>{let s=o6(e.key);return n().createElement("div",{key:t,className:"-esm-report-builder__dashboards-admin__dashboard-sections-editor__row___RsLl+"},n().createElement("div",{className:"-esm-report-builder__dashboards-admin__dashboard-sections-editor__row-fields___9s6D9"},n().createElement(o.ksK,{id:`section-key-${t}`,labelText:"Key",size:"sm",invalid:!!s,invalidText:s??void 0,value:e.key,onChange:e=>l(t,{key:e.target.value})}),n().createElement(o.ksK,{id:`section-label-${t}`,labelText:"Label",size:"sm",value:e.label,onChange:e=>l(t,{label:e.target.value})}),n().createElement(o.ksK,{id:`section-order-${t}`,labelText:"Order",size:"sm",type:"number",value:String(e.order??(t+1)*10),onChange:e=>l(t,{order:parseInt(e.target.value,10)||0})}),n().createElement(o.Sc0,{id:`section-collapsed-${t}`,labelText:"Collapsed",checked:!!e.collapsed,onChange:(e,{checked:r})=>l(t,{collapsed:r})}),n().createElement(o.Sc0,{id:`section-always-${t}`,labelText:"Always show",checked:!!e.alwaysShow,onChange:(e,{checked:r})=>l(t,{alwaysShow:r})})),n().createElement("div",{className:oX},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:E.Do,iconDescription:"Move up",disabled:0===t,onClick:()=>i(t,-1)}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:E.yd,iconDescription:"Move down",disabled:t===r.length-1,onClick:()=>i(t,1)}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,iconDescription:"Remove section",onClick:()=>a(r.filter((e,r)=>r!==t))})))}),n().createElement("div",null,n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:()=>{a([...r,{key:`section-${r.length+1}`,label:`Section ${r.length+1}`,order:(r.length+1)*10}])}},"Add Section"))))}let o9=[{value:"ETL_MONITOR",label:"ETL Monitor"},{value:"REPORT",label:"Report"}];function se({config:e,onChange:t}){let[r,a]=n().useState([]),[l,i]=n().useState([]),s=e.sections??[],d=e.widgets??[];n().useEffect(()=>{let e=new AbortController;return lO(void 0,e.signal).then(e=>a(e??[])).catch(()=>a([])),X({v:"default"},e.signal).then(e=>i(e??[])).catch(()=>i([])),()=>e.abort()},[]);let c=r=>t({...e,widgets:r}),m=(e,t)=>{c(d.map((r,a)=>a===e?{...r,...t}:r))};return n().createElement("fieldset",null,n().createElement("legend",null,"Widgets"),n().createElement(o.BJc,{gap:3},n().createElement("span",{className:oY},"Explicitly placed widgets. Use auto-include below to fill sections with the remaining active ETL monitors."),d.map((e,t)=>n().createElement("div",{key:t,className:"-esm-report-builder__dashboards-admin__dashboard-widgets-editor__row___mxY7U"},n().createElement("div",{className:oQ},n().createElement(o.l6P,{id:`widget-type-${t}`,labelText:"Type",size:"sm",value:e.widgetType,onChange:e=>{let a=e.target.value;m(t,{widgetType:a,refUuid:"REPORT"===a?l[0]?.uuid:r[0]?.uuid,refCode:void 0})}},o9.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement(o.l6P,{id:`widget-ref-${t}`,labelText:"REPORT"===e.widgetType?"Report":"ETL monitor",size:"sm",value:e.refUuid??"",onChange:e=>m(t,{refUuid:e.target.value,refCode:void 0})},("REPORT"===e.widgetType?l.map(e=>({value:e.uuid,label:e.code?`${e.name} (${e.code})`:e.name})):r.map(e=>({value:e.uuid,label:e.code?`${e.name} (${e.code})`:e.name}))).map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement(o.l6P,{id:`widget-section-${t}`,labelText:"Section",size:"sm",value:e.sectionKey,onChange:e=>m(t,{sectionKey:e.target.value})},s.map(e=>n().createElement(o.ebT,{key:e.key,value:e.key,text:e.label}))),n().createElement(o.ksK,{id:`widget-order-${t}`,labelText:"Order",size:"sm",type:"number",value:String(e.order??(t+1)*100),onChange:e=>m(t,{order:parseInt(e.target.value,10)||0})})),n().createElement("div",{className:"-esm-report-builder__dashboards-admin__dashboard-widgets-editor__span___BKOZK"},["sm","md","lg"].map(r=>n().createElement(o.ksK,{key:r,id:`widget-span-${r}-${t}`,labelText:`Span ${r}`,size:"sm",type:"number",value:String(e.span?.[r]??({sm:4,md:8,lg:8})[r]),onChange:a=>m(t,{span:{sm:4,md:8,lg:8,...e.span,[r]:parseInt(a.target.value,10)||0}})}))),n().createElement("div",{className:oQ},n().createElement(o.ksK,{id:`widget-title-${t}`,labelText:"Title override",size:"sm",value:e.titleOverride??"",onChange:e=>m(t,{titleOverride:e.target.value||void 0})}),n().createElement(o.ksK,{id:`widget-footer-${t}`,labelText:"Footer label",size:"sm",value:e.footerLabel??"",onChange:e=>m(t,{footerLabel:e.target.value||void 0})})),n().createElement("div",{className:oX},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,iconDescription:"Remove widget",onClick:()=>c(d.filter((e,r)=>r!==t))})))),n().createElement("div",null,n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:()=>{c([...d,{widgetType:"ETL_MONITOR",refUuid:r[0]?.uuid,sectionKey:s[0]?.key??"overview",order:(d.length+1)*100}])}},"Add Widget"))))}function st({config:e,onChange:t}){let r=e.autoInclude?.etlMonitors,a=e.sections??[],l=r=>{t({...e,autoInclude:{...e.autoInclude,etlMonitors:{enabled:!1,arrangeBy:"monitorLayout",...e.autoInclude?.etlMonitors,...r}}})};return n().createElement("fieldset",null,n().createElement("legend",null,"Auto-include ETL monitors"),n().createElement(o.BJc,{gap:4},n().createElement("span",{className:oY},"Active ETL monitors that are not explicitly placed above are added automatically, using each monitor's own section/span/priority from the monitor builder. Explicit placements always win."),n().createElement(o.Sc0,{id:"dashboard-autoinclude-enabled",labelText:"Auto-include active ETL monitors",checked:!!r?.enabled,onChange:(e,{checked:t})=>l({enabled:t})}),n().createElement(o.BJc,{orientation:"horizontal",gap:5},n().createElement(o.l6P,{id:"dashboard-autoinclude-default-section",labelText:"Default section",size:"sm",disabled:!r?.enabled,value:r?.defaultSectionKey??a[0]?.key??"overview",onChange:e=>l({defaultSectionKey:e.target.value})},a.map(e=>n().createElement(o.ebT,{key:e.key,value:e.key,text:e.label}))),n().createElement(o.ksK,{id:"dashboard-autoinclude-default-span-lg",labelText:"Default span (desktop)",size:"sm",type:"number",disabled:!r?.enabled,value:String(r?.defaultSpan?.lg??8),onChange:e=>l({defaultSpan:{sm:4,md:8,lg:parseInt(e.target.value,10)||8}})}))))}function sr({config:e,onChange:t,onErrors:r}){let[a,l]=n().useState(()=>JSON.stringify(e,null,2)),[i,s]=n().useState(!1),[d,c]=n().useState([]);return n().createElement("fieldset",null,n().createElement("legend",null,"Configuration JSON"),n().createElement(o.BJc,{gap:3},n().createElement("span",{className:oY},"Advanced: edit the raw dashboard configuration. Apply validates and syncs the editors above."),n().createElement(o.fs1,{id:"dashboard-json-draft",labelText:"configJson",hideLabel:!0,rows:12,className:"-esm-report-builder__dashboards-admin__dashboard-json-editor__draft___4JtyZ",value:i?a:JSON.stringify(e,null,2),onChange:e=>{l(e.target.value),s(!0)}}),d.length>0&&n().createElement("ul",{className:oK},d.map((e,t)=>n().createElement("li",{key:t},e))),n().createElement("div",{className:oX},n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>{l(JSON.stringify(e,null,2)),c([]),s(!1)},disabled:!i},"Reset"),n().createElement(o.$nd,{kind:"primary",size:"sm",onClick:()=>{let e=function(e){let t;try{t=JSON.parse(e)}catch(e){return{errors:[`Invalid JSON: ${e?.message??"parse error"}`]}}if(!t||"object"!=typeof t)return{errors:["Config must be a JSON object"]};if(1!==t.schemaVersion)return{errors:["schemaVersion must be 1"]};let r=t;return{config:r,errors:o3(r)}}(a);c(e.errors),r(e.errors),0===e.errors.length&&e.config&&(t(e.config),l(JSON.stringify(e.config,null,2)),s(!1))},disabled:!i},"Apply"))))}function sa(e){if(!e)return{name:"",code:"",description:"",dashboardType:"CUSTOM",active:!0,sortOrder:0,config:o5()};let t=oA(e.configJson);return{name:e.name??"",code:e.code??"",description:e.description??"",dashboardType:e.dashboardType??"CUSTOM",active:!1!==e.active,sortOrder:e.sortOrder??0,config:t.config??o5()}}function sn({open:e,mode:t,initial:r,onClose:a,onSave:l}){let[i,s]=n().useState(()=>sa(r)),[d,c]=n().useState([]),[m,u]=n().useState(!1);n().useEffect(()=>{e&&(s(sa(r)),c([]),u(!1))},[e,r?.uuid]);let p=e=>s(t=>({...t,config:e})),_=async()=>{let e,t=(e=[],i.name.trim()||e.push("Name is required"),i.code.trim()&&!o2.test(i.code.trim())&&e.push("Code must be lowercase letters, numbers and dashes"),e.push(...o3(i.config)),e);if(t.length>0)return void c(t);u(!0),c([]);try{await l({name:i.name.trim(),code:i.code.trim()||void 0,description:i.description.trim()||void 0,dashboardType:i.dashboardType,active:i.active,sortOrder:i.sortOrder,configJson:JSON.stringify(i.config)})}catch(e){c([e?.message??"Failed to save dashboard"])}finally{u(!1)}};return n().createElement(o.KXP,{open:e,onClose:()=>!m&&a(),size:"lg"},n().createElement(o.rQ0,{title:"create"===t?"New Dashboard":"Edit Dashboard",label:"Dashboards"}),n().createElement(o.cwr,{hasForm:!0},n().createElement("div",{className:"-esm-report-builder__dashboards-admin__dashboard-form-modal__body___DjraP"},d.length>0&&n().createElement("ul",{className:oK},d.map((e,t)=>n().createElement("li",{key:t},e))),n().createElement(o8,{form:i,onChange:e=>s(t=>({...t,...e}))}),n().createElement(o7,{config:i.config,onChange:p}),n().createElement(se,{config:i.config,onChange:p}),n().createElement(st,{config:i.config,onChange:p}),n().createElement(sr,{config:i.config,onChange:p,onErrors:c}))),n().createElement(o.jlY,{onRequestClose:()=>!m&&a()},n().createElement(o.$nd,{kind:"secondary",onClick:()=>!m&&a()},"Cancel"),n().createElement(o.$nd,{kind:"primary",onClick:_,disabled:m},m?"Saving…":"Save Dashboard")))}function sl(){let{has:e}=v(),t=e(y.RB.DASHBOARD_ADD,y.RB.DASHBOARD_EDIT),r=e(y.RB.DASHBOARD_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=n().useCallback(e=>(c(!0),u(null),oy({q:a,v:"default"},e).then(e=>s((e??[]).filter(e=>!!e.uuid))).catch(e=>{e?.name!=="AbortError"&&u(e?.message??"Failed to load dashboards")}).finally(()=>c(!1))),[a]);n().useEffect(()=>{let e=new AbortController;return S(e.signal),()=>e.abort()},[S]);let T=async e=>{try{E("edit"),u(null),c(!0);let t=await oh(e);h(t),_(!0)}catch(e){u(e?.message??"Failed to load dashboard for editing")}finally{c(!1)}},C=async e=>{let t=i.find(t=>t.uuid===e);if(!window.confirm(`Retire dashboard "${t?.name??e}"?`))return;try{await oT(e,!1)}catch(e){u(e?.message??"Failed to retire dashboard")}let r=new AbortController;await S(r.signal)},w=async e=>{if("create"===g)await ov(e);else{if(!f?.uuid)throw Error("Missing uuid for update");await oS(f.uuid,e)}_(!1);let t=new AbortController;await S(t.signal)};return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Dashboards",subtitle:"Configure dashboards composed of sections and widgets (ETL monitors, reports)."}),t&&n().createElement("div",{style:{display:"flex",justifyContent:"flex-end",padding:"0 1rem"}},n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:b.OM,onClick:()=>{E("create"),h(null),_(!0)}},"Create Dashboard")),n().createElement("div",{style:{padding:"0 1rem",display:"grid",gap:"1rem"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search dashboards…",value:a,onChange:e=>l(e.target.value)}),m&&n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:m,onCloseButtonClick:()=>u(null)}),n().createElement(o0,{rows:i,loading:d,onEdit:T,onDelete:C,canEdit:t,canDelete:r})),n().createElement(sn,{open:p,mode:g,initial:f,onClose:()=>_(!1),onSave:w}))}var si=r(2075);let so=()=>{let{has:e}=v(),t=e(y.RB.REPORT_ADD,y.RB.REPORT_EDIT),r=(0,i.Zp)(),[l,s]=(0,a.useState)([]),[c,m]=(0,a.useState)(!0),[p,_]=(0,a.useState)(null),[g,E]=(0,a.useState)(""),[f,h]=(0,a.useState)(null),[S]=(0,a.useState)("all"),[T,C]=(0,a.useState)(""),[w,N]=(0,a.useState)(""),[I,k]=(0,a.useState)("dateModified"),[A,R]=(0,a.useState)(1),[O,D]=(0,a.useState)(10),[x,L]=(0,a.useState)([]),[M,$]=(0,a.useState)([]),[P,U]=(0,a.useState)(new Set),[B,F]=(0,a.useState)(!1),[z,q]=(0,a.useState)(0),[j,H]=(0,a.useState)([]),[J,V]=(0,a.useState)(!1),[W,K]=(0,a.useState)(!1),[Q,Y]=(0,a.useState)("");(0,a.useEffect)(()=>{(async()=>{try{let[e,t]=await Promise.all([en(),tU()]);L(e),$(t)}catch(e){console.error("Failed to load reference data:",e)}})()},[]);let X=(0,a.useCallback)(async()=>{m(!0),_(null);try{let e=(await (0,si.CB)({includeRetired:"active"!==S})).map(e=>{let t=(0,si.m)(e),r=x.find(e=>e.uuid===t?.categoryUuid),a=M.find(e=>e.uuid===t?.themeUuid);return{...e,parsedConfig:t,categoryName:r?.name,themeName:a?.name,dataSourceName:t?.dataSourceUuid||"-",rowGrainLabel:t?.rowGrain?.replace("_"," ")||"-"}});s(e)}catch(e){_(e instanceof Error?e.message:"Failed to load linelist reports")}finally{m(!1)}},[S,x,M]);(0,a.useEffect)(()=>{X()},[X]);let Z=(0,a.useCallback)(async()=>{if(f)try{await (0,si.oq)(f),h(null),X()}catch(e){_(e instanceof Error?e.message:"Failed to delete report")}},[f,X]),ee=(0,a.useCallback)(e=>{r(`/linelist/new?duplicate=${e.uuid}`)},[r]),et=(0,a.useCallback)(e=>{let t=(0,si.m)(e),r=new Blob([JSON.stringify({name:e.name,description:e.description,code:e.code,config:t},null,2)],{type:"application/json"}),a=URL.createObjectURL(r),n=document.createElement("a");n.href=a,n.download=`${e.name?.replace(/[^a-z0-9]/gi,"_")||"linelist"}.json`,n.click(),URL.revokeObjectURL(a)},[]),er=(0,a.useCallback)(e=>{U(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),ea=(0,a.useCallback)(()=>{0!==P.size&&(K(!0),Y(""))},[P.size]),el=(0,a.useCallback)(async()=>{if(!Q||""===Q.trim())return void alert("Please select a report category before compiling.");K(!1),F(!0),q(0),H([]),V(!1);let e=l.filter(e=>P.has(e.uuid)),t=[];for(let r=0;r<e.length;r++){let a=e[r];try{let e=await (0,si.ah)(a.uuid,Q);t.push({name:a.name||"Unknown",success:!!e.compiled,error:e.compiled?void 0:"Failed to compile"})}catch(e){t.push({name:a.name||"Unknown",success:!1,error:e instanceof Error?e.message:"Unknown error"})}q((r+1)/e.length*100)}H(t),V(!0),F(!1),U(new Set)},[P,l,Q]),ei=e=>e?({PATIENT:"Patient",ENCOUNTER:"Encounter",OBSERVATION:"Observation",PROGRAM_ENROLLMENT:"Enrollment",APPOINTMENT:"Appointment",ORDER:"Order"})[e]||e:"-",eo=(0,a.useMemo)(()=>{let e=[...l];if(g){let t=g.toLowerCase();e=e.filter(e=>e.name?.toLowerCase().includes(t)||e.code?.toLowerCase().includes(t)||e.description?.toLowerCase().includes(t))}return"active"===S?e=e.filter(e=>!e.retired):"retired"===S&&(e=e.filter(e=>e.retired)),T&&(e=e.filter(e=>e.parsedConfig?.categoryUuid===T)),w&&"all"!==w&&(e=e.filter(e=>e.parsedConfig?.rowGrain===w)),e.sort((e,t)=>{switch(I){case"name":return(e.name||"").localeCompare(t.name||"");case"category":return(e.categoryName||"").localeCompare(t.themeName||"");default:return(t.uuid||"").localeCompare(e.uuid||"")}}),e},[l,g,S,T,w,I]),ed=(0,a.useMemo)(()=>{let e=(A-1)*O;return eo.slice(e,e+O)},[eo,A,O]),ec=(0,a.useCallback)(()=>{P.size===ed.length&&ed.length>0?U(new Set):U(new Set(ed.map(e=>e.uuid)))},[P.size,ed]),em=(0,a.useCallback)(()=>ed.map(e=>({id:e.uuid,uuid:e.uuid,select:e.uuid,name:e.name,code:e.code||"-",rowGrain:ei(e.parsedConfig?.rowGrain),category:e.categoryName||"-",theme:e.themeName||"-",dataSource:e.dataSourceName||"-",lastModified:eu(),actions:e.uuid})),[ed]),eu=()=>"-";return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Linelist Reports",subtitle:"Manage and run patient list reports with configurable parameters."}),p&&n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:p,onClose:()=>_(null)}),n().createElement("div",{className:"-esm-report-builder__linelist-dashboard-page__toolbar___RPkfY"},n().createElement(o.xA9,{fullWidth:!0},n().createElement(o.VPZ,{md:12,lg:16},n().createElement("div",{className:"-esm-report-builder__linelist-dashboard-page__filterBar___Cxo+U"},n().createElement("div",{className:"-esm-report-builder__linelist-dashboard-page__searchWrapper___kJvgz"},n().createElement(o.vji,{labelText:"",placeholder:"Search reports",value:g,onChange:e=>{E(e.target.value),R(1)},size:"md"})),n().createElement("div",{className:"-esm-report-builder__linelist-dashboard-page__filterDropdowns___aaMB+"},n().createElement(o.l6P,{id:"category-filter",labelText:"",value:T,onChange:e=>{C(e.target.value),R(1)},size:"md"},n().createElement(o.ebT,{value:"",text:"All categories"}),x.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.name}))),n().createElement(o.l6P,{id:"theme-filter",labelText:"",value:w,onChange:e=>{N(e.target.value),R(1)},size:"md"},n().createElement(o.ebT,{value:"all",text:"All data themes"}),M.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.name}))),n().createElement(o.l6P,{id:"datasource-filter",labelText:"",value:I,onChange:e=>k(e.target.value),size:"md"},n().createElement(o.ebT,{value:"all",text:"All data sources"}),n().createElement(o.ebT,{value:"dateModified",text:"Observation"}),n().createElement(o.ebT,{value:"name",text:"Encounter"}),n().createElement(o.ebT,{value:"category",text:"Appointment"}))),n().createElement("div",{className:"-esm-report-builder__linelist-dashboard-page__filterActions___6wF1X"},t&&n().createElement(o.$nd,{kind:"ghost",size:"md",renderIcon:b.OM,onClick:()=>r("/linelist/new")},"Create linelist report"),P.size>0&&n().createElement(o.$nd,{kind:"primary",size:"md",renderIcon:d.jG,onClick:ea,disabled:B},"Compile Selected (",P.size,")"),n().createElement(o.$nd,{kind:"ghost",size:"md",renderIcon:u.wM,onClick:X,hasIconOnly:!0,iconDescription:"Refresh"}),n().createElement(o.$nd,{kind:"ghost",size:"md",renderIcon:es.f5,onClick:()=>{let e=new Blob([JSON.stringify(eo.map(e=>({name:e.name,code:e.code,config:e.parsedConfig})),null,2)],{type:"application/json"}),t=URL.createObjectURL(e),r=document.createElement("a");r.href=t,r.download="linelist-reports.json",r.click(),URL.revokeObjectURL(t)},hasIconOnly:!0,iconDescription:"Export"})))))),B&&n().createElement("div",{className:"-esm-report-builder__linelist-dashboard-page__compileProgress___lyzPn"},n().createElement("div",{className:"-esm-report-builder__linelist-dashboard-page__compileProgressHeader___GVNi4"},n().createElement("span",null,"Compiling reports..."),n().createElement("span",null,Math.round(z),"%")),n().createElement(o.z21,{label:"",value:z})),J&&j.length>0&&n().createElement(n().Fragment,null,n().createElement(o.jeF,{kind:j.every(e=>e.success)?"success":j.some(e=>e.success)?"warning":"error",title:"Compile Results",subtitle:`${j.filter(e=>e.success).length} of ${j.length} reports compiled successfully`,onClose:()=>V(!1)}),n().createElement("div",{className:"-esm-report-builder__linelist-dashboard-page__compileResults___T0uLO"},j.map((e,t)=>n().createElement("div",{key:t,className:"-esm-report-builder__linelist-dashboard-page__compileResultItem___k+eIb"},e.success?"✓":"✗"," ",e.name,e.error&&n().createElement("span",{className:"-esm-report-builder__linelist-dashboard-page__error___b7Lma"}," - ",e.error))))),c?n().createElement(o.OOb,{rowCount:10,columnCount:8}):0===eo.length?n().createElement(o.FAs,{className:"-esm-report-builder__linelist-dashboard-page__emptyState___YZE7E"},n().createElement(es.yo,{size:48}),n().createElement("h3",null,"No Linelist Reports Found"),n().createElement("p",null,g||"all"!==S||T||"all"!==w?"No reports match your filters. Try adjusting your search criteria.":"Get started by creating your first linelist report."),!(g||"all"!==S||T||"all"!==w)&&t&&n().createElement(o.$nd,{kind:"primary",renderIcon:b.OM,onClick:()=>r("/linelist/new")},"Create Linelist Report")):n().createElement(n().Fragment,null,n().createElement(o.bQt,{rows:em(),headers:[{key:"select",header:"Select"},{key:"name",header:"Name"},{key:"code",header:"Code"},{key:"category",header:"Category"},{key:"rowGrain",header:"One row represents"},{key:"status",header:"Status"},{key:"lastModified",header:"Last modified"},{key:"actions",header:"Actions"}]},({rows:e,headers:t,getHeaderProps:a,getRowProps:l})=>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,...a({header:e})},"select"===e.key?n().createElement(o.Sc0,{id:"select-all-reports",checked:P.size===ed.length&&ed.length>0,indeterminate:P.size>0&&P.size<ed.length,onChange:ec,labelText:""}):e.header)))),n().createElement(o.BFY,null,e.map(e=>{let t=ed.find(t=>t.uuid===e.id);return n().createElement(o.Hjg,{key:e.id,...l({row:e})},n().createElement(o.nA6,null,n().createElement(o.Sc0,{id:`select-report-${e.id}`,checked:P.has(e.id),onChange:()=>er(e.id),labelText:""})),n().createElement(o.nA6,null,t?.name),n().createElement(o.nA6,null,t?.code||"—"),n().createElement(o.nA6,null,t?.categoryName||"—"),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:"blue",size:"sm"},ei(t?.parsedConfig?.rowGrain))),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:t?.retired?"gray":"green",size:"sm"},t?.retired?"Retired":"Active")),n().createElement(o.nA6,null,"-"),n().createElement(o.nA6,null,n().createElement(o.obU,{flipped:!0},n().createElement(o.XSD,{itemText:"Run",onClick:()=>r(`/linelist/run/${e.id}`)}),n().createElement(o.XSD,{itemText:"Edit",onClick:()=>r(`/linelist/edit/${e.id}`)}),n().createElement(o.XSD,{itemText:"Duplicate",onClick:()=>t&&ee(t)}),n().createElement(o.XSD,{itemText:"Export",onClick:()=>t&&et(t)}))))}))))),n().createElement(o.dKS,{totalItems:eo.length,pageSize:O,pageSizes:[10,25,50],page:A,onChange:({page:e,pageSize:t})=>{R(e),D(t)}})),W&&n().createElement(o.aFV,{open:W,modalHeading:"Compile Reports",modalLabel:"Select Report Category",onRequestClose:()=>K(!1),primaryButtonText:"Compile",primaryButtonDisabled:!Q||""===Q.trim(),onRequestSubmit:el,secondaryButtonText:"Cancel",danger:void 0},n().createElement(o.cwr,null,n().createElement("p",{className:"-esm-report-builder__linelist-dashboard-page__modalDescription___HsP7e"},"Select a report category to apply to all ",P.size," selected report(s) during compilation."),n().createElement(o.l6P,{id:"bulk-compile-category",labelText:"Report Category *",value:Q,onChange:e=>Y(e.target.value)},n().createElement(o.ebT,{value:"",text:"Select a category..."}),x.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.name}))))),f&&n().createElement("div",{className:"-esm-report-builder__linelist-dashboard-page__deleteModalOverlay___mGUzE"},n().createElement(o.FAs,{className:"-esm-report-builder__linelist-dashboard-page__deleteModal___Sl5aT"},n().createElement("h3",null,"Confirm ",l.find(e=>e.uuid===f)?.retired?"Unretire":"Retire"),n().createElement("p",null,"Are you sure you want to ",l.find(e=>e.uuid===f)?.retired?"unretire":"retire","this linelist report? This action cannot be undone."),n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"secondary",onClick:()=>h(null)},"Cancel"),n().createElement(o.$nd,{kind:"danger",onClick:Z},l.find(e=>e.uuid===f)?.retired?"Unretire":"Retire")))))};function ss(e,t){let r=()=>{let r=e.population.indicatorRules||e.indicatorRules;if(!r||0===r.length)return e.population.sqlTemplate||"";let a=[];for(let e of r){if(!e.indicatorUuid||!t?.has(e.indicatorUuid))continue;let r=function(e){if(!e)return"";if(e.sqlTemplate?.trim())return e.sqlTemplate.trim();if(e.configJson)try{let t=JSON.parse(e.configJson);for(let e of[t.sqlPreview,t.sqlTemplate,t.base?.sqlPreview,t.base?.sqlTemplate,t.authoring?.base?.sqlPreview,t.authoring?.base?.sqlTemplate,t.baseIndicator?.sqlPreview,t.baseIndicator?.sqlTemplate])if("string"==typeof e&&e.trim())return e.trim()}catch(e){console.warn("Failed to parse indicator configJson:",e)}return""}(t.get(e.indicatorUuid));if(!r){console.warn(`No SQL found for indicator: ${e.name} (${e.indicatorUuid})`);continue}let n=function(e){let t=e.trim().replace(/;+\s*$/,"");if(!t)return"";let r=t.match(/SELECT\s+COUNT\s*\(\s*DISTINCT\s+([a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)?)\s*\)\s+AS\s+(\w+)\s*/i);if(r){let e=r[1],a=t.substring(r[0].length);if(e.includes(".")){let t=e.split(".")[1];return`SELECT DISTINCT ${e} AS ${t} ${a}`.trim()}let n=a.match(/FROM\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+(?:AS\s+)?([a-zA-Z_][a-zA-Z0-9_]*)\b/i),l=n?n[2]:"a";return`SELECT DISTINCT ${l}.${e} AS ${e} ${a}`.trim()}let a=t.match(/^WITH\s+([\s\S]*?)\s*SELECT\s+COUNT\s*\(\s*\*\s*\)\s+AS\s+total\s+FROM\s*\(\s*(SELECT[\s\S]*?)\)\s*X\b/i);if(a){let e=a[1],t=a[2].trim();return`WITH ${e}
|
|
318
348
|
SELECT DISTINCT pop.patient_id
|
|
319
349
|
FROM (
|
|
320
350
|
${t}
|
|
@@ -322,7 +352,7 @@ FROM (
|
|
|
322
352
|
EXCEPT
|
|
323
353
|
${e})`;return i},a=(()=>{switch(e.populationMode){case"INDICATOR":return r();case"HYBRID":{let t=r();if(t&&e.population.sqlTemplate)return`SELECT DISTINCT base.patient_id AS patient_id
|
|
324
354
|
FROM (${e.population.sqlTemplate}) base
|
|
325
|
-
INNER JOIN (${t}) indicators ON indicators.patient_id = base.patient_id`;return t||e.population.sqlTemplate||""}default:return e.population.sqlTemplate||""}})(),n=e.columns.sort((e,t)=>e.sortOrder-t.sortOrder).map((e,t)=>{let r={name:e.name,dataDefinition:function(e,t){switch(e){case"IDENTIFIER":return{type:"IDENTIFIER",config:t};case"PERSON_NAME":return{type:"PERSON_NAME",config:t};case"PERSON_ATTRIBUTE":return{type:"PERSON_ATTRIBUTE",config:t};case"CALCULATION":return{type:"CALCULATION",config:t};case"SQL":return{type:"SQL",config:t};case"PERSON_ADDRESS":return{type:"PERSON_ADDRESS",config:t};case"CONVERTER":return{type:"CONVERTER",config:t};case"OBSERVATION":return{type:"OBSERVATION",config:t};case"ENCOUNTER_DIAGNOSIS":return{type:"ENCOUNTER_DIAGNOSIS",config:t};default:return{type:"SQL",config:{sql:t.sql||""}}}}(e.dataDefinitionType,e.dataDefinitionConfig)};if(r._metadata={id:e.id,position:e.sortOrder??t},e.repeatResolution)r.repeatResolution=e.repeatResolution;else{let t=e.dataDefinitionConfig.sql||"",a=/^(?:SELECT\s+(?:DISTINCT\s+)?(?:COUNT|MAX|MIN|SUM|AVG|GROUP_CONCAT|ARRAY_AGG|STRING_AGG|JSON_AGG)\s*\()/i.test(t)||/GROUP\s+BY\s+/i.test(t),n=/\bLIMIT\s+1\b/i.test(t);if("SQL"===e.dataDefinitionType&&/appointment|observation|encounter|program_enrollment|visit/i.test(t)&&!a&&!n){let e=t.match(/ORDER BY\s+([a-z_][a-z0-9_]*)/i);r.repeatResolution={strategy:"LATEST",orderBy:e?e[1]:"encounter_date",restrictToPeriod:!1,ignoreVoided:!0}}}return r}),l=(e.parameters||[]).sort((e,t)=>e.displayOrder-t.displayOrder).map(e=>({name:e.name,label:e.label,type:e.type,required:e.required,...e.config&&{config:e.config}})),i=l.length>0?l:[{name:"startDate",label:"Start Date",type:"DATE",required:!0},{name:"endDate",label:"End Date",type:"DATE",required:!0}],o={version:3,type:"LINE_LIST",categoryUuid:e.categoryUuid,dataSourceUuid:e.dataSources.find(e=>"PRIMARY"===e.role)?.uuid,dataSources:(()=>{let t=new Map,r=e.dataSources.find(e=>"PRIMARY"===e.role)?.uuid||"",a=!!r,n=e.columns.some(e=>"PERSON_ATTRIBUTE"===e.dataDefinitionType),l=e.columns.some(e=>"IDENTIFIER"===e.dataDefinitionType);n&&t.set("person_attributes",{uuid:"person_attributes",name:"Person Attributes",type:"CORE",role:"REFERENCE"}),l&&t.set("patient_identifiers",{uuid:"patient_identifiers",name:"Patient Identifiers",type:"CORE",role:"REFERENCE"});let i=null;if(e.columns.forEach(e=>{let n;if("PERSON_ATTRIBUTE"===e.dataDefinitionType||"IDENTIFIER"===e.dataDefinitionType)return;let l=n="CALCULATION"===e.dataDefinitionType?"calculated":"OBSERVATION"===e.dataDefinitionType?"observations":"ENCOUNTER_DIAGNOSIS"===e.dataDefinitionType?"encounter_diagnoses":"PERSON_ADDRESS"===e.dataDefinitionType?"person_address":"PERSON_NAME"===e.dataDefinitionType?"person_name":(e=>{if(!e)return"unknown";let t=e.trim();if(/^SELECT\s/i.test(t)||/:(patientId|patient_id)\b/i.test(t))return"custom_sql";let r=t.match(/`?(\w+)`?\.\s*`?\w+`?/);return r?r[1]:"unknown"})(e.dataDefinitionConfig?.sql),o=l===r,s="custom_sql"===l||"calculated"===l?"SQL":l.startsWith("mamba_")?"ETL":"SQL";!t.has(l)&&(t.set(l,{uuid:l,name:{observations:"Observations",encounter_diagnoses:"Encounter Diagnoses",person_address:"Person Address",person_name:"Person Names",calculated:"Calculated Fields",custom_sql:"Custom SQL"}[l]||l,type:s,role:o?"PRIMARY":"SECONDARY",columns:{}}),a||i||(i=l));let d=t.get(l);d&&d.columns&&(d.columns[e.name]={name:e.name,type:e.source?.fieldType||"UNKNOWN",sourceTable:n})}),!a&&i){let e=t.get(i);e&&(e.role="PRIMARY",a=!0)}return Array.from(t.values())})(),rowGrain:e.rowGrain,templateId:e.templateId,parameters:i,indicatorRules:e.population.indicatorRules||e.indicatorRules,buildMethod:(e.population.indicatorRules||e.indicatorRules||[]).length>0?"INDICATOR_BASED":e.population.buildMethod||"SQL_BUILDER",baseCohortDefinition:{type:"SQL",name:"INDICATOR_BASED"===e.population.buildMethod?"Indicator-based Patient Cohort":"Patient Cohort",config:{sql:a,...e.population.filterMap&&{filterMap:e.population.filterMap}}},dataSetDefinitions:[{name:e.dataSetName||"PATIENT_LIST",type:"PATIENT_DATA_SET",rowFilter:{type:"SQL",name:"Row Filter",config:{sql:a,...e.population.filterMap&&{filterMap:e.population.filterMap}}},columns:n}]};if(e.sortConfig&&e.sortConfig.length>0){let t=e.sortConfig[0];o.orderBy=t.columnId,o.orderDirection=t.direction,e.sortConfig.length>1&&console.warn("Multiple sort rules defined, but only the first will be used until backend supports multi-column sorting")}return e.limit&&(o.limit=e.limit),o}function ss(){let e=new Date().toISOString();return{version:3,name:"",description:"",code:"",currentPanel:"basics",categoryUuid:"",rowGrain:"PATIENT",templateId:"",populationSources:[],dataSources:[],population:{baseDataSourceUuid:"",buildMethod:"SQL_BUILDER",sqlTemplate:"",parameterReferences:[],visualFilter:{rootGroup:{id:"root",logicalOperator:"AND",conditions:[],nestedGroups:[]},useVisualBuilder:!1},buildHistory:[],filterMap:void 0},columns:[],parameters:[{id:"param-startDate",name:"startDate",label:"Start Date",type:"DATE",required:!0,defaultValue:"",displayOrder:0},{id:"param-endDate",name:"endDate",label:"End Date",type:"DATE",required:!0,defaultValue:"",displayOrder:1}],sortConfig:[],limit:1e3,displaySettings:{defaultPageSize:25,freezeFirstColumn:!0,freezeHeader:!0,dateDisplayFormat:"dd MMM yyyy",nullDisplayValue:"—",maxInteractiveRows:500,maxExportRows:1e5,allowedExports:["CSV","XLSX","PDF"],includeParametersInExportHeader:!0,includeGeneratedTimestamp:!0},validation:{errors:{},warnings:{},lastValidated:e},metadata:{createdAt:e,lastModified:e,buildMethod:"NEW",version:2,status:"DRAFT"}}}async function sd(){try{let e,t,r,a,n,l=await (0,W.wO)("/systemsetting?q=layout.address.format&v=full"),i=l?.results?.[0]?.value;if(!i)return console.warn("No address template found in system settings"),sc();return e=new DOMParser().parseFromString(i,"text/xml"),t=[],e.querySelectorAll("nameMappings entry").forEach(e=>{let r=e.querySelector("string");if(!r)return;let a=r.textContent?.trim(),n=e.querySelectorAll("string")[1],l=n?.textContent?.trim();if(a&&l){let e=l.split("."),r=e[e.length-1]||a;t.push({field:a,label:l,display:r.charAt(0).toUpperCase()+r.slice(1)})}}),r={},e.querySelectorAll("sizeMappings entry").forEach(e=>{let t=e.querySelector("string"),a=e.querySelectorAll("string")[1],n=t?.textContent?.trim(),l=a?.textContent?.trim();n&&l&&(r[n]=parseInt(l,10))}),a={},e.querySelectorAll("elementDefaults entry").forEach(e=>{let t=e.querySelector("string"),r=e.querySelectorAll("string")[1],n=t?.textContent?.trim(),l=r?.textContent?.trim();n&&l&&(a[n]=l)}),n=[],e.querySelectorAll("lineByLineFormat string").forEach(e=>{let t=e.textContent?.trim();t&&n.push(t)}),{nameMappings:t,sizeMappings:r,elementDefaults:a,lineByLineFormat:n}}catch(e){return console.error("Failed to fetch address template:",e),sc()}}function sc(){return{nameMappings:[{field:"address1",label:"Address Line 1",display:"Address 1"},{field:"address2",label:"Address Line 2",display:"Address 2"},{field:"address3",label:"Address 3",display:"Address 3"},{field:"address4",label:"Address 4",display:"Address 4"},{field:"address5",label:"Address 5",display:"Address 5"},{field:"cityVillage",label:"City/Village",display:"City/Village"},{field:"stateProvince",label:"State/Province",display:"State"},{field:"countyDistrict",label:"County/District",display:"District"},{field:"country",label:"Country",display:"Country"},{field:"postalCode",label:"Postal Code",display:"Postal Code"},{field:"latitude",label:"Latitude",display:"Latitude"},{field:"longitude",label:"Longitude",display:"Longitude"}],sizeMappings:{},elementDefaults:{},lineByLineFormat:[]}}let sm=[{label:"Last visit date",sql:"SELECT MAX(encounter_datetime) FROM encounter WHERE patient_id = :patient_id"},{label:"Latest CD4 count",sql:"SELECT value_numeric FROM obs WHERE patient_id = :patient_id AND concept_id = 5497 ORDER BY obs_datetime DESC LIMIT 1"},{label:"Current ART regimen",sql:"SELECT value_text FROM obs WHERE patient_id = :patient_id AND concept_id = 1085 ORDER BY obs_datetime DESC LIMIT 1"}],su=({open:e,onClose:t,onSave:r,existingColumnNames:l=[],idColumnAlias:i="patient_id",primaryDatasourceName:s=""})=>{let[d,c]=(0,a.useState)(""),[m,u]=(0,a.useState)(""),[p,_]=(0,a.useState)(""),[g,E]=(0,a.useState)(!1),[f,b]=(0,a.useState)(null);return(0,a.useEffect)(()=>{e&&(c(""),u(""),_(""),E(!1),b(null))},[e]),n().createElement(o.aFV,{open:e,onRequestClose:t,onRequestSubmit:()=>{d.trim()?l.some(e=>e.toLowerCase()===d.trim().toLowerCase())?b("A column with this name already exists"):p.trim()?/:(patient_id|patient_id|clientId|patientId)\b/i.test(p)?(r({name:d.trim(),description:m.trim()||void 0,sql:p.trim(),repeatResolution:g}),t()):b(`SQL should reference :${i} to return a value per patient. Add it to your WHERE clause.`):b("SQL expression is required"):b("Column name is required")},modalHeading:"Add Custom SQL Column",modalLabel:"Custom Column",primaryButtonText:"Add Column",secondaryButtonText:"Cancel",size:"lg",preventCloseOnClickOutside:!0},n().createElement(o.BJc,{gap:5},n().createElement("p",null,"Write a SQL expression that returns a single value for each patient. Use"," ",n().createElement("code",null,":",i)," as a bind parameter — it will be replaced with the patient/client ID for each row in the report."),s&&n().createElement(o.jeF,{kind:"info",title:"About Data Sources",subtitle:`This column will be associated with your primary datasource: "${s}". To use a different datasource, go to the Data Sources panel and set it as primary first.`,lowContrast:!0}),!s&&n().createElement(o.jeF,{kind:"warning",title:"No Primary Data Source",subtitle:"Custom SQL columns need a primary datasource. Please select a datasource in the Data Sources panel before adding custom columns.",lowContrast:!0}),f&&n().createElement(o.jeF,{kind:"error",title:"Validation Error",subtitle:f,hideCloseButton:!0}),n().createElement(o.ksK,{id:"custom-column-name",labelText:"Column Name *",placeholder:"e.g., Last Visit Date",value:d,onChange:e=>{c(e.target.value),b(null)}}),n().createElement(o.ksK,{id:"custom-column-description",labelText:"Description (optional)",placeholder:"What this column represents",value:m,onChange:e=>u(e.target.value)}),n().createElement(o.fs1,{id:"custom-column-sql",labelText:"SQL Expression *",placeholder:`SELECT ... FROM ... WHERE patient_id = :${i}`,value:p,onChange:e=>{_(e.target.value),b(null)},rows:6,helperText:`The :${i} parameter is replaced with each patient's ID. The query must return a single value.`}),n().createElement(o.lMk,{id:"custom-column-repeat",labelText:"May return multiple values (configure repeat resolution)",labelA:"No",labelB:"Yes",toggled:g,onToggle:E}),g&&n().createElement(o.jeF,{kind:"info",title:"Repeat Resolution",subtitle:"The most recent value (LATEST strategy) will be used by default. You can adjust this later in the column settings.",hideCloseButton:!0,lowContrast:!0}),n().createElement("div",null,n().createElement("p",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Examples (click to use):"),n().createElement(o.BJc,{gap:2},sm.map(e=>n().createElement(o.$nd,{key:e.label,kind:"ghost",size:"sm",onClick:()=>{_(e.sql),d||c(e.label),b(null)},style:{justifyContent:"flex-start",textAlign:"left"}},e.label)))),p&&n().createElement("div",null,n().createElement("p",{style:{fontWeight:600,marginBottom:"0.25rem"}},"Your SQL:"),n().createElement(o.z7k,{type:"multi"},p))))},sp="-esm-report-builder__population-source-selector__optionRow___57yaq",s_=[{uuid:"person_attributes",name:"Person Attributes",type:"CORE",joinType:"JOIN"}],sg=[{value:"JOIN",label:"JOIN",description:"Combine sources with matching patient_ids (INNER JOIN)"},{value:"LEFT_JOIN",label:"LEFT JOIN",description:"All patients from first source, match from second"},{value:"INTERSECT",label:"INTERSECT",description:"Patients present in ALL sources (AND logic)"},{value:"UNION",label:"UNION",description:"Patients from ANY source (OR logic)"},{value:"EXCEPT",label:"EXCEPT",description:"Patients in first source but NOT in second"}],sE=({populationSources:e,onChange:t,disabled:r=!1,showAdvanced:l=!1})=>{let[i,s]=(0,a.useState)(null),{tables:d,loading:c,error:m}=is(!0),u=(0,a.useMemo)(()=>0===e.length?0:Math.max(...e.map(e=>e.order))+1,[e]),p=(0,a.useMemo)(()=>[...(d||[]).map(e=>({id:e,label:e,type:"ETL"})),...s_.map(e=>({id:e.uuid,label:e.name,type:"CORE"}))],[d]),_=(0,a.useMemo)(()=>e.map(e=>({id:e.uuid,label:e.name})),[e]),g=(r,a)=>{t(e.map(e=>e.uuid===r?{...e,...a}:e))},E=e.filter(e=>e.enabled).length;return n().createElement("div",{className:"-esm-report-builder__population-source-selector__container___LrQoh"},n().createElement(o.BJc,{gap:4},n().createElement("div",{className:"-esm-report-builder__population-source-selector__header___Cck9x"},n().createElement("div",{className:"-esm-report-builder__population-source-selector__headerTitle___hw3UR"},n().createElement(tN.$$,{size:16}),n().createElement("h4",null,"Population Sources")),n().createElement("p",{className:"-esm-report-builder__population-source-selector__headerDescription___dVbnP"},"Select multiple datasources to define the patient population. Each source can have a different join type.")),n().createElement("div",{className:"-esm-report-builder__population-source-selector__addSection___iEpr6"},n().createElement(o.KFt,{id:"population-sources-multiselect",titleText:"Add Population Sources",label:"Search and select datasources...",placeholder:"Type to search datasources...",items:p,selectedItems:_,itemToString:e=>e?.label||"",onChange:({selectedItems:r})=>{let a=new Set(e.map(e=>e.uuid)),n=r.filter(e=>!a.has(e.id)),l=e.map(e=>e.uuid).filter(e=>!r.some(t=>t.id===e)),i=n.map(e=>({...s_.find(t=>t.uuid===e.id)||{uuid:e.id,name:e.id,type:e.id.startsWith("mamba_")?"ETL":"SQL",joinType:"JOIN"},enabled:!0,order:u+n.findIndex(t=>t.id===e.id)}));t([...e.filter(e=>!l.includes(e.uuid)),...i])},disabled:r||c,size:"sm",selectionFeedback:"fixed"}),m&&n().createElement("div",{className:"-esm-report-builder__population-source-selector__error___bQ4dv"},"Failed to load tables: ",m)),e.length>0&&n().createElement("div",{className:"-esm-report-builder__population-source-selector__listSection___LEh3Z"},n().createElement("div",{className:"-esm-report-builder__population-source-selector__listHeader___DrC+F"},n().createElement("h5",{className:"-esm-report-builder__population-source-selector__listTitle___cBpkm"},"Selected Sources (",E," enabled)"),E<e.length&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>t(e.map(e=>({...e,enabled:!0}))),disabled:r},"Enable All")),n().createElement(o.BJc,{gap:2},e.sort((e,t)=>e.order-t.order).map((a,d)=>n().createElement("div",{key:a.uuid,className:`-esm-report-builder__population-source-selector__sourceCard___lhHkf ${!a.enabled?"-esm-report-builder__population-source-selector__sourceCardDisabled___05itb":""}`,"data-join-type":a.joinType},n().createElement("div",{className:"-esm-report-builder__population-source-selector__cardHeader___hJig+"},n().createElement("div",{className:"-esm-report-builder__population-source-selector__cardInfo___Plc8O"},n().createElement(o.vwO,{type:a.enabled?(e=>{switch(e){case"JOIN":case"LEFT_JOIN":return"blue";case"INTERSECT":return"green";case"UNION":return"purple";case"EXCEPT":return"red";default:return"gray"}})(a.joinType):"gray",size:"sm"},a.joinType),n().createElement("span",{className:"-esm-report-builder__population-source-selector__dsName___veHbk"},a.name),n().createElement(o.vwO,{type:"cool-gray",size:"sm"},a.type)),n().createElement("div",{className:"-esm-report-builder__population-source-selector__cardActions___a3fnQ"},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.rX,iconDescription:"Move up",onClick:()=>{var r;let n,l;return r=a.uuid,void((l=(n=[...e]).findIndex(e=>e.uuid===r))>0&&([n[l-1],n[l]]=[n[l],n[l-1]],n.forEach((e,t)=>e.order=t),t(n)))},disabled:r||0===d}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.yQ,iconDescription:"Move down",onClick:()=>{var r;let n,l;return r=a.uuid,void((l=(n=[...e]).findIndex(e=>e.uuid===r))<n.length-1&&([n[l],n[l+1]]=[n[l+1],n[l]],n.forEach((e,t)=>e.order=t),t(n)))},disabled:r||d===e.length-1}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.bm,iconDescription:"Remove",onClick:()=>{var r;return r=a.uuid,void(t(e.filter(e=>e.uuid!==r)),i===r&&s(null))},disabled:r}))),n().createElement("div",{className:"-esm-report-builder__population-source-selector__cardControls___mhn2x"},n().createElement("div",{className:"-esm-report-builder__population-source-selector__controlRow___dvItb"},n().createElement(o.lMk,{id:`enable-${a.uuid}`,labelText:"Enabled",toggled:a.enabled,onToggle:e=>g(a.uuid,{enabled:e}),disabled:r,size:"sm"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>{var e;s(i===(e=a.uuid)?null:e)},disabled:r},i===a.uuid?"Hide Options":"Show Options")),i===a.uuid&&n().createElement("div",{className:"-esm-report-builder__population-source-selector__expandedOptions___h6VNd"},n().createElement("div",{className:sp},n().createElement(o.l6P,{id:`join-type-${a.uuid}`,labelText:"Join Type",value:a.joinType,onChange:e=>g(a.uuid,{joinType:e.target.value}),disabled:r||!a.enabled,size:"sm"},sg.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label,title:e.description})))),("JOIN"===a.joinType||"LEFT_JOIN"===a.joinType)&&l&&n().createElement("div",{className:sp},n().createElement(o.ksK,{id:`join-condition-${a.uuid}`,labelText:"Custom Join Condition",placeholder:"e.g., a.patient_id = b.patient_id",value:a.joinCondition||"",onChange:e=>g(a.uuid,{joinCondition:e.target.value}),disabled:r||!a.enabled,size:"sm"})),n().createElement("div",{className:"-esm-report-builder__population-source-selector__optionDescription___nFA9m"},sg.find(e=>e.value===a.joinType)?.description))))))),0===e.length&&n().createElement("div",{className:"-esm-report-builder__population-source-selector__emptyState___doc1n"},n().createElement("p",null,"No population sources selected. Add datasources above to define the patient cohort.")),e.length>0&&n().createElement("div",{className:"-esm-report-builder__population-source-selector__summary___EZxeZ"},n().createElement("span",null,e.length," source",1!==e.length?"s":""," selected"),n().createElement("span",null,E," enabled"),E>1&&n().createElement("span",null,"Order matters for INTERSECT/EXCEPT operations"))))},sf="-esm-report-builder__concept-selector__detailRow___cSddw",sb="-esm-report-builder__concept-selector__detailLabel___f0XAS",sy="-esm-report-builder__concept-selector__detailValue___ozuUf",sh=({selectedConcept:e,onSelect:t,onClear:r,disabled:l=!1,placeholder:i="Type to search concepts...",label:s="Search concepts",showAdvanced:d=!1,openKey:c=0})=>{let[m,u]=(0,a.useState)(""),[p,_]=(0,a.useState)(0);(0,a.useEffect)(()=>{u(""),_(e=>e+1)},[c]);let{loading:g,results:E,error:f}=tV(m),b=n().useMemo(()=>{let t=[...E];return e&&(E.some(t=>t.uuid===e.uuid)||t.unshift(e)),t},[E,e]),y=(0,a.useCallback)(e=>{u(e.target.value)},[]),h=(0,a.useCallback)(e=>{e.length>0&&t(e[0])},[t]),v=(0,a.useCallback)(()=>{r?.(),u("")},[r]),S=(0,a.useCallback)(e=>{if(!e)return"";let t=e.conceptClass?.name||"";return t?`${e.display} (${t})`:e.display},[]);return n().createElement("div",{className:"-esm-report-builder__concept-selector__container___DvAQ9"},n().createElement(o.BJc,{gap:4},d&&n().createElement("div",{className:"-esm-report-builder__concept-selector__header___Dj1OB"},n().createElement("div",{className:"-esm-report-builder__concept-selector__headerTitle___QWz48"},n().createElement(tN.$$,{size:16}),n().createElement("h4",null,"Select Concept")),n().createElement("p",{className:"-esm-report-builder__concept-selector__headerDescription___IqW9S"},"Search for an OpenMRS concept to use for this column. Concepts define what data to observe or diagnose.")),e&&n().createElement("div",{className:"-esm-report-builder__concept-selector__selectedDisplay___vQBv8"},n().createElement("div",{className:"-esm-report-builder__concept-selector__selectedInfo___ciora"},n().createElement("span",{className:"-esm-report-builder__concept-selector__selectedLabel___jp3V3"},"Selected:"),n().createElement(o.vwO,{type:"blue",size:"sm"},e.display),n().createElement("span",{className:"-esm-report-builder__concept-selector__selectedMeta___8hqVk"},e.conceptClass?.name)),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.bm,iconDescription:"Clear selection",onClick:v,disabled:l})),n().createElement("div",{className:"-esm-report-builder__concept-selector__searchSection___woEy-"},n().createElement(o.vji,{id:"concept-search",labelText:s,placeholder:i,value:m,onChange:y,size:"lg",disabled:l}),g?n().createElement(o.OuH,{description:"Searching…"}):null,f?n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:f,lowContrast:!0,hideCloseButton:!0}):null,n().createElement(o.Qp5,{key:p,id:"concept-select",titleText:"Select concept",items:b,itemToString:S,placeholder:b.length?"Select a concept…":"No results",helperText:e?"Click to change selection":"Type at least 2 characters to search",onChange:e=>h(e.selectedItems??[]),disabled:l,selectionFeedback:"top",initialSelectedItems:e?[e]:[]}),!e&&!g&&!f&&n().createElement("div",{className:"-esm-report-builder__concept-selector__helperText___muq5h"},n().createElement("p",null,"Type at least 2 characters to search for concepts. You can search by concept name or UUID."),n().createElement("p",{className:"-esm-report-builder__concept-selector__hint___RMczP"},n().createElement("strong",null,"Tip:"),' Use specific terms like "Weight", "HIV Status", or "Diagnosis" for better results.'))),d&&e&&n().createElement("div",{className:"-esm-report-builder__concept-selector__advancedOptions___0NapC"},n().createElement("h5",{className:"-esm-report-builder__concept-selector__advancedTitle___FdaYm"},"Concept Details"),n().createElement(o.BJc,{gap:2},n().createElement("div",{className:sf},n().createElement("span",{className:sb},"UUID:"),n().createElement("span",{className:sy},e.uuid)),n().createElement("div",{className:sf},n().createElement("span",{className:sb},"Data Type:"),n().createElement("span",{className:sy},e.datatype?.name)),n().createElement("div",{className:sf},n().createElement("span",{className:sb},"Class:"),n().createElement("span",{className:sy},e.conceptClass?.name)),e.answers&&e.answers.length>0&&n().createElement("div",{className:sf},n().createElement("span",{className:sb},"Answers:"),n().createElement("div",{className:sy},e.answers.map(e=>n().createElement(o.vwO,{key:e.uuid,type:"gray",size:"sm"},e.display))))))))},sv=[{value:"ANY",label:"Any",description:"Return all observation values"},{value:"FIRST",label:"First",description:"Earliest observation by date"},{value:"MOST_RECENT",label:"Most Recent",description:"Most recent observation by date"},{value:"FIRST_N",label:"First #",description:"First N observations by date"},{value:"MOST_RECENT_N",label:"Most Recent #",description:"Most recent N observations"}],sS=[{value:"obsDatetime",label:"Obs Datetime",description:"Include observation date/time"},{value:"location",label:"Location",description:"Include observation location"},{value:"comment",label:"Comment",description:"Include observation comment"},{value:"encounterType",label:"Encounter Type",description:"Include encounter type"},{value:"provider",label:"Provider",description:"Include provider who made the observation"}],sT=({open:e,onClose:t,onAddColumn:r,existingColumns:l=[],editingColumn:i=null})=>{let[s,d]=(0,a.useState)(0),[c,m]=(0,a.useState)(),[u,p]=(0,a.useState)(""),[_,g]=(0,a.useState)(""),[E,f]=(0,a.useState)("MOST_RECENT"),[b,y]=(0,a.useState)(1),[h,v]=(0,a.useState)(!0),[S,T]=(0,a.useState)([]),[C,w]=(0,a.useState)(),N=(0,a.useCallback)(()=>{m(void 0),p(""),g(""),f("MOST_RECENT"),y(1),v(!0),T([]),w(void 0)},[]);(0,a.useEffect)(()=>{if(e)if(d(e=>e+1),i){let e=i.dataDefinitionConfig||{};e.conceptUuid||console.warn("⚠️ Missing conceptUuid in dataDefinitionConfig"),e.conceptName||i.name||console.warn("⚠️ Missing conceptName and column name"),e.strategy||console.warn("⚠️ Missing strategy in dataDefinitionConfig");let t="MOST_RECENT",r=e.strategy;"ALL_VALUES"===r?t="ANY":"EARLIEST"===r?t="FIRST":"LATEST"===r?t="MOST_RECENT":"string"==typeof r&&r.startsWith("FIRST_")?t="FIRST_N":"string"==typeof r&&r.startsWith("LAST_")&&(t="MOST_RECENT_N");let a=1;if("string"==typeof r&&r.startsWith("FIRST_")){let e=r.match(/^FIRST_(\d+)$/);e&&(a=parseInt(e[1])||1)}else if("string"==typeof r&&r.startsWith("LAST_")){let e=r.match(/^LAST_(\d+)$/);e&&(a=parseInt(e[1])||1)}m(i.source?.conceptUuid?{uuid:i.source.conceptUuid,display:e.conceptName||i.name,datatype:{name:i.source?.fieldType||"TEXT"},conceptClass:void 0}:void 0),p(i.name||""),g(i.description||""),f(e.columnModifier||t),y(e.modifierCount||a),v(!1!==e.returnDisplay),T(e.extraValues||[]),w(e.answerConceptUuid?{uuid:e.answerConceptUuid,display:e.answerConceptName||""}:void 0)}else N()},[e,i,N]);let I=(0,a.useCallback)(()=>{N(),t()},[N,t]),k=(0,a.useCallback)(e=>{m(e),u||p(e.display),_||g(e.display)},[u,_]),A=(0,a.useCallback)((e,t)=>{let r=t.target.checked;T(t=>r?[...t,e]:t.filter(t=>t!==e))},[]),R=(0,a.useCallback)(()=>{let e;if(!c||!u?.trim()||l.some(e=>e.id!==i?.id&&e.name.toLowerCase()===u.toLowerCase()))return;let t=new Date().toISOString(),a="LATEST";switch(E){case"ANY":e="ALL_VALUES",a="NONE";break;case"FIRST":e="EARLIEST",a="EARLIEST";break;case"MOST_RECENT":default:e="LATEST",a="LATEST";break;case"FIRST_N":e=`FIRST_${b}`,a="EARLIEST";break;case"MOST_RECENT_N":e=`LAST_${b}`,a="LATEST"}let n={id:i?.id||`col-${t}-${c.uuid}`,name:u.trim(),description:_.trim()||c.display,source:{dataSourceUuid:"observations",dataSourceName:"Observations",table:"observations",field:c.uuid,fieldType:c.datatype?.name||"TEXT",conceptUuid:c.uuid},dataDefinitionType:"OBSERVATION",dataDefinitionConfig:{conceptUuid:c.uuid,conceptName:c.display,strategy:e,columnModifier:E,modifierCount:"FIRST_N"===E||"MOST_RECENT_N"===E?b:void 0,returnDisplay:h,extraValues:S,...C&&{answerConceptUuid:C.uuid}},additionInfo:{addedVia:i?.additionInfo?.addedVia||"VISUAL_SELECTOR",addedAt:i?.additionInfo?.addedAt||t,orderAdded:i?.additionInfo?.orderAdded||l.length},display:i?.display||{width:150,align:"left",sortable:!0,filterable:!0,format:"coded"},sortOrder:i?.sortOrder??l.length,repeatResolution:"ANY"===E?void 0:{strategy:a,orderBy:"obs_datetime",restrictToPeriod:!0,ignoreVoided:!0}};r(n),I()},[c,u,_,E,b,h,S,C,l,r,I,i]),O=c&&u?.trim();return n().createElement(o.aFV,{open:e,onRequestClose:I,modalHeading:i?"Edit Observation Column":"Add Observation Column",modalLabel:"Data Catalogue",size:"md",preventCloseOnClickOutside:!0,primaryButtonText:i?"Save Changes":"Add Column",primaryButtonDisabled:!O,onRequestSubmit:R,secondaryButtonText:"Cancel",onSecondarySubmit:I},n().createElement("div",{className:"-esm-report-builder__observation-column-modal__content___pe9g4"},n().createElement(o.BJc,{gap:6},n().createElement(sh,{key:s,openKey:s,selectedConcept:c,onSelect:k,onClear:()=>m(void 0),label:"Search for Concept",placeholder:"Type to search for concepts (e.g., Weight, Temperature, HIV Status)...",showAdvanced:!1}),c&&n().createElement(o.gE_,{legendText:"Column Configuration"},n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"observation-column-name",labelText:"Column Name *",placeholder:"Enter display name for this column",value:u,onChange:e=>p(e.target.value)}),n().createElement(o.ksK,{id:"observation-column-value",labelText:"Column Value",placeholder:"Description for the column value",value:_,onChange:e=>g(e.target.value)}),n().createElement(o.l6P,{id:"observation-column-modifier",labelText:"Column Modifier",value:E,onChange:e=>f(e.target.value)},sv.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label,title:e.description}))),("FIRST_N"===E||"MOST_RECENT_N"===E)&&n().createElement(o.ksK,{id:"observation-modifier-count",labelText:"Number of Values",type:"number",min:1,max:100,value:b.toString(),onChange:e=>y(parseInt(e.target.value)||1)}),n().createElement(o.lMk,{id:"observation-return-display",labelText:"Return concept display name instead of UUID",toggled:h,onToggle:e=>v(e),size:"sm"}),n().createElement("div",null,n().createElement("label",{className:"-esm-report-builder__observation-column-modal__extraValuesLabel___9ie9M"},"Extra Values"),n().createElement(o.BJc,{gap:2,className:"-esm-report-builder__observation-column-modal__extraValuesGrid___Yvzg+"},sS.map(e=>n().createElement(o.Sc0,{key:e.value,id:`extra-${e.value}`,labelText:e.label,checked:S.includes(e.value),onChange:t=>A(e.value,t),title:e.description})))),(c.answers&&c.answers.length>0||C)&&n().createElement("div",null,C&&(!c.answers||0===c.answers.length)&&n().createElement("div",{style:{marginBottom:"0.5rem",fontSize:"0.875rem",opacity:.9}},n().createElement("strong",null,"Filter by Answer:")," ",C.display||C.uuid,n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>w(void 0),style:{marginLeft:"0.5rem"}},"Clear")),c.answers&&c.answers.length>0&&n().createElement(o.l6P,{id:"observation-answer-concept",labelText:"Filter by Answer (Optional)",value:C?.uuid||"",onChange:e=>{w(c.answers?.find(t=>t.uuid===e.target.value))}},n().createElement(o.ebT,{value:"",text:"All answers"}),c.answers.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.display})))))))))},sC=[{value:"ALL_VALUES",label:"All Values",description:"Return all diagnoses as comma-separated list"},{value:"LATEST",label:"Latest",description:"Most recent diagnosis"},{value:"FIRST_WITHIN_PERIOD",label:"First in Period",description:"First diagnosis within reporting period"},{value:"LAST_WITHIN_PERIOD",label:"Last in Period",description:"Last diagnosis within reporting period"}],sw=[{value:"PRIMARY",label:"Primary Only",description:"Only primary diagnoses"},{value:"SECONDARY",label:"Secondary Only",description:"Only secondary diagnoses"},{value:"ANY",label:"Any",description:"Both primary and secondary diagnoses"}],sN=({open:e,onClose:t,onAddColumn:r,existingColumns:l=[],editingColumn:i=null})=>{let[s,d]=(0,a.useState)(0),[c,m]=(0,a.useState)(),[u,p]=(0,a.useState)(""),[_,g]=(0,a.useState)("LAST_WITHIN_PERIOD"),[E,f]=(0,a.useState)("ANY"),[b,y]=(0,a.useState)(!0),[h,v]=(0,a.useState)(!0),S=(0,a.useCallback)(()=>{m(void 0),p(""),g("LAST_WITHIN_PERIOD"),f("ANY"),y(!0),v(!0)},[]);(0,a.useEffect)(()=>{if(e)if(d(e=>e+1),i){let e=i.dataDefinitionConfig||{};m(i.source?.conceptUuid?{uuid:i.source.conceptUuid,display:e.conceptName||i.name,datatype:{name:i.source?.fieldType||"TEXT"}}:void 0),p(i.name||""),g(e.strategy||"LAST_WITHIN_PERIOD"),f(e.rank||"ANY"),y(!1!==e.confirmedOnly),v(!1!==e.returnDisplay)}else S()},[e,i,S]);let T=(0,a.useCallback)(()=>{S(),t()},[S,t]),C=(0,a.useCallback)(e=>{m(e),u||p(e.display)},[u]),w=(0,a.useCallback)(()=>{let e=u?.trim()||c?.display||"Diagnoses";if(l.some(t=>t.id!==i?.id&&t.name.toLowerCase()===e.toLowerCase()))return;let t=new Date().toISOString();r({id:i?.id||`col-${t}-${c?.uuid||"all-diagnoses"}`,name:e,description:i?.description||(c?`Diagnosis: ${c.display}`:"All encounter diagnoses"),source:{dataSourceUuid:"encounter_diagnoses",dataSourceName:"Encounter Diagnoses",table:"encounter_diagnoses",field:c?.uuid||"*",fieldType:"TEXT",conceptUuid:c?.uuid},dataDefinitionType:"ENCOUNTER_DIAGNOSIS",dataDefinitionConfig:{conceptUuid:c?.uuid,conceptName:c?.display,rank:E,confirmedOnly:b,strategy:_,returnDisplay:h},additionInfo:{addedVia:i?.additionInfo?.addedVia||"VISUAL_SELECTOR",addedAt:i?.additionInfo?.addedAt||t,orderAdded:i?.additionInfo?.orderAdded||l.length},display:i?.display||{width:150,align:"left",sortable:!0,filterable:!0,format:"coded"},sortOrder:i?.sortOrder??l.length,repeatResolution:{strategy:"ALL_VALUES"===_?"NONE":"LATEST",orderBy:"encounter_date",restrictToPeriod:!0,ignoreVoided:!0}}),T()},[c,u,_,E,b,h,l,r,T,i]),N=u?.trim();return n().createElement(o.aFV,{open:e,onRequestClose:T,modalHeading:i?"Edit Diagnosis Column":"Add Diagnosis Column",modalLabel:"Data Catalogue",size:"md",preventCloseOnClickOutside:!0,primaryButtonText:i?"Save Changes":"Add Column",primaryButtonDisabled:!N,onRequestSubmit:w,secondaryButtonText:"Cancel",onSecondarySubmit:T},n().createElement("div",{className:"-esm-report-builder__encounter-diagnosis-column-modal__content___H9xGm"},n().createElement(o.BJc,{gap:6},n().createElement("div",{className:"-esm-report-builder__encounter-diagnosis-column-modal__conceptSection___jMZIp"},n().createElement("div",{className:"-esm-report-builder__encounter-diagnosis-column-modal__conceptSectionHeader___hP0U0"},n().createElement("p",{className:"-esm-report-builder__encounter-diagnosis-column-modal__helperText___oKLdn"},'Leave empty to capture ALL encounter diagnoses, or search for a specific diagnosis condition (e.g., "Malaria", "HIV", "TB").')),n().createElement(sh,{key:s,openKey:s,selectedConcept:c,onSelect:C,onClear:()=>m(void 0),label:"Search for Diagnosis Concept",placeholder:"Type to search for diagnosis concepts...",showAdvanced:!1})),n().createElement(o.gE_,{legendText:"Column Configuration"},n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"diagnosis-column-name",labelText:"Column Name *",placeholder:"Enter display name for this column",value:u,onChange:e=>p(e.target.value)}),n().createElement(o.l6P,{id:"diagnosis-rank",labelText:"Diagnosis Rank",value:E,onChange:e=>f(e.target.value)},sw.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label,title:e.description}))),n().createElement(o.l6P,{id:"diagnosis-strategy",labelText:"Strategy for Multiple Diagnoses",value:_,onChange:e=>g(e.target.value)},sC.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label,title:e.description}))),n().createElement(o.lMk,{id:"diagnosis-confirmed-only",labelText:"Only include confirmed diagnoses",toggled:b,onToggle:e=>y(e),size:"sm"}),n().createElement(o.lMk,{id:"diagnosis-return-display",labelText:"Return concept display name instead of UUID",toggled:h,onToggle:e=>v(e),size:"sm"}))))))},sI={catalogue:"-esm-report-builder__data-catalogue__catalogue___pZUfl",populationSourcesSection:"-esm-report-builder__data-catalogue__populationSourcesSection___xJEns",datasetControls:"-esm-report-builder__data-catalogue__datasetControls___tAboY",etlIndicator:"-esm-report-builder__data-catalogue__etlIndicator___2MnnJ",etlTypeBadge:"-esm-report-builder__data-catalogue__etlTypeBadge___rGrpN",etlTypeIcon:"-esm-report-builder__data-catalogue__etlTypeIcon___9nBQ+",etlTypeLabel:"-esm-report-builder__data-catalogue__etlTypeLabel___k0YSe",etlDescription:"-esm-report-builder__data-catalogue__etlDescription___+6C+Y",etlHint:"-esm-report-builder__data-catalogue__etlHint___FlQWL",dropdown:"-esm-report-builder__data-catalogue__dropdown___5gNZQ",controls:"-esm-report-builder__data-catalogue__controls___4MUCu",toggleContainer:"-esm-report-builder__data-catalogue__toggleContainer___SaD2h",actionButtons:"-esm-report-builder__data-catalogue__actionButtons___c2wiE",customColumnSection:"-esm-report-builder__data-catalogue__customColumnSection___2v6jm",empty:"-esm-report-builder__data-catalogue__empty___E5VTP",loading:"-esm-report-builder__data-catalogue__loading___cyncT",fieldGroups:"-esm-report-builder__data-catalogue__fieldGroups___p+v5m",accordion:"-esm-report-builder__data-catalogue__accordion___8juo8",groupHeader:"-esm-report-builder__data-catalogue__groupHeader___nUsJO",groupIcon:"-esm-report-builder__data-catalogue__groupIcon___lb0kc",groupName:"-esm-report-builder__data-catalogue__groupName___Tea3A",fieldList:"-esm-report-builder__data-catalogue__fieldList___uXn3i",fieldItem:"-esm-report-builder__data-catalogue__fieldItem___celmC",fieldActions:"-esm-report-builder__data-catalogue__fieldActions___7qEPl",fieldInfo:"-esm-report-builder__data-catalogue__fieldInfo___+qTtN",fieldName:"-esm-report-builder__data-catalogue__fieldName___d7l4S",fieldMeta:"-esm-report-builder__data-catalogue__fieldMeta___eubsJ",summary:"-esm-report-builder__data-catalogue__summary___Rg0-y"},sk=[{id:"demographics",name:"Demographics",description:"Patient demographic information",fieldPatterns:["given_name","family_name","person_name","sex","gender","birth_date","age","death_date"],icon:P.KJ},{id:"api-person-attributes",name:"Person Attributes",description:"Custom person attributes from OpenMRS (Telephone, Civil Status, etc.)",fieldPatterns:[],icon:f.vw,isApiDriven:!0},{id:"openmrs-calculated",name:"Calculated Fields",description:"Fields calculated from other data",fieldPatterns:["age","bmi"],icon:m.zt},{id:"api-patient-identifiers",name:"Patient Identifiers",description:"Patient identification numbers from OpenMRS (Clinic No, National ID, etc.)",fieldPatterns:[],icon:s.vG,isApiDriven:!0},{id:"api-observations",name:"Observations",description:"Clinical observations from OpenMRS based on concepts (e.g., Weight, Height, Temperature)",fieldPatterns:[],icon:"\uD83D\uDCCA",isApiDriven:!0,isConceptBased:!0},{id:"api-encounter-diagnoses",name:"Encounter Diagnoses",description:"Diagnoses from OpenMRS encounters based on concepts (ICD coded conditions)",fieldPatterns:[],icon:"\uD83C\uDFE5",isApiDriven:!0,isConceptBased:!0},{id:"openmrs-person-name",name:"Person Name",description:"Patient name components",fieldPatterns:["given_name","family_name","middle_name","person_name"],icon:P.KJ},{id:"openmrs-address",name:"Address & Contact",description:"Address and contact information",fieldPatterns:["address","address1","address2","address3","address4","address5","village","parish","subcounty","county","district","state","stateProvince","countyDistrict","city","cityVillage","phone","telephone"],icon:"\uD83D\uDCCD"},{id:"addresses",name:"Addresses & Contacts",description:"Patient address and contact information",fieldPatterns:["address","address1","address2","address3","address4","address5","city","village","parish","subcounty","county","district","state","stateProvince","countyDistrict","country","phone","telephone","email"],icon:"\uD83D\uDCCD"},{id:"encounters",name:"Encounters & Visits",description:"Encounter and visit information",fieldPatterns:["encounter","visit","visit_date","encounter_date","encounter_type","location"],icon:"\uD83C\uDFE5"},{id:"observations",name:"Observations",description:"Clinical observations and vitals",fieldPatterns:["obs","observation","value","concept","weight","height","bmi","temperature","blood_pressure"],icon:"\uD83D\uDCCA"},{id:"programs",name:"Programs & Enrollments",description:"Program enrollment and status",fieldPatterns:["program","enrollment","enrol","program_enrollment","regimen","art","hiv","tb"],icon:"\uD83D\uDCCB"},{id:"appointments",name:"Appointments",description:"Scheduled appointments",fieldPatterns:["appointment","return_visit","appointment_date","fulfillment","scheduled"],icon:"\uD83D\uDCC5"},{id:"laboratory",name:"Laboratory",description:"Lab results and orders",fieldPatterns:["lab","laboratory","test","result","specimen","order_date","result_date"],icon:"\uD83D\uDD2C"},{id:"medications",name:"Medications",description:"Drug prescriptions and dispenses",fieldPatterns:["drug","medication","prescription","dispense","regimen","dose"],icon:"\uD83D\uDC8A"}],sA=[{id:"openmrs.calc.age",name:"age",label:"Age",type:"NUMBER",source:"CALCULATION",table:"person",isRepeated:!1,description:"Age in years (as of report end date)"},{id:"openmrs.calc.age_months",name:"age_months",label:"Age (Months)",type:"NUMBER",source:"CALCULATION",table:"person",isRepeated:!1,description:"Age in months (as of report end date)"},{id:"openmrs.calc.age_years",name:"age_years",label:"Age (Years)",type:"NUMBER",source:"CALCULATION",table:"person",isRepeated:!1,description:"Age in whole years (as of report end date)"},{id:"openmrs.calc.bmi",name:"bmi",label:"BMI",type:"NUMBER",source:"CALCULATION",table:"person",isRepeated:!1,description:"Body Mass Index"}],sR=[{id:"openmrs.person.given_name",name:"given_name",label:"Given Name",type:"TEXT",source:"CORE",table:"person",isRepeated:!1,description:"Patient given name"},{id:"openmrs.person.family_name",name:"family_name",label:"Family Name",type:"TEXT",source:"CORE",table:"person",isRepeated:!1,description:"Patient family name/surname"},{id:"openmrs.person.full_name",name:"full_name",label:"Full Name",type:"TEXT",source:"CORE",table:"person",isRepeated:!1,description:"Complete patient name"},{id:"openmrs.person.gender",name:"gender",label:"Gender",type:"CODED",source:"CORE",table:"person",isRepeated:!1,description:"Patient gender"},{id:"openmrs.person.birthdate",name:"birthdate",label:"Birth Date",type:"DATE",source:"CORE",table:"person",isRepeated:!1,description:"Patient birth date"},{id:"openmrs.person.death_date",name:"death_date",label:"Death Date",type:"DATE",source:"CORE",table:"person",isRepeated:!1,description:"Patient death date"}],sO=({table:e,dataSources:t,populationSources:l,onPopulationSourcesChange:i,showPopulationSelector:s=!0,onAddToColumns:d,onAddToFilters:c,onFieldsAvailable:m,onEtlStructureDetected:u,selectedFields:p=[],disabled:_=!1,onAddCustomSqlColumn:g,onAddDraftColumn:E,idColumnAlias:f="patient_id"})=>{let[b,y]=(0,a.useState)(""),[h,v]=(0,a.useState)(!1),[S,T]=(0,a.useState)(new Set),[C,w]=(0,a.useState)(null),[N,I]=(0,a.useState)(!1),[k,A]=(0,a.useState)(!1),[R,O]=(0,a.useState)(!1),[D,x]=(0,a.useState)([]),[L,M]=(0,a.useState)([]),[$,P]=(0,a.useState)(!0),[U,B]=(0,a.useState)(null),[F,z]=(0,a.useState)([]),{addressFields:q}=function(){let{template:e,loading:t}=function(){let[e,t]=(0,a.useState)(null),[r,n]=(0,a.useState)(!0),[l,i]=(0,a.useState)(null),o=async()=>{n(!0),i(null);try{let e=await sd();t(e)}catch(e){i(e instanceof Error?e:Error("Failed to fetch address template"))}finally{n(!1)}};return(0,a.useEffect)(()=>{o()},[]),{template:e,loading:r,error:l,refresh:o}}();return{addressFields:e?.nameMappings.map(e=>({id:`openmrs.person_address.${e.field}`,name:e.field,label:e.display,type:"TEXT",source:"CORE",table:"person_address",isRepeated:!1,description:e.label}))||[],loading:t}}(),j=(0,a.useMemo)(()=>t||(e?[{uuid:e,name:e,type:"ETL",role:"PRIMARY",tables:[]}]:[]),[t,e]),H=j.find(e=>"PRIMARY"===e.role),J=H?.uuid||e||"",G=H?.name||"",{columns:V,loading:W,error:K}=id(J,!!J);(0,a.useEffect)(()=>{(async()=>{try{P(!0),B(null);let[e,t]=await Promise.all([nl(!0),nn(!0)]);x(e),M(t)}catch(e){console.error("Failed to fetch person attributes/identifiers:",e),B("Failed to load person attributes and identifiers from server")}finally{P(!1)}})()},[]);let Q=(0,a.useMemo)(()=>{let e={};return sk.forEach(t=>{e[t.id]=[]}),e.uncategorized=[],e["openmrs-calculated"]=sA,e.demographics=sR,e["openmrs-address"]=q,e["api-person-attributes"]=D.filter(e=>!e.retired).map(e=>({id:`person-attribute-${e.uuid}`,name:e.uuid,label:e.display||e.name||e.uuid,type:"TEXT",source:"CORE",table:"person_attribute",isRepeated:!1,description:e.description||"Custom person attribute"})),e["api-patient-identifiers"]=L.filter(e=>!e.retired).map(e=>({id:`patient-identifier-${e.uuid}`,name:e.uuid,label:e.display||e.name||e.uuid,type:"TEXT",source:"CORE",table:"patient_identifier",isRepeated:!0,description:e.description||"Patient identifier"})),e["api-observations"]=[],e["api-encounter-diagnoses"]=[],V&&V.length>0&&V.forEach(t=>{var r;let a,n=function(e){let t=e.toLowerCase();for(let e of sk)for(let r of e.fieldPatterns)if(t.includes(r.toLowerCase()))return e.id;return null}(t.name)||"uncategorized";if("demographics"===n||"openmrs-calculated"===n)return;let l={id:`${J}.${t.name}`,name:t.name,label:t.name.toLowerCase().replace(/[_\s]+/g," ").replace(/\b\w/g,e=>e.toUpperCase()),type:function(e){if(!e)return"TEXT";let t=e.toLowerCase();return t.includes("int")||t.includes("serial")||t.includes("bigint")||t.includes("decimal")||t.includes("numeric")||t.includes("float")||t.includes("double")?"NUMBER":t.includes("date")||t.includes("time")||t.includes("timestamp")?"DATE":t.includes("bool")||t.includes("bit")?"BOOLEAN":"TEXT"}(t.type),source:(r=t.name,r.includes("age")||r.includes("bmi")?"CALCULATION":J.includes("_etl")||J.includes("_fact")||J.includes("_dim")?"ETL":"CORE"),table:J,isRepeated:(a=t.name.toLowerCase(),["appointment","visit","encounter","obs","observation","lab","test","result","program","enrollment","drug","medication","regimen"].some(e=>a.includes(e))),dataSourceUuid:j.find(e=>e.uuid===J)?.uuid||J,dataSourceName:j.find(e=>e.uuid===J)?.name||J};e[n].push(l)}),e},[V,J,D,L,j,q]);(0,a.useEffect)(()=>{m&&m(Object.values(Q).flat())},[Q,m]),(0,a.useEffect)(()=>{J&&V&&0!==V.length&&r.e("2408").then(r.bind(r,8715)).then(({detectEtlStructure:e})=>{let t=e(J,V.map(e=>e.name));w(t),u&&u(t)})},[J,V,u]);let Y=(0,a.useMemo)(()=>{let e=Q,t=new Set(p);if(!h&&t.size>0){let r={};Object.entries(Q).forEach(([e,a])=>{let n=a.filter(e=>!t.has(e.id));n.length>0&&(r[e]=n)}),e=r}else if(h){let r={};Object.entries(Q).forEach(([e,a])=>{let n=a.filter(e=>t.has(e.id));n.length>0&&(r[e]=n)}),e=r}if(b){let t=b.toLowerCase(),r={};Object.entries(e).forEach(([e,a])=>{let n=a.filter(e=>e.name.toLowerCase().includes(t)||e.label.toLowerCase().includes(t));n.length>0&&(r[e]=n)}),e=r}return e},[Q,b,h,p]),X=(0,a.useCallback)((e,t)=>{t?.stopPropagation(),T(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),Z=(0,a.useCallback)(()=>{T(new Set(Object.keys(Y)))},[Y]),ee=(0,a.useCallback)(()=>{T(new Set)},[]),et=W||$,er=K||U,ea=Object.values(Y).reduce((e,t)=>e+t.length,0);return n().createElement("div",{className:sI.catalogue},s&&i&&n().createElement("div",{className:sI.populationSourcesSection},n().createElement(sE,{populationSources:l??F,onChange:e=>{z(e),i&&i(e)},disabled:_,showAdvanced:!1})),C&&n().createElement("div",{className:sI.etlIndicator},n().createElement("div",{className:sI.etlTypeBadge},n().createElement("span",{className:sI.etlTypeIcon},"VERTICAL"===C.type?"\uD83D\uDCCA":"\uD83D\uDCCB"),n().createElement("span",{className:sI.etlTypeLabel},"VERTICAL"===C.type?"Vertical ETL":"Horizontal ETL")),n().createElement("div",{className:sI.etlDescription},"VERTICAL"===C.type?n().createElement(n().Fragment,null,"Data stored in long format. Filter by"," ",n().createElement("strong",null,C.dataIdentifierColumn||"concept")," to select specific data points."):n().createElement(n().Fragment,null,"Data stored in wide format. Columns are directly selectable data points.")),"VERTICAL"===C.type&&C.requiredFilters&&n().createElement("div",{className:sI.etlHint},n().createElement("strong",null,"Required filters:")," ",C.requiredFilters.map(e=>e.column).join(", "))),n().createElement("div",{className:sI.controls},n().createElement(o.ksK,{id:"field-search",labelText:"",placeholder:"Search fields...",size:"sm",value:b,onChange:e=>y(e.target.value),disabled:_||et}),n().createElement("div",{className:sI.actionButtons},n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:Z,disabled:_||et},"Expand All"),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:ee,disabled:_||et},"Collapse All"))),g&&n().createElement("div",{className:sI.customColumnSection},n().createElement(o.$nd,{kind:"secondary",size:"sm",onClick:()=>I(!0),disabled:_},"+ Custom SQL Column")),p.length>0&&n().createElement("div",{className:sI.toggleContainer},n().createElement(o.lMk,{id:"show-selected-toggle",labelText:"Show selected only",labelA:"All fields",labelB:"Selected only",toggled:h,onToggle:()=>v(!h),disabled:_||et}),n().createElement(o.vwO,{type:"blue"},p.length," selected")),er&&n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:er,hideCloseButton:!0}),!et&&!er&&0===ea&&n().createElement("div",{className:sI.empty},J?n().createElement("p",null,"No fields found for table: ",J):n().createElement("p",null,"Select a data source to view available fields")),et&&n().createElement("div",{className:sI.loading},"Loading fields..."),!et&&ea>0&&n().createElement("div",{className:sI.fieldGroups},n().createElement(o.nD3,{className:sI.accordion},sk.map(e=>{let t=Y[e.id]||[],r=S.has(e.id);return 0!==t.length||e.isConceptBased?n().createElement(o.AsP,{key:e.id,title:n().createElement("div",{className:sI.groupHeader},n().createElement("span",{className:sI.groupIcon},e.icon&&n().createElement(e.icon,{size:16})),n().createElement("span",{className:sI.groupName},e.name),e.isConceptBased?n().createElement(o.vwO,{size:"sm",type:"blue"},"+"):n().createElement(o.vwO,{size:"sm",type:"gray"},t.length)),open:r,onClick:t=>X(e.id,t)},e.isConceptBased?n().createElement("div",{className:sI.conceptBasedGroupContent},n().createElement("p",{className:sI.conceptBasedDescription},e.description),n().createElement("div",{className:sI.conceptBasedActions},"api-observations"===e.id&&n().createElement(o.$nd,{kind:"primary",size:"sm",onClick:()=>A(!0),disabled:_,renderIcon:null},"+ Add Observation Column"),"api-encounter-diagnoses"===e.id&&n().createElement(o.$nd,{kind:"primary",size:"sm",onClick:()=>O(!0),disabled:_,renderIcon:null},"+ Add Diagnosis Column"))):n().createElement("div",{className:sI.fieldList,onClick:e=>{e.stopPropagation()}},t.map(e=>{let t=p.includes(e.id);return n().createElement("div",{key:e.id,className:sI.fieldItem,"data-selected":t},n().createElement("div",{className:sI.fieldInfo},n().createElement("span",{className:sI.fieldName},e.label),n().createElement("div",{className:sI.fieldMeta},t&&n().createElement(o.vwO,{size:"sm",type:"green"},"Selected"),e.dataSourceName&&n().createElement(o.vwO,{size:"sm",type:"cool-gray"},e.dataSourceName),n().createElement(o.vwO,{size:"sm",type:"blue"},e.type),n().createElement(o.vwO,{size:"sm",type:"gray"},e.source),e.isRepeated&&n().createElement(o.vwO,{size:"sm",type:"purple"},"Repeated")),n().createElement("div",{className:sI.fieldName},e.name)),n().createElement("div",{className:sI.fieldActions},n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:t=>{t.stopPropagation(),d(e)},disabled:_},"+ Column"),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:t=>{t.stopPropagation(),c(e)},disabled:_},"+ Filter")))}))):null}),Y.uncategorized&&Y.uncategorized.length>0&&n().createElement(o.AsP,{key:"uncategorized",title:n().createElement("div",{className:sI.groupHeader},n().createElement("span",{className:sI.groupIcon},"\uD83D\uDCC1"),n().createElement("span",{className:sI.groupName},"Other Fields"),n().createElement(o.vwO,{size:"sm",type:"gray"},Y.uncategorized.length)),open:S.has("uncategorized"),onClick:()=>X("uncategorized")},n().createElement("div",{className:sI.fieldList},Y.uncategorized?.map(e=>{let t=p.includes(e.id);return n().createElement("div",{key:e.id,className:sI.fieldItem,"data-selected":t},n().createElement("div",{className:sI.fieldInfo},n().createElement("span",{className:sI.fieldName},e.label),n().createElement("div",{className:sI.fieldMeta},t&&n().createElement(o.vwO,{size:"sm",type:"green"},"Selected"),e.dataSourceName&&n().createElement(o.vwO,{size:"sm",type:"cool-gray"},e.dataSourceName),n().createElement(o.vwO,{size:"sm",type:"blue"},e.type),n().createElement(o.vwO,{size:"sm",type:"gray"},e.source),e.isRepeated&&n().createElement(o.vwO,{size:"sm",type:"purple"},"Repeated")),n().createElement("div",{className:sI.fieldName},e.name)),n().createElement("div",{className:sI.fieldActions},n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>d(e),disabled:_},"+ Column"),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>c(e),disabled:_},"+ Filter")))}))))),!et&&ea>0&&n().createElement("div",{className:sI.summary},ea," field",1!==ea?"s":""," available"),g&&n().createElement(su,{open:N,onClose:()=>I(!1),onSave:g,existingColumnNames:[],idColumnAlias:f,primaryDatasourceName:G}),n().createElement(sT,{open:k,onClose:()=>A(!1),onAddColumn:E||(()=>{}),existingColumns:[]}),n().createElement(sN,{open:R,onClose:()=>O(!1),onAddColumn:E||(()=>{}),existingColumns:[]}))};function sD(e,t){let r={...e};if(r.dataSetDefinitions&&r.dataSetDefinitions[0]){let e=r.dataSetDefinitions[0],a=e.columns.map((e,r)=>{let a=t.columns.find(t=>t.name===e.name);return{...e,_metadata:{id:a?.id||`col-${r}`,position:a?.sortOrder??r}}});r.dataSetDefinitions[0]={...e,columns:a}}return r.dataSources&&(r.dataSources=r.dataSources.map(e=>{if(e.columns){let r={};return Object.entries(e.columns).forEach(([e,a])=>{let n=t.columns.find(t=>t.name===e);r[e]={...a,_metadata:{id:n?.id,position:n?.sortOrder}}}),{...e,columns:r}}return e})),r}function sx({draft:e,className:t,indicators:r=[]}){let l,i=(0,a.useMemo)(()=>{let e=new Map;for(let t of r)e.set(t.uuid,{sqlTemplate:t.sqlTemplate,configJson:t.configJson});return e},[r]),s=(0,a.useCallback)(()=>{let t=sD(so(e,i),e);navigator.clipboard.writeText(JSON.stringify(t,null,2))},[e,i]),d=sD(so(e,i),e);return n().createElement("div",{className:`-esm-report-builder__json-preview__preview___vJZ1j ${t||""}`},n().createElement("div",{className:"-esm-report-builder__json-preview__header___bFwek"},n().createElement("div",{className:"-esm-report-builder__json-preview__headerLeft___Ui32b"},n().createElement(c.Cy,{size:16,className:"-esm-report-builder__json-preview__icon___WJbCU"}),n().createElement("span",{className:"-esm-report-builder__json-preview__title___iMvKE"},"Report Configuration JSON")),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:s},"Copy JSON")),n().createElement(o.z7k,{type:"multi",feedback:"Copied!",className:"-esm-report-builder__json-preview__code___1hGdq"},JSON.stringify(d,null,2)),n().createElement("div",{className:"-esm-report-builder__json-preview__validation___UBIL0"},(l=[],0===e.columns.length?l.push(n().createElement(o.vwO,{key:"no-columns",size:"sm",type:"red"},"Missing columns")):l.push(n().createElement(o.vwO,{key:"columns",size:"sm",type:"green"},e.columns.length," columns")),e.dataSourceUuid||l.push(n().createElement(o.vwO,{key:"no-source",size:"sm",type:"red"},"No data source")),"INDICATOR"!==e.populationMode||e.indicatorRules&&0!==e.indicatorRules.length||l.push(n().createElement(o.vwO,{key:"no-indicators",size:"sm",type:"red"},"No indicators selected")),e.unsavedChanges&&l.push(n().createElement(o.vwO,{key:"unsaved",size:"sm",type:"blue"},"Unsaved changes")),l)))}let sL={container:"-esm-report-builder__column-category-selector__container___I1ArE",quickPresets:"-esm-report-builder__column-category-selector__quickPresets___NfkzC",sectionTitle:"-esm-report-builder__column-category-selector__sectionTitle___Wvv-w",presetButtons:"-esm-report-builder__column-category-selector__presetButtons___tjtD0",error:"-esm-report-builder__column-category-selector__error___wVk-E",summary:"-esm-report-builder__column-category-selector__summary___mpOac",summaryText:"-esm-report-builder__column-category-selector__summaryText___9rq3L",categoryHeader:"-esm-report-builder__column-category-selector__categoryHeader___zjlCe",categoryIcon:"-esm-report-builder__column-category-selector__categoryIcon___jTVMG",categoryName:"-esm-report-builder__column-category-selector__categoryName___0FpJF",categoryContent:"-esm-report-builder__column-category-selector__categoryContent___yGlC0",categoryDescription:"-esm-report-builder__column-category-selector__categoryDescription___HsWYd",fieldRow:"-esm-report-builder__column-category-selector__fieldRow___Z+2Zc",fieldDescription:"-esm-report-builder__column-category-selector__fieldDescription___sP2cC",categoryActions:"-esm-report-builder__column-category-selector__categoryActions___yCKdm",columnList:"-esm-report-builder__column-category-selector__columnList___NjSdW",columnItem:"-esm-report-builder__column-category-selector__columnItem___qf2zp",columnPosition:"-esm-report-builder__column-category-selector__columnPosition___AJ9gW",positionNumber:"-esm-report-builder__column-category-selector__positionNumber___MU9Lx",columnInfo:"-esm-report-builder__column-category-selector__columnInfo___v2+a8",columnName:"-esm-report-builder__column-category-selector__columnName___ETZ2b",columnIdTag:"-esm-report-builder__column-category-selector__columnIdTag___xLJE5",columnOrder:"-esm-report-builder__column-category-selector__columnOrder___92IOh",columnActions:"-esm-report-builder__column-category-selector__columnActions___LMHD9",selectedTable:"-esm-report-builder__column-category-selector__selectedTable___hrjf7",emptyState:"-esm-report-builder__column-category-selector__emptyState___+7U0l",loadingText:"-esm-report-builder__column-category-selector__loadingText___5fmqK",emptyText:"-esm-report-builder__column-category-selector__emptyText___qpbzo"},sM=`
|
|
355
|
+
INNER JOIN (${t}) indicators ON indicators.patient_id = base.patient_id`;return t||e.population.sqlTemplate||""}default:return e.population.sqlTemplate||""}})(),n=e.columns.sort((e,t)=>e.sortOrder-t.sortOrder).map((e,t)=>{let r={name:e.name,dataDefinition:function(e,t){switch(e){case"IDENTIFIER":return{type:"IDENTIFIER",config:t};case"PERSON_NAME":return{type:"PERSON_NAME",config:t};case"PERSON_ATTRIBUTE":return{type:"PERSON_ATTRIBUTE",config:t};case"CALCULATION":return{type:"CALCULATION",config:t};case"SQL":return{type:"SQL",config:t};case"PERSON_ADDRESS":return{type:"PERSON_ADDRESS",config:t};case"CONVERTER":return{type:"CONVERTER",config:t};case"OBSERVATION":return{type:"OBSERVATION",config:t};case"ENCOUNTER_DIAGNOSIS":return{type:"ENCOUNTER_DIAGNOSIS",config:t};default:return{type:"SQL",config:{sql:t.sql||""}}}}(e.dataDefinitionType,e.dataDefinitionConfig)};if(r._metadata={id:e.id,position:e.sortOrder??t},e.repeatResolution)r.repeatResolution=e.repeatResolution;else{let t=e.dataDefinitionConfig.sql||"",a=/^(?:SELECT\s+(?:DISTINCT\s+)?(?:COUNT|MAX|MIN|SUM|AVG|GROUP_CONCAT|ARRAY_AGG|STRING_AGG|JSON_AGG)\s*\()/i.test(t)||/GROUP\s+BY\s+/i.test(t),n=/\bLIMIT\s+1\b/i.test(t);if("SQL"===e.dataDefinitionType&&/appointment|observation|encounter|program_enrollment|visit/i.test(t)&&!a&&!n){let e=t.match(/ORDER BY\s+([a-z_][a-z0-9_]*)/i);r.repeatResolution={strategy:"LATEST",orderBy:e?e[1]:"encounter_date",restrictToPeriod:!1,ignoreVoided:!0}}}return r}),l=(e.parameters||[]).sort((e,t)=>e.displayOrder-t.displayOrder).map(e=>({name:e.name,label:e.label,type:e.type,required:e.required,...e.config&&{config:e.config}})),i=l.length>0?l:[{name:"startDate",label:"Start Date",type:"DATE",required:!0},{name:"endDate",label:"End Date",type:"DATE",required:!0}],o={version:3,type:"LINE_LIST",categoryUuid:e.categoryUuid,dataSourceUuid:e.dataSources.find(e=>"PRIMARY"===e.role)?.uuid,dataSources:(()=>{let t=new Map,r=e.dataSources.find(e=>"PRIMARY"===e.role)?.uuid||"",a=!!r,n=e.columns.some(e=>"PERSON_ATTRIBUTE"===e.dataDefinitionType),l=e.columns.some(e=>"IDENTIFIER"===e.dataDefinitionType);n&&t.set("person_attributes",{uuid:"person_attributes",name:"Person Attributes",type:"CORE",role:"REFERENCE"}),l&&t.set("patient_identifiers",{uuid:"patient_identifiers",name:"Patient Identifiers",type:"CORE",role:"REFERENCE"});let i=null;if(e.columns.forEach(e=>{let n;if("PERSON_ATTRIBUTE"===e.dataDefinitionType||"IDENTIFIER"===e.dataDefinitionType)return;let l=n="CALCULATION"===e.dataDefinitionType?"calculated":"OBSERVATION"===e.dataDefinitionType?"observations":"ENCOUNTER_DIAGNOSIS"===e.dataDefinitionType?"encounter_diagnoses":"PERSON_ADDRESS"===e.dataDefinitionType?"person_address":"PERSON_NAME"===e.dataDefinitionType?"person_name":(e=>{if(!e)return"unknown";let t=e.trim();if(/^SELECT\s/i.test(t)||/:(patientId|patient_id)\b/i.test(t))return"custom_sql";let r=t.match(/`?(\w+)`?\.\s*`?\w+`?/);return r?r[1]:"unknown"})(e.dataDefinitionConfig?.sql),o=l===r,s="custom_sql"===l||"calculated"===l?"SQL":l.startsWith("mamba_")?"ETL":"SQL";!t.has(l)&&(t.set(l,{uuid:l,name:{observations:"Observations",encounter_diagnoses:"Encounter Diagnoses",person_address:"Person Address",person_name:"Person Names",calculated:"Calculated Fields",custom_sql:"Custom SQL"}[l]||l,type:s,role:o?"PRIMARY":"SECONDARY",columns:{}}),a||i||(i=l));let d=t.get(l);d&&d.columns&&(d.columns[e.name]={name:e.name,type:e.source?.fieldType||"UNKNOWN",sourceTable:n})}),!a&&i){let e=t.get(i);e&&(e.role="PRIMARY",a=!0)}return Array.from(t.values())})(),rowGrain:e.rowGrain,templateId:e.templateId,parameters:i,indicatorRules:e.population.indicatorRules||e.indicatorRules,buildMethod:(e.population.indicatorRules||e.indicatorRules||[]).length>0?"INDICATOR_BASED":e.population.buildMethod||"SQL_BUILDER",baseCohortDefinition:{type:"SQL",name:"INDICATOR_BASED"===e.population.buildMethod?"Indicator-based Patient Cohort":"Patient Cohort",config:{sql:a,...e.population.filterMap&&{filterMap:e.population.filterMap}}},dataSetDefinitions:[{name:e.dataSetName||"PATIENT_LIST",type:"PATIENT_DATA_SET",rowFilter:{type:"SQL",name:"Row Filter",config:{sql:a,...e.population.filterMap&&{filterMap:e.population.filterMap}}},columns:n}]};if(e.sortConfig&&e.sortConfig.length>0){let t=e.sortConfig[0];o.orderBy=t.columnId,o.orderDirection=t.direction,e.sortConfig.length>1&&console.warn("Multiple sort rules defined, but only the first will be used until backend supports multi-column sorting")}return e.limit&&(o.limit=e.limit),o}function sd(){let e=new Date().toISOString();return{version:3,name:"",description:"",code:"",currentPanel:"basics",categoryUuid:"",rowGrain:"PATIENT",templateId:"",populationSources:[],dataSources:[],population:{baseDataSourceUuid:"",buildMethod:"SQL_BUILDER",sqlTemplate:"",parameterReferences:[],visualFilter:{rootGroup:{id:"root",logicalOperator:"AND",conditions:[],nestedGroups:[]},useVisualBuilder:!1},buildHistory:[],filterMap:void 0},columns:[],parameters:[{id:"param-startDate",name:"startDate",label:"Start Date",type:"DATE",required:!0,defaultValue:"",displayOrder:0},{id:"param-endDate",name:"endDate",label:"End Date",type:"DATE",required:!0,defaultValue:"",displayOrder:1}],sortConfig:[],limit:1e3,displaySettings:{defaultPageSize:25,freezeFirstColumn:!0,freezeHeader:!0,dateDisplayFormat:"dd MMM yyyy",nullDisplayValue:"—",maxInteractiveRows:500,maxExportRows:1e5,allowedExports:["CSV","XLSX","PDF"],includeParametersInExportHeader:!0,includeGeneratedTimestamp:!0},validation:{errors:{},warnings:{},lastValidated:e},metadata:{createdAt:e,lastModified:e,buildMethod:"NEW",version:2,status:"DRAFT"}}}async function sc(){try{let e,t,r,a,n,l=await (0,W.wO)("/systemsetting?q=layout.address.format&v=full"),i=l?.results?.[0]?.value;if(!i)return console.warn("No address template found in system settings"),sm();return e=new DOMParser().parseFromString(i,"text/xml"),t=[],e.querySelectorAll("nameMappings entry").forEach(e=>{let r=e.querySelector("string");if(!r)return;let a=r.textContent?.trim(),n=e.querySelectorAll("string")[1],l=n?.textContent?.trim();if(a&&l){let e=l.split("."),r=e[e.length-1]||a;t.push({field:a,label:l,display:r.charAt(0).toUpperCase()+r.slice(1)})}}),r={},e.querySelectorAll("sizeMappings entry").forEach(e=>{let t=e.querySelector("string"),a=e.querySelectorAll("string")[1],n=t?.textContent?.trim(),l=a?.textContent?.trim();n&&l&&(r[n]=parseInt(l,10))}),a={},e.querySelectorAll("elementDefaults entry").forEach(e=>{let t=e.querySelector("string"),r=e.querySelectorAll("string")[1],n=t?.textContent?.trim(),l=r?.textContent?.trim();n&&l&&(a[n]=l)}),n=[],e.querySelectorAll("lineByLineFormat string").forEach(e=>{let t=e.textContent?.trim();t&&n.push(t)}),{nameMappings:t,sizeMappings:r,elementDefaults:a,lineByLineFormat:n}}catch(e){return console.error("Failed to fetch address template:",e),sm()}}function sm(){return{nameMappings:[{field:"address1",label:"Address Line 1",display:"Address 1"},{field:"address2",label:"Address Line 2",display:"Address 2"},{field:"address3",label:"Address 3",display:"Address 3"},{field:"address4",label:"Address 4",display:"Address 4"},{field:"address5",label:"Address 5",display:"Address 5"},{field:"cityVillage",label:"City/Village",display:"City/Village"},{field:"stateProvince",label:"State/Province",display:"State"},{field:"countyDistrict",label:"County/District",display:"District"},{field:"country",label:"Country",display:"Country"},{field:"postalCode",label:"Postal Code",display:"Postal Code"},{field:"latitude",label:"Latitude",display:"Latitude"},{field:"longitude",label:"Longitude",display:"Longitude"}],sizeMappings:{},elementDefaults:{},lineByLineFormat:[]}}let su=[{label:"Last visit date",sql:"SELECT MAX(encounter_datetime) FROM encounter WHERE patient_id = :patient_id"},{label:"Latest CD4 count",sql:"SELECT value_numeric FROM obs WHERE patient_id = :patient_id AND concept_id = 5497 ORDER BY obs_datetime DESC LIMIT 1"},{label:"Current ART regimen",sql:"SELECT value_text FROM obs WHERE patient_id = :patient_id AND concept_id = 1085 ORDER BY obs_datetime DESC LIMIT 1"}],sp=({open:e,onClose:t,onSave:r,existingColumnNames:l=[],idColumnAlias:i="patient_id",primaryDatasourceName:s=""})=>{let[d,c]=(0,a.useState)(""),[m,u]=(0,a.useState)(""),[p,_]=(0,a.useState)(""),[g,E]=(0,a.useState)(!1),[f,b]=(0,a.useState)(null);return(0,a.useEffect)(()=>{e&&(c(""),u(""),_(""),E(!1),b(null))},[e]),n().createElement(o.aFV,{open:e,onRequestClose:t,onRequestSubmit:()=>{d.trim()?l.some(e=>e.toLowerCase()===d.trim().toLowerCase())?b("A column with this name already exists"):p.trim()?/:(patient_id|patient_id|clientId|patientId)\b/i.test(p)?(r({name:d.trim(),description:m.trim()||void 0,sql:p.trim(),repeatResolution:g}),t()):b(`SQL should reference :${i} to return a value per patient. Add it to your WHERE clause.`):b("SQL expression is required"):b("Column name is required")},modalHeading:"Add Custom SQL Column",modalLabel:"Custom Column",primaryButtonText:"Add Column",secondaryButtonText:"Cancel",size:"lg",preventCloseOnClickOutside:!0},n().createElement(o.BJc,{gap:5},n().createElement("p",null,"Write a SQL expression that returns a single value for each patient. Use"," ",n().createElement("code",null,":",i)," as a bind parameter — it will be replaced with the patient/client ID for each row in the report."),s&&n().createElement(o.jeF,{kind:"info",title:"About Data Sources",subtitle:`This column will be associated with your primary datasource: "${s}". To use a different datasource, go to the Data Sources panel and set it as primary first.`,lowContrast:!0}),!s&&n().createElement(o.jeF,{kind:"warning",title:"No Primary Data Source",subtitle:"Custom SQL columns need a primary datasource. Please select a datasource in the Data Sources panel before adding custom columns.",lowContrast:!0}),f&&n().createElement(o.jeF,{kind:"error",title:"Validation Error",subtitle:f,hideCloseButton:!0}),n().createElement(o.ksK,{id:"custom-column-name",labelText:"Column Name *",placeholder:"e.g., Last Visit Date",value:d,onChange:e=>{c(e.target.value),b(null)}}),n().createElement(o.ksK,{id:"custom-column-description",labelText:"Description (optional)",placeholder:"What this column represents",value:m,onChange:e=>u(e.target.value)}),n().createElement(o.fs1,{id:"custom-column-sql",labelText:"SQL Expression *",placeholder:`SELECT ... FROM ... WHERE patient_id = :${i}`,value:p,onChange:e=>{_(e.target.value),b(null)},rows:6,helperText:`The :${i} parameter is replaced with each patient's ID. The query must return a single value.`}),n().createElement(o.lMk,{id:"custom-column-repeat",labelText:"May return multiple values (configure repeat resolution)",labelA:"No",labelB:"Yes",toggled:g,onToggle:E}),g&&n().createElement(o.jeF,{kind:"info",title:"Repeat Resolution",subtitle:"The most recent value (LATEST strategy) will be used by default. You can adjust this later in the column settings.",hideCloseButton:!0,lowContrast:!0}),n().createElement("div",null,n().createElement("p",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Examples (click to use):"),n().createElement(o.BJc,{gap:2},su.map(e=>n().createElement(o.$nd,{key:e.label,kind:"ghost",size:"sm",onClick:()=>{_(e.sql),d||c(e.label),b(null)},style:{justifyContent:"flex-start",textAlign:"left"}},e.label)))),p&&n().createElement("div",null,n().createElement("p",{style:{fontWeight:600,marginBottom:"0.25rem"}},"Your SQL:"),n().createElement(o.z7k,{type:"multi"},p))))},s_="-esm-report-builder__population-source-selector__optionRow___57yaq",sg=[{uuid:"person_attributes",name:"Person Attributes",type:"CORE",joinType:"JOIN"}],sE=[{value:"JOIN",label:"JOIN",description:"Combine sources with matching patient_ids (INNER JOIN)"},{value:"LEFT_JOIN",label:"LEFT JOIN",description:"All patients from first source, match from second"},{value:"INTERSECT",label:"INTERSECT",description:"Patients present in ALL sources (AND logic)"},{value:"UNION",label:"UNION",description:"Patients from ANY source (OR logic)"},{value:"EXCEPT",label:"EXCEPT",description:"Patients in first source but NOT in second"}],sf=({populationSources:e,onChange:t,disabled:r=!1,showAdvanced:l=!1})=>{let[i,s]=(0,a.useState)(null),{tables:d,loading:c,error:m}=id(!0),u=(0,a.useMemo)(()=>0===e.length?0:Math.max(...e.map(e=>e.order))+1,[e]),p=(0,a.useMemo)(()=>[...(d||[]).map(e=>({id:e,label:e,type:"ETL"})),...sg.map(e=>({id:e.uuid,label:e.name,type:"CORE"}))],[d]),_=(0,a.useMemo)(()=>e.map(e=>({id:e.uuid,label:e.name})),[e]),g=(r,a)=>{t(e.map(e=>e.uuid===r?{...e,...a}:e))},E=e.filter(e=>e.enabled).length;return n().createElement("div",{className:"-esm-report-builder__population-source-selector__container___LrQoh"},n().createElement(o.BJc,{gap:4},n().createElement("div",{className:"-esm-report-builder__population-source-selector__header___Cck9x"},n().createElement("div",{className:"-esm-report-builder__population-source-selector__headerTitle___hw3UR"},n().createElement(tN.$$,{size:16}),n().createElement("h4",null,"Population Sources")),n().createElement("p",{className:"-esm-report-builder__population-source-selector__headerDescription___dVbnP"},"Select multiple datasources to define the patient population. Each source can have a different join type.")),n().createElement("div",{className:"-esm-report-builder__population-source-selector__addSection___iEpr6"},n().createElement(o.KFt,{id:"population-sources-multiselect",titleText:"Add Population Sources",label:"Search and select datasources...",placeholder:"Type to search datasources...",items:p,selectedItems:_,itemToString:e=>e?.label||"",onChange:({selectedItems:r})=>{let a=new Set(e.map(e=>e.uuid)),n=r.filter(e=>!a.has(e.id)),l=e.map(e=>e.uuid).filter(e=>!r.some(t=>t.id===e)),i=n.map(e=>({...sg.find(t=>t.uuid===e.id)||{uuid:e.id,name:e.id,type:e.id.startsWith("mamba_")?"ETL":"SQL",joinType:"JOIN"},enabled:!0,order:u+n.findIndex(t=>t.id===e.id)}));t([...e.filter(e=>!l.includes(e.uuid)),...i])},disabled:r||c,size:"sm",selectionFeedback:"fixed"}),m&&n().createElement("div",{className:"-esm-report-builder__population-source-selector__error___bQ4dv"},"Failed to load tables: ",m)),e.length>0&&n().createElement("div",{className:"-esm-report-builder__population-source-selector__listSection___LEh3Z"},n().createElement("div",{className:"-esm-report-builder__population-source-selector__listHeader___DrC+F"},n().createElement("h5",{className:"-esm-report-builder__population-source-selector__listTitle___cBpkm"},"Selected Sources (",E," enabled)"),E<e.length&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>t(e.map(e=>({...e,enabled:!0}))),disabled:r},"Enable All")),n().createElement(o.BJc,{gap:2},e.sort((e,t)=>e.order-t.order).map((a,d)=>n().createElement("div",{key:a.uuid,className:`-esm-report-builder__population-source-selector__sourceCard___lhHkf ${!a.enabled?"-esm-report-builder__population-source-selector__sourceCardDisabled___05itb":""}`,"data-join-type":a.joinType},n().createElement("div",{className:"-esm-report-builder__population-source-selector__cardHeader___hJig+"},n().createElement("div",{className:"-esm-report-builder__population-source-selector__cardInfo___Plc8O"},n().createElement(o.vwO,{type:a.enabled?(e=>{switch(e){case"JOIN":case"LEFT_JOIN":return"blue";case"INTERSECT":return"green";case"UNION":return"purple";case"EXCEPT":return"red";default:return"gray"}})(a.joinType):"gray",size:"sm"},a.joinType),n().createElement("span",{className:"-esm-report-builder__population-source-selector__dsName___veHbk"},a.name),n().createElement(o.vwO,{type:"cool-gray",size:"sm"},a.type)),n().createElement("div",{className:"-esm-report-builder__population-source-selector__cardActions___a3fnQ"},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.rX,iconDescription:"Move up",onClick:()=>{var r;let n,l;return r=a.uuid,void((l=(n=[...e]).findIndex(e=>e.uuid===r))>0&&([n[l-1],n[l]]=[n[l],n[l-1]],n.forEach((e,t)=>e.order=t),t(n)))},disabled:r||0===d}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.yQ,iconDescription:"Move down",onClick:()=>{var r;let n,l;return r=a.uuid,void((l=(n=[...e]).findIndex(e=>e.uuid===r))<n.length-1&&([n[l],n[l+1]]=[n[l+1],n[l]],n.forEach((e,t)=>e.order=t),t(n)))},disabled:r||d===e.length-1}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.bm,iconDescription:"Remove",onClick:()=>{var r;return r=a.uuid,void(t(e.filter(e=>e.uuid!==r)),i===r&&s(null))},disabled:r}))),n().createElement("div",{className:"-esm-report-builder__population-source-selector__cardControls___mhn2x"},n().createElement("div",{className:"-esm-report-builder__population-source-selector__controlRow___dvItb"},n().createElement(o.lMk,{id:`enable-${a.uuid}`,labelText:"Enabled",toggled:a.enabled,onToggle:e=>g(a.uuid,{enabled:e}),disabled:r,size:"sm"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>{var e;s(i===(e=a.uuid)?null:e)},disabled:r},i===a.uuid?"Hide Options":"Show Options")),i===a.uuid&&n().createElement("div",{className:"-esm-report-builder__population-source-selector__expandedOptions___h6VNd"},n().createElement("div",{className:s_},n().createElement(o.l6P,{id:`join-type-${a.uuid}`,labelText:"Join Type",value:a.joinType,onChange:e=>g(a.uuid,{joinType:e.target.value}),disabled:r||!a.enabled,size:"sm"},sE.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label,title:e.description})))),("JOIN"===a.joinType||"LEFT_JOIN"===a.joinType)&&l&&n().createElement("div",{className:s_},n().createElement(o.ksK,{id:`join-condition-${a.uuid}`,labelText:"Custom Join Condition",placeholder:"e.g., a.patient_id = b.patient_id",value:a.joinCondition||"",onChange:e=>g(a.uuid,{joinCondition:e.target.value}),disabled:r||!a.enabled,size:"sm"})),n().createElement("div",{className:"-esm-report-builder__population-source-selector__optionDescription___nFA9m"},sE.find(e=>e.value===a.joinType)?.description))))))),0===e.length&&n().createElement("div",{className:"-esm-report-builder__population-source-selector__emptyState___doc1n"},n().createElement("p",null,"No population sources selected. Add datasources above to define the patient cohort.")),e.length>0&&n().createElement("div",{className:"-esm-report-builder__population-source-selector__summary___EZxeZ"},n().createElement("span",null,e.length," source",1!==e.length?"s":""," selected"),n().createElement("span",null,E," enabled"),E>1&&n().createElement("span",null,"Order matters for INTERSECT/EXCEPT operations"))))},sb="-esm-report-builder__concept-selector__detailRow___cSddw",sy="-esm-report-builder__concept-selector__detailLabel___f0XAS",sh="-esm-report-builder__concept-selector__detailValue___ozuUf",sv=({selectedConcept:e,onSelect:t,onClear:r,disabled:l=!1,placeholder:i="Type to search concepts...",label:s="Search concepts",showAdvanced:d=!1,openKey:c=0})=>{let[m,u]=(0,a.useState)(""),[p,_]=(0,a.useState)(0);(0,a.useEffect)(()=>{u(""),_(e=>e+1)},[c]);let{loading:g,results:E,error:f}=tV(m),b=n().useMemo(()=>{let t=[...E];return e&&(E.some(t=>t.uuid===e.uuid)||t.unshift(e)),t},[E,e]),y=(0,a.useCallback)(e=>{u(e.target.value)},[]),h=(0,a.useCallback)(e=>{e.length>0&&t(e[0])},[t]),v=(0,a.useCallback)(()=>{r?.(),u("")},[r]),S=(0,a.useCallback)(e=>{if(!e)return"";let t=e.conceptClass?.name||"";return t?`${e.display} (${t})`:e.display},[]);return n().createElement("div",{className:"-esm-report-builder__concept-selector__container___DvAQ9"},n().createElement(o.BJc,{gap:4},d&&n().createElement("div",{className:"-esm-report-builder__concept-selector__header___Dj1OB"},n().createElement("div",{className:"-esm-report-builder__concept-selector__headerTitle___QWz48"},n().createElement(tN.$$,{size:16}),n().createElement("h4",null,"Select Concept")),n().createElement("p",{className:"-esm-report-builder__concept-selector__headerDescription___IqW9S"},"Search for an OpenMRS concept to use for this column. Concepts define what data to observe or diagnose.")),e&&n().createElement("div",{className:"-esm-report-builder__concept-selector__selectedDisplay___vQBv8"},n().createElement("div",{className:"-esm-report-builder__concept-selector__selectedInfo___ciora"},n().createElement("span",{className:"-esm-report-builder__concept-selector__selectedLabel___jp3V3"},"Selected:"),n().createElement(o.vwO,{type:"blue",size:"sm"},e.display),n().createElement("span",{className:"-esm-report-builder__concept-selector__selectedMeta___8hqVk"},e.conceptClass?.name)),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.bm,iconDescription:"Clear selection",onClick:v,disabled:l})),n().createElement("div",{className:"-esm-report-builder__concept-selector__searchSection___woEy-"},n().createElement(o.vji,{id:"concept-search",labelText:s,placeholder:i,value:m,onChange:y,size:"lg",disabled:l}),g?n().createElement(o.OuH,{description:"Searching…"}):null,f?n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:f,lowContrast:!0,hideCloseButton:!0}):null,n().createElement(o.Qp5,{key:p,id:"concept-select",titleText:"Select concept",items:b,itemToString:S,placeholder:b.length?"Select a concept…":"No results",helperText:e?"Click to change selection":"Type at least 2 characters to search",onChange:e=>h(e.selectedItems??[]),disabled:l,selectionFeedback:"top",initialSelectedItems:e?[e]:[]}),!e&&!g&&!f&&n().createElement("div",{className:"-esm-report-builder__concept-selector__helperText___muq5h"},n().createElement("p",null,"Type at least 2 characters to search for concepts. You can search by concept name or UUID."),n().createElement("p",{className:"-esm-report-builder__concept-selector__hint___RMczP"},n().createElement("strong",null,"Tip:"),' Use specific terms like "Weight", "HIV Status", or "Diagnosis" for better results.'))),d&&e&&n().createElement("div",{className:"-esm-report-builder__concept-selector__advancedOptions___0NapC"},n().createElement("h5",{className:"-esm-report-builder__concept-selector__advancedTitle___FdaYm"},"Concept Details"),n().createElement(o.BJc,{gap:2},n().createElement("div",{className:sb},n().createElement("span",{className:sy},"UUID:"),n().createElement("span",{className:sh},e.uuid)),n().createElement("div",{className:sb},n().createElement("span",{className:sy},"Data Type:"),n().createElement("span",{className:sh},e.datatype?.name)),n().createElement("div",{className:sb},n().createElement("span",{className:sy},"Class:"),n().createElement("span",{className:sh},e.conceptClass?.name)),e.answers&&e.answers.length>0&&n().createElement("div",{className:sb},n().createElement("span",{className:sy},"Answers:"),n().createElement("div",{className:sh},e.answers.map(e=>n().createElement(o.vwO,{key:e.uuid,type:"gray",size:"sm"},e.display))))))))},sS=[{value:"ANY",label:"Any",description:"Return all observation values"},{value:"FIRST",label:"First",description:"Earliest observation by date"},{value:"MOST_RECENT",label:"Most Recent",description:"Most recent observation by date"},{value:"FIRST_N",label:"First #",description:"First N observations by date"},{value:"MOST_RECENT_N",label:"Most Recent #",description:"Most recent N observations"}],sT=[{value:"obsDatetime",label:"Obs Datetime",description:"Include observation date/time"},{value:"location",label:"Location",description:"Include observation location"},{value:"comment",label:"Comment",description:"Include observation comment"},{value:"encounterType",label:"Encounter Type",description:"Include encounter type"},{value:"provider",label:"Provider",description:"Include provider who made the observation"}],sC=({open:e,onClose:t,onAddColumn:r,existingColumns:l=[],editingColumn:i=null})=>{let[s,d]=(0,a.useState)(0),[c,m]=(0,a.useState)(),[u,p]=(0,a.useState)(""),[_,g]=(0,a.useState)(""),[E,f]=(0,a.useState)("MOST_RECENT"),[b,y]=(0,a.useState)(1),[h,v]=(0,a.useState)(!0),[S,T]=(0,a.useState)([]),[C,w]=(0,a.useState)(),N=(0,a.useCallback)(()=>{m(void 0),p(""),g(""),f("MOST_RECENT"),y(1),v(!0),T([]),w(void 0)},[]);(0,a.useEffect)(()=>{if(e)if(d(e=>e+1),i){let e=i.dataDefinitionConfig||{};e.conceptUuid||console.warn("⚠️ Missing conceptUuid in dataDefinitionConfig"),e.conceptName||i.name||console.warn("⚠️ Missing conceptName and column name"),e.strategy||console.warn("⚠️ Missing strategy in dataDefinitionConfig");let t="MOST_RECENT",r=e.strategy;"ALL_VALUES"===r?t="ANY":"EARLIEST"===r?t="FIRST":"LATEST"===r?t="MOST_RECENT":"string"==typeof r&&r.startsWith("FIRST_")?t="FIRST_N":"string"==typeof r&&r.startsWith("LAST_")&&(t="MOST_RECENT_N");let a=1;if("string"==typeof r&&r.startsWith("FIRST_")){let e=r.match(/^FIRST_(\d+)$/);e&&(a=parseInt(e[1])||1)}else if("string"==typeof r&&r.startsWith("LAST_")){let e=r.match(/^LAST_(\d+)$/);e&&(a=parseInt(e[1])||1)}m(i.source?.conceptUuid?{uuid:i.source.conceptUuid,display:e.conceptName||i.name,datatype:{name:i.source?.fieldType||"TEXT"},conceptClass:void 0}:void 0),p(i.name||""),g(i.description||""),f(e.columnModifier||t),y(e.modifierCount||a),v(!1!==e.returnDisplay),T(e.extraValues||[]),w(e.answerConceptUuid?{uuid:e.answerConceptUuid,display:e.answerConceptName||""}:void 0)}else N()},[e,i,N]);let I=(0,a.useCallback)(()=>{N(),t()},[N,t]),k=(0,a.useCallback)(e=>{m(e),u||p(e.display),_||g(e.display)},[u,_]),A=(0,a.useCallback)((e,t)=>{let r=t.target.checked;T(t=>r?[...t,e]:t.filter(t=>t!==e))},[]),R=(0,a.useCallback)(()=>{let e;if(!c||!u?.trim()||l.some(e=>e.id!==i?.id&&e.name.toLowerCase()===u.toLowerCase()))return;let t=new Date().toISOString(),a="LATEST";switch(E){case"ANY":e="ALL_VALUES",a="NONE";break;case"FIRST":e="EARLIEST",a="EARLIEST";break;case"MOST_RECENT":default:e="LATEST",a="LATEST";break;case"FIRST_N":e=`FIRST_${b}`,a="EARLIEST";break;case"MOST_RECENT_N":e=`LAST_${b}`,a="LATEST"}let n={id:i?.id||`col-${t}-${c.uuid}`,name:u.trim(),description:_.trim()||c.display,source:{dataSourceUuid:"observations",dataSourceName:"Observations",table:"observations",field:c.uuid,fieldType:c.datatype?.name||"TEXT",conceptUuid:c.uuid},dataDefinitionType:"OBSERVATION",dataDefinitionConfig:{conceptUuid:c.uuid,conceptName:c.display,strategy:e,columnModifier:E,modifierCount:"FIRST_N"===E||"MOST_RECENT_N"===E?b:void 0,returnDisplay:h,extraValues:S,...C&&{answerConceptUuid:C.uuid}},additionInfo:{addedVia:i?.additionInfo?.addedVia||"VISUAL_SELECTOR",addedAt:i?.additionInfo?.addedAt||t,orderAdded:i?.additionInfo?.orderAdded||l.length},display:i?.display||{width:150,align:"left",sortable:!0,filterable:!0,format:"coded"},sortOrder:i?.sortOrder??l.length,repeatResolution:"ANY"===E?void 0:{strategy:a,orderBy:"obs_datetime",restrictToPeriod:!0,ignoreVoided:!0}};r(n),I()},[c,u,_,E,b,h,S,C,l,r,I,i]),O=c&&u?.trim();return n().createElement(o.aFV,{open:e,onRequestClose:I,modalHeading:i?"Edit Observation Column":"Add Observation Column",modalLabel:"Data Catalogue",size:"md",preventCloseOnClickOutside:!0,primaryButtonText:i?"Save Changes":"Add Column",primaryButtonDisabled:!O,onRequestSubmit:R,secondaryButtonText:"Cancel",onSecondarySubmit:I},n().createElement("div",{className:"-esm-report-builder__observation-column-modal__content___pe9g4"},n().createElement(o.BJc,{gap:6},n().createElement(sv,{key:s,openKey:s,selectedConcept:c,onSelect:k,onClear:()=>m(void 0),label:"Search for Concept",placeholder:"Type to search for concepts (e.g., Weight, Temperature, HIV Status)...",showAdvanced:!1}),c&&n().createElement(o.gE_,{legendText:"Column Configuration"},n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"observation-column-name",labelText:"Column Name *",placeholder:"Enter display name for this column",value:u,onChange:e=>p(e.target.value)}),n().createElement(o.ksK,{id:"observation-column-value",labelText:"Column Value",placeholder:"Description for the column value",value:_,onChange:e=>g(e.target.value)}),n().createElement(o.l6P,{id:"observation-column-modifier",labelText:"Column Modifier",value:E,onChange:e=>f(e.target.value)},sS.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label,title:e.description}))),("FIRST_N"===E||"MOST_RECENT_N"===E)&&n().createElement(o.ksK,{id:"observation-modifier-count",labelText:"Number of Values",type:"number",min:1,max:100,value:b.toString(),onChange:e=>y(parseInt(e.target.value)||1)}),n().createElement(o.lMk,{id:"observation-return-display",labelText:"Return concept display name instead of UUID",toggled:h,onToggle:e=>v(e),size:"sm"}),n().createElement("div",null,n().createElement("label",{className:"-esm-report-builder__observation-column-modal__extraValuesLabel___9ie9M"},"Extra Values"),n().createElement(o.BJc,{gap:2,className:"-esm-report-builder__observation-column-modal__extraValuesGrid___Yvzg+"},sT.map(e=>n().createElement(o.Sc0,{key:e.value,id:`extra-${e.value}`,labelText:e.label,checked:S.includes(e.value),onChange:t=>A(e.value,t),title:e.description})))),(c.answers&&c.answers.length>0||C)&&n().createElement("div",null,C&&(!c.answers||0===c.answers.length)&&n().createElement("div",{style:{marginBottom:"0.5rem",fontSize:"0.875rem",opacity:.9}},n().createElement("strong",null,"Filter by Answer:")," ",C.display||C.uuid,n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>w(void 0),style:{marginLeft:"0.5rem"}},"Clear")),c.answers&&c.answers.length>0&&n().createElement(o.l6P,{id:"observation-answer-concept",labelText:"Filter by Answer (Optional)",value:C?.uuid||"",onChange:e=>{w(c.answers?.find(t=>t.uuid===e.target.value))}},n().createElement(o.ebT,{value:"",text:"All answers"}),c.answers.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.display})))))))))},sw=[{value:"ALL_VALUES",label:"All Values",description:"Return all diagnoses as comma-separated list"},{value:"LATEST",label:"Latest",description:"Most recent diagnosis"},{value:"FIRST_WITHIN_PERIOD",label:"First in Period",description:"First diagnosis within reporting period"},{value:"LAST_WITHIN_PERIOD",label:"Last in Period",description:"Last diagnosis within reporting period"}],sN=[{value:"PRIMARY",label:"Primary Only",description:"Only primary diagnoses"},{value:"SECONDARY",label:"Secondary Only",description:"Only secondary diagnoses"},{value:"ANY",label:"Any",description:"Both primary and secondary diagnoses"}],sI=({open:e,onClose:t,onAddColumn:r,existingColumns:l=[],editingColumn:i=null})=>{let[s,d]=(0,a.useState)(0),[c,m]=(0,a.useState)(),[u,p]=(0,a.useState)(""),[_,g]=(0,a.useState)("LAST_WITHIN_PERIOD"),[E,f]=(0,a.useState)("ANY"),[b,y]=(0,a.useState)(!0),[h,v]=(0,a.useState)(!0),S=(0,a.useCallback)(()=>{m(void 0),p(""),g("LAST_WITHIN_PERIOD"),f("ANY"),y(!0),v(!0)},[]);(0,a.useEffect)(()=>{if(e)if(d(e=>e+1),i){let e=i.dataDefinitionConfig||{};m(i.source?.conceptUuid?{uuid:i.source.conceptUuid,display:e.conceptName||i.name,datatype:{name:i.source?.fieldType||"TEXT"}}:void 0),p(i.name||""),g(e.strategy||"LAST_WITHIN_PERIOD"),f(e.rank||"ANY"),y(!1!==e.confirmedOnly),v(!1!==e.returnDisplay)}else S()},[e,i,S]);let T=(0,a.useCallback)(()=>{S(),t()},[S,t]),C=(0,a.useCallback)(e=>{m(e),u||p(e.display)},[u]),w=(0,a.useCallback)(()=>{let e=u?.trim()||c?.display||"Diagnoses";if(l.some(t=>t.id!==i?.id&&t.name.toLowerCase()===e.toLowerCase()))return;let t=new Date().toISOString();r({id:i?.id||`col-${t}-${c?.uuid||"all-diagnoses"}`,name:e,description:i?.description||(c?`Diagnosis: ${c.display}`:"All encounter diagnoses"),source:{dataSourceUuid:"encounter_diagnoses",dataSourceName:"Encounter Diagnoses",table:"encounter_diagnoses",field:c?.uuid||"*",fieldType:"TEXT",conceptUuid:c?.uuid},dataDefinitionType:"ENCOUNTER_DIAGNOSIS",dataDefinitionConfig:{conceptUuid:c?.uuid,conceptName:c?.display,rank:E,confirmedOnly:b,strategy:_,returnDisplay:h},additionInfo:{addedVia:i?.additionInfo?.addedVia||"VISUAL_SELECTOR",addedAt:i?.additionInfo?.addedAt||t,orderAdded:i?.additionInfo?.orderAdded||l.length},display:i?.display||{width:150,align:"left",sortable:!0,filterable:!0,format:"coded"},sortOrder:i?.sortOrder??l.length,repeatResolution:{strategy:"ALL_VALUES"===_?"NONE":"LATEST",orderBy:"encounter_date",restrictToPeriod:!0,ignoreVoided:!0}}),T()},[c,u,_,E,b,h,l,r,T,i]),N=u?.trim();return n().createElement(o.aFV,{open:e,onRequestClose:T,modalHeading:i?"Edit Diagnosis Column":"Add Diagnosis Column",modalLabel:"Data Catalogue",size:"md",preventCloseOnClickOutside:!0,primaryButtonText:i?"Save Changes":"Add Column",primaryButtonDisabled:!N,onRequestSubmit:w,secondaryButtonText:"Cancel",onSecondarySubmit:T},n().createElement("div",{className:"-esm-report-builder__encounter-diagnosis-column-modal__content___H9xGm"},n().createElement(o.BJc,{gap:6},n().createElement("div",{className:"-esm-report-builder__encounter-diagnosis-column-modal__conceptSection___jMZIp"},n().createElement("div",{className:"-esm-report-builder__encounter-diagnosis-column-modal__conceptSectionHeader___hP0U0"},n().createElement("p",{className:"-esm-report-builder__encounter-diagnosis-column-modal__helperText___oKLdn"},'Leave empty to capture ALL encounter diagnoses, or search for a specific diagnosis condition (e.g., "Malaria", "HIV", "TB").')),n().createElement(sv,{key:s,openKey:s,selectedConcept:c,onSelect:C,onClear:()=>m(void 0),label:"Search for Diagnosis Concept",placeholder:"Type to search for diagnosis concepts...",showAdvanced:!1})),n().createElement(o.gE_,{legendText:"Column Configuration"},n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"diagnosis-column-name",labelText:"Column Name *",placeholder:"Enter display name for this column",value:u,onChange:e=>p(e.target.value)}),n().createElement(o.l6P,{id:"diagnosis-rank",labelText:"Diagnosis Rank",value:E,onChange:e=>f(e.target.value)},sN.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label,title:e.description}))),n().createElement(o.l6P,{id:"diagnosis-strategy",labelText:"Strategy for Multiple Diagnoses",value:_,onChange:e=>g(e.target.value)},sw.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label,title:e.description}))),n().createElement(o.lMk,{id:"diagnosis-confirmed-only",labelText:"Only include confirmed diagnoses",toggled:b,onToggle:e=>y(e),size:"sm"}),n().createElement(o.lMk,{id:"diagnosis-return-display",labelText:"Return concept display name instead of UUID",toggled:h,onToggle:e=>v(e),size:"sm"}))))))},sk={catalogue:"-esm-report-builder__data-catalogue__catalogue___pZUfl",populationSourcesSection:"-esm-report-builder__data-catalogue__populationSourcesSection___xJEns",datasetControls:"-esm-report-builder__data-catalogue__datasetControls___tAboY",etlIndicator:"-esm-report-builder__data-catalogue__etlIndicator___2MnnJ",etlTypeBadge:"-esm-report-builder__data-catalogue__etlTypeBadge___rGrpN",etlTypeIcon:"-esm-report-builder__data-catalogue__etlTypeIcon___9nBQ+",etlTypeLabel:"-esm-report-builder__data-catalogue__etlTypeLabel___k0YSe",etlDescription:"-esm-report-builder__data-catalogue__etlDescription___+6C+Y",etlHint:"-esm-report-builder__data-catalogue__etlHint___FlQWL",dropdown:"-esm-report-builder__data-catalogue__dropdown___5gNZQ",controls:"-esm-report-builder__data-catalogue__controls___4MUCu",toggleContainer:"-esm-report-builder__data-catalogue__toggleContainer___SaD2h",actionButtons:"-esm-report-builder__data-catalogue__actionButtons___c2wiE",customColumnSection:"-esm-report-builder__data-catalogue__customColumnSection___2v6jm",empty:"-esm-report-builder__data-catalogue__empty___E5VTP",loading:"-esm-report-builder__data-catalogue__loading___cyncT",fieldGroups:"-esm-report-builder__data-catalogue__fieldGroups___p+v5m",accordion:"-esm-report-builder__data-catalogue__accordion___8juo8",groupHeader:"-esm-report-builder__data-catalogue__groupHeader___nUsJO",groupIcon:"-esm-report-builder__data-catalogue__groupIcon___lb0kc",groupName:"-esm-report-builder__data-catalogue__groupName___Tea3A",fieldList:"-esm-report-builder__data-catalogue__fieldList___uXn3i",fieldItem:"-esm-report-builder__data-catalogue__fieldItem___celmC",fieldActions:"-esm-report-builder__data-catalogue__fieldActions___7qEPl",fieldInfo:"-esm-report-builder__data-catalogue__fieldInfo___+qTtN",fieldName:"-esm-report-builder__data-catalogue__fieldName___d7l4S",fieldMeta:"-esm-report-builder__data-catalogue__fieldMeta___eubsJ",summary:"-esm-report-builder__data-catalogue__summary___Rg0-y"},sA=[{id:"demographics",name:"Demographics",description:"Patient demographic information",fieldPatterns:["given_name","family_name","person_name","sex","gender","birth_date","age","death_date"],icon:P.KJ},{id:"api-person-attributes",name:"Person Attributes",description:"Custom person attributes from OpenMRS (Telephone, Civil Status, etc.)",fieldPatterns:[],icon:f.vw,isApiDriven:!0},{id:"openmrs-calculated",name:"Calculated Fields",description:"Fields calculated from other data",fieldPatterns:["age","bmi"],icon:m.zt},{id:"api-patient-identifiers",name:"Patient Identifiers",description:"Patient identification numbers from OpenMRS (Clinic No, National ID, etc.)",fieldPatterns:[],icon:s.vG,isApiDriven:!0},{id:"api-observations",name:"Observations",description:"Clinical observations from OpenMRS based on concepts (e.g., Weight, Height, Temperature)",fieldPatterns:[],icon:"\uD83D\uDCCA",isApiDriven:!0,isConceptBased:!0},{id:"api-encounter-diagnoses",name:"Encounter Diagnoses",description:"Diagnoses from OpenMRS encounters based on concepts (ICD coded conditions)",fieldPatterns:[],icon:"\uD83C\uDFE5",isApiDriven:!0,isConceptBased:!0},{id:"openmrs-person-name",name:"Person Name",description:"Patient name components",fieldPatterns:["given_name","family_name","middle_name","person_name"],icon:P.KJ},{id:"openmrs-address",name:"Address & Contact",description:"Address and contact information",fieldPatterns:["address","address1","address2","address3","address4","address5","village","parish","subcounty","county","district","state","stateProvince","countyDistrict","city","cityVillage","phone","telephone"],icon:"\uD83D\uDCCD"},{id:"addresses",name:"Addresses & Contacts",description:"Patient address and contact information",fieldPatterns:["address","address1","address2","address3","address4","address5","city","village","parish","subcounty","county","district","state","stateProvince","countyDistrict","country","phone","telephone","email"],icon:"\uD83D\uDCCD"},{id:"encounters",name:"Encounters & Visits",description:"Encounter and visit information",fieldPatterns:["encounter","visit","visit_date","encounter_date","encounter_type","location"],icon:"\uD83C\uDFE5"},{id:"observations",name:"Observations",description:"Clinical observations and vitals",fieldPatterns:["obs","observation","value","concept","weight","height","bmi","temperature","blood_pressure"],icon:"\uD83D\uDCCA"},{id:"programs",name:"Programs & Enrollments",description:"Program enrollment and status",fieldPatterns:["program","enrollment","enrol","program_enrollment","regimen","art","hiv","tb"],icon:"\uD83D\uDCCB"},{id:"appointments",name:"Appointments",description:"Scheduled appointments",fieldPatterns:["appointment","return_visit","appointment_date","fulfillment","scheduled"],icon:"\uD83D\uDCC5"},{id:"laboratory",name:"Laboratory",description:"Lab results and orders",fieldPatterns:["lab","laboratory","test","result","specimen","order_date","result_date"],icon:"\uD83D\uDD2C"},{id:"medications",name:"Medications",description:"Drug prescriptions and dispenses",fieldPatterns:["drug","medication","prescription","dispense","regimen","dose"],icon:"\uD83D\uDC8A"}],sR=[{id:"openmrs.calc.age",name:"age",label:"Age",type:"NUMBER",source:"CALCULATION",table:"person",isRepeated:!1,description:"Age in years (as of report end date)"},{id:"openmrs.calc.age_months",name:"age_months",label:"Age (Months)",type:"NUMBER",source:"CALCULATION",table:"person",isRepeated:!1,description:"Age in months (as of report end date)"},{id:"openmrs.calc.age_years",name:"age_years",label:"Age (Years)",type:"NUMBER",source:"CALCULATION",table:"person",isRepeated:!1,description:"Age in whole years (as of report end date)"},{id:"openmrs.calc.bmi",name:"bmi",label:"BMI",type:"NUMBER",source:"CALCULATION",table:"person",isRepeated:!1,description:"Body Mass Index"}],sO=[{id:"openmrs.person.given_name",name:"given_name",label:"Given Name",type:"TEXT",source:"CORE",table:"person",isRepeated:!1,description:"Patient given name"},{id:"openmrs.person.family_name",name:"family_name",label:"Family Name",type:"TEXT",source:"CORE",table:"person",isRepeated:!1,description:"Patient family name/surname"},{id:"openmrs.person.full_name",name:"full_name",label:"Full Name",type:"TEXT",source:"CORE",table:"person",isRepeated:!1,description:"Complete patient name"},{id:"openmrs.person.gender",name:"gender",label:"Gender",type:"CODED",source:"CORE",table:"person",isRepeated:!1,description:"Patient gender"},{id:"openmrs.person.birthdate",name:"birthdate",label:"Birth Date",type:"DATE",source:"CORE",table:"person",isRepeated:!1,description:"Patient birth date"},{id:"openmrs.person.death_date",name:"death_date",label:"Death Date",type:"DATE",source:"CORE",table:"person",isRepeated:!1,description:"Patient death date"}],sD=({table:e,dataSources:t,populationSources:l,onPopulationSourcesChange:i,showPopulationSelector:s=!0,onAddToColumns:d,onAddToFilters:c,onFieldsAvailable:m,onEtlStructureDetected:u,selectedFields:p=[],disabled:_=!1,onAddCustomSqlColumn:g,onAddDraftColumn:E,idColumnAlias:f="patient_id"})=>{let[b,y]=(0,a.useState)(""),[h,v]=(0,a.useState)(!1),[S,T]=(0,a.useState)(new Set),[C,w]=(0,a.useState)(null),[N,I]=(0,a.useState)(!1),[k,A]=(0,a.useState)(!1),[R,O]=(0,a.useState)(!1),[D,x]=(0,a.useState)([]),[L,M]=(0,a.useState)([]),[$,P]=(0,a.useState)(!0),[U,B]=(0,a.useState)(null),[F,z]=(0,a.useState)([]),{addressFields:q}=function(){let{template:e,loading:t}=function(){let[e,t]=(0,a.useState)(null),[r,n]=(0,a.useState)(!0),[l,i]=(0,a.useState)(null),o=async()=>{n(!0),i(null);try{let e=await sc();t(e)}catch(e){i(e instanceof Error?e:Error("Failed to fetch address template"))}finally{n(!1)}};return(0,a.useEffect)(()=>{o()},[]),{template:e,loading:r,error:l,refresh:o}}();return{addressFields:e?.nameMappings.map(e=>({id:`openmrs.person_address.${e.field}`,name:e.field,label:e.display,type:"TEXT",source:"CORE",table:"person_address",isRepeated:!1,description:e.label}))||[],loading:t}}(),j=(0,a.useMemo)(()=>t||(e?[{uuid:e,name:e,type:"ETL",role:"PRIMARY",tables:[]}]:[]),[t,e]),H=j.find(e=>"PRIMARY"===e.role),J=H?.uuid||e||"",G=H?.name||"",{columns:V,loading:W,error:K}=ic(J,!!J);(0,a.useEffect)(()=>{(async()=>{try{P(!0),B(null);let[e,t]=await Promise.all([nl(!0),nn(!0)]);x(e),M(t)}catch(e){console.error("Failed to fetch person attributes/identifiers:",e),B("Failed to load person attributes and identifiers from server")}finally{P(!1)}})()},[]);let Q=(0,a.useMemo)(()=>{let e={};return sA.forEach(t=>{e[t.id]=[]}),e.uncategorized=[],e["openmrs-calculated"]=sR,e.demographics=sO,e["openmrs-address"]=q,e["api-person-attributes"]=D.filter(e=>!e.retired).map(e=>({id:`person-attribute-${e.uuid}`,name:e.uuid,label:e.display||e.name||e.uuid,type:"TEXT",source:"CORE",table:"person_attribute",isRepeated:!1,description:e.description||"Custom person attribute"})),e["api-patient-identifiers"]=L.filter(e=>!e.retired).map(e=>({id:`patient-identifier-${e.uuid}`,name:e.uuid,label:e.display||e.name||e.uuid,type:"TEXT",source:"CORE",table:"patient_identifier",isRepeated:!0,description:e.description||"Patient identifier"})),e["api-observations"]=[],e["api-encounter-diagnoses"]=[],V&&V.length>0&&V.forEach(t=>{var r;let a,n=function(e){let t=e.toLowerCase();for(let e of sA)for(let r of e.fieldPatterns)if(t.includes(r.toLowerCase()))return e.id;return null}(t.name)||"uncategorized";if("demographics"===n||"openmrs-calculated"===n)return;let l={id:`${J}.${t.name}`,name:t.name,label:t.name.toLowerCase().replace(/[_\s]+/g," ").replace(/\b\w/g,e=>e.toUpperCase()),type:function(e){if(!e)return"TEXT";let t=e.toLowerCase();return t.includes("int")||t.includes("serial")||t.includes("bigint")||t.includes("decimal")||t.includes("numeric")||t.includes("float")||t.includes("double")?"NUMBER":t.includes("date")||t.includes("time")||t.includes("timestamp")?"DATE":t.includes("bool")||t.includes("bit")?"BOOLEAN":"TEXT"}(t.type),source:(r=t.name,r.includes("age")||r.includes("bmi")?"CALCULATION":J.includes("_etl")||J.includes("_fact")||J.includes("_dim")?"ETL":"CORE"),table:J,isRepeated:(a=t.name.toLowerCase(),["appointment","visit","encounter","obs","observation","lab","test","result","program","enrollment","drug","medication","regimen"].some(e=>a.includes(e))),dataSourceUuid:j.find(e=>e.uuid===J)?.uuid||J,dataSourceName:j.find(e=>e.uuid===J)?.name||J};e[n].push(l)}),e},[V,J,D,L,j,q]);(0,a.useEffect)(()=>{m&&m(Object.values(Q).flat())},[Q,m]),(0,a.useEffect)(()=>{J&&V&&0!==V.length&&r.e("2408").then(r.bind(r,8715)).then(({detectEtlStructure:e})=>{let t=e(J,V.map(e=>e.name));w(t),u&&u(t)})},[J,V,u]);let Y=(0,a.useMemo)(()=>{let e=Q,t=new Set(p);if(!h&&t.size>0){let r={};Object.entries(Q).forEach(([e,a])=>{let n=a.filter(e=>!t.has(e.id));n.length>0&&(r[e]=n)}),e=r}else if(h){let r={};Object.entries(Q).forEach(([e,a])=>{let n=a.filter(e=>t.has(e.id));n.length>0&&(r[e]=n)}),e=r}if(b){let t=b.toLowerCase(),r={};Object.entries(e).forEach(([e,a])=>{let n=a.filter(e=>e.name.toLowerCase().includes(t)||e.label.toLowerCase().includes(t));n.length>0&&(r[e]=n)}),e=r}return e},[Q,b,h,p]),X=(0,a.useCallback)((e,t)=>{t?.stopPropagation(),T(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),Z=(0,a.useCallback)(()=>{T(new Set(Object.keys(Y)))},[Y]),ee=(0,a.useCallback)(()=>{T(new Set)},[]),et=W||$,er=K||U,ea=Object.values(Y).reduce((e,t)=>e+t.length,0);return n().createElement("div",{className:sk.catalogue},s&&i&&n().createElement("div",{className:sk.populationSourcesSection},n().createElement(sf,{populationSources:l??F,onChange:e=>{z(e),i&&i(e)},disabled:_,showAdvanced:!1})),C&&n().createElement("div",{className:sk.etlIndicator},n().createElement("div",{className:sk.etlTypeBadge},n().createElement("span",{className:sk.etlTypeIcon},"VERTICAL"===C.type?"\uD83D\uDCCA":"\uD83D\uDCCB"),n().createElement("span",{className:sk.etlTypeLabel},"VERTICAL"===C.type?"Vertical ETL":"Horizontal ETL")),n().createElement("div",{className:sk.etlDescription},"VERTICAL"===C.type?n().createElement(n().Fragment,null,"Data stored in long format. Filter by"," ",n().createElement("strong",null,C.dataIdentifierColumn||"concept")," to select specific data points."):n().createElement(n().Fragment,null,"Data stored in wide format. Columns are directly selectable data points.")),"VERTICAL"===C.type&&C.requiredFilters&&n().createElement("div",{className:sk.etlHint},n().createElement("strong",null,"Required filters:")," ",C.requiredFilters.map(e=>e.column).join(", "))),n().createElement("div",{className:sk.controls},n().createElement(o.ksK,{id:"field-search",labelText:"",placeholder:"Search fields...",size:"sm",value:b,onChange:e=>y(e.target.value),disabled:_||et}),n().createElement("div",{className:sk.actionButtons},n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:Z,disabled:_||et},"Expand All"),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:ee,disabled:_||et},"Collapse All"))),g&&n().createElement("div",{className:sk.customColumnSection},n().createElement(o.$nd,{kind:"secondary",size:"sm",onClick:()=>I(!0),disabled:_},"+ Custom SQL Column")),p.length>0&&n().createElement("div",{className:sk.toggleContainer},n().createElement(o.lMk,{id:"show-selected-toggle",labelText:"Show selected only",labelA:"All fields",labelB:"Selected only",toggled:h,onToggle:()=>v(!h),disabled:_||et}),n().createElement(o.vwO,{type:"blue"},p.length," selected")),er&&n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:er,hideCloseButton:!0}),!et&&!er&&0===ea&&n().createElement("div",{className:sk.empty},J?n().createElement("p",null,"No fields found for table: ",J):n().createElement("p",null,"Select a data source to view available fields")),et&&n().createElement("div",{className:sk.loading},"Loading fields..."),!et&&ea>0&&n().createElement("div",{className:sk.fieldGroups},n().createElement(o.nD3,{className:sk.accordion},sA.map(e=>{let t=Y[e.id]||[],r=S.has(e.id);return 0!==t.length||e.isConceptBased?n().createElement(o.AsP,{key:e.id,title:n().createElement("div",{className:sk.groupHeader},n().createElement("span",{className:sk.groupIcon},e.icon&&n().createElement(e.icon,{size:16})),n().createElement("span",{className:sk.groupName},e.name),e.isConceptBased?n().createElement(o.vwO,{size:"sm",type:"blue"},"+"):n().createElement(o.vwO,{size:"sm",type:"gray"},t.length)),open:r,onClick:t=>X(e.id,t)},e.isConceptBased?n().createElement("div",{className:sk.conceptBasedGroupContent},n().createElement("p",{className:sk.conceptBasedDescription},e.description),n().createElement("div",{className:sk.conceptBasedActions},"api-observations"===e.id&&n().createElement(o.$nd,{kind:"primary",size:"sm",onClick:()=>A(!0),disabled:_,renderIcon:null},"+ Add Observation Column"),"api-encounter-diagnoses"===e.id&&n().createElement(o.$nd,{kind:"primary",size:"sm",onClick:()=>O(!0),disabled:_,renderIcon:null},"+ Add Diagnosis Column"))):n().createElement("div",{className:sk.fieldList,onClick:e=>{e.stopPropagation()}},t.map(e=>{let t=p.includes(e.id);return n().createElement("div",{key:e.id,className:sk.fieldItem,"data-selected":t},n().createElement("div",{className:sk.fieldInfo},n().createElement("span",{className:sk.fieldName},e.label),n().createElement("div",{className:sk.fieldMeta},t&&n().createElement(o.vwO,{size:"sm",type:"green"},"Selected"),e.dataSourceName&&n().createElement(o.vwO,{size:"sm",type:"cool-gray"},e.dataSourceName),n().createElement(o.vwO,{size:"sm",type:"blue"},e.type),n().createElement(o.vwO,{size:"sm",type:"gray"},e.source),e.isRepeated&&n().createElement(o.vwO,{size:"sm",type:"purple"},"Repeated")),n().createElement("div",{className:sk.fieldName},e.name)),n().createElement("div",{className:sk.fieldActions},n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:t=>{t.stopPropagation(),d(e)},disabled:_},"+ Column"),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:t=>{t.stopPropagation(),c(e)},disabled:_},"+ Filter")))}))):null}),Y.uncategorized&&Y.uncategorized.length>0&&n().createElement(o.AsP,{key:"uncategorized",title:n().createElement("div",{className:sk.groupHeader},n().createElement("span",{className:sk.groupIcon},"\uD83D\uDCC1"),n().createElement("span",{className:sk.groupName},"Other Fields"),n().createElement(o.vwO,{size:"sm",type:"gray"},Y.uncategorized.length)),open:S.has("uncategorized"),onClick:()=>X("uncategorized")},n().createElement("div",{className:sk.fieldList},Y.uncategorized?.map(e=>{let t=p.includes(e.id);return n().createElement("div",{key:e.id,className:sk.fieldItem,"data-selected":t},n().createElement("div",{className:sk.fieldInfo},n().createElement("span",{className:sk.fieldName},e.label),n().createElement("div",{className:sk.fieldMeta},t&&n().createElement(o.vwO,{size:"sm",type:"green"},"Selected"),e.dataSourceName&&n().createElement(o.vwO,{size:"sm",type:"cool-gray"},e.dataSourceName),n().createElement(o.vwO,{size:"sm",type:"blue"},e.type),n().createElement(o.vwO,{size:"sm",type:"gray"},e.source),e.isRepeated&&n().createElement(o.vwO,{size:"sm",type:"purple"},"Repeated")),n().createElement("div",{className:sk.fieldName},e.name)),n().createElement("div",{className:sk.fieldActions},n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>d(e),disabled:_},"+ Column"),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>c(e),disabled:_},"+ Filter")))}))))),!et&&ea>0&&n().createElement("div",{className:sk.summary},ea," field",1!==ea?"s":""," available"),g&&n().createElement(sp,{open:N,onClose:()=>I(!1),onSave:g,existingColumnNames:[],idColumnAlias:f,primaryDatasourceName:G}),n().createElement(sC,{open:k,onClose:()=>A(!1),onAddColumn:E||(()=>{}),existingColumns:[]}),n().createElement(sI,{open:R,onClose:()=>O(!1),onAddColumn:E||(()=>{}),existingColumns:[]}))};function sx(e,t){let r={...e};if(r.dataSetDefinitions&&r.dataSetDefinitions[0]){let e=r.dataSetDefinitions[0],a=e.columns.map((e,r)=>{let a=t.columns.find(t=>t.name===e.name);return{...e,_metadata:{id:a?.id||`col-${r}`,position:a?.sortOrder??r}}});r.dataSetDefinitions[0]={...e,columns:a}}return r.dataSources&&(r.dataSources=r.dataSources.map(e=>{if(e.columns){let r={};return Object.entries(e.columns).forEach(([e,a])=>{let n=t.columns.find(t=>t.name===e);r[e]={...a,_metadata:{id:n?.id,position:n?.sortOrder}}}),{...e,columns:r}}return e})),r}function sL({draft:e,className:t,indicators:r=[]}){let l,i=(0,a.useMemo)(()=>{let e=new Map;for(let t of r)e.set(t.uuid,{sqlTemplate:t.sqlTemplate,configJson:t.configJson});return e},[r]),s=(0,a.useCallback)(()=>{let t=sx(ss(e,i),e);navigator.clipboard.writeText(JSON.stringify(t,null,2))},[e,i]),d=sx(ss(e,i),e);return n().createElement("div",{className:`-esm-report-builder__json-preview__preview___vJZ1j ${t||""}`},n().createElement("div",{className:"-esm-report-builder__json-preview__header___bFwek"},n().createElement("div",{className:"-esm-report-builder__json-preview__headerLeft___Ui32b"},n().createElement(c.Cy,{size:16,className:"-esm-report-builder__json-preview__icon___WJbCU"}),n().createElement("span",{className:"-esm-report-builder__json-preview__title___iMvKE"},"Report Configuration JSON")),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:s},"Copy JSON")),n().createElement(o.z7k,{type:"multi",feedback:"Copied!",className:"-esm-report-builder__json-preview__code___1hGdq"},JSON.stringify(d,null,2)),n().createElement("div",{className:"-esm-report-builder__json-preview__validation___UBIL0"},(l=[],0===e.columns.length?l.push(n().createElement(o.vwO,{key:"no-columns",size:"sm",type:"red"},"Missing columns")):l.push(n().createElement(o.vwO,{key:"columns",size:"sm",type:"green"},e.columns.length," columns")),e.dataSourceUuid||l.push(n().createElement(o.vwO,{key:"no-source",size:"sm",type:"red"},"No data source")),"INDICATOR"!==e.populationMode||e.indicatorRules&&0!==e.indicatorRules.length||l.push(n().createElement(o.vwO,{key:"no-indicators",size:"sm",type:"red"},"No indicators selected")),e.unsavedChanges&&l.push(n().createElement(o.vwO,{key:"unsaved",size:"sm",type:"blue"},"Unsaved changes")),l)))}let sM={container:"-esm-report-builder__column-category-selector__container___I1ArE",quickPresets:"-esm-report-builder__column-category-selector__quickPresets___NfkzC",sectionTitle:"-esm-report-builder__column-category-selector__sectionTitle___Wvv-w",presetButtons:"-esm-report-builder__column-category-selector__presetButtons___tjtD0",error:"-esm-report-builder__column-category-selector__error___wVk-E",summary:"-esm-report-builder__column-category-selector__summary___mpOac",summaryText:"-esm-report-builder__column-category-selector__summaryText___9rq3L",categoryHeader:"-esm-report-builder__column-category-selector__categoryHeader___zjlCe",categoryIcon:"-esm-report-builder__column-category-selector__categoryIcon___jTVMG",categoryName:"-esm-report-builder__column-category-selector__categoryName___0FpJF",categoryContent:"-esm-report-builder__column-category-selector__categoryContent___yGlC0",categoryDescription:"-esm-report-builder__column-category-selector__categoryDescription___HsWYd",fieldRow:"-esm-report-builder__column-category-selector__fieldRow___Z+2Zc",fieldDescription:"-esm-report-builder__column-category-selector__fieldDescription___sP2cC",categoryActions:"-esm-report-builder__column-category-selector__categoryActions___yCKdm",columnList:"-esm-report-builder__column-category-selector__columnList___NjSdW",columnItem:"-esm-report-builder__column-category-selector__columnItem___qf2zp",columnPosition:"-esm-report-builder__column-category-selector__columnPosition___AJ9gW",positionNumber:"-esm-report-builder__column-category-selector__positionNumber___MU9Lx",columnInfo:"-esm-report-builder__column-category-selector__columnInfo___v2+a8",columnName:"-esm-report-builder__column-category-selector__columnName___ETZ2b",columnIdTag:"-esm-report-builder__column-category-selector__columnIdTag___xLJE5",columnOrder:"-esm-report-builder__column-category-selector__columnOrder___92IOh",columnActions:"-esm-report-builder__column-category-selector__columnActions___LMHD9",selectedTable:"-esm-report-builder__column-category-selector__selectedTable___hrjf7",emptyState:"-esm-report-builder__column-category-selector__emptyState___+7U0l",loadingText:"-esm-report-builder__column-category-selector__loadingText___5fmqK",emptyText:"-esm-report-builder__column-category-selector__emptyText___qpbzo"},s$=`
|
|
326
356
|
.sql-editor {
|
|
327
357
|
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;
|
|
328
358
|
font-size: 0.875rem;
|
|
@@ -331,8 +361,8 @@ INNER JOIN (${t}) indicators ON indicators.patient_id = base.patient_id`;return
|
|
|
331
361
|
.sql-editor textarea {
|
|
332
362
|
tab-size: 2;
|
|
333
363
|
}
|
|
334
|
-
`,s$=[{value:"LATEST",label:"Latest",description:"Use the most recent value"},{value:"EARLIEST",label:"Earliest",description:"Use the earliest value"},{value:"FIRST_WITHIN_PERIOD",label:"First within period",description:"Use the first value within reporting period"},{value:"LAST_WITHIN_PERIOD",label:"Last within period",description:"Use the last value within reporting period"},{value:"ALL_VALUES",label:"All values",description:"Show all values (may change row grain)"}],sP=[{value:"left",label:"Left"},{value:"center",label:"Center"},{value:"right",label:"Right"}],sU=[{value:"text",label:"Text"},{value:"number",label:"Number"},{value:"date",label:"Date"},{value:"datetime",label:"Date & Time"},{value:"boolean",label:"Boolean"},{value:"percentage",label:"Percentage"},{value:"currency",label:"Currency"}],sB=["encounter_date","encounter_datetime","date_created","date_modified"],sF=({open:e,column:t,onSave:r,onClose:l,filterMap:i})=>{let[s,d]=(0,a.useState)(null);if((0,a.useEffect)(()=>{t&&d({...t})},[t,e]),!s)return null;let c="SQL"===s.dataDefinitionType&&/appointment|observation|encounter|program_enrollment|visit/i.test(s.dataDefinitionConfig?.sql||""),m=(e,t)=>{d(r=>r?{...r,[e]:t}:null)},u=(e,t)=>{d(r=>r?{...r,display:{...r.display,[e]:t}}:null)},p=(e,t)=>{d(r=>r?{...r,repeatResolution:{...r.repeatResolution,[e]:t}}:null)};return n().createElement(n().Fragment,null,n().createElement("style",null,sM),n().createElement(o.aFV,{open:e,onRequestClose:l,size:"md",modalHeading:"Edit Column",modalLabel:"Column Configuration",primaryButtonText:"Save Changes",onRequestSubmit:()=>{s&&r(s)},secondaryButtonText:"Cancel"},n().createElement(o.cwr,null,n().createElement(o.BJc,{gap:6},n().createElement("div",null,n().createElement("h4",{className:"cds--label"},"Basic Information"),n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"column-name",labelText:"Display Name",value:s.name,onChange:e=>m("name",e.target.value),placeholder:"Enter display name"}),n().createElement(o.ksK,{id:"column-description",labelText:"Description",value:s.description||"",onChange:e=>m("description",e.target.value),placeholder:"Enter description (optional)"}))),n().createElement("div",null,n().createElement("h4",{className:"cds--label"},"Display Settings"),n().createElement(o.BJc,{gap:4},n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(o.Q7x,{id:"column-width",label:"Width (px)",value:s.display?.width||150,onChange:e=>{let t=e.target;u("width",t.value?Number(t.value):150)},min:50,max:500,step:10}),n().createElement(o.l6P,{id:"column-align",labelText:"Alignment",value:s.display?.align||"left",onChange:e=>u("align",e.target.value)},sP.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label})))),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(o.l6P,{id:"column-format",labelText:"Format",value:s.display?.format||"text",onChange:e=>u("format",e.target.value)},sU.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement("div",{style:{display:"flex",alignItems:"flex-end",gap:"1rem"}},n().createElement(o.lMk,{id:"column-sortable",labelText:"Sortable",toggled:s.display?.sortable||!1,onToggle:e=>u("sortable",e)}),n().createElement(o.lMk,{id:"column-filterable",labelText:"Filterable",toggled:s.display?.filterable||!1,onToggle:e=>u("filterable",e)}))))),c&&n().createElement("div",{style:{background:"var(--cds-layer-01, #f4f4f4)",padding:"1rem",borderRadius:"8px"}},n().createElement("h4",{className:"cds--label"},"Repeat Resolution"),n().createElement("p",{style:{fontSize:"0.875rem",marginBottom:"1rem",opacity:.9}},"This column may return multiple values per row. Configure how to handle them."),n().createElement(o.BJc,{gap:4},n().createElement(o.l6P,{id:"resolution-strategy",labelText:"Resolution Strategy",value:s.repeatResolution?.strategy||"LATEST",onChange:e=>p("strategy",e.target.value)},s$.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:`${e.label} - ${e.description}`}))),(s.repeatResolution?.strategy==="LATEST"||s.repeatResolution?.strategy==="EARLIEST"||s.repeatResolution?.strategy==="FIRST_WITHIN_PERIOD"||s.repeatResolution?.strategy==="LAST_WITHIN_PERIOD")&&n().createElement(n().Fragment,null,n().createElement(o.l6P,{id:"resolution-orderby",labelText:"Order By Field",value:s.repeatResolution?.orderBy||"encounter_date",onChange:e=>p("orderBy",e.target.value)},sB.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement(o.lMk,{id:"resolution-ignore-voided",labelText:"Ignore voided records",toggled:s.repeatResolution?.ignoreVoided!==!1,onToggle:e=>p("ignoreVoided",e)}),n().createElement(o.lMk,{id:"resolution-restrict-period",labelText:"Restrict to time period",toggled:s.repeatResolution?.restrictToPeriod||!1,onToggle:e=>p("restrictToPeriod",e)})))),"SQL"===s.dataDefinitionType&&n().createElement("div",{style:{background:"var(--cds-layer-01, #f4f4f4)",padding:"1rem",borderRadius:"8px"}},n().createElement("h4",{className:"cds--label"},"SQL Definition"),n().createElement("p",{style:{fontSize:"0.875rem",marginBottom:"1rem",opacity:.9}},"Edit the SQL query for this column. Use ",n().createElement("code",null,":patientId")," to reference the current patient."),n().createElement(o.fs1,{id:"column-sql",className:"sql-editor",placeholder:"SELECT field_name FROM table_name WHERE patient_id = :patientId...",value:s.dataDefinitionConfig?.sql||"",onChange:e=>{var t;return t=e.target.value,void d(e=>e?{...e,dataDefinitionConfig:{...e.dataDefinitionConfig,sql:t}}:null)},rows:6,labelText:""}),n().createElement("div",{style:{marginTop:"0.5rem",fontSize:"0.875rem",opacity:.7}},n().createElement("small",null,"Available parameters: "),n().createElement(o.vwO,{size:"sm",type:"blue"},n().createElement("code",null,":patientId")),n().createElement(o.vwO,{size:"sm",type:"blue"},n().createElement("code",null,":startDate")),n().createElement(o.vwO,{size:"sm",type:"blue"},n().createElement("code",null,":endDate")),i&&Object.keys(i).length>0&&n().createElement(n().Fragment,null,n().createElement("small",{style:{marginLeft:"0.5rem"}},"| FilterMap parameters:"),Object.entries(i).map(([e,t])=>n().createElement(o.vwO,{key:e,size:"sm",type:"green"},n().createElement("code",null,":",e),n().createElement("span",{style:{opacity:.7,fontSize:"0.75em"}}," → ",t))))),i&&Object.keys(i).length>0&&n().createElement("div",{style:{marginTop:"0.5rem",fontSize:"0.75rem",opacity:.6}},n().createElement("small",null,"\uD83D\uDCA1 FilterMap parameters allow you to reference specific columns from the base cohort row (e.g., ",n().createElement("code",null,":",Object.keys(i)[0])," for the exact row that matched)"))),n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8}},n().createElement("p",null,n().createElement("strong",null,"Type:")," ",s.dataDefinitionType),s.source?.dataSourceName&&n().createElement("p",null,n().createElement("strong",null,"Source:")," ",s.source.dataSourceName),s.source?.table&&n().createElement("p",null,n().createElement("strong",null,"Table:")," ",s.source.table))))))},sz={debugPanel:"-esm-report-builder__column-debug-panel__debugPanel___zvbb6",header:"-esm-report-builder__column-debug-panel__header___U8qzg",headerTitle:"-esm-report-builder__column-debug-panel__headerTitle___yGmkv",accordion:"-esm-report-builder__column-debug-panel__accordion___cWavn",section:"-esm-report-builder__column-debug-panel__section___xWLtw",row:"-esm-report-builder__column-debug-panel__row___qkZRQ",label:"-esm-report-builder__column-debug-panel__label___PxVGF",value:"-esm-report-builder__column-debug-panel__value___P2qJI",valueEmpty:"-esm-report-builder__column-debug-panel__valueEmpty___3QbIB",codeInline:"-esm-report-builder__column-debug-panel__codeInline___cd113",code:"-esm-report-builder__column-debug-panel__code___38YK3",warning:"-esm-report-builder__column-debug-panel__warning___xPDQE",info:"-esm-report-builder__column-debug-panel__info___lZSW4"};function sq({column:e,onClose:t}){return n().createElement("div",{className:sz.debugPanel},n().createElement("div",{className:sz.header},n().createElement("div",{className:sz.headerTitle},n().createElement(g.wB,{size:16,className:sz.icon}),n().createElement("span",null,"Column Debug Info")),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:t},"Close")),n().createElement(o.nD3,{className:sz.accordion},n().createElement(o.AsP,{title:"Basic Information",open:!0},n().createElement("div",{className:sz.section},n().createElement(sj,{label:"Column ID",value:e.id,type:"uuid"}),n().createElement(sj,{label:"Name",value:e.name}),n().createElement(sj,{label:"Description",value:e.description}),n().createElement(sj,{label:"Position (sortOrder)",value:e.sortOrder?.toString(),type:"number"}),n().createElement(sj,{label:"Data Type",value:e.dataDefinitionType,type:"tag"}))),n().createElement(o.AsP,{title:"Source Information",open:!0},n().createElement("div",{className:sz.section},e.source?n().createElement(n().Fragment,null,n().createElement(sj,{label:"Data Source UUID",value:e.source.dataSourceUuid,type:"uuid"}),n().createElement(sj,{label:"Data Source Name",value:e.source.dataSourceUuid}),n().createElement(sj,{label:"Table",value:e.source.table,type:"code"}),n().createElement(sj,{label:"Field",value:e.source.field,type:"code"}),n().createElement(sj,{label:"Field Type",value:e.source.fieldType,type:"tag"}),e.source.conceptUuid&&n().createElement(sj,{label:"Concept UUID",value:e.source.conceptUuid,type:"uuid"}),e.source.attributeTypeUuid&&n().createElement(sj,{label:"Attribute Type UUID",value:e.source.attributeTypeUuid,type:"uuid"}),e.source.identifierTypeUuid&&n().createElement(sj,{label:"Identifier Type UUID",value:e.source.identifierTypeUuid,type:"uuid"})):n().createElement("div",{className:sz.warning},n().createElement(tN.$$,{size:16}),n().createElement("span",null,"No source information available")))),n().createElement(o.AsP,{title:"Data Definition Config",open:!1},n().createElement("div",{className:sz.section},e.dataDefinitionConfig?n().createElement("pre",{className:sz.code},JSON.stringify(e.dataDefinitionConfig,null,2)):n().createElement("div",{className:sz.warning},n().createElement(tN.$$,{size:16}),n().createElement("span",null,"No data definition config available")))),n().createElement(o.AsP,{title:"Repeat Resolution",open:!1},n().createElement("div",{className:sz.section},e.repeatResolution?n().createElement(n().Fragment,null,n().createElement(sj,{label:"Strategy",value:e.repeatResolution.strategy}),n().createElement(sj,{label:"Order By",value:e.repeatResolution.orderBy}),n().createElement(sj,{label:"Restrict to Period",value:e.repeatResolution.restrictToPeriod?.toString(),type:"boolean"}),n().createElement(sj,{label:"Ignore Voided",value:e.repeatResolution.ignoreVoided?.toString(),type:"boolean"})):n().createElement("div",{className:sz.info},n().createElement(tN.$$,{size:16}),n().createElement("span",null,"No repeat resolution configured")))),n().createElement(o.AsP,{title:"Display Settings",open:!1},n().createElement("div",{className:sz.section},e.display?n().createElement(n().Fragment,null,n().createElement(sj,{label:"Width",value:e.display.width?.toString(),type:"number"}),n().createElement(sj,{label:"Align",value:e.display.align}),n().createElement(sj,{label:"Sortable",value:e.display.sortable?.toString(),type:"boolean"}),n().createElement(sj,{label:"Filterable",value:e.display.filterable?.toString(),type:"boolean"}),n().createElement(sj,{label:"Format",value:e.display.format})):n().createElement("div",{className:sz.info},n().createElement(tN.$$,{size:16}),n().createElement("span",null,"No display settings configured")))),n().createElement(o.AsP,{title:"Addition Info",open:!1},n().createElement("div",{className:sz.section},e.additionInfo?n().createElement(n().Fragment,null,n().createElement(sj,{label:"Added Via",value:e.additionInfo.addedVia}),n().createElement(sj,{label:"Added At",value:e.additionInfo.addedAt}),n().createElement(sj,{label:"Order Added",value:e.additionInfo.orderAdded?.toString(),type:"number"})):n().createElement("div",{className:sz.info},n().createElement(tN.$$,{size:16}),n().createElement("span",null,"No addition info available")))),n().createElement(o.AsP,{title:"Raw Column JSON",open:!1},n().createElement("div",{className:sz.section},n().createElement(o.z7k,{type:"multi",feedback:"Copied!"},JSON.stringify(e,null,2))))))}function sj({label:e,value:t,type:r="text"}){if(null==t||""===t)return n().createElement("div",{className:sz.row},n().createElement("span",{className:sz.label},e,":"),n().createElement("span",{className:sz.valueEmpty},"(not set)"));let a=t;switch(r){case"uuid":case"code":a=n().createElement("code",{className:sz.codeInline},t);break;case"tag":a=n().createElement(o.vwO,{size:"sm",type:"cool-gray"},t);break;case"boolean":a=n().createElement(o.vwO,{size:"sm",type:"true"===t?"green":"red"},"true"===t?"Yes":"No");break;case"number":a=n().createElement(o.vwO,{size:"sm",type:"blue"},t);break;default:a=t}return n().createElement("div",{className:sz.row},n().createElement("span",{className:sz.label},e,":"),n().createElement("span",{className:sz.value},a))}let sH={calculated:{id:"calculated",name:"Calculated Fields",description:"Fields calculated from other data (Age, BMI, etc.)",icon:m.zt},attributes:{id:"attributes",name:"Person Attributes",description:"Custom person attributes (Telephone, Civil Status, etc.)",icon:f.vw},identifiers:{id:"identifiers",name:"Patient Identifiers",description:"Patient identification numbers (Clinic Number, EID Number, etc.)",icon:s.vG},demographics:{id:"demographics",name:"Demographics",description:"Built-in demographic fields (Name, Gender, Birth Date, etc.)",icon:P.KJ},other:{id:"other",name:"Other Fields",description:"ETL table columns and other fields",icon:_.n5}};function sJ({columns:e,onChange:t,disabled:r=!1,error:l,filterMap:i}){let[s,d]=(0,a.useState)(null),[m,u]=(0,a.useState)(!1),[p,_]=(0,a.useState)(!1),[f,b]=(0,a.useState)(!1),[y,h]=(0,a.useState)(!1),[v,S]=(0,a.useState)(null),T=(0,a.useCallback)(e=>"CALCULATION"===e.dataDefinitionType?"calculated":"IDENTIFIER"===e.dataDefinitionType?"identifiers":"PERSON_ATTRIBUTE"===e.dataDefinitionType?"GENDER"===e.dataDefinitionConfig.type||"BIRTHDATE"===e.dataDefinitionConfig.type?"demographics":"attributes":"PERSON_NAME"===e.dataDefinitionType||"PERSON_ADDRESS"===e.dataDefinitionType?"demographics":["full_name","given_name","family_name","sex","gender","birth_date","death_date","village","parish","city_village","address1","state_province","country"].includes(e.name.toLowerCase().replace(/[\s-]+/g,"_"))?"demographics":"other",[]),C=(0,a.useMemo)(()=>{let t={calculated:[],attributes:[],identifiers:[],demographics:[],other:[]};return e.forEach(e=>{t[T(e)].push(e)}),t},[e,T]),w=(0,a.useCallback)(r=>{t(e.filter(e=>e.id!==r))},[e,t]),N=(0,a.useCallback)(e=>{switch(d(e),e.dataDefinitionType){case"OBSERVATION":_(!0);break;case"ENCOUNTER_DIAGNOSIS":b(!0);break;default:u(!0)}},[]),I=(0,a.useCallback)(r=>{let a=e.findIndex(e=>e.id===r.id);if(-1!==a){let n=[...e];n[a]=r,t(n)}u(!1),d(null)},[e,t]),k=(0,a.useCallback)(()=>{u(!1),_(!1),b(!1),d(null)},[]),A=(0,a.useCallback)(e=>{navigator.clipboard.writeText(e).then(()=>{})},[]),R=(0,a.useCallback)(r=>{let a=e.findIndex(e=>e.id===r);if(a<=0)return;let n=[...e];[n[a-1],n[a]]=[n[a],n[a-1]],n.forEach((e,t)=>e.sortOrder=t),t(n)},[e,t]),O=(0,a.useCallback)(r=>{let a=e.findIndex(e=>e.id===r);if(-1===a||a>=e.length-1)return;let n=[...e];[n[a],n[a+1]]=[n[a+1],n[a]],n.forEach((e,t)=>e.sortOrder=t),t(n)},[e,t]),D=(0,a.useCallback)(e=>{S(e),h(!0)},[]),x=e.length;return n().createElement("div",{className:sL.container},n().createElement(o.BJc,{gap:4},l&&n().createElement("div",{className:sL.error},l),n().createElement("div",{className:sL.summary},n().createElement("span",{className:sL.summaryText},x," column",1!==x?"s":""," selected"),x>0&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>t([]),disabled:r},"Clear All")),0===x&&n().createElement("div",{className:sL.emptyState},n().createElement("p",null,"No columns selected. Use the Data Catalogue panel to add columns to your linelist report.")),x>0&&n().createElement(o.nD3,{className:sL.accordion},Object.values(sH).map(t=>{let a=C[t.id],l=a.length;return 0===l?null:n().createElement(o.AsP,{key:t.id,title:n().createElement("div",{className:sL.categoryHeader},n().createElement("span",{className:sL.categoryIcon},t.icon&&n().createElement(t.icon,{size:16})),n().createElement("span",{className:sL.categoryName},t.name),n().createElement(o.vwO,{size:"sm",type:"cool-gray"},l)),open:!0},n().createElement("div",{className:sL.categoryContent},n().createElement("p",{className:sL.categoryDescription},t.description),n().createElement("div",{className:sL.columnList},a.map(t=>n().createElement("div",{key:t.id,className:sL.columnItem,"data-column-id":t.id,"data-position":t.sortOrder},n().createElement("div",{className:sL.columnPosition},n().createElement("span",{className:sL.positionNumber},"#",t.sortOrder+1)),n().createElement("div",{className:sL.columnInfo},n().createElement("span",{className:sL.columnName},t.name),n().createElement(o.vwO,{size:"sm",type:"blue",className:sL.columnIdTag},"ID: ",t.id),t.source?.dataSourceName&&n().createElement(o.vwO,{size:"sm",type:"cool-gray"},t.source.dataSourceName),n().createElement(o.vwO,{size:"sm",type:"gray"},t.dataDefinitionType)),n().createElement("div",{className:sL.columnActions},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:E.Do,onClick:()=>R(t.id),disabled:r||0===t.sortOrder,iconDescription:"Move column up"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:E.yd,onClick:()=>O(t.id),disabled:r||t.sortOrder===e.length-1,iconDescription:"Move column down"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:c.QR,onClick:()=>A(t.id),disabled:r,iconDescription:"Copy column ID to clipboard"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:g.wB,onClick:()=>D(t),disabled:r,iconDescription:"View column debug info",style:{color:"#0f62fe"}}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:es.ff,onClick:()=>N(t),disabled:r,iconDescription:"Edit column"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,onClick:()=>w(t.id),disabled:r,iconDescription:"Remove column"})))))))})),n().createElement(sF,{open:m,column:s,onSave:I,onClose:k,filterMap:i}),n().createElement(sT,{open:p,onClose:k,onAddColumn:I,existingColumns:e,editingColumn:s}),n().createElement(sN,{open:f,onClose:k,onAddColumn:I,existingColumns:e,editingColumn:s}),y&&v&&n().createElement(sq,{column:v,onClose:()=>{h(!1),S(null)}})))}let sG="-esm-report-builder__parameter-panel__sectionTitle___wEKUC",sV="-esm-report-builder__parameter-panel__helperText___YnhSF",sW=[{value:"DATE",label:"Date",description:"Date value (e.g., for report start/end dates)",needsConfig:!1},{value:"DATETIME",label:"Date & Time",description:"Date and time value with time component",needsConfig:!1},{value:"LOCATION",label:"Location",description:"Facility or location picker",needsConfig:!0},{value:"PROGRAM",label:"Program",description:"Program selection (e.g., HIV, TB)",needsConfig:!0},{value:"PROVIDER",label:"Provider",description:"Healthcare provider selection",needsConfig:!0},{value:"CONCEPT",label:"Concept",description:"OpenMRS concept/value selection",needsConfig:!0},{value:"CODED_VALUE",label:"Coded Value",description:"Coded value from a defined answer list",needsConfig:!0},{value:"BOOLEAN",label:"Boolean",description:"Yes/No toggle",needsConfig:!1},{value:"NUMBER",label:"Number",description:"Numeric value",needsConfig:!1},{value:"TEXT",label:"Text",description:"Free text input",needsConfig:!1}],sK={DATE:"blue",DATETIME:"cyan",LOCATION:"green",PROGRAM:"purple",PROVIDER:"magenta",CONCEPT:"red",CODED_VALUE:"warm-gray",IDENTIFIER_TYPE:"teal",PERSON_ATTRIBUTE:"purple",BOOLEAN:"gray",NUMBER:"teal",TEXT:"cool-gray",LIST:"blue"};function sQ({parameters:e,onChange:t,disabled:r=!1}){let[l,i]=(0,a.useState)(new Set),s=r=>{let a={id:`param-${Date.now()}`,name:r,label:"startDate"===r?"Start Date":"End Date",type:"DATE",required:!0,defaultValue:"",displayOrder:e.length,config:{type:"DATE",includeTime:!1}};t([...e,a])},d=(r,a)=>{t(e.map(e=>e.id===r?{...e,...a}:e))},c=(r,a)=>{let n=[...e],l="up"===a?r-1:r+1;l<0||l>=n.length||([n[r],n[l]]=[n[l],n[r]],n.forEach((e,t)=>{e.displayOrder=t}),t(n))};return n().createElement("div",{className:"-esm-report-builder__parameter-panel__container___qtbXF"},n().createElement(o.BJc,{gap:4},n().createElement("div",{className:"-esm-report-builder__parameter-panel__quickAdd___NcrBq"},n().createElement("h4",{className:sG},"Quick Add Common Parameters"),n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:()=>s("startDate"),disabled:r},"Start Date"),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:()=>s("endDate"),disabled:r},"End Date"),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:()=>{let r={id:`param-${Date.now()}`,name:"location",label:"Location",type:"LOCATION",required:!1,defaultValue:"",displayOrder:e.length,config:{type:"LOCATION"}};t([...e,r])},disabled:r},"Location"))),n().createElement(o.$nd,{kind:"secondary",renderIcon:b.OM,onClick:()=>{let r={id:`param-${Date.now()}`,name:"",label:"",type:"TEXT",required:!1,defaultValue:"",displayOrder:e.length,config:{type:"TEXT"}};t([...e,r])},disabled:r},"Add Custom Parameter"),e.length>0&&n().createElement("div",{className:"-esm-report-builder__parameter-panel__parametersTable___y5Wq7"},n().createElement("h4",{className:sG},"Parameters (",e.length,")"),n().createElement(o.bQt,{rows:e.map(e=>({id:e.id,...e})),headers:[]},({rows:a})=>n().createElement(o.BFY,null,a.map((a,s)=>{let m=e[s];if(!m||!m.id)return null;let u=l.has(m.id),p=sW.find(e=>e.value===m.type);return n().createElement(n().Fragment,{key:m.id},n().createElement(o.Hjg,null,n().createElement(o.nA6,{className:"-esm-report-builder__parameter-panel__orderCell___eBvXS"},s+1),n().createElement(o.nA6,null,n().createElement(o.ksK,{id:`param-name-${m.id}`,labelText:"",hideLabel:!0,placeholder:"parameter_name",value:m.name,onChange:e=>d(m.id,{name:e.target.value}),disabled:r})),n().createElement(o.nA6,null,n().createElement(o.ksK,{id:`param-label-${m.id}`,labelText:"",hideLabel:!0,placeholder:"Display Label",value:m.label,onChange:e=>d(m.id,{label:e.target.value}),disabled:r})),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:sK[m.type]},p?.label||m.type)),n().createElement(o.nA6,null,m.required?n().createElement(o.vwO,{type:"red"},"Required"):null),n().createElement(o.nA6,{className:"-esm-report-builder__parameter-panel__actionsCell___Pbeyp"},n().createElement(o.Te$,null,n().createElement(o.$nd,{hasIconOnly:!0,kind:"ghost",size:"sm",renderIcon:U.rX,onClick:()=>c(s,"up"),disabled:r||0===s,iconDescription:"Move up"}),n().createElement(o.$nd,{hasIconOnly:!0,kind:"ghost",size:"sm",renderIcon:U.yQ,onClick:()=>c(s,"down"),disabled:r||s===e.length-1,iconDescription:"Move down"}),n().createElement(o.$nd,{hasIconOnly:!0,kind:"ghost",size:"sm",renderIcon:P.zH,onClick:()=>{var r;return r=m.id,void t(e.filter(e=>e.id!==r).map((e,t)=>({...e,displayOrder:t})))},disabled:r,iconDescription:"Remove parameter"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>{var e;return e=m.id,void i(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},disabled:r},u?"Less":"More")))),u&&n().createElement(o.Hjg,{className:"-esm-report-builder__parameter-panel__expandedRow___7Z-W+"},n().createElement(o.nA6,{colSpan:6},n().createElement("div",{className:"-esm-report-builder__parameter-panel__expandedContent___5xPhD"},n().createElement(o.BJc,{gap:3},n().createElement(o.l6P,{id:`param-type-${m.id}`,labelText:"Parameter Type",value:m.type,onChange:e=>{let t=e.target.value,r={type:t};switch(t){case"DATE":case"DATETIME":r={type:t,includeTime:!1};break;case"LIST":r={type:"LIST",options:[]};break;case"TEXT":r={type:"TEXT"};break;default:r={type:t}}d(m.id,{type:t,config:r})},disabled:r},sW.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label,title:e.description}))),p?.description&&n().createElement("p",{className:sV},p.description),n().createElement(o.lMk,{id:`param-required-${m.id}`,labelText:"Required (user must provide value)",toggled:m.required,onToggle:e=>d(m.id,{required:e}),disabled:r}),n().createElement(o.ksK,{id:`param-default-${m.id}`,labelText:"Default Value (optional)",placeholder:"e.g., 2024-01-01, current_location",value:m.defaultValue||"",onChange:e=>d(m.id,{defaultValue:e.target.value}),disabled:r,helperText:"This value will be used if user doesn't provide one"}),n().createElement(o.ksK,{id:`param-order-${m.id}`,labelText:"Display Order",type:"number",value:String(m.displayOrder),onChange:e=>d(m.id,{displayOrder:Number(e.target.value)}),disabled:r,helperText:"Order in which parameters appear to users"}),(e=>{switch(e.type){case"DATE":case"DATETIME":return n().createElement(o.lMk,{id:`param-include-time-${e.id}`,labelText:"Include time component",toggled:e.config?.includeTime||!1,onToggle:t=>d(e.id,{config:{...e.config,includeTime:t,type:e.type}}),disabled:r});case"LOCATION":return n().createElement(o.ksK,{id:`param-locations-${e.id}`,labelText:"Allowed Location UUIDs (comma-separated)",placeholder:"e.g., uuid1,uuid2,uuid3",value:e.config?.locationUuids?.join(",")||"",onChange:t=>d(e.id,{config:{...e.config,type:"LOCATION",locationUuids:t.target.value.split(",").map(e=>e.trim()).filter(Boolean)}}),disabled:r,helperText:"Leave empty for all locations"});case"PROGRAM":case"PROVIDER":case"CONCEPT":case"CODED_VALUE":return n().createElement(o.ksK,{id:`param-source-${e.id}`,labelText:"Source UUID (for data source)",placeholder:"e.g., program-uuid, concept-uuid",value:e.config?.sourceUuid||"",onChange:t=>d(e.id,{config:{...e.config,type:e.type,sourceUuid:t.target.value}}),disabled:r,helperText:"The UUID of the data source for this parameter type"});case"LIST":return n().createElement(o.ksK,{id:`param-list-options-${e.id}`,labelText:"List Options (JSON format)",placeholder:'[{"value":"1","label":"One"},{"value":"2","label":"Two"}]',value:e.config?.options?JSON.stringify(e.config.options):"",onChange:t=>{try{let r=JSON.parse(t.target.value);d(e.id,{config:{type:"LIST",options:r}})}catch{}},disabled:r,helperText:"Array of objects with value and label properties"});case"IDENTIFIER_TYPE":return n().createElement(o.ksK,{id:`param-ident-types-${e.id}`,labelText:"Allowed Identifier Type UUIDs (comma-separated)",placeholder:"e.g., uuid1,uuid2,uuid3",value:e.config?.identifierTypeUuids?.join(",")||"",onChange:t=>d(e.id,{config:{...e.config,type:"IDENTIFIER_TYPE",identifierTypeUuids:t.target.value.split(",").map(e=>e.trim()).filter(Boolean)}}),disabled:r,helperText:"Leave empty for all identifier types"});case"PERSON_ATTRIBUTE":return n().createElement(o.ksK,{id:`param-attr-format-${e.id}`,labelText:"Format filter (e.g., org.openmrs.Concept)",placeholder:"e.g., org.openmrs.Concept",value:e.config?.format||"",onChange:t=>d(e.id,{config:{...e.config,type:"PERSON_ATTRIBUTE",format:t.target.value}}),disabled:r,helperText:"Filter by attribute type format"});default:return null}})(m))))))})))),0===e.length&&n().createElement("div",{className:"-esm-report-builder__parameter-panel__emptyState___ens3F"},n().createElement("p",null,"No parameters defined. Add parameters to allow users to customize report output at runtime."),n().createElement("p",{className:sV},"Common parameters: Start Date, End Date, Location, Program"))))}let sY="-esm-report-builder__filtermap-editor__fieldGroup___UtS6F",sX=["SELECT","FROM","WHERE","AND","OR","NOT","IN","BETWEEN","JOIN","LEFT","RIGHT","INNER","OUTER","ON","AS","ORDER","BY","GROUP","HAVING","UNION","EXISTS","DISTINCT","NULL","IS","patientId","clientId","startDate","endDate"];function sZ(e){if(!e||""===e.trim())return!1;let t=e.trim();return!(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)||sX.includes(t.toUpperCase()))}function s0(e){if(!e||""===e.trim())return!1;let t=e.trim();return/^[\w.]+$/.test(t)}let s1=({filterMap:e,onChange:t,availableColumns:r,disabled:l=!1,sqlQuery:i})=>{let[s,d]=(0,a.useState)(()=>e?Object.entries(e).map(([e,t])=>({parameterName:e,columnReference:t})):[]),[c,m]=(0,a.useState)({}),[u,p]=(0,a.useState)(!1);n().useEffect(()=>{e&&0!==Object.keys(e).length?d(Object.entries(e).map(([e,t])=>({parameterName:e,columnReference:t}))):d([])},[e]);let _=(0,a.useMemo)(()=>i?function(e){let t=e.trim();if(!t)return[];let r=t.match(/SELECT\s+(?:DISTINCT\s+)?([\s\S]+?)\s+FROM/i);if(!r)return[];let a=r[1],n=[];for(let e of a.split(",").map(e=>e.trim())){if(!e)continue;let t=e.match(/(\w+)\.(\w+)/);if(t){let[,e,r]=t;n.push({name:r,reference:`${e}.${r}`})}else{let t=e.split(/\s+/)[0];t&&!t.includes("(")&&n.push({name:t,reference:t})}}return n}(i):[],[i]),g=r||_,E=e=>{d(e);let r={};e.forEach((e,t)=>{e.parameterName&&!sZ(e.parameterName)&&(r[t]="Invalid parameter name"),e.columnReference&&!s0(e.columnReference)&&(r[t]="Invalid column reference")}),m(r),t((e=>{let t=e.filter(e=>sZ(e.parameterName)&&s0(e.columnReference));if(0!==t.length)return Object.fromEntries(t.map(e=>[e.parameterName.trim(),e.columnReference.trim()]))})(e))},f=(e,t,r)=>{let a=[...s];a[e]={...a[e],[t]:r},E(a)},y=Object.keys(c).length>0,h=s.length>0;return n().createElement("div",{className:"-esm-report-builder__filtermap-editor__container___3VKia"},n().createElement(o.BJc,{gap:4},n().createElement("div",{className:"-esm-report-builder__filtermap-editor__header___v62qf"},n().createElement("div",{className:"-esm-report-builder__filtermap-editor__headerTitle___RV47u"},n().createElement(tN.$$,{size:16}),n().createElement("h4",null,"FilterMap Configuration")),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>p(!u)},u?"Hide":"What is this?")),u&&n().createElement("div",{className:"-esm-report-builder__filtermap-editor__infoPanel___8POeK"},n().createElement(o.jeF,{kind:"info",title:"About FilterMap",subtitle:"FilterMap enables column queries to filter to the exact row that matched the base cohort criteria. Use this when: Base cohort SELECTs multiple identifier columns (episode_id, order_id, etc.), Column queries reference the same table as the base cohort, and Multiple rows exist per patient and you need consistent data across columns.",hideCloseButton:!0,lowContrast:!0}),n().createElement("div",{className:"-esm-report-builder__filtermap-editor__infoDetails___nXYcY"},n().createElement("p",{className:"-esm-report-builder__filtermap-editor__example___7Mjo2"},n().createElement("strong",null,"Example:")," If base cohort selects ",n().createElement("code",null,"patient_id, episode_id, order_id"),", you can map these to parameters that column queries use:"),n().createElement("pre",{className:"-esm-report-builder__filtermap-editor__codeExample___JVgP+"},`{
|
|
364
|
+
`,sP=[{value:"LATEST",label:"Latest",description:"Use the most recent value"},{value:"EARLIEST",label:"Earliest",description:"Use the earliest value"},{value:"FIRST_WITHIN_PERIOD",label:"First within period",description:"Use the first value within reporting period"},{value:"LAST_WITHIN_PERIOD",label:"Last within period",description:"Use the last value within reporting period"},{value:"ALL_VALUES",label:"All values",description:"Show all values (may change row grain)"}],sU=[{value:"left",label:"Left"},{value:"center",label:"Center"},{value:"right",label:"Right"}],sB=[{value:"text",label:"Text"},{value:"number",label:"Number"},{value:"date",label:"Date"},{value:"datetime",label:"Date & Time"},{value:"boolean",label:"Boolean"},{value:"percentage",label:"Percentage"},{value:"currency",label:"Currency"}],sF=["encounter_date","encounter_datetime","date_created","date_modified"],sz=({open:e,column:t,onSave:r,onClose:l,filterMap:i})=>{let[s,d]=(0,a.useState)(null);if((0,a.useEffect)(()=>{t&&d({...t})},[t,e]),!s)return null;let c="SQL"===s.dataDefinitionType&&/appointment|observation|encounter|program_enrollment|visit/i.test(s.dataDefinitionConfig?.sql||""),m=(e,t)=>{d(r=>r?{...r,[e]:t}:null)},u=(e,t)=>{d(r=>r?{...r,display:{...r.display,[e]:t}}:null)},p=(e,t)=>{d(r=>r?{...r,repeatResolution:{...r.repeatResolution,[e]:t}}:null)};return n().createElement(n().Fragment,null,n().createElement("style",null,s$),n().createElement(o.aFV,{open:e,onRequestClose:l,size:"md",modalHeading:"Edit Column",modalLabel:"Column Configuration",primaryButtonText:"Save Changes",onRequestSubmit:()=>{s&&r(s)},secondaryButtonText:"Cancel"},n().createElement(o.cwr,null,n().createElement(o.BJc,{gap:6},n().createElement("div",null,n().createElement("h4",{className:"cds--label"},"Basic Information"),n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"column-name",labelText:"Display Name",value:s.name,onChange:e=>m("name",e.target.value),placeholder:"Enter display name"}),n().createElement(o.ksK,{id:"column-description",labelText:"Description",value:s.description||"",onChange:e=>m("description",e.target.value),placeholder:"Enter description (optional)"}))),n().createElement("div",null,n().createElement("h4",{className:"cds--label"},"Display Settings"),n().createElement(o.BJc,{gap:4},n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(o.Q7x,{id:"column-width",label:"Width (px)",value:s.display?.width||150,onChange:e=>{let t=e.target;u("width",t.value?Number(t.value):150)},min:50,max:500,step:10}),n().createElement(o.l6P,{id:"column-align",labelText:"Alignment",value:s.display?.align||"left",onChange:e=>u("align",e.target.value)},sU.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label})))),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(o.l6P,{id:"column-format",labelText:"Format",value:s.display?.format||"text",onChange:e=>u("format",e.target.value)},sB.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement("div",{style:{display:"flex",alignItems:"flex-end",gap:"1rem"}},n().createElement(o.lMk,{id:"column-sortable",labelText:"Sortable",toggled:s.display?.sortable||!1,onToggle:e=>u("sortable",e)}),n().createElement(o.lMk,{id:"column-filterable",labelText:"Filterable",toggled:s.display?.filterable||!1,onToggle:e=>u("filterable",e)}))))),c&&n().createElement("div",{style:{background:"var(--cds-layer-01, #f4f4f4)",padding:"1rem",borderRadius:"8px"}},n().createElement("h4",{className:"cds--label"},"Repeat Resolution"),n().createElement("p",{style:{fontSize:"0.875rem",marginBottom:"1rem",opacity:.9}},"This column may return multiple values per row. Configure how to handle them."),n().createElement(o.BJc,{gap:4},n().createElement(o.l6P,{id:"resolution-strategy",labelText:"Resolution Strategy",value:s.repeatResolution?.strategy||"LATEST",onChange:e=>p("strategy",e.target.value)},sP.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:`${e.label} - ${e.description}`}))),(s.repeatResolution?.strategy==="LATEST"||s.repeatResolution?.strategy==="EARLIEST"||s.repeatResolution?.strategy==="FIRST_WITHIN_PERIOD"||s.repeatResolution?.strategy==="LAST_WITHIN_PERIOD")&&n().createElement(n().Fragment,null,n().createElement(o.l6P,{id:"resolution-orderby",labelText:"Order By Field",value:s.repeatResolution?.orderBy||"encounter_date",onChange:e=>p("orderBy",e.target.value)},sF.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement(o.lMk,{id:"resolution-ignore-voided",labelText:"Ignore voided records",toggled:s.repeatResolution?.ignoreVoided!==!1,onToggle:e=>p("ignoreVoided",e)}),n().createElement(o.lMk,{id:"resolution-restrict-period",labelText:"Restrict to time period",toggled:s.repeatResolution?.restrictToPeriod||!1,onToggle:e=>p("restrictToPeriod",e)})))),"SQL"===s.dataDefinitionType&&n().createElement("div",{style:{background:"var(--cds-layer-01, #f4f4f4)",padding:"1rem",borderRadius:"8px"}},n().createElement("h4",{className:"cds--label"},"SQL Definition"),n().createElement("p",{style:{fontSize:"0.875rem",marginBottom:"1rem",opacity:.9}},"Edit the SQL query for this column. Use ",n().createElement("code",null,":patientId")," to reference the current patient."),n().createElement(o.fs1,{id:"column-sql",className:"sql-editor",placeholder:"SELECT field_name FROM table_name WHERE patient_id = :patientId...",value:s.dataDefinitionConfig?.sql||"",onChange:e=>{var t;return t=e.target.value,void d(e=>e?{...e,dataDefinitionConfig:{...e.dataDefinitionConfig,sql:t}}:null)},rows:6,labelText:""}),n().createElement("div",{style:{marginTop:"0.5rem",fontSize:"0.875rem",opacity:.7}},n().createElement("small",null,"Available parameters: "),n().createElement(o.vwO,{size:"sm",type:"blue"},n().createElement("code",null,":patientId")),n().createElement(o.vwO,{size:"sm",type:"blue"},n().createElement("code",null,":startDate")),n().createElement(o.vwO,{size:"sm",type:"blue"},n().createElement("code",null,":endDate")),i&&Object.keys(i).length>0&&n().createElement(n().Fragment,null,n().createElement("small",{style:{marginLeft:"0.5rem"}},"| FilterMap parameters:"),Object.entries(i).map(([e,t])=>n().createElement(o.vwO,{key:e,size:"sm",type:"green"},n().createElement("code",null,":",e),n().createElement("span",{style:{opacity:.7,fontSize:"0.75em"}}," → ",t))))),i&&Object.keys(i).length>0&&n().createElement("div",{style:{marginTop:"0.5rem",fontSize:"0.75rem",opacity:.6}},n().createElement("small",null,"\uD83D\uDCA1 FilterMap parameters allow you to reference specific columns from the base cohort row (e.g., ",n().createElement("code",null,":",Object.keys(i)[0])," for the exact row that matched)"))),n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8}},n().createElement("p",null,n().createElement("strong",null,"Type:")," ",s.dataDefinitionType),s.source?.dataSourceName&&n().createElement("p",null,n().createElement("strong",null,"Source:")," ",s.source.dataSourceName),s.source?.table&&n().createElement("p",null,n().createElement("strong",null,"Table:")," ",s.source.table))))))},sq={debugPanel:"-esm-report-builder__column-debug-panel__debugPanel___zvbb6",header:"-esm-report-builder__column-debug-panel__header___U8qzg",headerTitle:"-esm-report-builder__column-debug-panel__headerTitle___yGmkv",accordion:"-esm-report-builder__column-debug-panel__accordion___cWavn",section:"-esm-report-builder__column-debug-panel__section___xWLtw",row:"-esm-report-builder__column-debug-panel__row___qkZRQ",label:"-esm-report-builder__column-debug-panel__label___PxVGF",value:"-esm-report-builder__column-debug-panel__value___P2qJI",valueEmpty:"-esm-report-builder__column-debug-panel__valueEmpty___3QbIB",codeInline:"-esm-report-builder__column-debug-panel__codeInline___cd113",code:"-esm-report-builder__column-debug-panel__code___38YK3",warning:"-esm-report-builder__column-debug-panel__warning___xPDQE",info:"-esm-report-builder__column-debug-panel__info___lZSW4"};function sj({column:e,onClose:t}){return n().createElement("div",{className:sq.debugPanel},n().createElement("div",{className:sq.header},n().createElement("div",{className:sq.headerTitle},n().createElement(g.wB,{size:16,className:sq.icon}),n().createElement("span",null,"Column Debug Info")),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:t},"Close")),n().createElement(o.nD3,{className:sq.accordion},n().createElement(o.AsP,{title:"Basic Information",open:!0},n().createElement("div",{className:sq.section},n().createElement(sH,{label:"Column ID",value:e.id,type:"uuid"}),n().createElement(sH,{label:"Name",value:e.name}),n().createElement(sH,{label:"Description",value:e.description}),n().createElement(sH,{label:"Position (sortOrder)",value:e.sortOrder?.toString(),type:"number"}),n().createElement(sH,{label:"Data Type",value:e.dataDefinitionType,type:"tag"}))),n().createElement(o.AsP,{title:"Source Information",open:!0},n().createElement("div",{className:sq.section},e.source?n().createElement(n().Fragment,null,n().createElement(sH,{label:"Data Source UUID",value:e.source.dataSourceUuid,type:"uuid"}),n().createElement(sH,{label:"Data Source Name",value:e.source.dataSourceUuid}),n().createElement(sH,{label:"Table",value:e.source.table,type:"code"}),n().createElement(sH,{label:"Field",value:e.source.field,type:"code"}),n().createElement(sH,{label:"Field Type",value:e.source.fieldType,type:"tag"}),e.source.conceptUuid&&n().createElement(sH,{label:"Concept UUID",value:e.source.conceptUuid,type:"uuid"}),e.source.attributeTypeUuid&&n().createElement(sH,{label:"Attribute Type UUID",value:e.source.attributeTypeUuid,type:"uuid"}),e.source.identifierTypeUuid&&n().createElement(sH,{label:"Identifier Type UUID",value:e.source.identifierTypeUuid,type:"uuid"})):n().createElement("div",{className:sq.warning},n().createElement(tN.$$,{size:16}),n().createElement("span",null,"No source information available")))),n().createElement(o.AsP,{title:"Data Definition Config",open:!1},n().createElement("div",{className:sq.section},e.dataDefinitionConfig?n().createElement("pre",{className:sq.code},JSON.stringify(e.dataDefinitionConfig,null,2)):n().createElement("div",{className:sq.warning},n().createElement(tN.$$,{size:16}),n().createElement("span",null,"No data definition config available")))),n().createElement(o.AsP,{title:"Repeat Resolution",open:!1},n().createElement("div",{className:sq.section},e.repeatResolution?n().createElement(n().Fragment,null,n().createElement(sH,{label:"Strategy",value:e.repeatResolution.strategy}),n().createElement(sH,{label:"Order By",value:e.repeatResolution.orderBy}),n().createElement(sH,{label:"Restrict to Period",value:e.repeatResolution.restrictToPeriod?.toString(),type:"boolean"}),n().createElement(sH,{label:"Ignore Voided",value:e.repeatResolution.ignoreVoided?.toString(),type:"boolean"})):n().createElement("div",{className:sq.info},n().createElement(tN.$$,{size:16}),n().createElement("span",null,"No repeat resolution configured")))),n().createElement(o.AsP,{title:"Display Settings",open:!1},n().createElement("div",{className:sq.section},e.display?n().createElement(n().Fragment,null,n().createElement(sH,{label:"Width",value:e.display.width?.toString(),type:"number"}),n().createElement(sH,{label:"Align",value:e.display.align}),n().createElement(sH,{label:"Sortable",value:e.display.sortable?.toString(),type:"boolean"}),n().createElement(sH,{label:"Filterable",value:e.display.filterable?.toString(),type:"boolean"}),n().createElement(sH,{label:"Format",value:e.display.format})):n().createElement("div",{className:sq.info},n().createElement(tN.$$,{size:16}),n().createElement("span",null,"No display settings configured")))),n().createElement(o.AsP,{title:"Addition Info",open:!1},n().createElement("div",{className:sq.section},e.additionInfo?n().createElement(n().Fragment,null,n().createElement(sH,{label:"Added Via",value:e.additionInfo.addedVia}),n().createElement(sH,{label:"Added At",value:e.additionInfo.addedAt}),n().createElement(sH,{label:"Order Added",value:e.additionInfo.orderAdded?.toString(),type:"number"})):n().createElement("div",{className:sq.info},n().createElement(tN.$$,{size:16}),n().createElement("span",null,"No addition info available")))),n().createElement(o.AsP,{title:"Raw Column JSON",open:!1},n().createElement("div",{className:sq.section},n().createElement(o.z7k,{type:"multi",feedback:"Copied!"},JSON.stringify(e,null,2))))))}function sH({label:e,value:t,type:r="text"}){if(null==t||""===t)return n().createElement("div",{className:sq.row},n().createElement("span",{className:sq.label},e,":"),n().createElement("span",{className:sq.valueEmpty},"(not set)"));let a=t;switch(r){case"uuid":case"code":a=n().createElement("code",{className:sq.codeInline},t);break;case"tag":a=n().createElement(o.vwO,{size:"sm",type:"cool-gray"},t);break;case"boolean":a=n().createElement(o.vwO,{size:"sm",type:"true"===t?"green":"red"},"true"===t?"Yes":"No");break;case"number":a=n().createElement(o.vwO,{size:"sm",type:"blue"},t);break;default:a=t}return n().createElement("div",{className:sq.row},n().createElement("span",{className:sq.label},e,":"),n().createElement("span",{className:sq.value},a))}let sJ={calculated:{id:"calculated",name:"Calculated Fields",description:"Fields calculated from other data (Age, BMI, etc.)",icon:m.zt},attributes:{id:"attributes",name:"Person Attributes",description:"Custom person attributes (Telephone, Civil Status, etc.)",icon:f.vw},identifiers:{id:"identifiers",name:"Patient Identifiers",description:"Patient identification numbers (Clinic Number, EID Number, etc.)",icon:s.vG},demographics:{id:"demographics",name:"Demographics",description:"Built-in demographic fields (Name, Gender, Birth Date, etc.)",icon:P.KJ},other:{id:"other",name:"Other Fields",description:"ETL table columns and other fields",icon:_.n5}};function sG({columns:e,onChange:t,disabled:r=!1,error:l,filterMap:i}){let[s,d]=(0,a.useState)(null),[m,u]=(0,a.useState)(!1),[p,_]=(0,a.useState)(!1),[f,b]=(0,a.useState)(!1),[y,h]=(0,a.useState)(!1),[v,S]=(0,a.useState)(null),T=(0,a.useCallback)(e=>"CALCULATION"===e.dataDefinitionType?"calculated":"IDENTIFIER"===e.dataDefinitionType?"identifiers":"PERSON_ATTRIBUTE"===e.dataDefinitionType?"GENDER"===e.dataDefinitionConfig.type||"BIRTHDATE"===e.dataDefinitionConfig.type?"demographics":"attributes":"PERSON_NAME"===e.dataDefinitionType||"PERSON_ADDRESS"===e.dataDefinitionType?"demographics":["full_name","given_name","family_name","sex","gender","birth_date","death_date","village","parish","city_village","address1","state_province","country"].includes(e.name.toLowerCase().replace(/[\s-]+/g,"_"))?"demographics":"other",[]),C=(0,a.useMemo)(()=>{let t={calculated:[],attributes:[],identifiers:[],demographics:[],other:[]};return e.forEach(e=>{t[T(e)].push(e)}),t},[e,T]),w=(0,a.useCallback)(r=>{t(e.filter(e=>e.id!==r))},[e,t]),N=(0,a.useCallback)(e=>{switch(d(e),e.dataDefinitionType){case"OBSERVATION":_(!0);break;case"ENCOUNTER_DIAGNOSIS":b(!0);break;default:u(!0)}},[]),I=(0,a.useCallback)(r=>{let a=e.findIndex(e=>e.id===r.id);if(-1!==a){let n=[...e];n[a]=r,t(n)}u(!1),d(null)},[e,t]),k=(0,a.useCallback)(()=>{u(!1),_(!1),b(!1),d(null)},[]),A=(0,a.useCallback)(e=>{navigator.clipboard.writeText(e).then(()=>{})},[]),R=(0,a.useCallback)(r=>{let a=e.findIndex(e=>e.id===r);if(a<=0)return;let n=[...e];[n[a-1],n[a]]=[n[a],n[a-1]],n.forEach((e,t)=>e.sortOrder=t),t(n)},[e,t]),O=(0,a.useCallback)(r=>{let a=e.findIndex(e=>e.id===r);if(-1===a||a>=e.length-1)return;let n=[...e];[n[a],n[a+1]]=[n[a+1],n[a]],n.forEach((e,t)=>e.sortOrder=t),t(n)},[e,t]),D=(0,a.useCallback)(e=>{S(e),h(!0)},[]),x=e.length;return n().createElement("div",{className:sM.container},n().createElement(o.BJc,{gap:4},l&&n().createElement("div",{className:sM.error},l),n().createElement("div",{className:sM.summary},n().createElement("span",{className:sM.summaryText},x," column",1!==x?"s":""," selected"),x>0&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>t([]),disabled:r},"Clear All")),0===x&&n().createElement("div",{className:sM.emptyState},n().createElement("p",null,"No columns selected. Use the Data Catalogue panel to add columns to your linelist report.")),x>0&&n().createElement(o.nD3,{className:sM.accordion},Object.values(sJ).map(t=>{let a=C[t.id],l=a.length;return 0===l?null:n().createElement(o.AsP,{key:t.id,title:n().createElement("div",{className:sM.categoryHeader},n().createElement("span",{className:sM.categoryIcon},t.icon&&n().createElement(t.icon,{size:16})),n().createElement("span",{className:sM.categoryName},t.name),n().createElement(o.vwO,{size:"sm",type:"cool-gray"},l)),open:!0},n().createElement("div",{className:sM.categoryContent},n().createElement("p",{className:sM.categoryDescription},t.description),n().createElement("div",{className:sM.columnList},a.map(t=>n().createElement("div",{key:t.id,className:sM.columnItem,"data-column-id":t.id,"data-position":t.sortOrder},n().createElement("div",{className:sM.columnPosition},n().createElement("span",{className:sM.positionNumber},"#",t.sortOrder+1)),n().createElement("div",{className:sM.columnInfo},n().createElement("span",{className:sM.columnName},t.name),n().createElement(o.vwO,{size:"sm",type:"blue",className:sM.columnIdTag},"ID: ",t.id),t.source?.dataSourceName&&n().createElement(o.vwO,{size:"sm",type:"cool-gray"},t.source.dataSourceName),n().createElement(o.vwO,{size:"sm",type:"gray"},t.dataDefinitionType)),n().createElement("div",{className:sM.columnActions},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:E.Do,onClick:()=>R(t.id),disabled:r||0===t.sortOrder,iconDescription:"Move column up"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:E.yd,onClick:()=>O(t.id),disabled:r||t.sortOrder===e.length-1,iconDescription:"Move column down"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:c.QR,onClick:()=>A(t.id),disabled:r,iconDescription:"Copy column ID to clipboard"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:g.wB,onClick:()=>D(t),disabled:r,iconDescription:"View column debug info",style:{color:"#0f62fe"}}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:es.ff,onClick:()=>N(t),disabled:r,iconDescription:"Edit column"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,onClick:()=>w(t.id),disabled:r,iconDescription:"Remove column"})))))))})),n().createElement(sz,{open:m,column:s,onSave:I,onClose:k,filterMap:i}),n().createElement(sC,{open:p,onClose:k,onAddColumn:I,existingColumns:e,editingColumn:s}),n().createElement(sI,{open:f,onClose:k,onAddColumn:I,existingColumns:e,editingColumn:s}),y&&v&&n().createElement(sj,{column:v,onClose:()=>{h(!1),S(null)}})))}let sV="-esm-report-builder__parameter-panel__sectionTitle___wEKUC",sW="-esm-report-builder__parameter-panel__helperText___YnhSF",sK=[{value:"DATE",label:"Date",description:"Date value (e.g., for report start/end dates)",needsConfig:!1},{value:"DATETIME",label:"Date & Time",description:"Date and time value with time component",needsConfig:!1},{value:"LOCATION",label:"Location",description:"Facility or location picker",needsConfig:!0},{value:"PROGRAM",label:"Program",description:"Program selection (e.g., HIV, TB)",needsConfig:!0},{value:"PROVIDER",label:"Provider",description:"Healthcare provider selection",needsConfig:!0},{value:"CONCEPT",label:"Concept",description:"OpenMRS concept/value selection",needsConfig:!0},{value:"CODED_VALUE",label:"Coded Value",description:"Coded value from a defined answer list",needsConfig:!0},{value:"BOOLEAN",label:"Boolean",description:"Yes/No toggle",needsConfig:!1},{value:"NUMBER",label:"Number",description:"Numeric value",needsConfig:!1},{value:"TEXT",label:"Text",description:"Free text input",needsConfig:!1}],sQ={DATE:"blue",DATETIME:"cyan",LOCATION:"green",PROGRAM:"purple",PROVIDER:"magenta",CONCEPT:"red",CODED_VALUE:"warm-gray",IDENTIFIER_TYPE:"teal",PERSON_ATTRIBUTE:"purple",BOOLEAN:"gray",NUMBER:"teal",TEXT:"cool-gray",LIST:"blue"};function sY({parameters:e,onChange:t,disabled:r=!1}){let[l,i]=(0,a.useState)(new Set),s=r=>{let a={id:`param-${Date.now()}`,name:r,label:"startDate"===r?"Start Date":"End Date",type:"DATE",required:!0,defaultValue:"",displayOrder:e.length,config:{type:"DATE",includeTime:!1}};t([...e,a])},d=(r,a)=>{t(e.map(e=>e.id===r?{...e,...a}:e))},c=(r,a)=>{let n=[...e],l="up"===a?r-1:r+1;l<0||l>=n.length||([n[r],n[l]]=[n[l],n[r]],n.forEach((e,t)=>{e.displayOrder=t}),t(n))};return n().createElement("div",{className:"-esm-report-builder__parameter-panel__container___qtbXF"},n().createElement(o.BJc,{gap:4},n().createElement("div",{className:"-esm-report-builder__parameter-panel__quickAdd___NcrBq"},n().createElement("h4",{className:sV},"Quick Add Common Parameters"),n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:()=>s("startDate"),disabled:r},"Start Date"),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:()=>s("endDate"),disabled:r},"End Date"),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:()=>{let r={id:`param-${Date.now()}`,name:"location",label:"Location",type:"LOCATION",required:!1,defaultValue:"",displayOrder:e.length,config:{type:"LOCATION"}};t([...e,r])},disabled:r},"Location"))),n().createElement(o.$nd,{kind:"secondary",renderIcon:b.OM,onClick:()=>{let r={id:`param-${Date.now()}`,name:"",label:"",type:"TEXT",required:!1,defaultValue:"",displayOrder:e.length,config:{type:"TEXT"}};t([...e,r])},disabled:r},"Add Custom Parameter"),e.length>0&&n().createElement("div",{className:"-esm-report-builder__parameter-panel__parametersTable___y5Wq7"},n().createElement("h4",{className:sV},"Parameters (",e.length,")"),n().createElement(o.bQt,{rows:e.map(e=>({id:e.id,...e})),headers:[]},({rows:a})=>n().createElement(o.BFY,null,a.map((a,s)=>{let m=e[s];if(!m||!m.id)return null;let u=l.has(m.id),p=sK.find(e=>e.value===m.type);return n().createElement(n().Fragment,{key:m.id},n().createElement(o.Hjg,null,n().createElement(o.nA6,{className:"-esm-report-builder__parameter-panel__orderCell___eBvXS"},s+1),n().createElement(o.nA6,null,n().createElement(o.ksK,{id:`param-name-${m.id}`,labelText:"",hideLabel:!0,placeholder:"parameter_name",value:m.name,onChange:e=>d(m.id,{name:e.target.value}),disabled:r})),n().createElement(o.nA6,null,n().createElement(o.ksK,{id:`param-label-${m.id}`,labelText:"",hideLabel:!0,placeholder:"Display Label",value:m.label,onChange:e=>d(m.id,{label:e.target.value}),disabled:r})),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:sQ[m.type]},p?.label||m.type)),n().createElement(o.nA6,null,m.required?n().createElement(o.vwO,{type:"red"},"Required"):null),n().createElement(o.nA6,{className:"-esm-report-builder__parameter-panel__actionsCell___Pbeyp"},n().createElement(o.Te$,null,n().createElement(o.$nd,{hasIconOnly:!0,kind:"ghost",size:"sm",renderIcon:U.rX,onClick:()=>c(s,"up"),disabled:r||0===s,iconDescription:"Move up"}),n().createElement(o.$nd,{hasIconOnly:!0,kind:"ghost",size:"sm",renderIcon:U.yQ,onClick:()=>c(s,"down"),disabled:r||s===e.length-1,iconDescription:"Move down"}),n().createElement(o.$nd,{hasIconOnly:!0,kind:"ghost",size:"sm",renderIcon:P.zH,onClick:()=>{var r;return r=m.id,void t(e.filter(e=>e.id!==r).map((e,t)=>({...e,displayOrder:t})))},disabled:r,iconDescription:"Remove parameter"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>{var e;return e=m.id,void i(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},disabled:r},u?"Less":"More")))),u&&n().createElement(o.Hjg,{className:"-esm-report-builder__parameter-panel__expandedRow___7Z-W+"},n().createElement(o.nA6,{colSpan:6},n().createElement("div",{className:"-esm-report-builder__parameter-panel__expandedContent___5xPhD"},n().createElement(o.BJc,{gap:3},n().createElement(o.l6P,{id:`param-type-${m.id}`,labelText:"Parameter Type",value:m.type,onChange:e=>{let t=e.target.value,r={type:t};switch(t){case"DATE":case"DATETIME":r={type:t,includeTime:!1};break;case"LIST":r={type:"LIST",options:[]};break;case"TEXT":r={type:"TEXT"};break;default:r={type:t}}d(m.id,{type:t,config:r})},disabled:r},sK.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label,title:e.description}))),p?.description&&n().createElement("p",{className:sW},p.description),n().createElement(o.lMk,{id:`param-required-${m.id}`,labelText:"Required (user must provide value)",toggled:m.required,onToggle:e=>d(m.id,{required:e}),disabled:r}),n().createElement(o.ksK,{id:`param-default-${m.id}`,labelText:"Default Value (optional)",placeholder:"e.g., 2024-01-01, current_location",value:m.defaultValue||"",onChange:e=>d(m.id,{defaultValue:e.target.value}),disabled:r,helperText:"This value will be used if user doesn't provide one"}),n().createElement(o.ksK,{id:`param-order-${m.id}`,labelText:"Display Order",type:"number",value:String(m.displayOrder),onChange:e=>d(m.id,{displayOrder:Number(e.target.value)}),disabled:r,helperText:"Order in which parameters appear to users"}),(e=>{switch(e.type){case"DATE":case"DATETIME":return n().createElement(o.lMk,{id:`param-include-time-${e.id}`,labelText:"Include time component",toggled:e.config?.includeTime||!1,onToggle:t=>d(e.id,{config:{...e.config,includeTime:t,type:e.type}}),disabled:r});case"LOCATION":return n().createElement(o.ksK,{id:`param-locations-${e.id}`,labelText:"Allowed Location UUIDs (comma-separated)",placeholder:"e.g., uuid1,uuid2,uuid3",value:e.config?.locationUuids?.join(",")||"",onChange:t=>d(e.id,{config:{...e.config,type:"LOCATION",locationUuids:t.target.value.split(",").map(e=>e.trim()).filter(Boolean)}}),disabled:r,helperText:"Leave empty for all locations"});case"PROGRAM":case"PROVIDER":case"CONCEPT":case"CODED_VALUE":return n().createElement(o.ksK,{id:`param-source-${e.id}`,labelText:"Source UUID (for data source)",placeholder:"e.g., program-uuid, concept-uuid",value:e.config?.sourceUuid||"",onChange:t=>d(e.id,{config:{...e.config,type:e.type,sourceUuid:t.target.value}}),disabled:r,helperText:"The UUID of the data source for this parameter type"});case"LIST":return n().createElement(o.ksK,{id:`param-list-options-${e.id}`,labelText:"List Options (JSON format)",placeholder:'[{"value":"1","label":"One"},{"value":"2","label":"Two"}]',value:e.config?.options?JSON.stringify(e.config.options):"",onChange:t=>{try{let r=JSON.parse(t.target.value);d(e.id,{config:{type:"LIST",options:r}})}catch{}},disabled:r,helperText:"Array of objects with value and label properties"});case"IDENTIFIER_TYPE":return n().createElement(o.ksK,{id:`param-ident-types-${e.id}`,labelText:"Allowed Identifier Type UUIDs (comma-separated)",placeholder:"e.g., uuid1,uuid2,uuid3",value:e.config?.identifierTypeUuids?.join(",")||"",onChange:t=>d(e.id,{config:{...e.config,type:"IDENTIFIER_TYPE",identifierTypeUuids:t.target.value.split(",").map(e=>e.trim()).filter(Boolean)}}),disabled:r,helperText:"Leave empty for all identifier types"});case"PERSON_ATTRIBUTE":return n().createElement(o.ksK,{id:`param-attr-format-${e.id}`,labelText:"Format filter (e.g., org.openmrs.Concept)",placeholder:"e.g., org.openmrs.Concept",value:e.config?.format||"",onChange:t=>d(e.id,{config:{...e.config,type:"PERSON_ATTRIBUTE",format:t.target.value}}),disabled:r,helperText:"Filter by attribute type format"});default:return null}})(m))))))})))),0===e.length&&n().createElement("div",{className:"-esm-report-builder__parameter-panel__emptyState___ens3F"},n().createElement("p",null,"No parameters defined. Add parameters to allow users to customize report output at runtime."),n().createElement("p",{className:sW},"Common parameters: Start Date, End Date, Location, Program"))))}let sX="-esm-report-builder__filtermap-editor__fieldGroup___UtS6F",sZ=["SELECT","FROM","WHERE","AND","OR","NOT","IN","BETWEEN","JOIN","LEFT","RIGHT","INNER","OUTER","ON","AS","ORDER","BY","GROUP","HAVING","UNION","EXISTS","DISTINCT","NULL","IS","patientId","clientId","startDate","endDate"];function s0(e){if(!e||""===e.trim())return!1;let t=e.trim();return!(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)||sZ.includes(t.toUpperCase()))}function s1(e){if(!e||""===e.trim())return!1;let t=e.trim();return/^[\w.]+$/.test(t)}let s2=({filterMap:e,onChange:t,availableColumns:r,disabled:l=!1,sqlQuery:i})=>{let[s,d]=(0,a.useState)(()=>e?Object.entries(e).map(([e,t])=>({parameterName:e,columnReference:t})):[]),[c,m]=(0,a.useState)({}),[u,p]=(0,a.useState)(!1);n().useEffect(()=>{e&&0!==Object.keys(e).length?d(Object.entries(e).map(([e,t])=>({parameterName:e,columnReference:t}))):d([])},[e]);let _=(0,a.useMemo)(()=>i?function(e){let t=e.trim();if(!t)return[];let r=t.match(/SELECT\s+(?:DISTINCT\s+)?([\s\S]+?)\s+FROM/i);if(!r)return[];let a=r[1],n=[];for(let e of a.split(",").map(e=>e.trim())){if(!e)continue;let t=e.match(/(\w+)\.(\w+)/);if(t){let[,e,r]=t;n.push({name:r,reference:`${e}.${r}`})}else{let t=e.split(/\s+/)[0];t&&!t.includes("(")&&n.push({name:t,reference:t})}}return n}(i):[],[i]),g=r||_,E=e=>{d(e);let r={};e.forEach((e,t)=>{e.parameterName&&!s0(e.parameterName)&&(r[t]="Invalid parameter name"),e.columnReference&&!s1(e.columnReference)&&(r[t]="Invalid column reference")}),m(r),t((e=>{let t=e.filter(e=>s0(e.parameterName)&&s1(e.columnReference));if(0!==t.length)return Object.fromEntries(t.map(e=>[e.parameterName.trim(),e.columnReference.trim()]))})(e))},f=(e,t,r)=>{let a=[...s];a[e]={...a[e],[t]:r},E(a)},y=Object.keys(c).length>0,h=s.length>0;return n().createElement("div",{className:"-esm-report-builder__filtermap-editor__container___3VKia"},n().createElement(o.BJc,{gap:4},n().createElement("div",{className:"-esm-report-builder__filtermap-editor__header___v62qf"},n().createElement("div",{className:"-esm-report-builder__filtermap-editor__headerTitle___RV47u"},n().createElement(tN.$$,{size:16}),n().createElement("h4",null,"FilterMap Configuration")),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>p(!u)},u?"Hide":"What is this?")),u&&n().createElement("div",{className:"-esm-report-builder__filtermap-editor__infoPanel___8POeK"},n().createElement(o.jeF,{kind:"info",title:"About FilterMap",subtitle:"FilterMap enables column queries to filter to the exact row that matched the base cohort criteria. Use this when: Base cohort SELECTs multiple identifier columns (episode_id, order_id, etc.), Column queries reference the same table as the base cohort, and Multiple rows exist per patient and you need consistent data across columns.",hideCloseButton:!0,lowContrast:!0}),n().createElement("div",{className:"-esm-report-builder__filtermap-editor__infoDetails___nXYcY"},n().createElement("p",{className:"-esm-report-builder__filtermap-editor__example___7Mjo2"},n().createElement("strong",null,"Example:")," If base cohort selects ",n().createElement("code",null,"patient_id, episode_id, order_id"),", you can map these to parameters that column queries use:"),n().createElement("pre",{className:"-esm-report-builder__filtermap-editor__codeExample___JVgP+"},`{
|
|
335
365
|
"patientId": "vl.patient_id",
|
|
336
366
|
"orderId": "vl.native_order_id",
|
|
337
367
|
"episodeId": "vl.episode_id"
|
|
338
|
-
}`),n().createElement("p",null,"Column SQL can then use ",n().createElement("code",null,":patientId"),", ",n().createElement("code",null,":orderId"),", ",n().createElement("code",null,":episodeId"),"to filter to the specific episode/order."))),h?n().createElement("div",{className:"-esm-report-builder__filtermap-editor__entriesContainer___m3FGR"},s.map((e,t)=>n().createElement("div",{key:t,className:"-esm-report-builder__filtermap-editor__entryRow___jo33d"},n().createElement("div",{className:"-esm-report-builder__filtermap-editor__entryFields___a4rzC"},n().createElement("div",{className:sY},n().createElement(o.ksK,{id:`param-name-${t}`,labelText:"Parameter Name",value:e.parameterName||"",onChange:e=>f(t,"parameterName",e.target.value),placeholder:"e.g., orderId",disabled:l,size:"sm"})),n().createElement("div",{className:"-esm-report-builder__filtermap-editor__arrow___yv6dd"},"→"),n().createElement("div",{className:sY},n().createElement("label",{className:"-esm-report-builder__filtermap-editor__fieldLabel___WLAAK"},"Column Reference"),n().createElement(o.a32,{id:`col-ref-${t}`,items:g.map(e=>e.reference),selectedItem:e.columnReference||void 0,onChange:({selectedItem:e})=>f(t,"columnReference",e??""),onInputChange:e=>f(t,"columnReference",e),placeholder:"e.g., vl.native_order_id",disabled:l,size:"sm",shouldFilterItem:({item:e,inputValue:t})=>e.toLowerCase().includes(t?.toLowerCase()??"")})),n().createElement("div",{className:"-esm-report-builder__filtermap-editor__entryActions___ZlvBy"},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.MG,iconDescription:"Auto-suggest parameter name",onClick:()=>{var e;let r,a,n;(n=s[e=t]).columnReference&&f(e,"parameterName",(a=(r=n.columnReference.trim()).match(/(\w+)\.(\w+)/))?a[2].toLowerCase():r.toLowerCase())},disabled:l||!e.columnReference,title:"Auto-suggest parameter name from column reference"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,iconDescription:"Remove",onClick:()=>{E(s.filter((e,r)=>r!==t))},disabled:l}))),c[t]&&n().createElement("div",{className:"-esm-report-builder__filtermap-editor__entryError___IrNOa"},c[t])))):n().createElement("div",{className:"-esm-report-builder__filtermap-editor__emptyState___XNVm0"},n().createElement("p",null,"No filterMap entries configured. Add entries to enable column queries to filter to specific rows from the base cohort.")),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>{E([...s,{parameterName:"",columnReference:""}])},disabled:l,renderIcon:b.OM},"Add FilterMap Entry"),h&&!y&&n().createElement("div",{className:"-esm-report-builder__filtermap-editor__summary___3RMkN"},n().createElement(o.vwO,{type:"green",size:"sm"},s.length," filterMap entr",1!==s.length?"ies":"y"," configured"))))},s2={container:"-esm-report-builder__query-config-panel__container___FPeT8",section:"-esm-report-builder__query-config-panel__section___SiB-F",sectionHeader:"-esm-report-builder__query-config-panel__sectionHeader___M54Q0",sectionHeaderLeft:"-esm-report-builder__query-config-panel__sectionHeaderLeft___t8Wdj",sectionTitle:"-esm-report-builder__query-config-panel__sectionTitle___ceirv",sectionHeaderRight:"-esm-report-builder__query-config-panel__sectionHeaderRight___A1bAF",sectionContent:"-esm-report-builder__query-config-panel__sectionContent___lH83+",datasetInfo:"-esm-report-builder__query-config-panel__datasetInfo___6ZmYs",datasetRow:"-esm-report-builder__query-config-panel__datasetRow___78RNZ",datasetLabel:"-esm-report-builder__query-config-panel__datasetLabel___hgB1f",datasetValue:"-esm-report-builder__query-config-panel__datasetValue___mz-lZ",populationHeader:"-esm-report-builder__query-config-panel__populationHeader___-62BF",populationModeSelector:"-esm-report-builder__query-config-panel__populationModeSelector___igoYH",modeLabel:"-esm-report-builder__query-config-panel__modeLabel___UI3l1",populationLabel:"-esm-report-builder__query-config-panel__populationLabel___0Xhpz",populationHint:"-esm-report-builder__query-config-panel__populationHint___7xS2m",rowIcon:"-esm-report-builder__query-config-panel__rowIcon___8LwW5",negateToggle:"-esm-report-builder__query-config-panel__negateToggle___aO82Y","cds--toggle":"-esm-report-builder__query-config-panel__cds--toggle___liQxD","cds--toggle__label":"-esm-report-builder__query-config-panel__cds--toggle__label___bQCkp",indicatorSearch:"-esm-report-builder__query-config-panel__indicatorSearch___jqeIn","cds--combo-box":"-esm-report-builder__query-config-panel__cds--combo-box___MLvCp","cds--label":"-esm-report-builder__query-config-panel__cds--label___XlSQP",conditionsStack:"-esm-report-builder__query-config-panel__conditionsStack___GA2b4",conditionRow:"-esm-report-builder__query-config-panel__conditionRow___z5RLa","cds--select":"-esm-report-builder__query-config-panel__cds--select___bnl2i","cds--text-input":"-esm-report-builder__query-config-panel__cds--text-input___0VkDy","cds--btn":"-esm-report-builder__query-config-panel__cds--btn___nZY19",andText:"-esm-report-builder__query-config-panel__andText___Ybd4N",placeholderContent:"-esm-report-builder__query-config-panel__placeholderContent___raE2v",placeholderSubtext:"-esm-report-builder__query-config-panel__placeholderSubtext___djzLA",hybridDivider:"-esm-report-builder__query-config-panel__hybridDivider___-N8vV",sqlEditorSection:"-esm-report-builder__query-config-panel__sqlEditorSection___2MiRz",sqlEditor:"-esm-report-builder__query-config-panel__sqlEditor___19Vb0",columnsList:"-esm-report-builder__query-config-panel__columnsList___KaazW",columnItem:"-esm-report-builder__query-config-panel__columnItem___LgQvs",dragHandle:"-esm-report-builder__query-config-panel__dragHandle___klol9",columnInfo:"-esm-report-builder__query-config-panel__columnInfo___w1Y+-",columnName:"-esm-report-builder__query-config-panel__columnName___eYT7D",columnMeta:"-esm-report-builder__query-config-panel__columnMeta___d24fo",columnOrder:"-esm-report-builder__query-config-panel__columnOrder___heapX",columnConfig:"-esm-report-builder__query-config-panel__columnConfig___BjmrZ",filterMapSection:"-esm-report-builder__query-config-panel__filterMapSection___PN9Jw"};function s5(e){switch(e){case"TEXT":return["equals","not equals","contains","starts with","is blank"];case"NUMBER":return["equals","not equals","greater than","less than","between"];case"DATE":return["on","before","after","between"];case"CODED":return["is one of","is not one of"];case"BOOLEAN":return["is true","is false","not recorded"];case"LOCATION":return["equals","within hierarchy"];default:return["equals","not equals"]}}function s6(e){return e.split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function s3({draft:e,onDraftChange:t,availableFields:r=[],populationFields:l=[],indicators:i=[],onRemoveColumn:s,disabled:d=!1}){let[u,_]=(0,a.useState)(new Set(["population"])),[E,y]=(0,a.useState)("SQL");(0,a.useEffect)(()=>{e.population?.buildMethod==="INDICATOR_BASED"?y("INDICATOR"):(e.population?.buildMethod,y("SQL"))},[e.population?.buildMethod]);let h=(0,a.useCallback)(e=>{_(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),v=(0,a.useCallback)(()=>{let r={id:`cond-${Date.now()}`,field:"",fieldLabel:"",fieldType:"DATE",operator:"BETWEEN_DATES",value:""},a=e.population?.visualFilter||e.visualFilter,n=a?.rootGroup?.conditions||[],l={rootGroup:{id:"root",logicalOperator:a?.rootGroup?.logicalOperator||"AND",conditions:[...n,r]},useVisualBuilder:!0};t({population:{...e.population,visualFilter:l},visualFilter:l})},[e.population,e.visualFilter,t]),S=(0,a.useCallback)((r,a)=>{let n=e.population?.visualFilter||e.visualFilter,i=(n?.rootGroup?.conditions||[]).map(e=>e.id===r?{...e,...a}:e),o=i.find(e=>e.id===r);if(o&&a.field){let e=l.find(e=>e.name===a.field);e&&(o.fieldType=e.type,o.fieldLabel=e.label,s5(e.type).includes(o.operator.toLowerCase())||(o.operator="EQUALS"))}let s={rootGroup:{id:n?.rootGroup?.id||"root",logicalOperator:n?.rootGroup?.logicalOperator||"AND",conditions:i},useVisualBuilder:!0};t({population:{...e.population,visualFilter:s},visualFilter:s})},[e.population,e.visualFilter,t,l]),T=(0,a.useCallback)(r=>{let a=e.population?.visualFilter||e.visualFilter,n=(a?.rootGroup?.conditions||[]).filter(e=>e.id!==r),l={rootGroup:{id:a?.rootGroup?.id||"root",logicalOperator:a?.rootGroup?.logicalOperator||"AND",conditions:n},useVisualBuilder:!0};t({population:{...e.population,visualFilter:l},visualFilter:l})},[e.population,e.visualFilter,t]),C=(0,a.useCallback)(r=>{let a;switch(y(r),r){case"INDICATOR":case"HYBRID":a="INDICATOR_BASED";break;default:a="SQL_BUILDER"}let n=e.population?.indicatorRules||e.indicatorRules||[],l="INDICATOR"===r||"HYBRID"===r?n.length>0?n:[]:e.population?.indicatorRules||e.indicatorRules||[];t({population:{...e.population,buildMethod:a,indicatorRules:l},populationMode:r,indicatorRules:l})},[e.population,e.indicatorRules,t]),w=(0,a.useCallback)(()=>{let r={id:`rule-${Date.now()}`,indicatorUuid:"",name:"",logicalOperator:"AND",negate:!1},a=[...e.population?.indicatorRules||e.indicatorRules||[],r];t({population:{...e.population,indicatorRules:a},indicatorRules:a})},[e.population,e.indicatorRules,t]),N=(0,a.useCallback)((r,a)=>{let n=(e.population?.indicatorRules||e.indicatorRules||[]).map(e=>e.id===r?{...e,...a}:e);t({population:{...e.population,indicatorRules:n},indicatorRules:n})},[e.population,e.indicatorRules,t]),I=(0,a.useCallback)((r,a,n)=>{let l=(e.population?.indicatorRules||e.indicatorRules||[]).map(e=>e.id===r?{...e,indicatorUuid:a,name:n?.name||""}:e);t({population:{...e.population,indicatorRules:l},indicatorRules:l})},[e.population,e.indicatorRules,t]),k=(0,a.useCallback)(r=>{let a=(e.population?.indicatorRules||e.indicatorRules||[]).filter(e=>e.id!==r);t({population:{...e.population,indicatorRules:a},indicatorRules:a})},[e.population,e.indicatorRules,t]),A=e.population?.visualFilter?.rootGroup||e.visualFilter?.rootGroup,R=A?.conditions||[];return n().createElement("div",{className:s2.container},n().createElement("div",{className:s2.section},n().createElement("button",{className:s2.sectionHeader,onClick:()=>h("dataset"),type:"button"},n().createElement("div",{className:s2.sectionHeaderLeft},n().createElement(i1.bQ,{size:20}),n().createElement("span",{className:s2.sectionTitle},"Dataset")),n().createElement("div",{className:s2.sectionHeaderRight},u.has("dataset")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("dataset")&&n().createElement("div",{className:s2.sectionContent},n().createElement("div",{className:s2.datasetInfo},n().createElement("div",{className:s2.datasetRow},n().createElement("span",{className:s2.datasetLabel},"Population sources:"),n().createElement("span",{className:s2.datasetValue},e.populationSources&&e.populationSources.length>0?n().createElement("div",{className:s2.datasourceTags},e.populationSources.filter(e=>e.enabled).sort((e,t)=>e.order-t.order).map(e=>n().createElement(o.vwO,{key:e.uuid,size:"sm",type:"JOIN"===e.joinType||"LEFT_JOIN"===e.joinType?"blue":"INTERSECT"===e.joinType?"green":"UNION"===e.joinType?"purple":"red"},e.name," (",e.joinType,")"))):"Not selected")),n().createElement("div",{className:s2.datasetRow},n().createElement("span",{className:s2.datasetLabel},"Data sources:"),n().createElement("span",{className:s2.datasetValue},e.dataSources&&e.dataSources.length>0?n().createElement("div",{className:s2.datasourceTags},e.dataSources.map(e=>n().createElement(o.vwO,{key:e.uuid,size:"sm",type:"PRIMARY"===e.role?"green":"SECONDARY"===e.role?"blue":"purple"},e.name," (",e.role,")"))):"Not selected")),n().createElement("div",{className:s2.datasetRow},n().createElement("span",{className:s2.datasetLabel},"Row grain:"),n().createElement("span",{className:s2.datasetValue},e.rowGrain||"Not set"))))),n().createElement("div",{className:s2.section},n().createElement("button",{className:s2.sectionHeader,onClick:()=>h("population"),type:"button"},n().createElement("div",{className:s2.sectionHeaderLeft},n().createElement(i1.bQ,{size:20}),n().createElement("span",{className:s2.sectionTitle},"Population"),n().createElement(o.vwO,{size:"sm",type:"blue"},"HYBRID"===E?((e.population?.indicatorRules||e.indicatorRules)?.length||0)+R.length:"INDICATOR"===E?(e.population?.indicatorRules||e.indicatorRules)?.length||0:"SQL"===E&&e.population?.sqlTemplate?.trim()?"SQL":R.length)),n().createElement("div",{className:s2.sectionHeaderRight},u.has("population")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("population")&&n().createElement("div",{className:s2.sectionContent},n().createElement("div",{className:s2.populationModeSelector},n().createElement("span",{className:s2.modeLabel},"Define population using:"),n().createElement(o.l6P,{id:"population-mode",size:"sm",value:E,onChange:e=>C(e.target.value),disabled:d,labelText:"",inline:!0},n().createElement(o.ebT,{value:"SQL",text:"SQL Query"}),n().createElement(o.ebT,{value:"INDICATOR",text:"Indicators"}),n().createElement(o.ebT,{value:"HYBRID",text:"Hybrid (SQL + Indicators)"}))),"SQL"===E&&n().createElement(n().Fragment,null,n().createElement("div",{className:s2.populationHeader},n().createElement("span",{className:s2.populationLabel},"All patients where (SQL):")),n().createElement(o.BJc,{gap:3,className:s2.conditionsStack},R.map((e,t)=>n().createElement("div",{key:e.id,className:s2.conditionRow},n().createElement(o.l6P,{id:`field-${e.id}`,size:"sm",value:e.field,onChange:t=>{let r=t.target.value,a=l.find(e=>e.name===r);S(e.id,{field:r,fieldLabel:a?.label||r,fieldType:a?.type||"TEXT"})},disabled:d,labelText:""},n().createElement(o.ebT,{value:"",text:"Select field..."}),l.map(e=>n().createElement(o.ebT,{key:e.name,value:e.name,text:e.label}))),n().createElement(o.l6P,{id:`operator-${e.id}`,size:"sm",value:e.operator,onChange:t=>S(e.id,{operator:t.target.value}),disabled:d||!e.field,labelText:""},s5(e.fieldType).map(e=>n().createElement(o.ebT,{key:e.toUpperCase(),value:e.toUpperCase(),text:e.charAt(0).toUpperCase()+e.slice(1)}))),"IS_BLANK"!==e.operator&&"IS_TRUE"!==e.operator&&"IS_FALSE"!==e.operator&&"NOT_RECORDED"!==e.operator&&n().createElement(o.ksK,{id:`value-${e.id}`,size:"sm",placeholder:"DATE"===e.fieldType?"Start Date":"Value",value:Array.isArray(e.value)?e.value[0]||"":e.value||"",onChange:t=>S(e.id,{value:t.target.value}),disabled:d||!e.field,labelText:""}),("BETWEEN"===e.operator||"BETWEEN_DATES"===e.operator)&&n().createElement(o.ksK,{id:`value2-${e.id}`,size:"sm",placeholder:"DATE"===e.fieldType?"End Date":"To",value:e.value2||"",onChange:t=>S(e.id,{value2:t.target.value}),disabled:d||!e.field,labelText:""}),t<R.length-1&&n().createElement("span",{className:s2.andText},"and"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,onClick:()=>T(e.id),disabled:d,iconDescription:"Remove condition"}))),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:v,disabled:d},"Add condition")),n().createElement("div",{className:s2.sqlEditorSection},n().createElement("div",{className:s2.populationHeader},n().createElement("span",{className:s2.populationLabel},"Or edit raw SQL:"),n().createElement("span",{className:s2.populationHint},"Directly edit the SQL query (use :startDate and :endDate for date parameters)")),n().createElement(o.fs1,{id:"population-sql",className:s2.sqlEditor,placeholder:"SELECT DISTINCT patient_id AS patient_id FROM your_table WHERE...",value:e.population?.sqlTemplate||"",onChange:r=>{t({population:{...e.population,sqlTemplate:r.target.value}})},disabled:d,rows:6,labelText:""}))),"INDICATOR"===E&&n().createElement(n().Fragment,null,n().createElement("div",{className:s2.populationHeader},n().createElement("span",{className:s2.populationLabel},"All patients matching these indicators:"),n().createElement("span",{className:s2.populationHint},"Use indicators with prebuilt query definitions for patient selection")),n().createElement(o.BJc,{gap:3,className:s2.conditionsStack},(e.population?.indicatorRules||e.indicatorRules||[]).map((t,r)=>n().createElement("div",{key:t.id,className:s2.conditionRow},n().createElement(es.yo,{size:16,className:s2.rowIcon}),n().createElement("div",{className:s2.indicatorSearch},n().createElement(rO,{id:`indicator-${t.id}`,titleText:"",selectedId:t.indicatorUuid,disabled:d,onChange:(e,r)=>I(t.id,e,r),placeholder:"Search indicators..."})),n().createElement(o.l6P,{id:`logical-${t.id}`,size:"sm",value:t.logicalOperator||"AND",onChange:e=>N(t.id,{logicalOperator:e.target.value}),disabled:d||!t.indicatorUuid,labelText:""},n().createElement(o.ebT,{value:"AND",text:"AND"}),n().createElement(o.ebT,{value:"OR",text:"OR"})),t.indicatorUuid&&n().createElement("div",{className:s2.negateToggle},n().createElement(o.lMk,{id:`negate-${t.id}`,labelA:"Include",labelB:"Exclude",toggled:t.negate??!1,onToggle:e=>N(t.id,{negate:e}),disabled:d})),r<((e.population?.indicatorRules||e.indicatorRules)?.length||0)-1&&n().createElement("span",{className:s2.andText},"and"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,onClick:()=>k(t.id),disabled:d,iconDescription:"Remove indicator"}))),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:w,disabled:d},"Add indicator"))),"HYBRID"===E&&n().createElement(n().Fragment,null,n().createElement("div",{className:s2.populationHeader},n().createElement("span",{className:s2.populationLabel},"Indicators:"),n().createElement("span",{className:s2.populationHint},"Add indicators to combine with SQL")),n().createElement(o.BJc,{gap:3,className:s2.conditionsStack},(e.population?.indicatorRules||e.indicatorRules||[]).map((t,r)=>n().createElement("div",{key:t.id,className:s2.conditionRow},n().createElement(es.yo,{size:16,className:s2.rowIcon}),n().createElement("div",{className:s2.indicatorSearch},n().createElement(rO,{id:`indicator-${t.id}`,titleText:"",selectedId:t.indicatorUuid,disabled:d,onChange:(e,r)=>I(t.id,e,r),placeholder:"Search indicators..."})),n().createElement(o.l6P,{id:`logical-${t.id}`,size:"sm",value:t.logicalOperator||"AND",onChange:e=>N(t.id,{logicalOperator:e.target.value}),disabled:d||!t.indicatorUuid,labelText:""},n().createElement(o.ebT,{value:"AND",text:"AND"}),n().createElement(o.ebT,{value:"OR",text:"OR"})),t.indicatorUuid&&n().createElement("div",{className:s2.negateToggle},n().createElement(o.lMk,{id:`negate-${t.id}`,labelA:"Include",labelB:"Exclude",toggled:t.negate??!1,onToggle:e=>N(t.id,{negate:e}),disabled:d})),r<((e.population?.indicatorRules||e.indicatorRules)?.length||0)-1&&n().createElement("span",{className:s2.andText},"and"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,onClick:()=>k(t.id),disabled:d,iconDescription:"Remove indicator"}))),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:w,disabled:d},"Add indicator")),n().createElement("div",{className:s2.hybridDivider},n().createElement("span",null,"AND")),n().createElement("div",{className:s2.populationHeader},n().createElement("span",{className:s2.populationLabel},"Additional SQL conditions:"),n().createElement("span",{className:s2.populationHint},"Filter the selected patients further with custom SQL")),n().createElement(o.BJc,{gap:3,className:s2.conditionsStack},R.map((e,t)=>n().createElement("div",{key:e.id,className:s2.conditionRow},n().createElement(m.dJ,{size:16,className:s2.rowIcon}),n().createElement(o.l6P,{id:`field-${e.id}`,size:"sm",value:e.field,onChange:t=>S(e.id,{field:t.target.value}),disabled:d,labelText:""},n().createElement(o.ebT,{value:"",text:"Select field..."}),l.map(e=>n().createElement(o.ebT,{key:e.name,value:e.name,text:e.label},e.label))),e.field&&n().createElement(o.l6P,{id:`operator-${e.id}`,size:"sm",value:e.operator,onChange:t=>S(e.id,{operator:t.target.value}),disabled:d,labelText:""},s5(e.fieldType).map(e=>n().createElement(o.ebT,{key:e,value:e.toUpperCase(),text:s6(e)},s6(e)))),e.operator&&-1===["IS_BLANK","IS_NOT_BLANK"].indexOf(e.operator)&&n().createElement(o.ksK,{id:`value-${e.id}`,size:"sm",value:e.value||"",onChange:t=>S(e.id,{value:t.target.value}),disabled:d,placeholder:"Value",labelText:""}),"BETWEEN"===e.operator&&n().createElement(o.ksK,{id:`value2-${e.id}`,size:"sm",value:e.value2||"",onChange:t=>S(e.id,{value2:t.target.value}),disabled:d,placeholder:"To",labelText:""}),t<R.length-1&&n().createElement("span",{className:s2.andText},"and"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,onClick:()=>T(e.id),disabled:d,iconDescription:"Remove condition"}))),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:v,disabled:d},"Add condition")),n().createElement("div",{className:s2.sqlEditorSection},n().createElement("div",{className:s2.populationHeader},n().createElement("span",{className:s2.populationLabel},"Or edit raw SQL:"),n().createElement("span",{className:s2.populationHint},"Directly edit the SQL query (use :startDate and :endDate for date parameters)")),n().createElement(o.fs1,{id:"population-sql-hybrid",className:s2.sqlEditor,placeholder:"SELECT DISTINCT patient_id AS patient_id FROM your_table WHERE...",value:e.population?.sqlTemplate||"",onChange:r=>{t({population:{...e.population,sqlTemplate:r.target.value}})},disabled:d,rows:6,labelText:""}))),n().createElement("div",{className:s2.filterMapSection},n().createElement(s1,{filterMap:e.population.filterMap,onChange:r=>t({population:{...e.population,filterMap:r}}),disabled:d,sqlQuery:e.population.sqlTemplate})))),n().createElement("div",{className:s2.section},n().createElement("button",{className:s2.sectionHeader,onClick:()=>h("columns"),type:"button"},n().createElement("div",{className:s2.sectionHeaderLeft},n().createElement(p.B8,{size:20}),n().createElement("span",{className:s2.sectionTitle},"Columns"),n().createElement(o.vwO,{size:"sm",type:"gray"},e.columns.length)),n().createElement("div",{className:s2.sectionHeaderRight},u.has("columns")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("columns")&&n().createElement("div",{className:s2.sectionContent},n().createElement(sJ,{columns:e.columns,onChange:e=>t({columns:e}),disabled:d,filterMap:e.population.filterMap}))),n().createElement("div",{className:s2.section},n().createElement("button",{className:s2.sectionHeader,onClick:()=>h("filters"),type:"button"},n().createElement("div",{className:s2.sectionHeaderLeft},n().createElement(m.dJ,{size:20}),n().createElement("span",{className:s2.sectionTitle},"Filters"),n().createElement(o.vwO,{size:"sm",type:"gray"},"0")),n().createElement("div",{className:s2.sectionHeaderRight},u.has("filters")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("filters")&&n().createElement("div",{className:s2.sectionContent},n().createElement("div",{className:s2.placeholderContent},n().createElement("p",null,"Runtime filters configuration will be shown here."),n().createElement("p",{className:s2.placeholderSubtext},"Filters shown when running the report")))),n().createElement("div",{className:s2.section},n().createElement("button",{className:s2.sectionHeader,onClick:()=>h("sort"),type:"button"},n().createElement("div",{className:s2.sectionHeaderLeft},n().createElement(f.ZE,{size:20}),n().createElement("span",{className:s2.sectionTitle},"Sort"),n().createElement(o.vwO,{size:"sm",type:"gray"},e.sortConfig.length)),n().createElement("div",{className:s2.sectionHeaderRight},u.has("sort")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("sort")&&n().createElement("div",{className:s2.sectionContent},n().createElement("div",{className:s2.placeholderContent},n().createElement("p",null,"Sort configuration will be shown here."),n().createElement("p",{className:s2.placeholderSubtext},e.sortConfig.length," sort rule",1!==e.sortConfig.length?"s":""," defined")))),n().createElement("div",{className:s2.section},n().createElement("button",{className:s2.sectionHeader,onClick:()=>h("parameters"),type:"button"},n().createElement("div",{className:s2.sectionHeaderLeft},n().createElement(g.wB,{size:20}),n().createElement("span",{className:s2.sectionTitle},"Parameters"),n().createElement(o.vwO,{size:"sm",type:"gray"},e.parameters.length)),n().createElement("div",{className:s2.sectionHeaderRight},u.has("parameters")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("parameters")&&n().createElement("div",{className:s2.sectionContent},n().createElement(sQ,{parameters:e.parameters,onChange:e=>t({parameters:e}),disabled:d}))),n().createElement("div",{className:s2.section},n().createElement("button",{className:s2.sectionHeader,onClick:()=>h("display"),type:"button"},n().createElement("div",{className:s2.sectionHeaderLeft},n().createElement(m.FN,{size:20}),n().createElement("span",{className:s2.sectionTitle},"Display & Export")),n().createElement("div",{className:s2.sectionHeaderRight},u.has("display")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("display")&&n().createElement("div",{className:s2.sectionContent},n().createElement("div",{className:s2.placeholderContent},n().createElement("p",null,"Display and export settings will be shown here."),n().createElement("p",{className:s2.placeholderSubtext},"Page size, export formats, etc.")))),n().createElement("div",{className:s2.section},n().createElement("button",{className:s2.sectionHeader,onClick:()=>h("json-preview"),type:"button"},n().createElement("div",{className:s2.sectionHeaderLeft},n().createElement(c.Cy,{size:20}),n().createElement("span",{className:s2.sectionTitle},"JSON Preview"),n().createElement(o.vwO,{size:"sm",type:"teal"},"Live")),n().createElement("div",{className:s2.sectionHeaderRight},u.has("json-preview")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("json-preview")&&n().createElement("div",{className:s2.sectionContent},n().createElement(sx,{draft:e,indicators:i}))))}let s4="-esm-report-builder__multi-datasource-selector__datasourceCard___Up+p7",s8="-esm-report-builder__multi-datasource-selector__cardHeader___aAbMV",s7="-esm-report-builder__multi-datasource-selector__cardInfo___FtOrL",s9="-esm-report-builder__multi-datasource-selector__dsName___SsMes",de="-esm-report-builder__multi-datasource-selector__cardDescription___deUQP",dt=[{uuid:"person_attributes",name:"Person Attributes",type:"CORE",role:"REFERENCE"},{uuid:"patient_identifiers",name:"Patient Identifiers",type:"CORE",role:"REFERENCE"}],dr=({dataSources:e,onChange:t,disabled:r=!1})=>{let{tables:l,loading:i,error:s}=is(!0),d=e.find(e=>"PRIMARY"===e.role),c=e.filter(e=>"SECONDARY"===e.role),m=e.filter(e=>"REFERENCE"===e.role),u=r=>{let a=e.find(e=>e.uuid===r);a?.role==="PRIMARY"&&e.filter(e=>"PRIMARY"===e.role).length<=1||t(e.filter(e=>e.uuid!==r))},p=(r,a)=>{"PRIMARY"===a?t(e.map(e=>({...e,role:e.uuid===r?"PRIMARY":"PRIMARY"===e.role?"SECONDARY":e.role}))):t(e.map(e=>e.uuid===r?{...e,role:a}:e))},_=(0,a.useMemo)(()=>[...(l||[]).map(e=>({id:e,label:e})),...dt.map(e=>({id:e.uuid,label:e.name}))],[l]),g=(0,a.useMemo)(()=>e.map(e=>({id:e.uuid,label:e.name})),[e]);return n().createElement("div",{className:"-esm-report-builder__multi-datasource-selector__container___2JuX0"},n().createElement(o.BJc,{gap:4},n().createElement("div",{className:"-esm-report-builder__multi-datasource-selector__header___gwYe-"},n().createElement("div",{className:"-esm-report-builder__multi-datasource-selector__headerTitle___U68jH"},n().createElement(tN.$$,{size:16}),n().createElement("h4",null,"Data Sources")),n().createElement("p",{className:"-esm-report-builder__multi-datasource-selector__headerDescription___9xcnm"},"Select multiple datasources to browse and add columns from. The backend will handle joining the data.")),n().createElement("div",{className:"-esm-report-builder__multi-datasource-selector__addSection___r-qW3"},n().createElement(o.KFt,{id:"datasources-multiselect",titleText:"Data Sources",label:"Search and select datasources",placeholder:"Search datasources...",items:_,selectedItems:g,itemToString:e=>e?.label||"",onChange:({selectedItems:r})=>{let a=new Set(e.map(e=>e.uuid)),n=r.filter(e=>!a.has(e.id)),l=e.map(e=>e.uuid).filter(e=>!r.some(t=>t.id===e)),i=!d,o=n.map(e=>{let t=dt.some(t=>t.uuid===e.id),r=i&&!t?"PRIMARY":t?"REFERENCE":"SECONDARY";"PRIMARY"===r&&(i=!1);let a=dt.find(t=>t.uuid===e.id);return a?{...a,role:r}:{uuid:e.id,name:e.id,type:e.id.startsWith("mamba_")?"ETL":"SQL",role:r,tables:[]}}),s=e;l.forEach(e=>{let t=s.find(t=>t.uuid===e);t?.role==="PRIMARY"&&s.filter(e=>"PRIMARY"===e.role).length<=1||(s=s.filter(t=>t.uuid!==e))}),t([...s,...o])},disabled:r||i,size:"sm",selectionFeedback:"fixed"}),s&&n().createElement("div",{className:"-esm-report-builder__multi-datasource-selector__error___izlcS"},"Failed to load tables: ",s)),e.length>0&&n().createElement("div",{className:"-esm-report-builder__multi-datasource-selector__listSection___C8MdS"},n().createElement("h5",{className:"-esm-report-builder__multi-datasource-selector__listTitle___UkpHI"},"Selected Data Sources (",e.length,")"),n().createElement(o.BJc,{gap:2},d&&n().createElement("div",{className:s4,"data-role":"primary"},n().createElement("div",{className:s8},n().createElement("div",{className:s7},n().createElement(o.vwO,{type:"green",size:"sm"},"Primary"),n().createElement("span",{className:s9},d.name)),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.bm,iconDescription:"Remove",onClick:()=>u(d.uuid),disabled:r||e.length<=1})),n().createElement("p",{className:de},"Main datasource for this report")),c.map(e=>n().createElement("div",{key:e.uuid,className:s4,"data-role":"secondary"},n().createElement("div",{className:s8},n().createElement("div",{className:s7},n().createElement(o.vwO,{type:"blue",size:"sm"},"Secondary"),n().createElement("span",{className:s9},e.name)),n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>p(e.uuid,"PRIMARY"),disabled:r},"Make Primary"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.bm,iconDescription:"Remove",onClick:()=>u(e.uuid),disabled:r}))),n().createElement("p",{className:de},"Additional datasource for columns"))),m.map(e=>n().createElement("div",{key:e.uuid,className:s4,"data-role":"reference"},n().createElement("div",{className:s8},n().createElement("div",{className:s7},n().createElement(o.vwO,{type:"purple",size:"sm"},"Reference"),n().createElement("span",{className:s9},e.name)),n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>p(e.uuid,"SECONDARY"),disabled:r},"Make Secondary"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.bm,iconDescription:"Remove",onClick:()=>u(e.uuid),disabled:r}))),n().createElement("p",{className:de},"Lookup/reference data"))))),0===e.length&&n().createElement("div",{className:"-esm-report-builder__multi-datasource-selector__emptyState___KTkJI"},n().createElement("p",null,"No datasources selected. Add datasources above to browse their columns.")),e.length>0&&n().createElement("div",{className:"-esm-report-builder__multi-datasource-selector__summary___SJvOE"},n().createElement("span",null,e.length," datasource",1!==e.length?"s":""," selected"),n().createElement("span",null,"Columns from all datasources will be joined by patient_id"))))},da=({open:e,onClose:t,onRun:r,parameters:l=[],initialValues:i={},loading:s=!1})=>{let[d,c]=(0,a.useState)({}),[m,u]=(0,a.useState)({}),[p,_]=(0,a.useState)({}),[g,E]=(0,a.useState)("FIXED"),[f,b]=(0,a.useState)(""),y=l.some(e=>"DATE"===e.type||"DATETIME"===e.type),h=l.filter(e=>"DATE"===e.type||"DATETIME"===e.type),v=h.some(e=>"startdate"===e.name.toLowerCase()||"start_date"===e.name.toLowerCase())&&h.some(e=>"enddate"===e.name.toLowerCase()||"end_date"===e.name.toLowerCase());(0,a.useEffect)(()=>{if(!e)return;let t={};for(let e of l){let r=i[e.name]||e.defaultValue||"";t[e.name]=r}c(t)},[e]),(0,a.useEffect)(()=>{e&&(u({}),_({}),b(""),E("FIXED"))},[e]);let S=(0,a.useCallback)((e,t)=>{c(r=>({...r,[e]:t})),m[e]&&u(t=>({...t,[e]:""}))},[m]),T=(0,a.useCallback)((e,t)=>{u(r=>{if(t)return{...r,[e]:t};let a={...r};return delete a[e],a})},[]),C=(0,a.useCallback)((e,t)=>{_(r=>({...r,[e]:t}))},[]);return n().createElement(o.aFV,{open:e,onRequestClose:t,modalHeading:"Preview Parameters",modalLabel:"Linelist Preview",preventCloseOnClickOutside:!0,size:"sm",primaryButtonText:"Run Preview",primaryButtonDisabled:s,onRequestSubmit:()=>{if(u({}),"RELATIVE"===g&&y&&!f)return void u({relativePeriod:"Please select a reporting period"});if("RELATIVE"===g&&f){let e={...d},{start:t,end:a}=a4(f);h.forEach((r,n)=>{0===n?e[r.name]=a8(t):1===n&&(e[r.name]=a8(a))}),r(e);return}(()=>{let e={};for(let t of l){let r=d[t.name];("DATE"!==t.type&&"DATETIME"!==t.type||"RELATIVE"!==g)&&t.required&&(!r||""===r.toString().trim())&&(e[t.name]=`${t.label} is required`)}return u(e),0===Object.keys(e).length})()&&r(d)},secondaryButtonText:"Cancel",loadingStatus:s?"active":"inactive",loadingDescription:"Running..."},n().createElement(o.cwr,null,0===l.length?n().createElement(o.jeF,{kind:"info",title:"No Parameters",subtitle:"This report has no parameters defined. Click Run to use default values.",lowContrast:!0}):n().createElement(o.BJc,{gap:5},v&&n().createElement("div",{style:{marginBottom:"1rem"}},n().createElement("label",{className:"cds--label"},"Date Selection Mode"),n().createElement(o.zWQ,{legendText:"",name:"date-mode",valueSelected:g,onChange:e=>{E(e),"FIXED"===e&&b("")}},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"===g&&v&&n().createElement("div",{style:{marginBottom:"1rem"}},n().createElement(o.l6P,{id:"relative-period-select",labelText:"Select reporting period",value:f,onChange:e=>{b(e.target.value)},size:"sm"},n().createElement(o.ebT,{value:"",text:"Select period"}),a3.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),m.relativePeriod&&n().createElement("div",{style:{color:"#da1e28",fontSize:"0.875rem",marginTop:"0.5rem"}},m.relativePeriod)),l.map(e=>(e=>{let t=d[e.name]||"",r=m[e.name];if(v&&"RELATIVE"===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}let a={parameter:e,value:t,error:r,onChange:t=>S(e.name,t)};switch(e.type){case"DATE":case"DATETIME":return n().createElement(a7,{key:e.name,...a});case"NUMBER":return n().createElement(a9,{key:e.name,...a});case"BOOLEAN":return n().createElement(ne,{key:e.name,...a});case"LIST":return n().createElement(nt,{key:e.name,...a});case"LOCATION":return n().createElement(ni,{key:e.name,...a,onSearchQueryChange:t=>C(e.name,t)});case"CONCEPT":return n().createElement(no,{key:e.name,...a,searchQuery:p[e.name]||"",onSearchQueryChange:t=>C(e.name,t)});case"IDENTIFIER_TYPE":return n().createElement(ns,{key:e.name,...a});case"PERSON_ATTRIBUTE":return n().createElement(nd,{key:e.name,...a});default:return n().createElement(nc,{key:e.name,...a,onError:t=>T(e.name,t)})}})(e)))))},dn={workspace:"-esm-report-builder__linelist-definition-editor__workspace___MBsr-",loading:"-esm-report-builder__linelist-definition-editor__loading___oZJSC",header:"-esm-report-builder__linelist-definition-editor__header___SrCyl",headerLeft:"-esm-report-builder__linelist-definition-editor__headerLeft___NabYb",headerCenter:"-esm-report-builder__linelist-definition-editor__headerCenter___5GJdn",headerRight:"-esm-report-builder__linelist-definition-editor__headerRight___NcJK8",breadcrumb:"-esm-report-builder__linelist-definition-editor__breadcrumb___kZt0x",breadcrumbCurrent:"-esm-report-builder__linelist-definition-editor__breadcrumbCurrent___XFRCA",nameInput:"-esm-report-builder__linelist-definition-editor__nameInput___qg07M",notification:"-esm-report-builder__linelist-definition-editor__notification___UoWpY",panels:"-esm-report-builder__linelist-definition-editor__panels___fFvjd",leftPanel:"-esm-report-builder__linelist-definition-editor__leftPanel___Sqjvd",middlePanel:"-esm-report-builder__linelist-definition-editor__middlePanel___HzNHj",rightPanel:"-esm-report-builder__linelist-definition-editor__rightPanel___Krp4a",resizeHandle:"-esm-report-builder__linelist-definition-editor__resizeHandle___CSGnD",panelHeader:"-esm-report-builder__linelist-definition-editor__panelHeader___TJzn0",panelTitle:"-esm-report-builder__linelist-definition-editor__panelTitle___NEGPT",panelContent:"-esm-report-builder__linelist-definition-editor__panelContent___uj+tJ",columnSourcesSection:"-esm-report-builder__linelist-definition-editor__columnSourcesSection___-CmOQ",populationCard:"-esm-report-builder__linelist-definition-editor__populationCard___Y5uQw",columnSourcesCard:"-esm-report-builder__linelist-definition-editor__columnSourcesCard___rh+Zi",columnSourcesHeader:"-esm-report-builder__linelist-definition-editor__columnSourcesHeader___Ug48a",columnSourcesTitle:"-esm-report-builder__linelist-definition-editor__columnSourcesTitle___ZBXaD",columnSourcesIcon:"-esm-report-builder__linelist-definition-editor__columnSourcesIcon___Be+Vk",columnSourcesSubtitle:"-esm-report-builder__linelist-definition-editor__columnSourcesSubtitle___GrAP2",catalogueControls:"-esm-report-builder__linelist-definition-editor__catalogueControls___NJp0H",fieldAccordion:"-esm-report-builder__linelist-definition-editor__fieldAccordion___LSInq",fieldList:"-esm-report-builder__linelist-definition-editor__fieldList___FOnh2",fieldItem:"-esm-report-builder__linelist-definition-editor__fieldItem___Dc7E3",fieldInfo:"-esm-report-builder__linelist-definition-editor__fieldInfo___plPLa",fieldName:"-esm-report-builder__linelist-definition-editor__fieldName___eutvV",fieldActions:"-esm-report-builder__linelist-definition-editor__fieldActions___7HDTH",configSection:"-esm-report-builder__linelist-definition-editor__configSection___sMSWo",sectionHeader:"-esm-report-builder__linelist-definition-editor__sectionHeader___qNna3",sectionContent:"-esm-report-builder__linelist-definition-editor__sectionContent___6-9GB",datasetInfo:"-esm-report-builder__linelist-definition-editor__datasetInfo___GiXr4",emptyPreview:"-esm-report-builder__linelist-definition-editor__emptyPreview___+JcrK",previewResults:"-esm-report-builder__linelist-definition-editor__previewResults___QOqKE",previewStatus:"-esm-report-builder__linelist-definition-editor__previewStatus___jLRfD",htmlPreview:"-esm-report-builder__linelist-definition-editor__htmlPreview___3+iZX",sectionRow:"-esm-report-builder__linelist-definition-editor__sectionRow___t8a3j",groupRow:"-esm-report-builder__linelist-definition-editor__groupRow___aNcGO",indent:"-esm-report-builder__linelist-definition-editor__indent___jHoZ9"},dl=()=>{let e=(0,i.Zp)(),{reportId:t}=(0,i.g)(),{has:l}=v(),[s,d]=(0,a.useState)(ss()),[c,m]=(0,a.useState)(null),[u,p]=(0,a.useState)(!1),[_,E]=(0,a.useState)(!1),[f,b]=(0,a.useState)(!1),[h,S]=(0,a.useState)(null),[T,C]=(0,a.useState)(null),[w,N]=(0,a.useState)(null),[I,k]=(0,a.useState)(null),[A,R]=(0,a.useState)("create"),[O,D]=(0,a.useState)([]),[x,L]=(0,a.useState)(!1),[M,$]=(0,a.useState)(!1),[P,B]=(0,a.useState)(500),[F,z]=(0,a.useState)(500),[q,j]=(0,a.useState)(!1),[H,J]=(0,a.useState)(!1),[G,V]=(0,a.useState)(!1),[W,K]=(0,a.useState)(null),[Q,Y]=(0,a.useState)(null),[X,Z]=(0,a.useState)(null),[ee,et]=(0,a.useState)(!1),[er,ea]=(0,a.useState)([]),[el,ei]=(0,a.useState)(null),{indicators:eo}=function(){let[e,t]=(0,a.useState)([]),[r,n]=(0,a.useState)(!1),[l,i]=(0,a.useState)(null);return(0,a.useEffect)(()=>{n(!0),i(null),r_({v:"full",includeRetired:!1}).then(e=>{t(e)}).catch(e=>{i(e instanceof Error?e.message:"Failed to fetch indicators"),t([])}).finally(()=>{n(!1)})},[""]),{indicators:e,loading:r,error:l}}(),[ec,em]=(0,a.useState)(!1);(0,a.useEffect)(()=>{t&&"new"!==t?(p(!0),S(null),Promise.resolve().then(r.bind(r,2075)).then(({getLinelistReport:e})=>e(t)).then(e=>{m(e),R("edit"),d(function(e){let t,r,a,n=null;try{n=e.configJson?JSON.parse(e.configJson):null}catch(e){console.error("Failed to parse report config:",e)}let l=n&&("LINE_LIST"===n.type||"LINE_LIST"===n.reportType||"LINELIST"===n.reportType);if(!n||!l)return console.warn("Invalid config or type, returning empty draft"),ss();let i=new Date().toISOString(),o=n.dataSetDefinitions?.[0],s=n._builder,d=[],c=s?.dataSources||n.dataSources;if(c&&c.length>0)c.forEach(e=>{d.push({uuid:e.uuid,name:e.name,type:e.type,role:e.role,tables:e.columns?Object.keys(e.columns):[]})});else if(1!==n.version&&n.dataSources)n.dataSources&&n.dataSources.length>0&&n.dataSources.forEach(e=>{d.push({uuid:e.uuid,name:e.name,type:e.type,role:e.role,tables:e.columns?Object.keys(e.columns):[]})});else{let e=n.dataSourceUuid||"";if(e&&d.push({uuid:e,name:e,type:"ETL",role:"PRIMARY",tables:[]}),o?.columns){let e=o.columns.some(e=>e.dataDefinition?.type==="PERSON_ATTRIBUTE"),t=o.columns.some(e=>e.dataDefinition?.type==="IDENTIFIER");e&&d.push({uuid:"person_attributes",name:"Person Attributes",type:"CORE",role:"REFERENCE"}),t&&d.push({uuid:"patient_identifiers",name:"Patient Identifiers",type:"CORE",role:"REFERENCE"})}}let m=d.find(e=>"PRIMARY"===e.role)?.uuid||"",u=new Map;c.forEach(e=>{Object.values(e.columns||{}).forEach(t=>{let r=(t?.name||"").toLowerCase();r&&u.set(r,{dataSourceUuid:e.uuid,dataSourceName:e.name,table:t?.sourceTable||e.uuid,fieldType:t?.type||"UNKNOWN"})})});let p=new Set,_=[];o?.columns&&o.columns.forEach((e,t)=>{let r,a=e.dataDefinition?.type,n=e.dataDefinition?.config,l=e.name.toLowerCase(),o=n?.sql||"",s=/^\s*SELECT\s/i.test(o)||/:(patientId|patient_id)\b/i.test(o);if("PERSON_ATTRIBUTE"===a)r={dataSourceUuid:"person_attributes",dataSourceName:"Person Attributes",table:"person_attribute",field:e.name,fieldType:"PERSON_ATTRIBUTE",attributeTypeUuid:n?.attributeTypeUuid};else if("IDENTIFIER"===a)r={dataSourceUuid:"patient_identifiers",dataSourceName:"Patient Identifiers",table:"patient_identifier",field:e.name,fieldType:"IDENTIFIER",identifierTypeUuid:n?.identifierTypeUuid};else if("CALCULATION"===a)r={dataSourceUuid:m,dataSourceName:m,table:"calculated",field:e.name,fieldType:"CALCULATED"};else{let t=u.get(l);if(t&&!s)r={dataSourceUuid:t.dataSourceUuid,dataSourceName:t.dataSourceName,table:t.table,field:e.name,fieldType:t.fieldType},p.add(t.table);else if(s)r={dataSourceUuid:t?.dataSourceUuid||m||"custom_sql",dataSourceName:t?.dataSourceName||"Custom SQL",table:"custom_sql",field:e.name,fieldType:"SQL"};else{let t=o.match(/`?(\w+)`?\.\s*`?(\w+)`?/);t?(r={dataSourceUuid:m,dataSourceName:m,table:t[1],field:t[2],fieldType:"DERIVED"},p.add(t[1])):r={dataSourceUuid:m,dataSourceName:m,table:"unknown",field:e.name,fieldType:"UNKNOWN"}}}let d={id:`col-${t}`,name:e.name,description:"",source:r,dataDefinitionType:a||"SQL",dataDefinitionConfig:n||{},additionInfo:{addedVia:s?"SQL_BUILDER":"IMPORT",addedAt:i,orderAdded:t},display:{width:150,align:"CALCULATION"===a?"center":"left",sortable:!0,filterable:"CALCULATION"!==a,format:"CALCULATION"===a?"number":"text"},sortOrder:t,repeatResolution:e.repeatResolution,transformations:e.transformations||[]};_.push(d)}),d.forEach(e=>{e.uuid===m&&(e.tables=Array.from(p))});let g=n.parameters?.map((e,t)=>({id:`param-${t}`,name:e.name,label:e.label,type:e.type,required:e.required||!1,defaultValue:e.defaultValue||"",displayOrder:e.displayOrder||t,config:e.config||{type:e.type}}))||[],E=s?.buildMethod||n.buildMethod||"SQL_BUILDER",f=s?.visualFilter||n.visualFilter;f&&(r=f);let b=s?.filterMap||n.baseCohortDefinition?.config?.filterMap;b&&(a=b);let y=s?.indicatorRules||n.indicatorRules;if(Array.isArray(y)&&y.length>0&&(t=y.map((e,t)=>({id:e.id||`rule-${t}`,indicatorUuid:e.indicatorUuid,name:e.name||"",conditions:e.conditions,logicalOperator:e.logicalOperator||"AND",negate:e.negate||!1}))),e.metaJson)try{let r=JSON.parse(e.metaJson);r.buildMethod&&("INDICATOR_BASED"===r.buildMethod||"VISUAL_FILTER"===r.buildMethod||"SQL_BUILDER"===r.buildMethod)&&(E=r.buildMethod),!t&&Array.isArray(r.indicatorRules)&&r.indicatorRules.length>0&&(t=r.indicatorRules.map((e,t)=>({id:e.id||`rule-${t}`,indicatorUuid:e.indicatorUuid,name:e.name||"",conditions:e.conditions,logicalOperator:e.logicalOperator||"AND",negate:e.negate||!1}))),r.parameters&&Array.isArray(r.parameters)&&r.parameters.length>0&&(g=r.parameters.map((e,t)=>({id:e.id||`param-${t}`,name:e.name,label:e.label,type:e.type,required:e.required||!1,defaultValue:e.defaultValue||"",displayOrder:void 0!==e.displayOrder?e.displayOrder:t,config:e.config||{type:e.type}})))}catch(e){console.warn("Failed to parse metaJson:",e)}let h=[];n.orderBy&&h.push({id:"sort-0",columnId:n.orderBy,columnName:n.orderBy,direction:n.orderDirection||"ASC",nulls:"LAST",sortOrder:0});let v=n.baseCohortDefinition?.config?.sql||"",S={baseDataSourceUuid:d.find(e=>"PRIMARY"===e.role)?.uuid||m,buildMethod:E,sqlTemplate:v,parameterReferences:function(e){let t,r=/:(\w+)/g,a=new Set;for(;null!==(t=r.exec(e));)a.add(t[1]);return Array.from(a)}(v),visualFilter:r||{rootGroup:{id:"root",logicalOperator:"AND",conditions:[],nestedGroups:[]},useVisualBuilder:!1},filterMap:a||void 0,indicatorRules:t,buildHistory:[{timestamp:i,action:"IMPORTED_FROM_EXISTING",description:1===n.version?"Migrated from V1 format (single datasource)":"Imported from existing report definition"}]},T=[],C=d.find(e=>"PRIMARY"===e.role);return C&&T.push({uuid:C.uuid,name:C.name,type:C.type,joinType:"JOIN",enabled:!0,order:0}),{version:3,name:e.name||"",description:e.description||"",code:e.code||"",currentPanel:"basics",categoryUuid:n.categoryUuid||"",rowGrain:n.rowGrain||"PATIENT",templateId:n.templateId||"",populationSources:T,dataSources:d,population:S,columns:_,parameters:g,sortConfig:h,limit:n.limit,populationMode:"INDICATOR_BASED"===E?"INDICATOR":"SQL",indicatorRules:t,displaySettings:{defaultPageSize:25,freezeFirstColumn:!0,freezeHeader:!0,dateDisplayFormat:"dd MMM yyyy",nullDisplayValue:"—",maxInteractiveRows:500,maxExportRows:1e5,allowedExports:["CSV","XLSX","PDF"],includeParametersInExportHeader:!0,includeGeneratedTimestamp:!0},validation:{errors:{},warnings:{},lastValidated:i},metadata:{createdAt:i,lastModified:i,buildMethod:"EDIT",sourceReportUuid:e.uuid,version:3,status:"DRAFT"}}}(e)),e.compiledReportDefinitionUuid&&K(e.compiledReportDefinitionUuid)}).catch(e=>{console.error("Failed to load report:",e),S(e instanceof Error?e.message:"Failed to load report")}).finally(()=>p(!1))):(R("create"),d(ss()),p(!1))},[t]),(0,a.useEffect)(()=>{(async()=>{try{let e=await en();D(e)}catch(e){console.error("Failed to load reference data:",e)}})()},[]),(0,a.useEffect)(()=>{K(null)},[s.columns.length,s.dataSources.length,s.population.sqlTemplate,s.rowGrain]);let eu=(0,a.useCallback)(async()=>{E(!0),C(null);try{let t,r=new Map(eo.map(e=>[e.uuid,e])),a=so(s,r),n={buildMethod:s.population.buildMethod,indicatorRules:s.population.indicatorRules,populationSources:s.populationSources,visualFilter:s.population.visualFilter,filterMap:s.population.filterMap},l=(0,sl.Nj)(a,s,n);"create"===A?(t=await (0,sl.rp)(l),e(`/linelist/edit/${t.uuid}`,{replace:!0})):t=await (0,sl.cz)(c?.uuid||"",l),m(t),d(e=>({...e,unsavedChanges:!1}))}catch(e){C(e instanceof Error?e.message:"Failed to save report")}finally{E(!1)}},[s,A,c,eo,e]),ep=(0,a.useCallback)(async()=>{N(null),C(null),em(!0)},[]),e_=(0,a.useCallback)(()=>{e("/linelist")},[e]),eg=(0,a.useCallback)(e=>{d(t=>({...t,...e,unsavedChanges:!0}))},[]),eE=(0,a.useCallback)(()=>{em(!1)},[]),ef=(0,a.useCallback)(async e=>{em(!1);let t=function(e){let t={};e.name?.trim()||(t.name="Name is required");let r=e.population?.buildMethod||"SQL_BUILDER",a=e.population?.indicatorRules||e.indicatorRules;if("INDICATOR_BASED"===r?a&&0!==a.length||(t.population="At least one indicator rule is required for indicator-based population"):e.population.sqlTemplate?.trim()||(t.population="Population SQL is required"),e.dataSources&&0!==e.dataSources.length?e.dataSources.some(e=>"PRIMARY"===e.role)||(t.dataSources="A primary data source is required"):t.dataSources="At least one column data source is required",e.rowGrain?.trim()||(t.rowGrain="Row grain is required"),e.population.sqlTemplate?.trim()){let r=e.parameters.filter(e=>e.required).map(e=>e.name),a=[];for(let t of r){let r=`:${t}`;e.population.sqlTemplate.includes(r)||a.push(t)}a.length>0&&(t.population=`Population SQL must include these parameters: ${a.map(e=>`:${e}`).join(", ")}`)}else t.population="Population SQL is required";if(0===e.columns.length)t.columns="At least one column is required";else{e.columns.filter(e=>!e.name?.trim()).length>0&&(t.columns="All columns must have a display name");let r=e.columns.map(e=>e.id),a=new Set(r);r.length!==a.size&&(t.columns="Columns must have unique identifiers");let n=[];e.columns.forEach(e=>{if("SQL"!==e.dataDefinitionType)return;let t=e.dataDefinitionConfig.sql||"";if(!t.trim())return;let r=e.repeatResolution?.strategy&&"NONE"!==e.repeatResolution.strategy,a=/\bLIMIT\s+1\b/i.test(t),l=/^(?:SELECT\s+(?:DISTINCT\s+)?(?:COUNT|MAX|MIN|SUM|AVG|GROUP_CONCAT|ARRAY_AGG|STRING_AGG|JSON_AGG)\s*\()/i.test(t)||/GROUP\s+BY\s+/i.test(t),i=/\bpatient_id\s*=\s*:patientId\b/i.test(t)&&/\bLIMIT\s+1\b/i.test(t);!/appointment|observation|encounter|program_enrollment|visit/i.test(t)||l||a||i||r||n.push(e.name)}),n.length>0&&(t.columns=`Columns that may return multiple values per row: ${n.join(", ")}. Please configure repeat resolution for each.`)}if(e.sortConfig&&e.sortConfig.length>0&&e.sortConfig.filter(t=>!e.columns.some(e=>e.id===t.columnId)).length>0&&(t.general="Sort rules reference columns that are not in the report"),e.population.sqlTemplate?.trim()){let r=e.population.sqlTemplate.toUpperCase().trim();r.includes("SELECT")||(t.population="SQL must include a SELECT statement"),r.includes("PATIENT_ID")||(t.population="SQL must select patient_id or patient_id column"),"PATIENT"===e.rowGrain&&r.includes("DISTINCT")}return t}({...s,categoryUuid:e.categoryUuid});if(Object.keys(t).length>0){let e=Object.values(t).join(", ");C(`Cannot compile: ${e}`);return}if(eg({categoryUuid:e.categoryUuid}),(s.unsavedChanges||!c?.uuid)&&await eu(),!c?.uuid)return void N("Cannot compile: Report must be saved first");b(!0),N(null),k(null);try{let e=await (0,sl.ah)(c.uuid,s.categoryUuid);e?.reportDefinitionUuid&&K(e.reportDefinitionUuid),k(e?.reportDefinitionUuid?`Compiled successfully. Runtime report UUID: ${e.reportDefinitionUuid}`:"Compiled successfully.")}catch(e){N(e instanceof Error?e.message:"Failed to compile report")}finally{b(!1)}},[s,c?.uuid,eu,eg]),eb=(0,a.useCallback)(e=>{eg({dataSources:e})},[eg]),ey=(0,a.useCallback)(e=>{let t=[...s.dataSources];t.length>0?(t[0].uuid=e,t[0].name=e):t.push({uuid:e,name:e,type:"ETL",role:"PRIMARY"}),eg({dataSources:t})},[eg,s.dataSources]),eh=(0,a.useMemo)(()=>s.columns.map(e=>{if("PERSON_ATTRIBUTE"===e.dataDefinitionType)return`person-attribute-${e.source.attributeTypeUuid||e.name}`;if("IDENTIFIER"===e.dataDefinitionType)return`patient-identifier-${e.source.identifierTypeUuid||e.name}`;if("CALCULATION"===e.dataDefinitionType){let t=(e.dataDefinitionConfig.calculation||e.name).toLowerCase();return`openmrs.calc.${t}`}if("person"===e.source.table||"person_address"===e.source.table)return`openmrs.${e.source.table}.${e.source.field||e.name}`;if("PERSON_NAME"===e.dataDefinitionType)return`openmrs.person.${e.source.field||e.name}`;let t=e.source.table||e.source.dataSourceUuid||"unknown";return`${t}.${e.source.field||e.name}`}),[s.columns]),ev=(0,a.useCallback)(e=>{C(null)},[]),eS=(0,a.useCallback)(()=>{s.population?.sqlTemplate&&0!==s.columns.length?c?.uuid?(et(!0),Z(null)):Z("Please save the report first before running preview."):Z("Please add a base cohort definition and at least one column before running preview.")},[s.population?.sqlTemplate,s.columns.length,c?.uuid]),eT=(0,a.useCallback)(async e=>{et(!1),V(!0),Z(null);try{let t=s.indicatorRules||s.population?.indicatorRules||[],r=new Map(t.map(e=>[e.indicatorUuid,{sqlTemplate:e.sqlTemplate,configJson:e.configJson}])),a=so(s,r),n=await (0,sl.jg)({reportUuid:c?.uuid||"",config:a,parameters:e,maxRows:100,cachedReportDefinitionUuid:W||void 0});if(!n.success)return void Z(n.error||"Preview failed");n.data&&Y({columns:n.data.columns,rows:n.data.rows,rowCount:n.data.rowCount,html:n.data.html})}catch(e){Z(e instanceof Error?e.message:"Preview failed")}finally{V(!1)}},[s]),eC=(0,a.useCallback)(e=>{let t,r;if(s.columns.some(t=>t.name===e.label||t.name===e.name))return void C("This field is already added as a column");let a=e.id.startsWith("person-attribute-"),n=e.id.startsWith("patient-identifier-"),l=e.name,i=new Date().toISOString();if(a)r={dataSourceUuid:"person_attributes",dataSourceName:"Person Attributes",table:"person_attribute",field:e.label,fieldType:"PERSON_ATTRIBUTE",attributeTypeUuid:l},t={id:`col-${Date.now()}`,name:e.label,description:"",source:r,dataDefinitionType:"PERSON_ATTRIBUTE",dataDefinitionConfig:{attributeTypeUuid:l},additionInfo:{addedVia:"DRAG_DROP",addedAt:i,orderAdded:s.columns.length},display:{width:150,align:"left",sortable:!0,filterable:!0,format:"text"},sortOrder:s.columns.length,transformations:[]};else if(n)r={dataSourceUuid:"patient_identifiers",dataSourceName:"Patient Identifiers",table:"patient_identifier",field:e.label,fieldType:"IDENTIFIER",identifierTypeUuid:l},t={id:`col-${Date.now()}`,name:e.label,description:"",source:r,dataDefinitionType:"IDENTIFIER",dataDefinitionConfig:{identifierTypeUuid:l,preferred:!1},additionInfo:{addedVia:"DRAG_DROP",addedAt:i,orderAdded:s.columns.length},display:{width:150,align:"left",sortable:!0,filterable:!0,format:"text"},sortOrder:s.columns.length,repeatResolution:{strategy:"LATEST",orderBy:void 0,restrictToPeriod:!1,ignoreVoided:!0},transformations:[]};else if("CALCULATION"===e.source){let a=s.dataSources.find(e=>"PRIMARY"===e.role);r={dataSourceUuid:a?.uuid||"",dataSourceName:a?.name||"",table:"calculated",field:e.name,fieldType:"CALCULATED"},t={id:`col-${Date.now()}`,name:e.label||e.name,description:"",source:r,dataDefinitionType:"CALCULATION",dataDefinitionConfig:{calculation:e.name.toUpperCase(),onDate:":startDate"},additionInfo:{addedVia:"DRAG_DROP",addedAt:i,orderAdded:s.columns.length},display:{width:120,align:"center",sortable:!0,filterable:!1,format:"number"},sortOrder:s.columns.length,transformations:[]}}else e.id.startsWith("openmrs.person_address.")||"person_address"===e.table?(r={dataSourceUuid:"person_address",dataSourceName:"Person Address",table:"person_address",field:e.name,fieldType:"TEXT"},t={id:`col-${Date.now()}`,name:e.label||e.name,description:"",source:r,dataDefinitionType:"PERSON_ADDRESS",dataDefinitionConfig:{type:"ADDRESS_FIELD",field:e.name},additionInfo:{addedVia:"DRAG_DROP",addedAt:i,orderAdded:s.columns.length},display:{width:150,align:"left",sortable:!0,filterable:!0,format:"text"},sortOrder:s.columns.length,transformations:[]}):(r={dataSourceUuid:e.dataSourceUuid||e.table,dataSourceName:e.dataSourceName||e.table,table:e.table,field:e.name,fieldType:e.type||"UNKNOWN"},t={id:`col-${Date.now()}`,name:e.label||e.name,description:"",source:r,dataDefinitionType:"SQL",dataDefinitionConfig:{sql:`\`${e.table}\`.\`${e.name}\``},additionInfo:{addedVia:"DRAG_DROP",addedAt:i,orderAdded:s.columns.length},display:{width:150,align:"left",sortable:!0,filterable:!0,format:"text"},sortOrder:s.columns.length,repeatResolution:e.isRepeated?{strategy:"LATEST",orderBy:void 0,restrictToPeriod:!1,ignoreVoided:!0}:void 0,transformations:[]});eg({columns:[...s.columns,t]})},[s.columns,s.dataSources,eg]),ew=(0,a.useCallback)(e=>{if(s.columns.some(t=>t.name.toLowerCase()===e.name.toLowerCase()))return void C("A column with this name already exists");let t=new Date().toISOString(),r=s.dataSources.find(e=>"PRIMARY"===e.role),a={id:`col-${Date.now()}`,name:e.name,description:e.description||"",source:{dataSourceUuid:r?.uuid||"custom_sql",dataSourceName:r?.name||"Custom SQL",table:"custom_sql",field:e.name,fieldType:"SQL"},dataDefinitionType:"SQL",dataDefinitionConfig:{sql:e.sql},additionInfo:{addedVia:"SQL_BUILDER",addedAt:t,orderAdded:s.columns.length},display:{width:150,align:"left",sortable:!0,filterable:!0,format:"text"},sortOrder:s.columns.length,repeatResolution:e.repeatResolution?{strategy:"LATEST",orderBy:void 0,restrictToPeriod:!1,ignoreVoided:!0}:void 0,transformations:[]};eg({columns:[...s.columns,a]})},[s.columns,s.dataSources,eg]),eN=(0,a.useCallback)(e=>{s.columns.some(t=>t.name.toLowerCase()===e.name.toLowerCase())?C("A column with this name already exists"):eg({columns:[...s.columns,e]})},[s.columns,eg]),eI=(0,a.useCallback)(e=>{let t={id:`cond-${Date.now()}`,field:e.name,fieldLabel:e.label,fieldType:e.type,operator:function(e){switch(e){case"TEXT":return"CONTAINS";case"NUMBER":default:return"EQUALS";case"DATE":return"BETWEEN_DATES";case"CODED":return"IS_ONE_OF";case"BOOLEAN":return"IS_TRUE";case"LOCATION":return"IN_LOCATION"}}(e.type),value:""},r={...s.population.visualFilter,rootGroup:{...s.population.visualFilter?.rootGroup,conditions:[...s.population.visualFilter?.rootGroup?.conditions||[],t]}};eg({population:{...s.population,visualFilter:r}})},[s.population,eg]),ek=(0,a.useCallback)(e=>{ea(e.map(e=>({name:e.name,label:e.label,type:e.type})))},[]),eA=(0,a.useCallback)(e=>{ei(e)},[]);(0,a.useEffect)(()=>{let e=e=>{if(q&&B(Math.max(200,Math.min(500,e.clientX))),H){let t=document.querySelector(`.${dn.workspace}`)?.getBoundingClientRect();if(t){let r=x?48:P;z(Math.max(400,Math.min(700,e.clientX-t.left-r)))}}},t=()=>{j(!1),J(!1),document.body.style.cursor="default",document.body.style.userSelect=""};if(q||H)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=""}},[q,H,P,x]);let eR=(0,a.useCallback)(e=>{e.preventDefault(),j(!0)},[]),eO=(0,a.useCallback)(e=>{e.preventDefault(),J(!0)},[]);return u?n().createElement("div",{className:dn.workspace},n().createElement("div",{className:dn.loading},"Loading report...")):n().createElement("div",{className:dn.workspace},n().createElement("header",{className:dn.header},n().createElement("div",{className:dn.headerLeft},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.JG,iconDescription:"Back",onClick:e_})),n().createElement("div",{className:dn.headerCenter},n().createElement(o.ksK,{id:"report-name",labelText:"",value:s.name,onChange:e=>eg({name:e.target.value}),placeholder:"Report name",className:dn.nameInput,size:"sm"}),n().createElement(o.vwO,{size:"sm",type:I?"green":"gray"},I?"Compiled":"Draft"),s.unsavedChanges&&n().createElement(o.vwO,{size:"sm",type:"blue"},"Unsaved")),n().createElement("div",{className:dn.headerRight},n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:g.eM,onClick:eu,disabled:_||!s.unsavedChanges},_?"Saving...":"Save"),n().createElement(o.$nd,{kind:"primary",size:"sm",renderIcon:g.Vn,onClick:ep,disabled:f||!c?.uuid||!l(y.RB.REPORT_COMPILE),title:l(y.RB.REPORT_COMPILE)?void 0:"Requires the report compile privilege"},f?"Compiling...":"Compile")),n().createElement(o.obU,{size:"sm",renderIcon:ed.aI,align:"right"},n().createElement(o.XSD,{itemText:"Save as"}),n().createElement(o.XSD,{itemText:"Export JSON"}),n().createElement(o.XSD,{itemText:"Import JSON"}),n().createElement(o.XSD,{itemText:"Validate"}),n().createElement(o.XSD,{itemText:"View history"}),n().createElement(o.XSD,{itemText:"Retire"})))),h&&n().createElement("div",{className:dn.notification},n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:h})),T&&n().createElement("div",{className:dn.notification},n().createElement(o.jeF,{kind:"error",title:"Save Error",subtitle:T,onClose:()=>C(null)})),w&&n().createElement("div",{className:dn.notification},n().createElement(o.jeF,{kind:"error",title:"Compile Error",subtitle:w,onClose:()=>N(null)})),I&&n().createElement("div",{className:dn.notification},n().createElement(o.jeF,{kind:"success",title:"Compiled",subtitle:I,onClose:()=>k(null)})),n().createElement(tI,{open:ec,currentCategoryUuid:s.categoryUuid,onConfirm:ef,onClose:eE,reportType:"linelist"}),n().createElement(da,{open:ee,onClose:()=>et(!1),onRun:eT,parameters:s.parameters,loading:G}),n().createElement("div",{className:dn.panels},n().createElement("aside",{className:dn.leftPanel,style:{width:x?48:P}},n().createElement("div",{className:dn.panelHeader},!x&&n().createElement(n().Fragment,null,n().createElement("h3",{className:dn.panelTitle},"Data Catalogue"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.JG,iconDescription:"Collapse left panel",onClick:()=>L(!0)})),x&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.c_,iconDescription:"Expand left panel",onClick:()=>L(!1)})),!x&&n().createElement("div",{className:dn.panelContent},n().createElement("div",{className:dn.columnSourcesSection},n().createElement("div",{className:dn.populationCard},n().createElement(sE,{populationSources:s.populationSources,onChange:e=>eg({populationSources:e}),disabled:u})),n().createElement("div",{className:dn.columnSourcesCard},n().createElement("div",{className:dn.columnSourcesHeader},n().createElement("h4",{className:dn.columnSourcesTitle},n().createElement("span",{className:dn.columnSourcesIcon},"\uD83D\uDCCA"),"Column Sources"),n().createElement("span",{className:dn.columnSourcesSubtitle},"Select columns for output")),n().createElement(dr,{dataSources:s.dataSources,onChange:eb,disabled:u}),n().createElement(sO,{dataSources:s.dataSources,populationSources:s.populationSources,onPopulationSourcesChange:void 0,onAddToColumns:eC,onAddToFilters:eI,onTableChange:ey,onFieldsAvailable:ek,onEtlStructureDetected:eA,selectedFields:eh,onAddCustomSqlColumn:ew,onAddDraftColumn:eN,idColumnAlias:"patient_id",showPopulationSelector:!1}))))),n().createElement("div",{className:`${dn.resizeHandle} ${dn.resizeHandleLeftMiddle}`,onMouseDown:eR,style:{cursor:"col-resize"}}),n().createElement("aside",{className:dn.middlePanel,style:{width:M?48:F}},n().createElement("div",{className:dn.panelHeader},!M&&n().createElement(n().Fragment,null,n().createElement("h3",{className:dn.panelTitle},"Query Configuration"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.JG,iconDescription:"Collapse middle panel",onClick:()=>$(!0)})),M&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.c_,iconDescription:"Expand middle panel",onClick:()=>$(!1)})),!M&&n().createElement("div",{className:dn.panelContent},n().createElement(s3,{draft:s,onDraftChange:eg,availableFields:er,indicators:eo,onRemoveColumn:ev}))),n().createElement("div",{className:`${dn.resizeHandle} ${dn.resizeHandleMiddleRight}`,onMouseDown:eO,style:{cursor:"col-resize"}}),n().createElement("main",{className:dn.rightPanel},n().createElement("div",{className:dn.panelHeader},n().createElement("h3",{className:dn.panelTitle},"Preview"),n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"primary",size:"sm",onClick:eS,disabled:G||!c?.compiledReportDefinitionUuid||!l(y.RB.SQL_EXECUTE),tooltipAlignment:"end",tooltipPosition:"bottom"},G?"Loading...":"Run Preview"))),n().createElement("div",{className:dn.panelContent},!c?.compiledReportDefinitionUuid&&"edit"===A&&n().createElement(o.jeF,{kind:"info",title:"Report Not Compiled",subtitle:"Please compile the report first before running preview. Click the 'Compile' button above to generate the report definition.",lowContrast:!0}),X&&n().createElement(o.jeF,{kind:"error",title:"Preview Error",subtitle:X}),!Q&&!X&&c?.compiledReportDefinitionUuid&&n().createElement("div",{className:dn.emptyPreview},n().createElement(es.yo,{size:32}),n().createElement("p",null,"Run a preview to see sample data")),Q&&Q.rowCount>0&&n().createElement("div",{className:dn.previewResults},n().createElement("div",{className:dn.previewStatus},n().createElement("span",null,"Preview rows: ",Q.rowCount),n().createElement("span",null,"Query duration: —")),Q.html?n().createElement("div",{className:dn.htmlPreview,dangerouslySetInnerHTML:{__html:Q.html}}):n().createElement(o.K3K,null,n().createElement(o.XIK,null,n().createElement(o.ndF,null,n().createElement(o.Hjg,null,Q.columns.map(e=>n().createElement(o.A0N,{key:e},e)))),n().createElement(o.BFY,null,Q.rows.map((e,t)=>n().createElement(o.Hjg,{key:t},Q.columns.map(r=>n().createElement(o.nA6,{key:`${t}-${r}`},e[r]?.toString()??"")))))))),Q&&0===Q.rowCount&&n().createElement("div",{className:dn.emptyPreview},n().createElement(es.yo,{size:32}),n().createElement("p",null,"No data found for the current configuration"))))))},di="-esm-report-builder__linelist-run-report-page__emptyState___PPH5o",ds=()=>{let e=(0,i.Zp)(),{reportId:t}=(0,i.g)(),[r,l]=(0,a.useState)(null),[s,c]=(0,a.useState)(!0),[m,p]=(0,a.useState)(null),[_,f]=(0,a.useState)(!1),[b,y]=(0,a.useState)(null),[h,v]=(0,a.useState)({}),[S,T]=(0,a.useState)({}),[C,w]=(0,a.useState)({}),[N,I]=(0,a.useState)("FIXED"),[k,A]=(0,a.useState)(""),[R,O]=(0,a.useState)(null),[D,x]=(0,a.useState)([]),[L,M]=(0,a.useState)(0),[$,P]=(0,a.useState)(null),[U,B]=(0,a.useState)(1),[F,z]=(0,a.useState)(25);(0,a.useEffect)(()=>{(async()=>{if(t){c(!0),p(null);try{let e=await (0,sl.getLinelistReport)(t);l(e);let r=(0,sl.m)(e);if(r?.parameters){let e={};r.parameters.forEach(t=>{if(t.defaultValue&&(e[t.name]=t.defaultValue),"DATE"===t.type&&!e[t.name])if("startDate"===t.name){let t=new Date,a=new Date;a.setMonth(a.getMonth()-6),e.startDate=a.toISOString().split("T")[0],r.parameters.some(e=>"endDate"===e.name)&&(e.endDate=t.toISOString().split("T")[0])}else"endDate"===t.name?e.endDate=new Date().toISOString().split("T")[0]:t.name.toLowerCase().includes("date")&&!t.name.includes("end")&&(e[t.name]=new Date().toISOString().split("T")[0])}),v(e)}}catch(e){p(e instanceof Error?e.message:"Failed to load report")}finally{c(!1)}}})()},[t]);let q=(0,a.useCallback)(()=>r?(0,sl.sY)(r):[],[r]),j=(0,a.useCallback)(()=>q().filter(e=>"DATE"===e.type||"DATETIME"===e.type),[q]),H=(0,a.useCallback)(()=>{let e=j();return e.some(e=>"startdate"===e.name.toLowerCase()||"start_date"===e.name.toLowerCase())&&e.some(e=>"enddate"===e.name.toLowerCase()||"end_date"===e.name.toLowerCase())},[j]),J=(e,t)=>{w(r=>({...r,[e]:t}))},V=(0,a.useCallback)(()=>{let e=q();if("RELATIVE"===N&&H()&&!k)return!1;for(let t of e){if(("DATE"===t.type||"DATETIME"===t.type)&&"RELATIVE"===N){let e="startdate"===t.name.toLowerCase()||"start_date"===t.name.toLowerCase(),r="enddate"===t.name.toLowerCase()||"end_date"===t.name.toLowerCase();if(e||r)continue}if(t.required&&!h[t.name])return!1}return!0},[q,h,N,k,H]),W=(0,a.useCallback)(async()=>{if(!r||!V())return void y("Please fill in all required parameters");if("RELATIVE"===N&&H()&&!k)return void y("Please select a reporting period");f(!0),y(null),O(null);try{let e=(0,sl.m)(r),t=q(),a={};if("RELATIVE"===N&&k&&H()){let{start:e,end:r}=a4(k);j().forEach((t,n)=>{0===n?a[t.name]=a8(e):1===n&&(a[t.name]=a8(r))}),t.forEach(e=>{"DATE"!==e.type&&"DATETIME"!==e.type&&h[e.name]&&(a[e.name]=h[e.name])})}else t.forEach(e=>{h[e.name]&&(a[e.name]=h[e.name])});let n=await (0,sl.ah)(r.uuid,e?.categoryUuid);if(!n.reportDefinitionUuid)return void y("Failed to compile report - no report definition UUID returned");let l=await (0,sl.U)({reportDefinitionUuid:n.reportDefinitionUuid,parameters:a,maxRows:10*F});if(l.success&&l.data){let t=e?.dataSetDefinitions?.[0]?.name||"PATIENT_LIST",r=l.data[t]||[],a=r.length>0?Object.keys(r[0]):[];x(a),O(r),M(r.length),P(new Date)}else y(l.error||"Failed to run report")}catch(e){y(e instanceof Error?e.message:"Failed to run report")}finally{f(!1)}},[r,h,F,V,q,j,N,k,H]),K=(0,a.useCallback)(e=>{if(R&&0!==R.length)if("CSV"===e){let e=new Blob([[D.join(","),...R.map(e=>D.map(t=>{let r=e[t];if(null==r)return"";let a=String(r);return a.includes(",")||a.includes('"')||a.includes("\n")?`"${a.replace(/"/g,'""')}"`:a}).join(","))].join("\n")],{type:"text/csv"}),t=URL.createObjectURL(e),a=document.createElement("a");a.href=t,a.download=`${r?.name?.replace(/[^a-z0-9]/gi,"_")||"linelist"}_${Date.now()}.csv`,a.click(),URL.revokeObjectURL(t)}else alert("XLSX export not implemented yet")},[R,D,r]),Q=q(),Y=R&&R.length>0,X=Y?R.slice((U-1)*F,U*F):[];return s?n().createElement("div",{style:{padding:"2rem"}},n().createElement(o.Rhj,{description:"Loading report...",withOverlay:!1,active:!0})):m&&!r?n().createElement(o.BJc,{gap:5},n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:m}),n().createElement(o.$nd,{kind:"secondary",renderIcon:E.nk,onClick:()=>e("/linelist")},"Back to Linelist Reports")):n().createElement(o.BJc,{gap:5},n().createElement(G,{title:r?.name||"Linelist Report",subtitle:r?.description,actions:n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:E.nk,onClick:()=>e("/linelist")},"Back to Linelist Reports")}),Q.length>0&&n().createElement("div",{className:"-esm-report-builder__linelist-run-report-page__parametersSection___fnVLK"},n().createElement("div",{className:"-esm-report-builder__linelist-run-report-page__parametersHeader___PWxmx"},n().createElement("h2",{className:"-esm-report-builder__linelist-run-report-page__parametersTitle___8sdDx"},"Report Parameters"),n().createElement("p",{className:"-esm-report-builder__linelist-run-report-page__parametersDescription___+hfvV"},'Configure the parameters for this report run, then click "Run Report" to view results.')),H()&&n().createElement("div",{style:{marginBottom:"1.5rem"}},n().createElement("label",{className:"cds--label"},"Date Selection Mode"),n().createElement(o.zWQ,{legendText:"",name:"date-mode",valueSelected:N,onChange:e=>{I(e),"FIXED"===e&&A("")}},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"===N&&H()&&n().createElement("div",{style:{marginBottom:"1.5rem",maxWidth:"300px"}},n().createElement(o.l6P,{id:"relative-period-select",labelText:"Select reporting period",value:k,onChange:e=>{A(e.target.value)},size:"sm"},n().createElement(o.ebT,{value:"",text:"Select period"}),a3.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),S.relativePeriod&&n().createElement("div",{style:{color:"#da1e28",fontSize:"0.875rem",marginTop:"0.5rem"}},S.relativePeriod)),n().createElement(o.xA9,{fullWidth:!0,className:"-esm-report-builder__linelist-run-report-page__parametersGrid___yZwpr"},Q.map(e=>{let t=(e=>{let t=h[e.name]||"",r=S[e.name];if(H()&&"RELATIVE"===N){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}let a={key:e.name,parameter:e,value:t,error:r,onChange:t=>{var r;return r=e.name,void(v(e=>({...e,[r]:t})),S[r]&&T(e=>{let t={...e};return delete t[r],t}))}};switch(e.type){case"DATE":case"DATETIME":return n().createElement(a7,a);case"NUMBER":return n().createElement(a9,a);case"BOOLEAN":return n().createElement(ne,a);case"LIST":return n().createElement(nt,a);case"LOCATION":return n().createElement(ni,{...a,onSearchQueryChange:t=>J(e.name,t)});case"CONCEPT":return n().createElement(no,{...a,searchQuery:C[e.name]||"",onSearchQueryChange:t=>J(e.name,t)});case"IDENTIFIER_TYPE":return n().createElement(ns,a);case"PERSON_ATTRIBUTE":return n().createElement(nd,a);default:return n().createElement(nc,{...a,onError:t=>{var r;return r=e.name,void T(e=>{if(t)return{...e,[r]:t};let a={...e};return delete a[r],a})}})}})(e);return t?n().createElement(o.VPZ,{key:e.name,md:4,lg:4},n().createElement("div",{className:"-esm-report-builder__linelist-run-report-page__parameterField___Ksp+b"},t)):null})),n().createElement("div",{className:"-esm-report-builder__linelist-run-report-page__actions___qGhIE"},n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"primary",renderIcon:d.jG,onClick:W,disabled:_||!V()},_?"Running...":"Run Report"),n().createElement(o.$nd,{kind:"secondary",renderIcon:u.wM,onClick:()=>{v({}),A(""),I("FIXED")},disabled:_},"Reset"),n().createElement(o.$nd,{kind:"ghost",renderIcon:g.eM,onClick:()=>{alert("Save preset functionality not yet implemented")},disabled:_},"Save Preset"))),b&&n().createElement(o.jeF,{kind:"error",title:"Run Error",subtitle:b,onClose:()=>y(null)})),Y&&n().createElement("div",{className:"-esm-report-builder__linelist-run-report-page__resultsSection___bnHSZ"},n().createElement("div",{className:"-esm-report-builder__linelist-run-report-page__resultsHeader___YDDce"},n().createElement("div",{className:"-esm-report-builder__linelist-run-report-page__resultsInfo___EBTW8"},n().createElement("h2",{className:"-esm-report-builder__linelist-run-report-page__resultsTitle___mWU4J"},"Results"),n().createElement("div",{className:"-esm-report-builder__linelist-run-report-page__stats___z6p4t"},n().createElement("span",null,"Records: ",n().createElement("strong",null,L)),n().createElement("span",null,"Generated: ",n().createElement("strong",null,$?.toLocaleString())),Q.some(e=>"startDate"===e.name||"endDate"===e.name)&&n().createElement("span",null,Q.some(e=>"startDate"===e.name)?`Date Range: ${h.startDate} to ${h.endDate||"N/A"}`:`Report Date: ${h.endDate||h.date||"N/A"}`))),n().createElement("div",{className:"-esm-report-builder__linelist-run-report-page__exportActions___s74ew"},n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:es.f5,onClick:()=>K("CSV")},"Export CSV"),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>K("XLSX")},"Export XLSX")))),n().createElement(o.bQt,{rows:X.map((e,t)=>({id:t,...e})),headers:D.map(e=>({key:e,header:e}))},({rows:e,headers:t,getHeaderProps:r,getTableProps:a})=>n().createElement(o.K3K,null,n().createElement(o.XIK,a(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,t.map(e=>n().createElement(o.A0N,{...r({header:e}),key:e.key},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id},t.map(t=>n().createElement(o.nA6,{key:t.key},e[t.key]??"-")))))))),n().createElement(o.dKS,{totalItems:R.length,pageSize:F,pageSizes:[25,50,100],page:U,onChange:({page:e,pageSize:t})=>{B(e),z(t)}})),!_&&!Y&&0===Q.length&&n().createElement(o.FAs,{className:di},n().createElement(tb.Ss,{size:48}),n().createElement("h3",null,"No Parameters Required"),n().createElement("p",null,"This report has no configurable parameters."),n().createElement(o.$nd,{kind:"primary",renderIcon:d.jG,onClick:W},"Run Report")),!_&&!Y&&Q.length>0&&n().createElement(o.FAs,{className:di},n().createElement(tb.Ss,{size:48}),n().createElement("h3",null,"Ready to Run"),n().createElement("p",null,'Configure the parameters above and click "Run Report" to view results.')))},dd=[{key:"validate",label:"Validating package...",status:"pending"},{key:"categories",label:"Report Categories...",status:"pending"},{key:"ageCategories",label:"Age Categories...",status:"pending"},{key:"ageGroups",label:"Age Groups...",status:"pending"},{key:"themes",label:"Data Themes...",status:"pending"},{key:"indicators",label:"Indicators...",status:"pending"},{key:"sections",label:"Sections...",status:"pending"},{key:"library",label:"Report Library...",status:"pending"},{key:"complete",label:"Complete!",status:"pending"}],dc=[{key:"validate",label:"Validating package...",status:"pending"},{key:"reports",label:"Compiled Reports...",status:"pending"},{key:"complete",label:"Complete!",status:"pending"}],dm=({isOpen:e,onClose:t,onSuccess:r})=>{let[a,l]=n().useState(!1),[i,s]=n().useState(0),[d,c]=n().useState("artifacts"),[m,u]=n().useState(dd),[p,_]=n().useState(null),[g,E]=n().useState(null),[f,b]=n().useState(!1),[y,h]=n().useState(""),[v,S]=n().useState(null);n().useEffect(()=>{e&&T()},[e]);let T=()=>{l(!1),s(0),c("artifacts"),u(dd),_(null),E(null),b(!1),h(""),S(null)};n().useEffect(()=>{"artifacts"===d?u(dd):u(dc)},[d]);let C=e=>e&&""!==e.trim()?null:"Custom path cannot be empty when enabled",w=async()=>{if(f){let e=C(y);if(e)return void S(e)}l(!0),E(null),S(null);try{for(let e=0;e<m.length-1;e++)await N(e,"in-progress"),await I(400),await N(e,"complete");let e={type:d,...f?{sourceDirectory:y.trim()}:{}},t=await em(e);await N(m.length-1,"complete"),_(t),t.success?r?.():E(t.errorMessage||"Initialization failed. Please try again.")}catch(e){E(e.message||"An unexpected error occurred during initialization."),u(e=>e.map((e,t)=>t===i?{...e,status:"error"}:e))}finally{l(!1)}},N=async(e,t)=>{e>=0&&e<m.length&&(s(e+1),u(r=>r.map((r,a)=>a===e?{...r,status:t}:r))),await I(100)},I=e=>new Promise(t=>setTimeout(t,e)),k=!f||f&&!v&&""!==y.trim(),A=!a&&!p;return n().createElement(o.aFV,{open:e,onRequestClose:t,modalHeading:"Initialize Report Builder",modalLabel:"Report Builder",primaryButtonText:A?"Initialize":p?.success?"Done":"Close",primaryButtonDisabled:A&&(!k||a),onRequestSubmit:A?w:t,secondaryButtonText:A?"Cancel":void 0,size:"md"},n().createElement(o.cwr,null,!a&&!p&&n().createElement("div",{className:eg},n().createElement("div",{className:eE},n().createElement("label",{className:"-esm-report-builder__import-export-styles__label___z+IN8"},"Import Scope"),n().createElement(o.zWQ,{name:"importScope",valueSelected:d,onChange:e=>c(e),orientation:"vertical"},n().createElement(o.aaP,{value:"artifacts",id:"scope-artifacts",labelText:"Report Builder Artifacts (Categories, Indicators, Themes, Sections, etc.)",disabled:!1}),n().createElement(o.aaP,{value:"compiledReports",id:"scope-compiled-reports",labelText:"Compiled Reports",disabled:!1}))),n().createElement("div",{className:"-esm-report-builder__import-export-styles__infoBox___Ge83-"},n().createElement(tN.$$,{size:20,className:"-esm-report-builder__import-export-styles__infoIcon___4jEyh"}),n().createElement("div",null,n().createElement("p",{style:{margin:"0 0 0.5rem 0",fontSize:"0.875rem",fontWeight:500}},"Quick Initialization"),n().createElement("p",{style:{margin:0,fontSize:"0.875rem",color:"var(--cds-text-02)"}},"artifacts"===d?"Loads all Report Builder artifacts (categories, indicators, themes, sections, library, etc.) from the default OpenMRS configuration directory.":"Loads all compiled reports from the default OpenMRS configuration directory."))),n().createElement("div",{className:"-esm-report-builder__import-export-styles__loadedItemsBox___WXV9Y"},n().createElement("h5",{style:{fontSize:"0.875rem",fontWeight:500,margin:"0 0 0.75rem 0"}},"What will be loaded:"),"artifacts"===d?n().createElement("div",{className:eF},n().createElement("span",{className:ez},"Report Categories"),n().createElement("span",{className:ez},"Age Categories & Groups"),n().createElement("span",{className:ez},"Data Themes"),n().createElement("span",{className:ez},"Indicators"),n().createElement("span",{className:ez},"Sections"),n().createElement("span",{className:ez},"Report Library"),n().createElement("span",{className:ez},"ETL Sources & Tasks")):n().createElement("div",{className:eF},n().createElement("span",{className:ez},"Compiled Reports"))),n().createElement("div",{className:"-esm-report-builder__import-export-styles__advancedSection___ls5lE"},n().createElement(o.lMk,{id:"use-custom-path-toggle",labelText:"Use custom directory path",toggled:f,onChange:e=>{b(e.target.checked),S(null)},labelA:"Default",labelB:"Custom"})),f&&n().createElement("div",{className:"-esm-report-builder__import-export-styles__customPathSection___niukW"},n().createElement(o.ksK,{id:"custom-path-input",labelText:"Custom directory path",placeholder:"/path/to/distribution/package",value:y,onChange:e=>{h(e.target.value),v&&S(C(e.target.value))},invalid:!!v,invalidText:v||""}),n().createElement("p",{className:"-esm-report-builder__import-export-styles__hintText___OBlwJ"},"Enter the full path to the directory containing the exported report package.")),g&&n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:g,hideCloseButton:!0,lowContrast:!0,style:{marginTop:"1rem"}})),a&&n().createElement("div",{className:ef},n().createElement("div",{className:eb},n().createElement("h4",null,"Initializing Report Builder..."),n().createElement("p",{style:{fontSize:"0.875rem",color:"var(--cds-text-02)"}},"artifacts"===d?"Loading and configuring Report Builder artifacts":"Loading and configuring compiled reports"," from ",f?"custom directory":"default location",".")),n().createElement(o.z21,{value:Math.round(i/m.length*100),label:m[i]?.label||"Initializing...",className:ey}),n().createElement("div",{className:eh,style:{maxHeight:"200px"}},m.map(e=>n().createElement("div",{key:e.key,className:ev},n().createElement("span",{className:eS},"complete"===e.status&&n().createElement(U.MG,{size:16,className:eI}),"error"===e.status&&n().createElement(es.$D,{size:16,className:eN}),"in-progress"===e.status&&n().createElement(ed.lP,{size:16,className:eC})),n().createElement("span",{className:`${eT} ${"complete"===e.status?ew:"error"===e.status?eN:"in-progress"===e.status?eC:""}`},e.label))))),p&&p.success&&n().createElement("div",{className:ek},n().createElement("div",{className:eA},n().createElement(U.MG,{size:32,className:eR}),n().createElement("h4",null,"Initialization completed")),n().createElement("div",{className:eO},n().createElement("p",{className:eD},p.summary),n().createElement("div",{className:"-esm-report-builder__import-export-styles__statsRow___EwgdN"},n().createElement("div",{className:ex},n().createElement("span",{className:eL},p.successCount),n().createElement("span",{className:eM},"Processed")),void 0!==p.errorCount&&p.errorCount>0&&n().createElement("div",{className:ex},n().createElement("span",{className:eL,style:{color:"#da1e28"}},p.errorCount),n().createElement("span",{className:eM},"Errors")))),p.successes&&p.successes.length>0&&n().createElement("div",{className:e$},n().createElement("h5",null,"Successfully Loaded:"),n().createElement("div",{className:eP},p.successes.slice(0,10).map((e,t)=>n().createElement("div",{key:t,className:eU},n().createElement(o.vwO,{type:"green"},e.type),n().createElement("span",null,e.filename))),p.successes.length>10&&n().createElement("div",{style:{fontSize:"0.75rem",color:"var(--cds-text-02)",padding:"0.25rem 0"}},"... and ",p.successes.length-10," more"))),p.errors&&p.errors.length>0&&n().createElement("div",{className:e$},n().createElement("h5",{style:{color:"#da1e28"}},"Errors:"),n().createElement("div",{className:eP},p.errors.map((e,t)=>n().createElement("div",{key:t,className:`${eU} -esm-report-builder__import-export-styles__errorItem___Lz9pL`},n().createElement(o.vwO,{type:"red"},e.type),n().createElement("span",null,e.filename),e.error&&n().createElement("span",{className:"-esm-report-builder__import-export-styles__errorMessage___2vi9t"},": ",e.error))))))))},du=e=>t=>e(t).then(e=>e.length),dp=[{key:"ageCategories",label:"Age Categories",kind:"metadata",Icon:s.YJ,count:du(rM),path:"/admin/age-categories"},{key:"ageGroups",label:"Age Groups",kind:"metadata",Icon:P.Gp,count:e=>rM(e).then(e=>e.reduce((e,t)=>e+(t.ageGroups?.length??0),0)),path:"/admin/age-groups"},{key:"categories",label:"Categories",kind:"metadata",Icon:m.vd,count:du(e=>en(void 0,e)),path:"/admin/report-categories"},{key:"dashboards",label:"Dashboards",kind:"metadata",Icon:_._C,count:du(e=>ob(void 0,e)),path:"/admin/dashboards"},{key:"etlMonitors",label:"ETL Monitors",kind:"metadata",Icon:g.wB,count:du(e=>lR(void 0,e)),path:"/admin/etl-monitors"},{key:"etlSources",label:"ETL Sources",kind:"metadata",Icon:c.EN,count:du(e=>l_(void 0,e)),path:"/admin/etl-sources"},{key:"indicators",label:"Indicators",kind:"metadata",Icon:b.j0,count:du(e=>r_(void 0,e)),path:"/indicators"},{key:"library",label:"Library",kind:"metadata",Icon:E.E3,count:du(e=>ln(void 0,e)),path:"/admin/report-library"},{key:"sections",label:"Sections",kind:"metadata",Icon:p.B8,count:du(e=>tp(void 0,e)),path:"/sections"},{key:"themes",label:"Themes",kind:"metadata",Icon:c.rE,count:du(e=>tx(void 0,e)),path:"/admin/themes"},{key:"aggregateReports",label:"Aggregate Reports",kind:"reports",Icon:es.yo,count:du(e=>X(void 0,e)),path:"/reports"},{key:"linelistReports",label:"Line-list Reports",kind:"reports",Icon:es.yo,count:du(e=>(0,sl.CB)(void 0,e)),path:"/linelist"}],d_=[{key:"name",header:"Configuration"},{key:"version",header:"Version"},{key:"size",header:"Size"},{key:"createdDate",header:"Created"},{key:"status",header:"Status"},{key:"actions",header:"Action"}],dg=()=>{let{has:e}=v(),t=e(y.RB.PACKAGE_IMPORT),r=e(y.RB.PACKAGE_EXPORT),a=(0,i.Zp)(),[l,s]=n().useState(!1),[c,m]=n().useState(!1),[p,g]=n().useState(0),[E,f]=n().useState(()=>Object.fromEntries(dp.map(e=>[e.key,{count:null,status:"loading"}]))),[b,h]=n().useState(null),[S,T]=n().useState(!0),C=n().useRef(),w=n().useCallback(()=>{C.current?.abort();let e=new AbortController;C.current=e,f(Object.fromEntries(dp.map(e=>[e.key,{count:null,status:"loading"}]))),T(!0),Promise.all(dp.map(async t=>{try{let r=await t.count(e.signal);if(e.signal.aborted)return;f(e=>({...e,[t.key]:{count:r,status:r>0?"ready":"empty"}}))}catch(r){if(e.signal.aborted||r?.name==="AbortError")return;console.error(`Failed to scan artifacts for ${t.label}:`,r),f(e=>({...e,[t.key]:{count:null,status:"error"}}))}})).then(()=>{e.signal.aborted||(T(!1),h(new Date))})},[]);n().useEffect(()=>(w(),()=>C.current?.abort()),[w]);let[N,I]=n().useState(""),[k,A]=n().useState("all"),R=dp.filter(e=>{if("all"!==k&&e.kind!==k)return!1;let t=N.trim().toLowerCase();return!t||e.label.toLowerCase().includes(t)}),O=R.filter(e=>"metadata"===e.kind),D=R.filter(e=>"reports"===e.kind),x=dp.filter(e=>"metadata"===e.kind).length,L=dp.filter(e=>"reports"===e.kind).length,M=dp.reduce((e,t)=>E[t.key]?.status==="ready"?e+(E[t.key].count??0):e,0),[$,U]=n().useState([]),[B,F]=n().useState(!1),[z,q]=n().useState(null),[j,H]=n().useState(""),[J,V]=n().useState("all"),[W,K]=n().useState(0);n().useEffect(()=>{if(1!==p)return;let e=new AbortController;return(async()=>{F(!0),q(null);try{let t=await eu({q:j||void 0,status:"all"===J?void 0:J},e.signal);e.signal.aborted||U(t)}catch(t){if(e.signal.aborted)return;console.error("Failed to load packages:",t),q(t.message||"Failed to load packages")}finally{e.signal.aborted||F(!1)}})(),()=>e.abort()},[p,j,J,W]);let Q=n().useRef(),Y=e=>e&&"loading"!==e.status?"error"===e.status?n().createElement("span",{className:`${e5} -esm-report-builder__import-export-styles__statusError___ZG0SH`},n().createElement("span",{className:e6}),"Error"):"empty"===e.status?n().createElement("span",{className:`${e5} -esm-report-builder__import-export-styles__statusEmpty___xsDc4`},n().createElement("span",{className:e6}),"Empty"):n().createElement("span",{className:`${e5} -esm-report-builder__import-export-styles__statusReady___s+K6Q`},n().createElement("span",{className:e6}),"Ready"):null;return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Report Builder Import / Export",subtitle:"Initialize Report Builder from backend-configured artifacts or extract the current reporting configuration."}),(t||r)&&n().createElement("div",{className:"-esm-report-builder__import-export-styles__actionCards___IPpuB"},t&&n().createElement("div",{className:eq},n().createElement("div",{className:ej},n().createElement(es.f5,{size:26})),n().createElement("div",{className:eH},n().createElement("h3",{className:eJ},"Initialize from Artifacts"),n().createElement("p",{className:eG},"Loads Report Builder configuration from artifacts available on the server.")),n().createElement(o.$nd,{className:eV,onClick:()=>m(!0)},"Initialize")),r&&n().createElement("div",{className:eq},n().createElement("div",{className:ej},n().createElement(P._O,{size:26})),n().createElement("div",{className:eH},n().createElement("h3",{className:eJ},"Extract Artifacts"),n().createElement("p",{className:eG},"Exports the current Report Builder configuration to the configured artifacts location.")),n().createElement(o.$nd,{className:eV,onClick:()=>s(!0)},"Extract"))),n().createElement("div",{className:"-esm-report-builder__import-export-styles__infoBanner___ZQOU9"},n().createElement(tN.$$,{size:16,className:"-esm-report-builder__import-export-styles__infoBannerIcon___tOaQX"}),n().createElement("span",null,"Artifact storage is configured by the system administrator. No file or folder selection is required.")),n().createElement(o.tUM,{selectedIndex:p,onChange:e=>g(e.selectedIndex??0)},n().createElement(o.wbY,{"aria-label":"Import / Export sections"},n().createElement(o.ozo,null,"Available Artifacts"),n().createElement(o.ozo,null,"Current Configuration"),n().createElement(o.ozo,null,"History")),n().createElement(o.T2N,null,n().createElement(o.KpK,null,n().createElement("div",{className:"-esm-report-builder__import-export-styles__artifactsLayout___yAV3n"},n().createElement("div",{className:eQ},n().createElement("div",{className:"-esm-report-builder__import-export-styles__toolbar___YWIMb"},n().createElement(o.vji,{size:"md",labelText:"Search artifacts",placeholder:"Search artifacts...",className:eW,onChange:e=>I(e.target.value)}),n().createElement("div",{className:"-esm-report-builder__import-export-styles__toolbarActions___OtEa1"},n().createElement("select",{className:eB,value:k,onChange:e=>A(e.target.value),"aria-label":"Filter by type"},n().createElement("option",{value:"all"},"Type: All"),n().createElement("option",{value:"metadata"},"Type: Metadata"),n().createElement("option",{value:"reports"},"Type: Reports")),n().createElement(o.$nd,{kind:"ghost",className:eK,renderIcon:u.wM,onClick:w,disabled:S},"Refresh"),t&&n().createElement(o.$nd,{kind:"ghost",className:"-esm-report-builder__import-export-styles__initAllButton___M-DQI",renderIcon:d.jG,onClick:()=>m(!0)},"Initialize All"))),O.length>0&&n().createElement("div",{className:eY},n().createElement("h4",{className:eX},"Metadata"),n().createElement("p",{className:eZ},"Available metadata artifact groups"),n().createElement("div",{className:"-esm-report-builder__import-export-styles__groupGrid___s8ESa"},O.map(e=>{let t=E[e.key];return n().createElement("button",{key:e.key,type:"button",className:"-esm-report-builder__import-export-styles__groupCard___+tSQc",onClick:()=>a(e.path),title:`View ${e.label}`},n().createElement("span",{className:e0},n().createElement(e.Icon,{size:18})),n().createElement("span",{className:e1},n().createElement("span",{className:"-esm-report-builder__import-export-styles__groupCardName___25YoJ"},e.label),n().createElement("span",{className:e2},t?.status==="loading"?"Scanning…":`${t?.count??0} artifacts`),Y(t)))}))),D.length>0&&n().createElement("div",{className:eY},n().createElement("h4",{className:eX},"Reports"),n().createElement("p",{className:eZ},"Available report artifacts"),n().createElement("div",{className:"-esm-report-builder__import-export-styles__reportGrid___0xUPd"},D.map(e=>{let t=E[e.key];return n().createElement("div",{key:e.key,className:"-esm-report-builder__import-export-styles__reportCard___ShS3m"},n().createElement("span",{className:e0},n().createElement(e.Icon,{size:20})),n().createElement("span",{className:e1},n().createElement("span",{className:"-esm-report-builder__import-export-styles__reportCardName___+vL59"},e.label),n().createElement("span",{className:e2},t?.status==="loading"?"Scanning…":`${t?.count??0} artifacts`),Y(t)),n().createElement(o.$nd,{kind:"ghost",size:"sm",className:eK,onClick:()=>a(e.path)},"View"))}))),0===O.length&&0===D.length&&n().createElement("div",{className:ep},n().createElement("p",null,"No artifacts match your search."))),n().createElement("div",{className:"-esm-report-builder__import-export-styles__summaryCard___kDHtg"},n().createElement("div",{className:"-esm-report-builder__import-export-styles__summaryHeader___8ZbwL"},n().createElement("span",{className:"-esm-report-builder__import-export-styles__summaryHeaderIcon___Pu7b5"},n().createElement(_._C,{size:14})),n().createElement("span",null,"Artifact Summary")),n().createElement("div",{className:e3},n().createElement("span",null,"Metadata groups"),n().createElement("span",{className:e4},x)),n().createElement("div",{className:e3},n().createElement("span",null,"Report types"),n().createElement("span",{className:e4},L)),n().createElement("div",{className:e3},n().createElement("span",null,"Ready artifacts"),n().createElement("span",{className:e4},S?"—":M)),n().createElement("div",{className:e3},n().createElement("span",null,"Last scanned"),n().createElement("span",{className:"-esm-report-builder__import-export-styles__summaryRowTime___VXhcr"},(e=>{if(!e)return"—";let t=e.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!1});return e.toDateString()===new Date().toDateString()?`Today, ${t}`:`${e.toLocaleDateString("en-US",{month:"short",day:"numeric"})}, ${t}`})(b))),n().createElement("hr",{className:"-esm-report-builder__import-export-styles__summaryDivider___ahqSv"}),n().createElement("div",{className:"-esm-report-builder__import-export-styles__aboutTitle___Zifhh"},n().createElement(tN.$$,{size:14}),n().createElement("span",null,"About")),n().createElement("p",{className:"-esm-report-builder__import-export-styles__aboutText___zNqv3"},"Initialize Report Builder from backend-configured artifacts or extract the current reporting configuration.")))),n().createElement(o.KpK,null,n().createElement("div",{className:eQ},n().createElement("div",{className:"-esm-report-builder__import-export-styles__packagesToolbar___Czdtc"},n().createElement(o.vji,{size:"md",labelText:"Search configurations",placeholder:"Search configurations…",className:eW,onChange:e=>{clearTimeout(Q.current),Q.current=setTimeout(()=>H(e.target.value),300)}}),n().createElement("select",{className:eB,value:J,onChange:e=>V(e.target.value),"aria-label":"Filter by status"},n().createElement("option",{value:"all"},"Status: All"),n().createElement("option",{value:"valid"},"Valid"),n().createElement("option",{value:"invalid"},"Invalid"))),B?n().createElement("div",{className:"-esm-report-builder__import-export-styles__packagesMessage___QVciE"},"Loading…"):null,!B&&z?n().createElement("div",{className:"-esm-report-builder__import-export-styles__packagesError___Wa69-"},z):null,!B&&$.length>0&&n().createElement(o.bQt,{rows:$.map(e=>{var t,r;return{id:e.path||e.name,name:e.name,version:e.version,size:(t=e.size)?t<1048576?(t/1024).toFixed(1)+" KB":(t/1048576).toFixed(1)+" MB":"-",createdDate:(r=e.exportedAt||"")?new Date(r).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}):"-",status:"valid"===e.status?"Valid":"Invalid",action:"Import"}}),headers:d_},({rows:e,headers:r,getHeaderProps:a,getTableProps:l})=>n().createElement(o.K3K,null,n().createElement(o.XIK,l(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,r.map((e,t)=>n().createElement(o.A0N,{key:t,...a({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>{let a=$.find(t=>(t.path||t.name)===e.id);return n().createElement(o.Hjg,{key:e.id},e.cells.map((e,l)=>"status"===r[l].key&&a?n().createElement(o.nA6,{key:e.id},n().createElement(o.vwO,{type:"valid"===a.status?"green":"red"},e.value)):"action"===r[l].key&&a?n().createElement(o.nA6,{key:e.id},t&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>{m(!0)},disabled:"valid"!==a.status},"Import")):n().createElement(o.nA6,{key:e.id},e.value)))}))))),!B&&0===$.length&&n().createElement("div",{className:ep},n().createElement("p",{className:e8},"No configuration artifacts are available."),n().createElement("p",{className:e_},"Extract artifacts to backup or distribute reporting configuration."),r&&n().createElement(o.$nd,{kind:"primary",className:eV,renderIcon:es.f5,onClick:()=>s(!0)},"Extract Artifacts")))),n().createElement(o.KpK,null,n().createElement("div",{className:eQ},n().createElement("div",{className:ep},n().createElement("p",{className:e8},"No history recorded yet."),n().createElement("p",{className:e_},"Import and export operations will appear here after they are performed.")))))),n().createElement(e9,{isOpen:l,onClose:()=>s(!1),onSuccess:()=>{w(),K(e=>e+1)}}),n().createElement(dm,{isOpen:c,onClose:()=>m(!1),onSuccess:()=>{w(),K(e=>e+1)}}))},dE=({requiredPrivileges:e})=>{let{t}=(0,A.useTranslation)(),r=(0,i.Zp)(),{has:a}=v(),l=e??[];return n().createElement("div",{className:"-esm-report-builder__access-denied-page__container___fZWeZ"},n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:t("accessDenied","Access denied"),subtitle:t("accessDeniedSubtitle","Your account does not have permission to open this page."),hideCloseButton:!0}),l.length>0&&n().createElement("div",{className:"-esm-report-builder__access-denied-page__section___w2vgM"},n().createElement("p",{className:"-esm-report-builder__access-denied-page__label___STHy+"},t("requiredPrivileges","Required privilege(s):")),n().createElement("div",{className:"-esm-report-builder__access-denied-page__tags___bJY2x"},l.map(e=>n().createElement(o.vwO,{key:e,type:"red"},(0,y.XT)(e)))),n().createElement("p",{className:"-esm-report-builder__access-denied-page__hint___YbFnL"},t("accessDeniedHint","Ask your administrator to grant you the report builder role carrying these privileges."))),n().createElement("div",{className:"-esm-report-builder__access-denied-page__actions___0cAkB"},a(y.RB.REPORT_VIEW)&&n().createElement(o.$nd,{kind:"primary",onClick:()=>r("/")},t("goToHome","Go to Home")),n().createElement(o.$nd,{kind:"secondary",onClick:()=>r(-1)},t("goBack","Go back"))))},df=({required:e,children:t})=>{let{has:r,isAuthenticated:l}=v();return((0,a.useEffect)(()=>{l||(0,aD.jL)()},[l]),l)?r(...e)?n().createElement(n().Fragment,null,t):n().createElement(dE,{requiredPrivileges:e}):null},db=(e,t)=>n().createElement(df,{required:y.bO[e]},t),dy=()=>n().createElement(i.BV,null,n().createElement(i.qh,{element:n().createElement(k,null)},n().createElement(i.qh,{path:"/",element:db("/",n().createElement(V,null))}),n().createElement(i.qh,{path:"/reports",element:db("/reports",n().createElement(te,null))}),n().createElement(i.qh,{path:"/new",element:db("/new",n().createElement(tR,null))}),n().createElement(i.qh,{path:"/edit/:reportId",element:db("/edit/:reportId",n().createElement(tR,null))}),n().createElement(i.qh,{path:"/indicators",element:db("/indicators",n().createElement(ah,null))}),n().createElement(i.qh,{path:"/sections",element:db("/sections",n().createElement(aB,null))}),n().createElement(i.qh,{path:"/run",element:db("/run",n().createElement(nN,null))}),n().createElement(i.qh,{path:"/run-reports",element:db("/run-reports",n().createElement(nN,null))}),n().createElement(i.qh,{path:"/admin",element:db("/admin",n().createElement(n4,null))}),n().createElement(i.qh,{path:"/admin/report-categories",element:db("/admin/report-categories",n().createElement(n9,null))}),n().createElement(i.qh,{path:"/admin/age-categories",element:db("/admin/age-categories",n().createElement(le,null))}),n().createElement(i.qh,{path:"/admin/age-groups",element:db("/admin/age-groups",n().createElement(lr,null))}),n().createElement(i.qh,{path:"/admin/report-library",element:db("/admin/report-library",n().createElement(lu,null))}),n().createElement(i.qh,{path:"/admin/etl-sources",element:db("/admin/etl-sources",n().createElement(lh,null))}),n().createElement(i.qh,{path:"/admin/etl-tasks",element:db("/admin/etl-tasks",n().createElement(io,null))}),n().createElement(i.qh,{path:"/admin/etl-monitors",element:db("/admin/etl-monitors",n().createElement(oE,null))}),n().createElement(i.qh,{path:"/admin/etl-monitors/builder",element:db("/admin/etl-monitors/builder",n().createElement(oo,null))}),n().createElement(i.qh,{path:"/admin/etl-browser",element:db("/admin/etl-browser",n().createElement(iN,null))}),n().createElement(i.qh,{path:"/admin/dashboards",element:db("/admin/dashboards",n().createElement(sn,null))}),n().createElement(i.qh,{path:"/dashboards",element:db("/dashboards",n().createElement(oJ,null))}),n().createElement(i.qh,{path:"/dashboards/:code",element:db("/dashboards/:code",n().createElement(oj,null))}),n().createElement(i.qh,{path:"/etl-dashboard",element:db("/etl-dashboard",n().createElement(oV,null))}),n().createElement(i.qh,{path:"/admin/themes",element:db("/admin/themes",n().createElement(n6,null))}),n().createElement(i.qh,{path:"/linelist",element:db("/linelist",n().createElement(si,null))}),n().createElement(i.qh,{path:"/linelist/new",element:db("/linelist/new",n().createElement(dl,null))}),n().createElement(i.qh,{path:"/linelist/edit/:reportId",element:db("/linelist/edit/:reportId",n().createElement(dl,null))}),n().createElement(i.qh,{path:"/linelist/run/:reportId",element:db("/linelist/run/:reportId",n().createElement(ds,null))}),n().createElement(i.qh,{path:"/import-export",element:db("/import-export",n().createElement(dg,null))}),n().createElement(i.qh,{path:"/themes",element:n().createElement(i.C5,{to:"/admin/themes",replace:!0})}),n().createElement(i.qh,{path:"*",element:n().createElement(i.C5,{to:"/",replace:!0})}))),dh=()=>n().createElement(l.Kd,{basename:`${window.spaBase}/report-builder`},n().createElement(i.BV,null,n().createElement(i.qh,{path:"/*",element:n().createElement(dy,null)}),n().createElement(i.qh,{path:"*",element:n().createElement(i.C5,{to:"/",replace:!0})})))},3155(e,t,r){function a(e){let t={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"}};return t[e]||t.SUMMARY_CARD}function n(e){let t={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}};return t[e]||t.SUMMARY_CARD}r.d(t,{Qc:()=>a,kK:()=>n})},1672(e,t,r){r.d(t,{_R:()=>i,jL:()=>d,jX:()=>o});var a=r(5022);let n=RegExp(`${a.Ue}[a-z.]+`,"g");class l extends Error{status;requiredPrivileges;serverMessage;isAuthError;response;constructor(e){super(e.message),this.name="PrivilegeError",this.status=e.status,this.requiredPrivileges=e.requiredPrivileges,this.serverMessage=e.serverMessage,this.isAuthError=e.isAuthError??!1,this.response=e.response}}function i(e,t="Request failed"){let r;if(e?.name==="AbortError"||e?.code==="ERR_CANCELED"||e instanceof l)return e;let o=e?.response?.status,s="string"==typeof(r=e?.response?.data)?r:r?.error?.message??r?.message??e?.message??"";if(401===o)return d(),new l({status:401,isAuthError:!0,serverMessage:s,response:e?.response,message:"Your session has expired. Please sign in again."});if(403===o){let t=s.match(n)??[];if(t.length>0){let r=[...new Set(t)],n=r.map(e=>e.replace(a.Ue,"")).join(", ");return new l({status:403,requiredPrivileges:r,serverMessage:s,response:e?.response,message:`You do not have permission to perform this action. Required privilege: ${n}.`})}return new l({status:403,serverMessage:s,response:e?.response,message:s||"You do not have permission to perform this action."})}let c=Error(s||t);return c.status=o,c.response=e?.response,c}async function o(e){try{return await e}catch(e){throw i(e)}}let s=!1;function d(){if("u"<typeof window||s)return;let{pathname:e,search:t}=window.location;if(e.includes("/login"))return;s=!0;let r="function"==typeof window.getOpenmrsSpaBase?window.getOpenmrsSpaBase():`${window.spaBase}/`;window.location.href=`${r}login?returnTo=${encodeURIComponent(`${e}${t}`)}`}},4676(e,t,r){function a(e){if("number"!=typeof e)return String(e);let t=Math.floor(e/1e3),r=Math.floor(t/60),a=Math.floor(r/60),n=Math.floor(a/24);return n>0?`${n}d ${a%24}h`:a>0?`${a}h ${r%60}m`:r>0?`${r}m ${t%60}s`:`${t}s`}function n(e,t){let r,a;if(null==e||""===e)return"—";let n=new Date(e);if(isNaN(n.getTime()))return String(e);let l=n.getTime()-Date.now(),i=Math.abs(l);if(i<6e4)return l<0||t?.pastOnly?"just now":"in less than a minute";i<36e5?(r=Math.floor(i/6e4),a="minute"):i<864e5?(r=Math.floor(i/36e5),a="hour"):(r=Math.floor(i/864e5),a="day");let o=1===r?a:`${a}s`;return l>=0?`in ${r} ${o}`:`${r} ${o} ago`}r.d(t,{a3:()=>a,fw:()=>n})},300(e,t,r){r.d(t,{j:()=>a});function a(e){let t;if(!e||"string"!=typeof e)return e??"";if(!/[&]/.test(e))return e;let r=e;do t=r.length,r=r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(///g,"/").replace(/`/g,"`").replace(/=/g,"=");while(r.length!==t&&/[&]/.test(r));return r}}}]);
|
|
368
|
+
}`),n().createElement("p",null,"Column SQL can then use ",n().createElement("code",null,":patientId"),", ",n().createElement("code",null,":orderId"),", ",n().createElement("code",null,":episodeId"),"to filter to the specific episode/order."))),h?n().createElement("div",{className:"-esm-report-builder__filtermap-editor__entriesContainer___m3FGR"},s.map((e,t)=>n().createElement("div",{key:t,className:"-esm-report-builder__filtermap-editor__entryRow___jo33d"},n().createElement("div",{className:"-esm-report-builder__filtermap-editor__entryFields___a4rzC"},n().createElement("div",{className:sX},n().createElement(o.ksK,{id:`param-name-${t}`,labelText:"Parameter Name",value:e.parameterName||"",onChange:e=>f(t,"parameterName",e.target.value),placeholder:"e.g., orderId",disabled:l,size:"sm"})),n().createElement("div",{className:"-esm-report-builder__filtermap-editor__arrow___yv6dd"},"→"),n().createElement("div",{className:sX},n().createElement("label",{className:"-esm-report-builder__filtermap-editor__fieldLabel___WLAAK"},"Column Reference"),n().createElement(o.a32,{id:`col-ref-${t}`,items:g.map(e=>e.reference),selectedItem:e.columnReference||void 0,onChange:({selectedItem:e})=>f(t,"columnReference",e??""),onInputChange:e=>f(t,"columnReference",e),placeholder:"e.g., vl.native_order_id",disabled:l,size:"sm",shouldFilterItem:({item:e,inputValue:t})=>e.toLowerCase().includes(t?.toLowerCase()??"")})),n().createElement("div",{className:"-esm-report-builder__filtermap-editor__entryActions___ZlvBy"},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.MG,iconDescription:"Auto-suggest parameter name",onClick:()=>{var e;let r,a,n;(n=s[e=t]).columnReference&&f(e,"parameterName",(a=(r=n.columnReference.trim()).match(/(\w+)\.(\w+)/))?a[2].toLowerCase():r.toLowerCase())},disabled:l||!e.columnReference,title:"Auto-suggest parameter name from column reference"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,iconDescription:"Remove",onClick:()=>{E(s.filter((e,r)=>r!==t))},disabled:l}))),c[t]&&n().createElement("div",{className:"-esm-report-builder__filtermap-editor__entryError___IrNOa"},c[t])))):n().createElement("div",{className:"-esm-report-builder__filtermap-editor__emptyState___XNVm0"},n().createElement("p",null,"No filterMap entries configured. Add entries to enable column queries to filter to specific rows from the base cohort.")),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>{E([...s,{parameterName:"",columnReference:""}])},disabled:l,renderIcon:b.OM},"Add FilterMap Entry"),h&&!y&&n().createElement("div",{className:"-esm-report-builder__filtermap-editor__summary___3RMkN"},n().createElement(o.vwO,{type:"green",size:"sm"},s.length," filterMap entr",1!==s.length?"ies":"y"," configured"))))},s5={container:"-esm-report-builder__query-config-panel__container___FPeT8",section:"-esm-report-builder__query-config-panel__section___SiB-F",sectionHeader:"-esm-report-builder__query-config-panel__sectionHeader___M54Q0",sectionHeaderLeft:"-esm-report-builder__query-config-panel__sectionHeaderLeft___t8Wdj",sectionTitle:"-esm-report-builder__query-config-panel__sectionTitle___ceirv",sectionHeaderRight:"-esm-report-builder__query-config-panel__sectionHeaderRight___A1bAF",sectionContent:"-esm-report-builder__query-config-panel__sectionContent___lH83+",datasetInfo:"-esm-report-builder__query-config-panel__datasetInfo___6ZmYs",datasetRow:"-esm-report-builder__query-config-panel__datasetRow___78RNZ",datasetLabel:"-esm-report-builder__query-config-panel__datasetLabel___hgB1f",datasetValue:"-esm-report-builder__query-config-panel__datasetValue___mz-lZ",populationHeader:"-esm-report-builder__query-config-panel__populationHeader___-62BF",populationModeSelector:"-esm-report-builder__query-config-panel__populationModeSelector___igoYH",modeLabel:"-esm-report-builder__query-config-panel__modeLabel___UI3l1",populationLabel:"-esm-report-builder__query-config-panel__populationLabel___0Xhpz",populationHint:"-esm-report-builder__query-config-panel__populationHint___7xS2m",rowIcon:"-esm-report-builder__query-config-panel__rowIcon___8LwW5",negateToggle:"-esm-report-builder__query-config-panel__negateToggle___aO82Y","cds--toggle":"-esm-report-builder__query-config-panel__cds--toggle___liQxD","cds--toggle__label":"-esm-report-builder__query-config-panel__cds--toggle__label___bQCkp",indicatorSearch:"-esm-report-builder__query-config-panel__indicatorSearch___jqeIn","cds--combo-box":"-esm-report-builder__query-config-panel__cds--combo-box___MLvCp","cds--label":"-esm-report-builder__query-config-panel__cds--label___XlSQP",conditionsStack:"-esm-report-builder__query-config-panel__conditionsStack___GA2b4",conditionRow:"-esm-report-builder__query-config-panel__conditionRow___z5RLa","cds--select":"-esm-report-builder__query-config-panel__cds--select___bnl2i","cds--text-input":"-esm-report-builder__query-config-panel__cds--text-input___0VkDy","cds--btn":"-esm-report-builder__query-config-panel__cds--btn___nZY19",andText:"-esm-report-builder__query-config-panel__andText___Ybd4N",placeholderContent:"-esm-report-builder__query-config-panel__placeholderContent___raE2v",placeholderSubtext:"-esm-report-builder__query-config-panel__placeholderSubtext___djzLA",hybridDivider:"-esm-report-builder__query-config-panel__hybridDivider___-N8vV",sqlEditorSection:"-esm-report-builder__query-config-panel__sqlEditorSection___2MiRz",sqlEditor:"-esm-report-builder__query-config-panel__sqlEditor___19Vb0",columnsList:"-esm-report-builder__query-config-panel__columnsList___KaazW",columnItem:"-esm-report-builder__query-config-panel__columnItem___LgQvs",dragHandle:"-esm-report-builder__query-config-panel__dragHandle___klol9",columnInfo:"-esm-report-builder__query-config-panel__columnInfo___w1Y+-",columnName:"-esm-report-builder__query-config-panel__columnName___eYT7D",columnMeta:"-esm-report-builder__query-config-panel__columnMeta___d24fo",columnOrder:"-esm-report-builder__query-config-panel__columnOrder___heapX",columnConfig:"-esm-report-builder__query-config-panel__columnConfig___BjmrZ",filterMapSection:"-esm-report-builder__query-config-panel__filterMapSection___PN9Jw"};function s6(e){switch(e){case"TEXT":return["equals","not equals","contains","starts with","is blank"];case"NUMBER":return["equals","not equals","greater than","less than","between"];case"DATE":return["on","before","after","between"];case"CODED":return["is one of","is not one of"];case"BOOLEAN":return["is true","is false","not recorded"];case"LOCATION":return["equals","within hierarchy"];default:return["equals","not equals"]}}function s3(e){return e.split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function s4({draft:e,onDraftChange:t,availableFields:r=[],populationFields:l=[],indicators:i=[],onRemoveColumn:s,disabled:d=!1}){let[u,_]=(0,a.useState)(new Set(["population"])),[E,y]=(0,a.useState)("SQL");(0,a.useEffect)(()=>{e.population?.buildMethod==="INDICATOR_BASED"?y("INDICATOR"):(e.population?.buildMethod,y("SQL"))},[e.population?.buildMethod]);let h=(0,a.useCallback)(e=>{_(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),v=(0,a.useCallback)(()=>{let r={id:`cond-${Date.now()}`,field:"",fieldLabel:"",fieldType:"DATE",operator:"BETWEEN_DATES",value:""},a=e.population?.visualFilter||e.visualFilter,n=a?.rootGroup?.conditions||[],l={rootGroup:{id:"root",logicalOperator:a?.rootGroup?.logicalOperator||"AND",conditions:[...n,r]},useVisualBuilder:!0};t({population:{...e.population,visualFilter:l},visualFilter:l})},[e.population,e.visualFilter,t]),S=(0,a.useCallback)((r,a)=>{let n=e.population?.visualFilter||e.visualFilter,i=(n?.rootGroup?.conditions||[]).map(e=>e.id===r?{...e,...a}:e),o=i.find(e=>e.id===r);if(o&&a.field){let e=l.find(e=>e.name===a.field);e&&(o.fieldType=e.type,o.fieldLabel=e.label,s6(e.type).includes(o.operator.toLowerCase())||(o.operator="EQUALS"))}let s={rootGroup:{id:n?.rootGroup?.id||"root",logicalOperator:n?.rootGroup?.logicalOperator||"AND",conditions:i},useVisualBuilder:!0};t({population:{...e.population,visualFilter:s},visualFilter:s})},[e.population,e.visualFilter,t,l]),T=(0,a.useCallback)(r=>{let a=e.population?.visualFilter||e.visualFilter,n=(a?.rootGroup?.conditions||[]).filter(e=>e.id!==r),l={rootGroup:{id:a?.rootGroup?.id||"root",logicalOperator:a?.rootGroup?.logicalOperator||"AND",conditions:n},useVisualBuilder:!0};t({population:{...e.population,visualFilter:l},visualFilter:l})},[e.population,e.visualFilter,t]),C=(0,a.useCallback)(r=>{let a;switch(y(r),r){case"INDICATOR":case"HYBRID":a="INDICATOR_BASED";break;default:a="SQL_BUILDER"}let n=e.population?.indicatorRules||e.indicatorRules||[],l="INDICATOR"===r||"HYBRID"===r?n.length>0?n:[]:e.population?.indicatorRules||e.indicatorRules||[];t({population:{...e.population,buildMethod:a,indicatorRules:l},populationMode:r,indicatorRules:l})},[e.population,e.indicatorRules,t]),w=(0,a.useCallback)(()=>{let r={id:`rule-${Date.now()}`,indicatorUuid:"",name:"",logicalOperator:"AND",negate:!1},a=[...e.population?.indicatorRules||e.indicatorRules||[],r];t({population:{...e.population,indicatorRules:a},indicatorRules:a})},[e.population,e.indicatorRules,t]),N=(0,a.useCallback)((r,a)=>{let n=(e.population?.indicatorRules||e.indicatorRules||[]).map(e=>e.id===r?{...e,...a}:e);t({population:{...e.population,indicatorRules:n},indicatorRules:n})},[e.population,e.indicatorRules,t]),I=(0,a.useCallback)((r,a,n)=>{let l=(e.population?.indicatorRules||e.indicatorRules||[]).map(e=>e.id===r?{...e,indicatorUuid:a,name:n?.name||""}:e);t({population:{...e.population,indicatorRules:l},indicatorRules:l})},[e.population,e.indicatorRules,t]),k=(0,a.useCallback)(r=>{let a=(e.population?.indicatorRules||e.indicatorRules||[]).filter(e=>e.id!==r);t({population:{...e.population,indicatorRules:a},indicatorRules:a})},[e.population,e.indicatorRules,t]),A=e.population?.visualFilter?.rootGroup||e.visualFilter?.rootGroup,R=A?.conditions||[];return n().createElement("div",{className:s5.container},n().createElement("div",{className:s5.section},n().createElement("button",{className:s5.sectionHeader,onClick:()=>h("dataset"),type:"button"},n().createElement("div",{className:s5.sectionHeaderLeft},n().createElement(i2.bQ,{size:20}),n().createElement("span",{className:s5.sectionTitle},"Dataset")),n().createElement("div",{className:s5.sectionHeaderRight},u.has("dataset")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("dataset")&&n().createElement("div",{className:s5.sectionContent},n().createElement("div",{className:s5.datasetInfo},n().createElement("div",{className:s5.datasetRow},n().createElement("span",{className:s5.datasetLabel},"Population sources:"),n().createElement("span",{className:s5.datasetValue},e.populationSources&&e.populationSources.length>0?n().createElement("div",{className:s5.datasourceTags},e.populationSources.filter(e=>e.enabled).sort((e,t)=>e.order-t.order).map(e=>n().createElement(o.vwO,{key:e.uuid,size:"sm",type:"JOIN"===e.joinType||"LEFT_JOIN"===e.joinType?"blue":"INTERSECT"===e.joinType?"green":"UNION"===e.joinType?"purple":"red"},e.name," (",e.joinType,")"))):"Not selected")),n().createElement("div",{className:s5.datasetRow},n().createElement("span",{className:s5.datasetLabel},"Data sources:"),n().createElement("span",{className:s5.datasetValue},e.dataSources&&e.dataSources.length>0?n().createElement("div",{className:s5.datasourceTags},e.dataSources.map(e=>n().createElement(o.vwO,{key:e.uuid,size:"sm",type:"PRIMARY"===e.role?"green":"SECONDARY"===e.role?"blue":"purple"},e.name," (",e.role,")"))):"Not selected")),n().createElement("div",{className:s5.datasetRow},n().createElement("span",{className:s5.datasetLabel},"Row grain:"),n().createElement("span",{className:s5.datasetValue},e.rowGrain||"Not set"))))),n().createElement("div",{className:s5.section},n().createElement("button",{className:s5.sectionHeader,onClick:()=>h("population"),type:"button"},n().createElement("div",{className:s5.sectionHeaderLeft},n().createElement(i2.bQ,{size:20}),n().createElement("span",{className:s5.sectionTitle},"Population"),n().createElement(o.vwO,{size:"sm",type:"blue"},"HYBRID"===E?((e.population?.indicatorRules||e.indicatorRules)?.length||0)+R.length:"INDICATOR"===E?(e.population?.indicatorRules||e.indicatorRules)?.length||0:"SQL"===E&&e.population?.sqlTemplate?.trim()?"SQL":R.length)),n().createElement("div",{className:s5.sectionHeaderRight},u.has("population")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("population")&&n().createElement("div",{className:s5.sectionContent},n().createElement("div",{className:s5.populationModeSelector},n().createElement("span",{className:s5.modeLabel},"Define population using:"),n().createElement(o.l6P,{id:"population-mode",size:"sm",value:E,onChange:e=>C(e.target.value),disabled:d,labelText:"",inline:!0},n().createElement(o.ebT,{value:"SQL",text:"SQL Query"}),n().createElement(o.ebT,{value:"INDICATOR",text:"Indicators"}),n().createElement(o.ebT,{value:"HYBRID",text:"Hybrid (SQL + Indicators)"}))),"SQL"===E&&n().createElement(n().Fragment,null,n().createElement("div",{className:s5.populationHeader},n().createElement("span",{className:s5.populationLabel},"All patients where (SQL):")),n().createElement(o.BJc,{gap:3,className:s5.conditionsStack},R.map((e,t)=>n().createElement("div",{key:e.id,className:s5.conditionRow},n().createElement(o.l6P,{id:`field-${e.id}`,size:"sm",value:e.field,onChange:t=>{let r=t.target.value,a=l.find(e=>e.name===r);S(e.id,{field:r,fieldLabel:a?.label||r,fieldType:a?.type||"TEXT"})},disabled:d,labelText:""},n().createElement(o.ebT,{value:"",text:"Select field..."}),l.map(e=>n().createElement(o.ebT,{key:e.name,value:e.name,text:e.label}))),n().createElement(o.l6P,{id:`operator-${e.id}`,size:"sm",value:e.operator,onChange:t=>S(e.id,{operator:t.target.value}),disabled:d||!e.field,labelText:""},s6(e.fieldType).map(e=>n().createElement(o.ebT,{key:e.toUpperCase(),value:e.toUpperCase(),text:e.charAt(0).toUpperCase()+e.slice(1)}))),"IS_BLANK"!==e.operator&&"IS_TRUE"!==e.operator&&"IS_FALSE"!==e.operator&&"NOT_RECORDED"!==e.operator&&n().createElement(o.ksK,{id:`value-${e.id}`,size:"sm",placeholder:"DATE"===e.fieldType?"Start Date":"Value",value:Array.isArray(e.value)?e.value[0]||"":e.value||"",onChange:t=>S(e.id,{value:t.target.value}),disabled:d||!e.field,labelText:""}),("BETWEEN"===e.operator||"BETWEEN_DATES"===e.operator)&&n().createElement(o.ksK,{id:`value2-${e.id}`,size:"sm",placeholder:"DATE"===e.fieldType?"End Date":"To",value:e.value2||"",onChange:t=>S(e.id,{value2:t.target.value}),disabled:d||!e.field,labelText:""}),t<R.length-1&&n().createElement("span",{className:s5.andText},"and"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,onClick:()=>T(e.id),disabled:d,iconDescription:"Remove condition"}))),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:v,disabled:d},"Add condition")),n().createElement("div",{className:s5.sqlEditorSection},n().createElement("div",{className:s5.populationHeader},n().createElement("span",{className:s5.populationLabel},"Or edit raw SQL:"),n().createElement("span",{className:s5.populationHint},"Directly edit the SQL query (use :startDate and :endDate for date parameters)")),n().createElement(o.fs1,{id:"population-sql",className:s5.sqlEditor,placeholder:"SELECT DISTINCT patient_id AS patient_id FROM your_table WHERE...",value:e.population?.sqlTemplate||"",onChange:r=>{t({population:{...e.population,sqlTemplate:r.target.value}})},disabled:d,rows:6,labelText:""}))),"INDICATOR"===E&&n().createElement(n().Fragment,null,n().createElement("div",{className:s5.populationHeader},n().createElement("span",{className:s5.populationLabel},"All patients matching these indicators:"),n().createElement("span",{className:s5.populationHint},"Use indicators with prebuilt query definitions for patient selection")),n().createElement(o.BJc,{gap:3,className:s5.conditionsStack},(e.population?.indicatorRules||e.indicatorRules||[]).map((t,r)=>n().createElement("div",{key:t.id,className:s5.conditionRow},n().createElement(es.yo,{size:16,className:s5.rowIcon}),n().createElement("div",{className:s5.indicatorSearch},n().createElement(rO,{id:`indicator-${t.id}`,titleText:"",selectedId:t.indicatorUuid,disabled:d,onChange:(e,r)=>I(t.id,e,r),placeholder:"Search indicators..."})),n().createElement(o.l6P,{id:`logical-${t.id}`,size:"sm",value:t.logicalOperator||"AND",onChange:e=>N(t.id,{logicalOperator:e.target.value}),disabled:d||!t.indicatorUuid,labelText:""},n().createElement(o.ebT,{value:"AND",text:"AND"}),n().createElement(o.ebT,{value:"OR",text:"OR"})),t.indicatorUuid&&n().createElement("div",{className:s5.negateToggle},n().createElement(o.lMk,{id:`negate-${t.id}`,labelA:"Include",labelB:"Exclude",toggled:t.negate??!1,onToggle:e=>N(t.id,{negate:e}),disabled:d})),r<((e.population?.indicatorRules||e.indicatorRules)?.length||0)-1&&n().createElement("span",{className:s5.andText},"and"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,onClick:()=>k(t.id),disabled:d,iconDescription:"Remove indicator"}))),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:w,disabled:d},"Add indicator"))),"HYBRID"===E&&n().createElement(n().Fragment,null,n().createElement("div",{className:s5.populationHeader},n().createElement("span",{className:s5.populationLabel},"Indicators:"),n().createElement("span",{className:s5.populationHint},"Add indicators to combine with SQL")),n().createElement(o.BJc,{gap:3,className:s5.conditionsStack},(e.population?.indicatorRules||e.indicatorRules||[]).map((t,r)=>n().createElement("div",{key:t.id,className:s5.conditionRow},n().createElement(es.yo,{size:16,className:s5.rowIcon}),n().createElement("div",{className:s5.indicatorSearch},n().createElement(rO,{id:`indicator-${t.id}`,titleText:"",selectedId:t.indicatorUuid,disabled:d,onChange:(e,r)=>I(t.id,e,r),placeholder:"Search indicators..."})),n().createElement(o.l6P,{id:`logical-${t.id}`,size:"sm",value:t.logicalOperator||"AND",onChange:e=>N(t.id,{logicalOperator:e.target.value}),disabled:d||!t.indicatorUuid,labelText:""},n().createElement(o.ebT,{value:"AND",text:"AND"}),n().createElement(o.ebT,{value:"OR",text:"OR"})),t.indicatorUuid&&n().createElement("div",{className:s5.negateToggle},n().createElement(o.lMk,{id:`negate-${t.id}`,labelA:"Include",labelB:"Exclude",toggled:t.negate??!1,onToggle:e=>N(t.id,{negate:e}),disabled:d})),r<((e.population?.indicatorRules||e.indicatorRules)?.length||0)-1&&n().createElement("span",{className:s5.andText},"and"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,onClick:()=>k(t.id),disabled:d,iconDescription:"Remove indicator"}))),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:w,disabled:d},"Add indicator")),n().createElement("div",{className:s5.hybridDivider},n().createElement("span",null,"AND")),n().createElement("div",{className:s5.populationHeader},n().createElement("span",{className:s5.populationLabel},"Additional SQL conditions:"),n().createElement("span",{className:s5.populationHint},"Filter the selected patients further with custom SQL")),n().createElement(o.BJc,{gap:3,className:s5.conditionsStack},R.map((e,t)=>n().createElement("div",{key:e.id,className:s5.conditionRow},n().createElement(m.dJ,{size:16,className:s5.rowIcon}),n().createElement(o.l6P,{id:`field-${e.id}`,size:"sm",value:e.field,onChange:t=>S(e.id,{field:t.target.value}),disabled:d,labelText:""},n().createElement(o.ebT,{value:"",text:"Select field..."}),l.map(e=>n().createElement(o.ebT,{key:e.name,value:e.name,text:e.label},e.label))),e.field&&n().createElement(o.l6P,{id:`operator-${e.id}`,size:"sm",value:e.operator,onChange:t=>S(e.id,{operator:t.target.value}),disabled:d,labelText:""},s6(e.fieldType).map(e=>n().createElement(o.ebT,{key:e,value:e.toUpperCase(),text:s3(e)},s3(e)))),e.operator&&-1===["IS_BLANK","IS_NOT_BLANK"].indexOf(e.operator)&&n().createElement(o.ksK,{id:`value-${e.id}`,size:"sm",value:e.value||"",onChange:t=>S(e.id,{value:t.target.value}),disabled:d,placeholder:"Value",labelText:""}),"BETWEEN"===e.operator&&n().createElement(o.ksK,{id:`value2-${e.id}`,size:"sm",value:e.value2||"",onChange:t=>S(e.id,{value2:t.target.value}),disabled:d,placeholder:"To",labelText:""}),t<R.length-1&&n().createElement("span",{className:s5.andText},"and"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,onClick:()=>T(e.id),disabled:d,iconDescription:"Remove condition"}))),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:v,disabled:d},"Add condition")),n().createElement("div",{className:s5.sqlEditorSection},n().createElement("div",{className:s5.populationHeader},n().createElement("span",{className:s5.populationLabel},"Or edit raw SQL:"),n().createElement("span",{className:s5.populationHint},"Directly edit the SQL query (use :startDate and :endDate for date parameters)")),n().createElement(o.fs1,{id:"population-sql-hybrid",className:s5.sqlEditor,placeholder:"SELECT DISTINCT patient_id AS patient_id FROM your_table WHERE...",value:e.population?.sqlTemplate||"",onChange:r=>{t({population:{...e.population,sqlTemplate:r.target.value}})},disabled:d,rows:6,labelText:""}))),n().createElement("div",{className:s5.filterMapSection},n().createElement(s2,{filterMap:e.population.filterMap,onChange:r=>t({population:{...e.population,filterMap:r}}),disabled:d,sqlQuery:e.population.sqlTemplate})))),n().createElement("div",{className:s5.section},n().createElement("button",{className:s5.sectionHeader,onClick:()=>h("columns"),type:"button"},n().createElement("div",{className:s5.sectionHeaderLeft},n().createElement(p.B8,{size:20}),n().createElement("span",{className:s5.sectionTitle},"Columns"),n().createElement(o.vwO,{size:"sm",type:"gray"},e.columns.length)),n().createElement("div",{className:s5.sectionHeaderRight},u.has("columns")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("columns")&&n().createElement("div",{className:s5.sectionContent},n().createElement(sG,{columns:e.columns,onChange:e=>t({columns:e}),disabled:d,filterMap:e.population.filterMap}))),n().createElement("div",{className:s5.section},n().createElement("button",{className:s5.sectionHeader,onClick:()=>h("filters"),type:"button"},n().createElement("div",{className:s5.sectionHeaderLeft},n().createElement(m.dJ,{size:20}),n().createElement("span",{className:s5.sectionTitle},"Filters"),n().createElement(o.vwO,{size:"sm",type:"gray"},"0")),n().createElement("div",{className:s5.sectionHeaderRight},u.has("filters")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("filters")&&n().createElement("div",{className:s5.sectionContent},n().createElement("div",{className:s5.placeholderContent},n().createElement("p",null,"Runtime filters configuration will be shown here."),n().createElement("p",{className:s5.placeholderSubtext},"Filters shown when running the report")))),n().createElement("div",{className:s5.section},n().createElement("button",{className:s5.sectionHeader,onClick:()=>h("sort"),type:"button"},n().createElement("div",{className:s5.sectionHeaderLeft},n().createElement(f.ZE,{size:20}),n().createElement("span",{className:s5.sectionTitle},"Sort"),n().createElement(o.vwO,{size:"sm",type:"gray"},e.sortConfig.length)),n().createElement("div",{className:s5.sectionHeaderRight},u.has("sort")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("sort")&&n().createElement("div",{className:s5.sectionContent},n().createElement("div",{className:s5.placeholderContent},n().createElement("p",null,"Sort configuration will be shown here."),n().createElement("p",{className:s5.placeholderSubtext},e.sortConfig.length," sort rule",1!==e.sortConfig.length?"s":""," defined")))),n().createElement("div",{className:s5.section},n().createElement("button",{className:s5.sectionHeader,onClick:()=>h("parameters"),type:"button"},n().createElement("div",{className:s5.sectionHeaderLeft},n().createElement(g.wB,{size:20}),n().createElement("span",{className:s5.sectionTitle},"Parameters"),n().createElement(o.vwO,{size:"sm",type:"gray"},e.parameters.length)),n().createElement("div",{className:s5.sectionHeaderRight},u.has("parameters")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("parameters")&&n().createElement("div",{className:s5.sectionContent},n().createElement(sY,{parameters:e.parameters,onChange:e=>t({parameters:e}),disabled:d}))),n().createElement("div",{className:s5.section},n().createElement("button",{className:s5.sectionHeader,onClick:()=>h("display"),type:"button"},n().createElement("div",{className:s5.sectionHeaderLeft},n().createElement(m.FN,{size:20}),n().createElement("span",{className:s5.sectionTitle},"Display & Export")),n().createElement("div",{className:s5.sectionHeaderRight},u.has("display")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("display")&&n().createElement("div",{className:s5.sectionContent},n().createElement("div",{className:s5.placeholderContent},n().createElement("p",null,"Display and export settings will be shown here."),n().createElement("p",{className:s5.placeholderSubtext},"Page size, export formats, etc.")))),n().createElement("div",{className:s5.section},n().createElement("button",{className:s5.sectionHeader,onClick:()=>h("json-preview"),type:"button"},n().createElement("div",{className:s5.sectionHeaderLeft},n().createElement(c.Cy,{size:20}),n().createElement("span",{className:s5.sectionTitle},"JSON Preview"),n().createElement(o.vwO,{size:"sm",type:"teal"},"Live")),n().createElement("div",{className:s5.sectionHeaderRight},u.has("json-preview")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("json-preview")&&n().createElement("div",{className:s5.sectionContent},n().createElement(sL,{draft:e,indicators:i}))))}let s8="-esm-report-builder__multi-datasource-selector__datasourceCard___Up+p7",s7="-esm-report-builder__multi-datasource-selector__cardHeader___aAbMV",s9="-esm-report-builder__multi-datasource-selector__cardInfo___FtOrL",de="-esm-report-builder__multi-datasource-selector__dsName___SsMes",dt="-esm-report-builder__multi-datasource-selector__cardDescription___deUQP",dr=[{uuid:"person_attributes",name:"Person Attributes",type:"CORE",role:"REFERENCE"},{uuid:"patient_identifiers",name:"Patient Identifiers",type:"CORE",role:"REFERENCE"}],da=({dataSources:e,onChange:t,disabled:r=!1})=>{let{tables:l,loading:i,error:s}=id(!0),d=e.find(e=>"PRIMARY"===e.role),c=e.filter(e=>"SECONDARY"===e.role),m=e.filter(e=>"REFERENCE"===e.role),u=r=>{let a=e.find(e=>e.uuid===r);a?.role==="PRIMARY"&&e.filter(e=>"PRIMARY"===e.role).length<=1||t(e.filter(e=>e.uuid!==r))},p=(r,a)=>{"PRIMARY"===a?t(e.map(e=>({...e,role:e.uuid===r?"PRIMARY":"PRIMARY"===e.role?"SECONDARY":e.role}))):t(e.map(e=>e.uuid===r?{...e,role:a}:e))},_=(0,a.useMemo)(()=>[...(l||[]).map(e=>({id:e,label:e})),...dr.map(e=>({id:e.uuid,label:e.name}))],[l]),g=(0,a.useMemo)(()=>e.map(e=>({id:e.uuid,label:e.name})),[e]);return n().createElement("div",{className:"-esm-report-builder__multi-datasource-selector__container___2JuX0"},n().createElement(o.BJc,{gap:4},n().createElement("div",{className:"-esm-report-builder__multi-datasource-selector__header___gwYe-"},n().createElement("div",{className:"-esm-report-builder__multi-datasource-selector__headerTitle___U68jH"},n().createElement(tN.$$,{size:16}),n().createElement("h4",null,"Data Sources")),n().createElement("p",{className:"-esm-report-builder__multi-datasource-selector__headerDescription___9xcnm"},"Select multiple datasources to browse and add columns from. The backend will handle joining the data.")),n().createElement("div",{className:"-esm-report-builder__multi-datasource-selector__addSection___r-qW3"},n().createElement(o.KFt,{id:"datasources-multiselect",titleText:"Data Sources",label:"Search and select datasources",placeholder:"Search datasources...",items:_,selectedItems:g,itemToString:e=>e?.label||"",onChange:({selectedItems:r})=>{let a=new Set(e.map(e=>e.uuid)),n=r.filter(e=>!a.has(e.id)),l=e.map(e=>e.uuid).filter(e=>!r.some(t=>t.id===e)),i=!d,o=n.map(e=>{let t=dr.some(t=>t.uuid===e.id),r=i&&!t?"PRIMARY":t?"REFERENCE":"SECONDARY";"PRIMARY"===r&&(i=!1);let a=dr.find(t=>t.uuid===e.id);return a?{...a,role:r}:{uuid:e.id,name:e.id,type:e.id.startsWith("mamba_")?"ETL":"SQL",role:r,tables:[]}}),s=e;l.forEach(e=>{let t=s.find(t=>t.uuid===e);t?.role==="PRIMARY"&&s.filter(e=>"PRIMARY"===e.role).length<=1||(s=s.filter(t=>t.uuid!==e))}),t([...s,...o])},disabled:r||i,size:"sm",selectionFeedback:"fixed"}),s&&n().createElement("div",{className:"-esm-report-builder__multi-datasource-selector__error___izlcS"},"Failed to load tables: ",s)),e.length>0&&n().createElement("div",{className:"-esm-report-builder__multi-datasource-selector__listSection___C8MdS"},n().createElement("h5",{className:"-esm-report-builder__multi-datasource-selector__listTitle___UkpHI"},"Selected Data Sources (",e.length,")"),n().createElement(o.BJc,{gap:2},d&&n().createElement("div",{className:s8,"data-role":"primary"},n().createElement("div",{className:s7},n().createElement("div",{className:s9},n().createElement(o.vwO,{type:"green",size:"sm"},"Primary"),n().createElement("span",{className:de},d.name)),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.bm,iconDescription:"Remove",onClick:()=>u(d.uuid),disabled:r||e.length<=1})),n().createElement("p",{className:dt},"Main datasource for this report")),c.map(e=>n().createElement("div",{key:e.uuid,className:s8,"data-role":"secondary"},n().createElement("div",{className:s7},n().createElement("div",{className:s9},n().createElement(o.vwO,{type:"blue",size:"sm"},"Secondary"),n().createElement("span",{className:de},e.name)),n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>p(e.uuid,"PRIMARY"),disabled:r},"Make Primary"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.bm,iconDescription:"Remove",onClick:()=>u(e.uuid),disabled:r}))),n().createElement("p",{className:dt},"Additional datasource for columns"))),m.map(e=>n().createElement("div",{key:e.uuid,className:s8,"data-role":"reference"},n().createElement("div",{className:s7},n().createElement("div",{className:s9},n().createElement(o.vwO,{type:"purple",size:"sm"},"Reference"),n().createElement("span",{className:de},e.name)),n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>p(e.uuid,"SECONDARY"),disabled:r},"Make Secondary"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.bm,iconDescription:"Remove",onClick:()=>u(e.uuid),disabled:r}))),n().createElement("p",{className:dt},"Lookup/reference data"))))),0===e.length&&n().createElement("div",{className:"-esm-report-builder__multi-datasource-selector__emptyState___KTkJI"},n().createElement("p",null,"No datasources selected. Add datasources above to browse their columns.")),e.length>0&&n().createElement("div",{className:"-esm-report-builder__multi-datasource-selector__summary___SJvOE"},n().createElement("span",null,e.length," datasource",1!==e.length?"s":""," selected"),n().createElement("span",null,"Columns from all datasources will be joined by patient_id"))))},dn=({open:e,onClose:t,onRun:r,parameters:l=[],initialValues:i={},loading:s=!1})=>{let[d,c]=(0,a.useState)({}),[m,u]=(0,a.useState)({}),[p,_]=(0,a.useState)({}),[g,E]=(0,a.useState)("FIXED"),[f,b]=(0,a.useState)(""),y=l.some(e=>"DATE"===e.type||"DATETIME"===e.type),h=l.filter(e=>"DATE"===e.type||"DATETIME"===e.type),v=h.some(e=>"startdate"===e.name.toLowerCase()||"start_date"===e.name.toLowerCase())&&h.some(e=>"enddate"===e.name.toLowerCase()||"end_date"===e.name.toLowerCase());(0,a.useEffect)(()=>{if(!e)return;let t={};for(let e of l){let r=i[e.name]||e.defaultValue||"";t[e.name]=r}c(t)},[e]),(0,a.useEffect)(()=>{e&&(u({}),_({}),b(""),E("FIXED"))},[e]);let S=(0,a.useCallback)((e,t)=>{c(r=>({...r,[e]:t})),m[e]&&u(t=>({...t,[e]:""}))},[m]),T=(0,a.useCallback)((e,t)=>{u(r=>{if(t)return{...r,[e]:t};let a={...r};return delete a[e],a})},[]),C=(0,a.useCallback)((e,t)=>{_(r=>({...r,[e]:t}))},[]);return n().createElement(o.aFV,{open:e,onRequestClose:t,modalHeading:"Preview Parameters",modalLabel:"Linelist Preview",preventCloseOnClickOutside:!0,size:"sm",primaryButtonText:"Run Preview",primaryButtonDisabled:s,onRequestSubmit:()=>{if(u({}),"RELATIVE"===g&&y&&!f)return void u({relativePeriod:"Please select a reporting period"});if("RELATIVE"===g&&f){let e={...d},{start:t,end:a}=a4(f);h.forEach((r,n)=>{0===n?e[r.name]=a8(t):1===n&&(e[r.name]=a8(a))}),r(e);return}(()=>{let e={};for(let t of l){let r=d[t.name];("DATE"!==t.type&&"DATETIME"!==t.type||"RELATIVE"!==g)&&t.required&&(!r||""===r.toString().trim())&&(e[t.name]=`${t.label} is required`)}return u(e),0===Object.keys(e).length})()&&r(d)},secondaryButtonText:"Cancel",loadingStatus:s?"active":"inactive",loadingDescription:"Running..."},n().createElement(o.cwr,null,0===l.length?n().createElement(o.jeF,{kind:"info",title:"No Parameters",subtitle:"This report has no parameters defined. Click Run to use default values.",lowContrast:!0}):n().createElement(o.BJc,{gap:5},v&&n().createElement("div",{style:{marginBottom:"1rem"}},n().createElement("label",{className:"cds--label"},"Date Selection Mode"),n().createElement(o.zWQ,{legendText:"",name:"date-mode",valueSelected:g,onChange:e=>{E(e),"FIXED"===e&&b("")}},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"===g&&v&&n().createElement("div",{style:{marginBottom:"1rem"}},n().createElement(o.l6P,{id:"relative-period-select",labelText:"Select reporting period",value:f,onChange:e=>{b(e.target.value)},size:"sm"},n().createElement(o.ebT,{value:"",text:"Select period"}),a3.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),m.relativePeriod&&n().createElement("div",{style:{color:"#da1e28",fontSize:"0.875rem",marginTop:"0.5rem"}},m.relativePeriod)),l.map(e=>(e=>{let t=d[e.name]||"",r=m[e.name];if(v&&"RELATIVE"===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}let a={parameter:e,value:t,error:r,onChange:t=>S(e.name,t)};switch(e.type){case"DATE":case"DATETIME":return n().createElement(a7,{key:e.name,...a});case"NUMBER":return n().createElement(a9,{key:e.name,...a});case"BOOLEAN":return n().createElement(ne,{key:e.name,...a});case"LIST":return n().createElement(nt,{key:e.name,...a});case"LOCATION":return n().createElement(ni,{key:e.name,...a,onSearchQueryChange:t=>C(e.name,t)});case"CONCEPT":return n().createElement(no,{key:e.name,...a,searchQuery:p[e.name]||"",onSearchQueryChange:t=>C(e.name,t)});case"IDENTIFIER_TYPE":return n().createElement(ns,{key:e.name,...a});case"PERSON_ATTRIBUTE":return n().createElement(nd,{key:e.name,...a});default:return n().createElement(nc,{key:e.name,...a,onError:t=>T(e.name,t)})}})(e)))))},dl={workspace:"-esm-report-builder__linelist-definition-editor__workspace___MBsr-",loading:"-esm-report-builder__linelist-definition-editor__loading___oZJSC",header:"-esm-report-builder__linelist-definition-editor__header___SrCyl",headerLeft:"-esm-report-builder__linelist-definition-editor__headerLeft___NabYb",headerCenter:"-esm-report-builder__linelist-definition-editor__headerCenter___5GJdn",headerRight:"-esm-report-builder__linelist-definition-editor__headerRight___NcJK8",breadcrumb:"-esm-report-builder__linelist-definition-editor__breadcrumb___kZt0x",breadcrumbCurrent:"-esm-report-builder__linelist-definition-editor__breadcrumbCurrent___XFRCA",nameInput:"-esm-report-builder__linelist-definition-editor__nameInput___qg07M",notification:"-esm-report-builder__linelist-definition-editor__notification___UoWpY",panels:"-esm-report-builder__linelist-definition-editor__panels___fFvjd",leftPanel:"-esm-report-builder__linelist-definition-editor__leftPanel___Sqjvd",middlePanel:"-esm-report-builder__linelist-definition-editor__middlePanel___HzNHj",rightPanel:"-esm-report-builder__linelist-definition-editor__rightPanel___Krp4a",resizeHandle:"-esm-report-builder__linelist-definition-editor__resizeHandle___CSGnD",panelHeader:"-esm-report-builder__linelist-definition-editor__panelHeader___TJzn0",panelTitle:"-esm-report-builder__linelist-definition-editor__panelTitle___NEGPT",panelContent:"-esm-report-builder__linelist-definition-editor__panelContent___uj+tJ",columnSourcesSection:"-esm-report-builder__linelist-definition-editor__columnSourcesSection___-CmOQ",populationCard:"-esm-report-builder__linelist-definition-editor__populationCard___Y5uQw",columnSourcesCard:"-esm-report-builder__linelist-definition-editor__columnSourcesCard___rh+Zi",columnSourcesHeader:"-esm-report-builder__linelist-definition-editor__columnSourcesHeader___Ug48a",columnSourcesTitle:"-esm-report-builder__linelist-definition-editor__columnSourcesTitle___ZBXaD",columnSourcesIcon:"-esm-report-builder__linelist-definition-editor__columnSourcesIcon___Be+Vk",columnSourcesSubtitle:"-esm-report-builder__linelist-definition-editor__columnSourcesSubtitle___GrAP2",catalogueControls:"-esm-report-builder__linelist-definition-editor__catalogueControls___NJp0H",fieldAccordion:"-esm-report-builder__linelist-definition-editor__fieldAccordion___LSInq",fieldList:"-esm-report-builder__linelist-definition-editor__fieldList___FOnh2",fieldItem:"-esm-report-builder__linelist-definition-editor__fieldItem___Dc7E3",fieldInfo:"-esm-report-builder__linelist-definition-editor__fieldInfo___plPLa",fieldName:"-esm-report-builder__linelist-definition-editor__fieldName___eutvV",fieldActions:"-esm-report-builder__linelist-definition-editor__fieldActions___7HDTH",configSection:"-esm-report-builder__linelist-definition-editor__configSection___sMSWo",sectionHeader:"-esm-report-builder__linelist-definition-editor__sectionHeader___qNna3",sectionContent:"-esm-report-builder__linelist-definition-editor__sectionContent___6-9GB",datasetInfo:"-esm-report-builder__linelist-definition-editor__datasetInfo___GiXr4",emptyPreview:"-esm-report-builder__linelist-definition-editor__emptyPreview___+JcrK",previewResults:"-esm-report-builder__linelist-definition-editor__previewResults___QOqKE",previewStatus:"-esm-report-builder__linelist-definition-editor__previewStatus___jLRfD",htmlPreview:"-esm-report-builder__linelist-definition-editor__htmlPreview___3+iZX",sectionRow:"-esm-report-builder__linelist-definition-editor__sectionRow___t8a3j",groupRow:"-esm-report-builder__linelist-definition-editor__groupRow___aNcGO",indent:"-esm-report-builder__linelist-definition-editor__indent___jHoZ9"},di=()=>{let e=(0,i.Zp)(),{reportId:t}=(0,i.g)(),{has:l}=v(),[s,d]=(0,a.useState)(sd()),[c,m]=(0,a.useState)(null),[u,p]=(0,a.useState)(!1),[_,E]=(0,a.useState)(!1),[f,b]=(0,a.useState)(!1),[h,S]=(0,a.useState)(null),[T,C]=(0,a.useState)(null),[w,N]=(0,a.useState)(null),[I,k]=(0,a.useState)(null),[A,R]=(0,a.useState)("create"),[O,D]=(0,a.useState)([]),[x,L]=(0,a.useState)(!1),[M,$]=(0,a.useState)(!1),[P,B]=(0,a.useState)(500),[F,z]=(0,a.useState)(500),[q,j]=(0,a.useState)(!1),[H,J]=(0,a.useState)(!1),[G,V]=(0,a.useState)(!1),[W,K]=(0,a.useState)(null),[Q,Y]=(0,a.useState)(null),[X,Z]=(0,a.useState)(null),[ee,et]=(0,a.useState)(!1),[er,ea]=(0,a.useState)([]),[el,ei]=(0,a.useState)(null),{indicators:eo}=function(){let[e,t]=(0,a.useState)([]),[r,n]=(0,a.useState)(!1),[l,i]=(0,a.useState)(null);return(0,a.useEffect)(()=>{n(!0),i(null),r_({v:"full",includeRetired:!1}).then(e=>{t(e)}).catch(e=>{i(e instanceof Error?e.message:"Failed to fetch indicators"),t([])}).finally(()=>{n(!1)})},[""]),{indicators:e,loading:r,error:l}}(),[ec,em]=(0,a.useState)(!1);(0,a.useEffect)(()=>{t&&"new"!==t?(p(!0),S(null),Promise.resolve().then(r.bind(r,2075)).then(({getLinelistReport:e})=>e(t)).then(e=>{m(e),R("edit"),d(function(e){let t,r,a,n=null;try{n=e.configJson?JSON.parse(e.configJson):null}catch(e){console.error("Failed to parse report config:",e)}let l=n&&("LINE_LIST"===n.type||"LINE_LIST"===n.reportType||"LINELIST"===n.reportType);if(!n||!l)return console.warn("Invalid config or type, returning empty draft"),sd();let i=new Date().toISOString(),o=n.dataSetDefinitions?.[0],s=n._builder,d=[],c=s?.dataSources||n.dataSources;if(c&&c.length>0)c.forEach(e=>{d.push({uuid:e.uuid,name:e.name,type:e.type,role:e.role,tables:e.columns?Object.keys(e.columns):[]})});else if(1!==n.version&&n.dataSources)n.dataSources&&n.dataSources.length>0&&n.dataSources.forEach(e=>{d.push({uuid:e.uuid,name:e.name,type:e.type,role:e.role,tables:e.columns?Object.keys(e.columns):[]})});else{let e=n.dataSourceUuid||"";if(e&&d.push({uuid:e,name:e,type:"ETL",role:"PRIMARY",tables:[]}),o?.columns){let e=o.columns.some(e=>e.dataDefinition?.type==="PERSON_ATTRIBUTE"),t=o.columns.some(e=>e.dataDefinition?.type==="IDENTIFIER");e&&d.push({uuid:"person_attributes",name:"Person Attributes",type:"CORE",role:"REFERENCE"}),t&&d.push({uuid:"patient_identifiers",name:"Patient Identifiers",type:"CORE",role:"REFERENCE"})}}let m=d.find(e=>"PRIMARY"===e.role)?.uuid||"",u=new Map;c.forEach(e=>{Object.values(e.columns||{}).forEach(t=>{let r=(t?.name||"").toLowerCase();r&&u.set(r,{dataSourceUuid:e.uuid,dataSourceName:e.name,table:t?.sourceTable||e.uuid,fieldType:t?.type||"UNKNOWN"})})});let p=new Set,_=[];o?.columns&&o.columns.forEach((e,t)=>{let r,a=e.dataDefinition?.type,n=e.dataDefinition?.config,l=e.name.toLowerCase(),o=n?.sql||"",s=/^\s*SELECT\s/i.test(o)||/:(patientId|patient_id)\b/i.test(o);if("PERSON_ATTRIBUTE"===a)r={dataSourceUuid:"person_attributes",dataSourceName:"Person Attributes",table:"person_attribute",field:e.name,fieldType:"PERSON_ATTRIBUTE",attributeTypeUuid:n?.attributeTypeUuid};else if("IDENTIFIER"===a)r={dataSourceUuid:"patient_identifiers",dataSourceName:"Patient Identifiers",table:"patient_identifier",field:e.name,fieldType:"IDENTIFIER",identifierTypeUuid:n?.identifierTypeUuid};else if("CALCULATION"===a)r={dataSourceUuid:m,dataSourceName:m,table:"calculated",field:e.name,fieldType:"CALCULATED"};else{let t=u.get(l);if(t&&!s)r={dataSourceUuid:t.dataSourceUuid,dataSourceName:t.dataSourceName,table:t.table,field:e.name,fieldType:t.fieldType},p.add(t.table);else if(s)r={dataSourceUuid:t?.dataSourceUuid||m||"custom_sql",dataSourceName:t?.dataSourceName||"Custom SQL",table:"custom_sql",field:e.name,fieldType:"SQL"};else{let t=o.match(/`?(\w+)`?\.\s*`?(\w+)`?/);t?(r={dataSourceUuid:m,dataSourceName:m,table:t[1],field:t[2],fieldType:"DERIVED"},p.add(t[1])):r={dataSourceUuid:m,dataSourceName:m,table:"unknown",field:e.name,fieldType:"UNKNOWN"}}}let d={id:`col-${t}`,name:e.name,description:"",source:r,dataDefinitionType:a||"SQL",dataDefinitionConfig:n||{},additionInfo:{addedVia:s?"SQL_BUILDER":"IMPORT",addedAt:i,orderAdded:t},display:{width:150,align:"CALCULATION"===a?"center":"left",sortable:!0,filterable:"CALCULATION"!==a,format:"CALCULATION"===a?"number":"text"},sortOrder:t,repeatResolution:e.repeatResolution,transformations:e.transformations||[]};_.push(d)}),d.forEach(e=>{e.uuid===m&&(e.tables=Array.from(p))});let g=n.parameters?.map((e,t)=>({id:`param-${t}`,name:e.name,label:e.label,type:e.type,required:e.required||!1,defaultValue:e.defaultValue||"",displayOrder:e.displayOrder||t,config:e.config||{type:e.type}}))||[],E=s?.buildMethod||n.buildMethod||"SQL_BUILDER",f=s?.visualFilter||n.visualFilter;f&&(r=f);let b=s?.filterMap||n.baseCohortDefinition?.config?.filterMap;b&&(a=b);let y=s?.indicatorRules||n.indicatorRules;if(Array.isArray(y)&&y.length>0&&(t=y.map((e,t)=>({id:e.id||`rule-${t}`,indicatorUuid:e.indicatorUuid,name:e.name||"",conditions:e.conditions,logicalOperator:e.logicalOperator||"AND",negate:e.negate||!1}))),e.metaJson)try{let r=JSON.parse(e.metaJson);r.buildMethod&&("INDICATOR_BASED"===r.buildMethod||"VISUAL_FILTER"===r.buildMethod||"SQL_BUILDER"===r.buildMethod)&&(E=r.buildMethod),!t&&Array.isArray(r.indicatorRules)&&r.indicatorRules.length>0&&(t=r.indicatorRules.map((e,t)=>({id:e.id||`rule-${t}`,indicatorUuid:e.indicatorUuid,name:e.name||"",conditions:e.conditions,logicalOperator:e.logicalOperator||"AND",negate:e.negate||!1}))),r.parameters&&Array.isArray(r.parameters)&&r.parameters.length>0&&(g=r.parameters.map((e,t)=>({id:e.id||`param-${t}`,name:e.name,label:e.label,type:e.type,required:e.required||!1,defaultValue:e.defaultValue||"",displayOrder:void 0!==e.displayOrder?e.displayOrder:t,config:e.config||{type:e.type}})))}catch(e){console.warn("Failed to parse metaJson:",e)}let h=[];n.orderBy&&h.push({id:"sort-0",columnId:n.orderBy,columnName:n.orderBy,direction:n.orderDirection||"ASC",nulls:"LAST",sortOrder:0});let v=n.baseCohortDefinition?.config?.sql||"",S={baseDataSourceUuid:d.find(e=>"PRIMARY"===e.role)?.uuid||m,buildMethod:E,sqlTemplate:v,parameterReferences:function(e){let t,r=/:(\w+)/g,a=new Set;for(;null!==(t=r.exec(e));)a.add(t[1]);return Array.from(a)}(v),visualFilter:r||{rootGroup:{id:"root",logicalOperator:"AND",conditions:[],nestedGroups:[]},useVisualBuilder:!1},filterMap:a||void 0,indicatorRules:t,buildHistory:[{timestamp:i,action:"IMPORTED_FROM_EXISTING",description:1===n.version?"Migrated from V1 format (single datasource)":"Imported from existing report definition"}]},T=[],C=d.find(e=>"PRIMARY"===e.role);return C&&T.push({uuid:C.uuid,name:C.name,type:C.type,joinType:"JOIN",enabled:!0,order:0}),{version:3,name:e.name||"",description:e.description||"",code:e.code||"",currentPanel:"basics",categoryUuid:n.categoryUuid||"",rowGrain:n.rowGrain||"PATIENT",templateId:n.templateId||"",populationSources:T,dataSources:d,population:S,columns:_,parameters:g,sortConfig:h,limit:n.limit,populationMode:"INDICATOR_BASED"===E?"INDICATOR":"SQL",indicatorRules:t,displaySettings:{defaultPageSize:25,freezeFirstColumn:!0,freezeHeader:!0,dateDisplayFormat:"dd MMM yyyy",nullDisplayValue:"—",maxInteractiveRows:500,maxExportRows:1e5,allowedExports:["CSV","XLSX","PDF"],includeParametersInExportHeader:!0,includeGeneratedTimestamp:!0},validation:{errors:{},warnings:{},lastValidated:i},metadata:{createdAt:i,lastModified:i,buildMethod:"EDIT",sourceReportUuid:e.uuid,version:3,status:"DRAFT"}}}(e)),e.compiledReportDefinitionUuid&&K(e.compiledReportDefinitionUuid)}).catch(e=>{console.error("Failed to load report:",e),S(e instanceof Error?e.message:"Failed to load report")}).finally(()=>p(!1))):(R("create"),d(sd()),p(!1))},[t]),(0,a.useEffect)(()=>{(async()=>{try{let e=await en();D(e)}catch(e){console.error("Failed to load reference data:",e)}})()},[]),(0,a.useEffect)(()=>{K(null)},[s.columns.length,s.dataSources.length,s.population.sqlTemplate,s.rowGrain]);let eu=(0,a.useCallback)(async()=>{E(!0),C(null);try{let t,r=new Map(eo.map(e=>[e.uuid,e])),a=ss(s,r),n={buildMethod:s.population.buildMethod,indicatorRules:s.population.indicatorRules,populationSources:s.populationSources,visualFilter:s.population.visualFilter,filterMap:s.population.filterMap},l=(0,si.Nj)(a,s,n);"create"===A?(t=await (0,si.rp)(l),e(`/linelist/edit/${t.uuid}`,{replace:!0})):t=await (0,si.cz)(c?.uuid||"",l),m(t),d(e=>({...e,unsavedChanges:!1}))}catch(e){C(e instanceof Error?e.message:"Failed to save report")}finally{E(!1)}},[s,A,c,eo,e]),ep=(0,a.useCallback)(async()=>{N(null),C(null),em(!0)},[]),e_=(0,a.useCallback)(()=>{e("/linelist")},[e]),eg=(0,a.useCallback)(e=>{d(t=>({...t,...e,unsavedChanges:!0}))},[]),eE=(0,a.useCallback)(()=>{em(!1)},[]),ef=(0,a.useCallback)(async e=>{em(!1);let t=function(e){let t={};e.name?.trim()||(t.name="Name is required");let r=e.population?.buildMethod||"SQL_BUILDER",a=e.population?.indicatorRules||e.indicatorRules;if("INDICATOR_BASED"===r?a&&0!==a.length||(t.population="At least one indicator rule is required for indicator-based population"):e.population.sqlTemplate?.trim()||(t.population="Population SQL is required"),e.dataSources&&0!==e.dataSources.length?e.dataSources.some(e=>"PRIMARY"===e.role)||(t.dataSources="A primary data source is required"):t.dataSources="At least one column data source is required",e.rowGrain?.trim()||(t.rowGrain="Row grain is required"),e.population.sqlTemplate?.trim()){let r=e.parameters.filter(e=>e.required).map(e=>e.name),a=[];for(let t of r){let r=`:${t}`;e.population.sqlTemplate.includes(r)||a.push(t)}a.length>0&&(t.population=`Population SQL must include these parameters: ${a.map(e=>`:${e}`).join(", ")}`)}else t.population="Population SQL is required";if(0===e.columns.length)t.columns="At least one column is required";else{e.columns.filter(e=>!e.name?.trim()).length>0&&(t.columns="All columns must have a display name");let r=e.columns.map(e=>e.id),a=new Set(r);r.length!==a.size&&(t.columns="Columns must have unique identifiers");let n=[];e.columns.forEach(e=>{if("SQL"!==e.dataDefinitionType)return;let t=e.dataDefinitionConfig.sql||"";if(!t.trim())return;let r=e.repeatResolution?.strategy&&"NONE"!==e.repeatResolution.strategy,a=/\bLIMIT\s+1\b/i.test(t),l=/^(?:SELECT\s+(?:DISTINCT\s+)?(?:COUNT|MAX|MIN|SUM|AVG|GROUP_CONCAT|ARRAY_AGG|STRING_AGG|JSON_AGG)\s*\()/i.test(t)||/GROUP\s+BY\s+/i.test(t),i=/\bpatient_id\s*=\s*:patientId\b/i.test(t)&&/\bLIMIT\s+1\b/i.test(t);!/appointment|observation|encounter|program_enrollment|visit/i.test(t)||l||a||i||r||n.push(e.name)}),n.length>0&&(t.columns=`Columns that may return multiple values per row: ${n.join(", ")}. Please configure repeat resolution for each.`)}if(e.sortConfig&&e.sortConfig.length>0&&e.sortConfig.filter(t=>!e.columns.some(e=>e.id===t.columnId)).length>0&&(t.general="Sort rules reference columns that are not in the report"),e.population.sqlTemplate?.trim()){let r=e.population.sqlTemplate.toUpperCase().trim();r.includes("SELECT")||(t.population="SQL must include a SELECT statement"),r.includes("PATIENT_ID")||(t.population="SQL must select patient_id or patient_id column"),"PATIENT"===e.rowGrain&&r.includes("DISTINCT")}return t}({...s,categoryUuid:e.categoryUuid});if(Object.keys(t).length>0){let e=Object.values(t).join(", ");C(`Cannot compile: ${e}`);return}if(eg({categoryUuid:e.categoryUuid}),(s.unsavedChanges||!c?.uuid)&&await eu(),!c?.uuid)return void N("Cannot compile: Report must be saved first");b(!0),N(null),k(null);try{let e=await (0,si.ah)(c.uuid,s.categoryUuid);e?.reportDefinitionUuid&&K(e.reportDefinitionUuid),k(e?.reportDefinitionUuid?`Compiled successfully. Runtime report UUID: ${e.reportDefinitionUuid}`:"Compiled successfully.")}catch(e){N(e instanceof Error?e.message:"Failed to compile report")}finally{b(!1)}},[s,c?.uuid,eu,eg]),eb=(0,a.useCallback)(e=>{eg({dataSources:e})},[eg]),ey=(0,a.useCallback)(e=>{let t=[...s.dataSources];t.length>0?(t[0].uuid=e,t[0].name=e):t.push({uuid:e,name:e,type:"ETL",role:"PRIMARY"}),eg({dataSources:t})},[eg,s.dataSources]),eh=(0,a.useMemo)(()=>s.columns.map(e=>{if("PERSON_ATTRIBUTE"===e.dataDefinitionType)return`person-attribute-${e.source.attributeTypeUuid||e.name}`;if("IDENTIFIER"===e.dataDefinitionType)return`patient-identifier-${e.source.identifierTypeUuid||e.name}`;if("CALCULATION"===e.dataDefinitionType){let t=(e.dataDefinitionConfig.calculation||e.name).toLowerCase();return`openmrs.calc.${t}`}if("person"===e.source.table||"person_address"===e.source.table)return`openmrs.${e.source.table}.${e.source.field||e.name}`;if("PERSON_NAME"===e.dataDefinitionType)return`openmrs.person.${e.source.field||e.name}`;let t=e.source.table||e.source.dataSourceUuid||"unknown";return`${t}.${e.source.field||e.name}`}),[s.columns]),ev=(0,a.useCallback)(e=>{C(null)},[]),eS=(0,a.useCallback)(()=>{s.population?.sqlTemplate&&0!==s.columns.length?c?.uuid?(et(!0),Z(null)):Z("Please save the report first before running preview."):Z("Please add a base cohort definition and at least one column before running preview.")},[s.population?.sqlTemplate,s.columns.length,c?.uuid]),eT=(0,a.useCallback)(async e=>{et(!1),V(!0),Z(null);try{let t=s.indicatorRules||s.population?.indicatorRules||[],r=new Map(t.map(e=>[e.indicatorUuid,{sqlTemplate:e.sqlTemplate,configJson:e.configJson}])),a=ss(s,r),n=await (0,si.jg)({reportUuid:c?.uuid||"",config:a,parameters:e,maxRows:100,cachedReportDefinitionUuid:W||void 0});if(!n.success)return void Z(n.error||"Preview failed");n.data&&Y({columns:n.data.columns,rows:n.data.rows,rowCount:n.data.rowCount,html:n.data.html})}catch(e){Z(e instanceof Error?e.message:"Preview failed")}finally{V(!1)}},[s]),eC=(0,a.useCallback)(e=>{let t,r;if(s.columns.some(t=>t.name===e.label||t.name===e.name))return void C("This field is already added as a column");let a=e.id.startsWith("person-attribute-"),n=e.id.startsWith("patient-identifier-"),l=e.name,i=new Date().toISOString();if(a)r={dataSourceUuid:"person_attributes",dataSourceName:"Person Attributes",table:"person_attribute",field:e.label,fieldType:"PERSON_ATTRIBUTE",attributeTypeUuid:l},t={id:`col-${Date.now()}`,name:e.label,description:"",source:r,dataDefinitionType:"PERSON_ATTRIBUTE",dataDefinitionConfig:{attributeTypeUuid:l},additionInfo:{addedVia:"DRAG_DROP",addedAt:i,orderAdded:s.columns.length},display:{width:150,align:"left",sortable:!0,filterable:!0,format:"text"},sortOrder:s.columns.length,transformations:[]};else if(n)r={dataSourceUuid:"patient_identifiers",dataSourceName:"Patient Identifiers",table:"patient_identifier",field:e.label,fieldType:"IDENTIFIER",identifierTypeUuid:l},t={id:`col-${Date.now()}`,name:e.label,description:"",source:r,dataDefinitionType:"IDENTIFIER",dataDefinitionConfig:{identifierTypeUuid:l,preferred:!1},additionInfo:{addedVia:"DRAG_DROP",addedAt:i,orderAdded:s.columns.length},display:{width:150,align:"left",sortable:!0,filterable:!0,format:"text"},sortOrder:s.columns.length,repeatResolution:{strategy:"LATEST",orderBy:void 0,restrictToPeriod:!1,ignoreVoided:!0},transformations:[]};else if("CALCULATION"===e.source){let a=s.dataSources.find(e=>"PRIMARY"===e.role);r={dataSourceUuid:a?.uuid||"",dataSourceName:a?.name||"",table:"calculated",field:e.name,fieldType:"CALCULATED"},t={id:`col-${Date.now()}`,name:e.label||e.name,description:"",source:r,dataDefinitionType:"CALCULATION",dataDefinitionConfig:{calculation:e.name.toUpperCase(),onDate:":startDate"},additionInfo:{addedVia:"DRAG_DROP",addedAt:i,orderAdded:s.columns.length},display:{width:120,align:"center",sortable:!0,filterable:!1,format:"number"},sortOrder:s.columns.length,transformations:[]}}else e.id.startsWith("openmrs.person_address.")||"person_address"===e.table?(r={dataSourceUuid:"person_address",dataSourceName:"Person Address",table:"person_address",field:e.name,fieldType:"TEXT"},t={id:`col-${Date.now()}`,name:e.label||e.name,description:"",source:r,dataDefinitionType:"PERSON_ADDRESS",dataDefinitionConfig:{type:"ADDRESS_FIELD",field:e.name},additionInfo:{addedVia:"DRAG_DROP",addedAt:i,orderAdded:s.columns.length},display:{width:150,align:"left",sortable:!0,filterable:!0,format:"text"},sortOrder:s.columns.length,transformations:[]}):(r={dataSourceUuid:e.dataSourceUuid||e.table,dataSourceName:e.dataSourceName||e.table,table:e.table,field:e.name,fieldType:e.type||"UNKNOWN"},t={id:`col-${Date.now()}`,name:e.label||e.name,description:"",source:r,dataDefinitionType:"SQL",dataDefinitionConfig:{sql:`\`${e.table}\`.\`${e.name}\``},additionInfo:{addedVia:"DRAG_DROP",addedAt:i,orderAdded:s.columns.length},display:{width:150,align:"left",sortable:!0,filterable:!0,format:"text"},sortOrder:s.columns.length,repeatResolution:e.isRepeated?{strategy:"LATEST",orderBy:void 0,restrictToPeriod:!1,ignoreVoided:!0}:void 0,transformations:[]});eg({columns:[...s.columns,t]})},[s.columns,s.dataSources,eg]),ew=(0,a.useCallback)(e=>{if(s.columns.some(t=>t.name.toLowerCase()===e.name.toLowerCase()))return void C("A column with this name already exists");let t=new Date().toISOString(),r=s.dataSources.find(e=>"PRIMARY"===e.role),a={id:`col-${Date.now()}`,name:e.name,description:e.description||"",source:{dataSourceUuid:r?.uuid||"custom_sql",dataSourceName:r?.name||"Custom SQL",table:"custom_sql",field:e.name,fieldType:"SQL"},dataDefinitionType:"SQL",dataDefinitionConfig:{sql:e.sql},additionInfo:{addedVia:"SQL_BUILDER",addedAt:t,orderAdded:s.columns.length},display:{width:150,align:"left",sortable:!0,filterable:!0,format:"text"},sortOrder:s.columns.length,repeatResolution:e.repeatResolution?{strategy:"LATEST",orderBy:void 0,restrictToPeriod:!1,ignoreVoided:!0}:void 0,transformations:[]};eg({columns:[...s.columns,a]})},[s.columns,s.dataSources,eg]),eN=(0,a.useCallback)(e=>{s.columns.some(t=>t.name.toLowerCase()===e.name.toLowerCase())?C("A column with this name already exists"):eg({columns:[...s.columns,e]})},[s.columns,eg]),eI=(0,a.useCallback)(e=>{let t={id:`cond-${Date.now()}`,field:e.name,fieldLabel:e.label,fieldType:e.type,operator:function(e){switch(e){case"TEXT":return"CONTAINS";case"NUMBER":default:return"EQUALS";case"DATE":return"BETWEEN_DATES";case"CODED":return"IS_ONE_OF";case"BOOLEAN":return"IS_TRUE";case"LOCATION":return"IN_LOCATION"}}(e.type),value:""},r={...s.population.visualFilter,rootGroup:{...s.population.visualFilter?.rootGroup,conditions:[...s.population.visualFilter?.rootGroup?.conditions||[],t]}};eg({population:{...s.population,visualFilter:r}})},[s.population,eg]),ek=(0,a.useCallback)(e=>{ea(e.map(e=>({name:e.name,label:e.label,type:e.type})))},[]),eA=(0,a.useCallback)(e=>{ei(e)},[]);(0,a.useEffect)(()=>{let e=e=>{if(q&&B(Math.max(200,Math.min(500,e.clientX))),H){let t=document.querySelector(`.${dl.workspace}`)?.getBoundingClientRect();if(t){let r=x?48:P;z(Math.max(400,Math.min(700,e.clientX-t.left-r)))}}},t=()=>{j(!1),J(!1),document.body.style.cursor="default",document.body.style.userSelect=""};if(q||H)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=""}},[q,H,P,x]);let eR=(0,a.useCallback)(e=>{e.preventDefault(),j(!0)},[]),eO=(0,a.useCallback)(e=>{e.preventDefault(),J(!0)},[]);return u?n().createElement("div",{className:dl.workspace},n().createElement("div",{className:dl.loading},"Loading report...")):n().createElement("div",{className:dl.workspace},n().createElement("header",{className:dl.header},n().createElement("div",{className:dl.headerLeft},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.JG,iconDescription:"Back",onClick:e_})),n().createElement("div",{className:dl.headerCenter},n().createElement(o.ksK,{id:"report-name",labelText:"",value:s.name,onChange:e=>eg({name:e.target.value}),placeholder:"Report name",className:dl.nameInput,size:"sm"}),n().createElement(o.vwO,{size:"sm",type:I?"green":"gray"},I?"Compiled":"Draft"),s.unsavedChanges&&n().createElement(o.vwO,{size:"sm",type:"blue"},"Unsaved")),n().createElement("div",{className:dl.headerRight},n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:g.eM,onClick:eu,disabled:_||!s.unsavedChanges},_?"Saving...":"Save"),n().createElement(o.$nd,{kind:"primary",size:"sm",renderIcon:g.Vn,onClick:ep,disabled:f||!c?.uuid||!l(y.RB.REPORT_COMPILE),title:l(y.RB.REPORT_COMPILE)?void 0:"Requires the report compile privilege"},f?"Compiling...":"Compile")),n().createElement(o.obU,{size:"sm",renderIcon:ed.aI,align:"right"},n().createElement(o.XSD,{itemText:"Save as"}),n().createElement(o.XSD,{itemText:"Export JSON"}),n().createElement(o.XSD,{itemText:"Import JSON"}),n().createElement(o.XSD,{itemText:"Validate"}),n().createElement(o.XSD,{itemText:"View history"}),n().createElement(o.XSD,{itemText:"Retire"})))),h&&n().createElement("div",{className:dl.notification},n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:h})),T&&n().createElement("div",{className:dl.notification},n().createElement(o.jeF,{kind:"error",title:"Save Error",subtitle:T,onClose:()=>C(null)})),w&&n().createElement("div",{className:dl.notification},n().createElement(o.jeF,{kind:"error",title:"Compile Error",subtitle:w,onClose:()=>N(null)})),I&&n().createElement("div",{className:dl.notification},n().createElement(o.jeF,{kind:"success",title:"Compiled",subtitle:I,onClose:()=>k(null)})),n().createElement(tI,{open:ec,currentCategoryUuid:s.categoryUuid,onConfirm:ef,onClose:eE,reportType:"linelist"}),n().createElement(dn,{open:ee,onClose:()=>et(!1),onRun:eT,parameters:s.parameters,loading:G}),n().createElement("div",{className:dl.panels},n().createElement("aside",{className:dl.leftPanel,style:{width:x?48:P}},n().createElement("div",{className:dl.panelHeader},!x&&n().createElement(n().Fragment,null,n().createElement("h3",{className:dl.panelTitle},"Data Catalogue"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.JG,iconDescription:"Collapse left panel",onClick:()=>L(!0)})),x&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.c_,iconDescription:"Expand left panel",onClick:()=>L(!1)})),!x&&n().createElement("div",{className:dl.panelContent},n().createElement("div",{className:dl.columnSourcesSection},n().createElement("div",{className:dl.populationCard},n().createElement(sf,{populationSources:s.populationSources,onChange:e=>eg({populationSources:e}),disabled:u})),n().createElement("div",{className:dl.columnSourcesCard},n().createElement("div",{className:dl.columnSourcesHeader},n().createElement("h4",{className:dl.columnSourcesTitle},n().createElement("span",{className:dl.columnSourcesIcon},"\uD83D\uDCCA"),"Column Sources"),n().createElement("span",{className:dl.columnSourcesSubtitle},"Select columns for output")),n().createElement(da,{dataSources:s.dataSources,onChange:eb,disabled:u}),n().createElement(sD,{dataSources:s.dataSources,populationSources:s.populationSources,onPopulationSourcesChange:void 0,onAddToColumns:eC,onAddToFilters:eI,onTableChange:ey,onFieldsAvailable:ek,onEtlStructureDetected:eA,selectedFields:eh,onAddCustomSqlColumn:ew,onAddDraftColumn:eN,idColumnAlias:"patient_id",showPopulationSelector:!1}))))),n().createElement("div",{className:`${dl.resizeHandle} ${dl.resizeHandleLeftMiddle}`,onMouseDown:eR,style:{cursor:"col-resize"}}),n().createElement("aside",{className:dl.middlePanel,style:{width:M?48:F}},n().createElement("div",{className:dl.panelHeader},!M&&n().createElement(n().Fragment,null,n().createElement("h3",{className:dl.panelTitle},"Query Configuration"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.JG,iconDescription:"Collapse middle panel",onClick:()=>$(!0)})),M&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.c_,iconDescription:"Expand middle panel",onClick:()=>$(!1)})),!M&&n().createElement("div",{className:dl.panelContent},n().createElement(s4,{draft:s,onDraftChange:eg,availableFields:er,indicators:eo,onRemoveColumn:ev}))),n().createElement("div",{className:`${dl.resizeHandle} ${dl.resizeHandleMiddleRight}`,onMouseDown:eO,style:{cursor:"col-resize"}}),n().createElement("main",{className:dl.rightPanel},n().createElement("div",{className:dl.panelHeader},n().createElement("h3",{className:dl.panelTitle},"Preview"),n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"primary",size:"sm",onClick:eS,disabled:G||!c?.compiledReportDefinitionUuid||!l(y.RB.SQL_EXECUTE),tooltipAlignment:"end",tooltipPosition:"bottom"},G?"Loading...":"Run Preview"))),n().createElement("div",{className:dl.panelContent},!c?.compiledReportDefinitionUuid&&"edit"===A&&n().createElement(o.jeF,{kind:"info",title:"Report Not Compiled",subtitle:"Please compile the report first before running preview. Click the 'Compile' button above to generate the report definition.",lowContrast:!0}),X&&n().createElement(o.jeF,{kind:"error",title:"Preview Error",subtitle:X}),!Q&&!X&&c?.compiledReportDefinitionUuid&&n().createElement("div",{className:dl.emptyPreview},n().createElement(es.yo,{size:32}),n().createElement("p",null,"Run a preview to see sample data")),Q&&Q.rowCount>0&&n().createElement("div",{className:dl.previewResults},n().createElement("div",{className:dl.previewStatus},n().createElement("span",null,"Preview rows: ",Q.rowCount),n().createElement("span",null,"Query duration: —")),Q.html?n().createElement("div",{className:dl.htmlPreview,dangerouslySetInnerHTML:{__html:Q.html}}):n().createElement(o.K3K,null,n().createElement(o.XIK,null,n().createElement(o.ndF,null,n().createElement(o.Hjg,null,Q.columns.map(e=>n().createElement(o.A0N,{key:e},e)))),n().createElement(o.BFY,null,Q.rows.map((e,t)=>n().createElement(o.Hjg,{key:t},Q.columns.map(r=>n().createElement(o.nA6,{key:`${t}-${r}`},e[r]?.toString()??"")))))))),Q&&0===Q.rowCount&&n().createElement("div",{className:dl.emptyPreview},n().createElement(es.yo,{size:32}),n().createElement("p",null,"No data found for the current configuration"))))))},ds="-esm-report-builder__linelist-run-report-page__emptyState___PPH5o",dd=()=>{let e=(0,i.Zp)(),{reportId:t}=(0,i.g)(),[r,l]=(0,a.useState)(null),[s,c]=(0,a.useState)(!0),[m,p]=(0,a.useState)(null),[_,f]=(0,a.useState)(!1),[b,y]=(0,a.useState)(null),[h,v]=(0,a.useState)({}),[S,T]=(0,a.useState)({}),[C,w]=(0,a.useState)({}),[N,I]=(0,a.useState)("FIXED"),[k,A]=(0,a.useState)(""),[R,O]=(0,a.useState)(null),[D,x]=(0,a.useState)([]),[L,M]=(0,a.useState)(0),[$,P]=(0,a.useState)(null),[U,B]=(0,a.useState)(1),[F,z]=(0,a.useState)(25);(0,a.useEffect)(()=>{(async()=>{if(t){c(!0),p(null);try{let e=await (0,si.getLinelistReport)(t);l(e);let r=(0,si.m)(e);if(r?.parameters){let e={};r.parameters.forEach(t=>{if(t.defaultValue&&(e[t.name]=t.defaultValue),"DATE"===t.type&&!e[t.name])if("startDate"===t.name){let t=new Date,a=new Date;a.setMonth(a.getMonth()-6),e.startDate=a.toISOString().split("T")[0],r.parameters.some(e=>"endDate"===e.name)&&(e.endDate=t.toISOString().split("T")[0])}else"endDate"===t.name?e.endDate=new Date().toISOString().split("T")[0]:t.name.toLowerCase().includes("date")&&!t.name.includes("end")&&(e[t.name]=new Date().toISOString().split("T")[0])}),v(e)}}catch(e){p(e instanceof Error?e.message:"Failed to load report")}finally{c(!1)}}})()},[t]);let q=(0,a.useCallback)(()=>r?(0,si.sY)(r):[],[r]),j=(0,a.useCallback)(()=>q().filter(e=>"DATE"===e.type||"DATETIME"===e.type),[q]),H=(0,a.useCallback)(()=>{let e=j();return e.some(e=>"startdate"===e.name.toLowerCase()||"start_date"===e.name.toLowerCase())&&e.some(e=>"enddate"===e.name.toLowerCase()||"end_date"===e.name.toLowerCase())},[j]),J=(e,t)=>{w(r=>({...r,[e]:t}))},V=(0,a.useCallback)(()=>{let e=q();if("RELATIVE"===N&&H()&&!k)return!1;for(let t of e){if(("DATE"===t.type||"DATETIME"===t.type)&&"RELATIVE"===N){let e="startdate"===t.name.toLowerCase()||"start_date"===t.name.toLowerCase(),r="enddate"===t.name.toLowerCase()||"end_date"===t.name.toLowerCase();if(e||r)continue}if(t.required&&!h[t.name])return!1}return!0},[q,h,N,k,H]),W=(0,a.useCallback)(async()=>{if(!r||!V())return void y("Please fill in all required parameters");if("RELATIVE"===N&&H()&&!k)return void y("Please select a reporting period");f(!0),y(null),O(null);try{let e=(0,si.m)(r),t=q(),a={};if("RELATIVE"===N&&k&&H()){let{start:e,end:r}=a4(k);j().forEach((t,n)=>{0===n?a[t.name]=a8(e):1===n&&(a[t.name]=a8(r))}),t.forEach(e=>{"DATE"!==e.type&&"DATETIME"!==e.type&&h[e.name]&&(a[e.name]=h[e.name])})}else t.forEach(e=>{h[e.name]&&(a[e.name]=h[e.name])});let n=await (0,si.ah)(r.uuid,e?.categoryUuid);if(!n.reportDefinitionUuid)return void y("Failed to compile report - no report definition UUID returned");let l=await (0,si.U)({reportDefinitionUuid:n.reportDefinitionUuid,parameters:a,maxRows:10*F});if(l.success&&l.data){let t=e?.dataSetDefinitions?.[0]?.name||"PATIENT_LIST",r=l.data[t]||[],a=r.length>0?Object.keys(r[0]):[];x(a),O(r),M(r.length),P(new Date)}else y(l.error||"Failed to run report")}catch(e){y(e instanceof Error?e.message:"Failed to run report")}finally{f(!1)}},[r,h,F,V,q,j,N,k,H]),K=(0,a.useCallback)(e=>{if(R&&0!==R.length)if("CSV"===e){let e=new Blob([[D.join(","),...R.map(e=>D.map(t=>{let r=e[t];if(null==r)return"";let a=String(r);return a.includes(",")||a.includes('"')||a.includes("\n")?`"${a.replace(/"/g,'""')}"`:a}).join(","))].join("\n")],{type:"text/csv"}),t=URL.createObjectURL(e),a=document.createElement("a");a.href=t,a.download=`${r?.name?.replace(/[^a-z0-9]/gi,"_")||"linelist"}_${Date.now()}.csv`,a.click(),URL.revokeObjectURL(t)}else alert("XLSX export not implemented yet")},[R,D,r]),Q=q(),Y=R&&R.length>0,X=Y?R.slice((U-1)*F,U*F):[];return s?n().createElement("div",{style:{padding:"2rem"}},n().createElement(o.Rhj,{description:"Loading report...",withOverlay:!1,active:!0})):m&&!r?n().createElement(o.BJc,{gap:5},n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:m}),n().createElement(o.$nd,{kind:"secondary",renderIcon:E.nk,onClick:()=>e("/linelist")},"Back to Linelist Reports")):n().createElement(o.BJc,{gap:5},n().createElement(G,{title:r?.name||"Linelist Report",subtitle:r?.description,actions:n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:E.nk,onClick:()=>e("/linelist")},"Back to Linelist Reports")}),Q.length>0&&n().createElement("div",{className:"-esm-report-builder__linelist-run-report-page__parametersSection___fnVLK"},n().createElement("div",{className:"-esm-report-builder__linelist-run-report-page__parametersHeader___PWxmx"},n().createElement("h2",{className:"-esm-report-builder__linelist-run-report-page__parametersTitle___8sdDx"},"Report Parameters"),n().createElement("p",{className:"-esm-report-builder__linelist-run-report-page__parametersDescription___+hfvV"},'Configure the parameters for this report run, then click "Run Report" to view results.')),H()&&n().createElement("div",{style:{marginBottom:"1.5rem"}},n().createElement("label",{className:"cds--label"},"Date Selection Mode"),n().createElement(o.zWQ,{legendText:"",name:"date-mode",valueSelected:N,onChange:e=>{I(e),"FIXED"===e&&A("")}},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"===N&&H()&&n().createElement("div",{style:{marginBottom:"1.5rem",maxWidth:"300px"}},n().createElement(o.l6P,{id:"relative-period-select",labelText:"Select reporting period",value:k,onChange:e=>{A(e.target.value)},size:"sm"},n().createElement(o.ebT,{value:"",text:"Select period"}),a3.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),S.relativePeriod&&n().createElement("div",{style:{color:"#da1e28",fontSize:"0.875rem",marginTop:"0.5rem"}},S.relativePeriod)),n().createElement(o.xA9,{fullWidth:!0,className:"-esm-report-builder__linelist-run-report-page__parametersGrid___yZwpr"},Q.map(e=>{let t=(e=>{let t=h[e.name]||"",r=S[e.name];if(H()&&"RELATIVE"===N){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}let a={key:e.name,parameter:e,value:t,error:r,onChange:t=>{var r;return r=e.name,void(v(e=>({...e,[r]:t})),S[r]&&T(e=>{let t={...e};return delete t[r],t}))}};switch(e.type){case"DATE":case"DATETIME":return n().createElement(a7,a);case"NUMBER":return n().createElement(a9,a);case"BOOLEAN":return n().createElement(ne,a);case"LIST":return n().createElement(nt,a);case"LOCATION":return n().createElement(ni,{...a,onSearchQueryChange:t=>J(e.name,t)});case"CONCEPT":return n().createElement(no,{...a,searchQuery:C[e.name]||"",onSearchQueryChange:t=>J(e.name,t)});case"IDENTIFIER_TYPE":return n().createElement(ns,a);case"PERSON_ATTRIBUTE":return n().createElement(nd,a);default:return n().createElement(nc,{...a,onError:t=>{var r;return r=e.name,void T(e=>{if(t)return{...e,[r]:t};let a={...e};return delete a[r],a})}})}})(e);return t?n().createElement(o.VPZ,{key:e.name,md:4,lg:4},n().createElement("div",{className:"-esm-report-builder__linelist-run-report-page__parameterField___Ksp+b"},t)):null})),n().createElement("div",{className:"-esm-report-builder__linelist-run-report-page__actions___qGhIE"},n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"primary",renderIcon:d.jG,onClick:W,disabled:_||!V()},_?"Running...":"Run Report"),n().createElement(o.$nd,{kind:"secondary",renderIcon:u.wM,onClick:()=>{v({}),A(""),I("FIXED")},disabled:_},"Reset"),n().createElement(o.$nd,{kind:"ghost",renderIcon:g.eM,onClick:()=>{alert("Save preset functionality not yet implemented")},disabled:_},"Save Preset"))),b&&n().createElement(o.jeF,{kind:"error",title:"Run Error",subtitle:b,onClose:()=>y(null)})),Y&&n().createElement("div",{className:"-esm-report-builder__linelist-run-report-page__resultsSection___bnHSZ"},n().createElement("div",{className:"-esm-report-builder__linelist-run-report-page__resultsHeader___YDDce"},n().createElement("div",{className:"-esm-report-builder__linelist-run-report-page__resultsInfo___EBTW8"},n().createElement("h2",{className:"-esm-report-builder__linelist-run-report-page__resultsTitle___mWU4J"},"Results"),n().createElement("div",{className:"-esm-report-builder__linelist-run-report-page__stats___z6p4t"},n().createElement("span",null,"Records: ",n().createElement("strong",null,L)),n().createElement("span",null,"Generated: ",n().createElement("strong",null,$?.toLocaleString())),Q.some(e=>"startDate"===e.name||"endDate"===e.name)&&n().createElement("span",null,Q.some(e=>"startDate"===e.name)?`Date Range: ${h.startDate} to ${h.endDate||"N/A"}`:`Report Date: ${h.endDate||h.date||"N/A"}`))),n().createElement("div",{className:"-esm-report-builder__linelist-run-report-page__exportActions___s74ew"},n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:es.f5,onClick:()=>K("CSV")},"Export CSV"),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>K("XLSX")},"Export XLSX")))),n().createElement(o.bQt,{rows:X.map((e,t)=>({id:t,...e})),headers:D.map(e=>({key:e,header:e}))},({rows:e,headers:t,getHeaderProps:r,getTableProps:a})=>n().createElement(o.K3K,null,n().createElement(o.XIK,a(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,t.map(e=>n().createElement(o.A0N,{...r({header:e}),key:e.key},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id},t.map(t=>n().createElement(o.nA6,{key:t.key},e[t.key]??"-")))))))),n().createElement(o.dKS,{totalItems:R.length,pageSize:F,pageSizes:[25,50,100],page:U,onChange:({page:e,pageSize:t})=>{B(e),z(t)}})),!_&&!Y&&0===Q.length&&n().createElement(o.FAs,{className:ds},n().createElement(tb.Ss,{size:48}),n().createElement("h3",null,"No Parameters Required"),n().createElement("p",null,"This report has no configurable parameters."),n().createElement(o.$nd,{kind:"primary",renderIcon:d.jG,onClick:W},"Run Report")),!_&&!Y&&Q.length>0&&n().createElement(o.FAs,{className:ds},n().createElement(tb.Ss,{size:48}),n().createElement("h3",null,"Ready to Run"),n().createElement("p",null,'Configure the parameters above and click "Run Report" to view results.')))},dc=[{key:"validate",label:"Validating package...",status:"pending"},{key:"categories",label:"Report Categories...",status:"pending"},{key:"ageCategories",label:"Age Categories...",status:"pending"},{key:"ageGroups",label:"Age Groups...",status:"pending"},{key:"themes",label:"Data Themes...",status:"pending"},{key:"indicators",label:"Indicators...",status:"pending"},{key:"sections",label:"Sections...",status:"pending"},{key:"library",label:"Report Library...",status:"pending"},{key:"complete",label:"Complete!",status:"pending"}],dm=[{key:"validate",label:"Validating package...",status:"pending"},{key:"reports",label:"Compiled Reports...",status:"pending"},{key:"complete",label:"Complete!",status:"pending"}],du=({isOpen:e,onClose:t,onSuccess:r})=>{let[a,l]=n().useState(!1),[i,s]=n().useState(0),[d,c]=n().useState("artifacts"),[m,u]=n().useState(dc),[p,_]=n().useState(null),[g,E]=n().useState(null),[f,b]=n().useState(!1),[y,h]=n().useState(""),[v,S]=n().useState(null);n().useEffect(()=>{e&&T()},[e]);let T=()=>{l(!1),s(0),c("artifacts"),u(dc),_(null),E(null),b(!1),h(""),S(null)};n().useEffect(()=>{"artifacts"===d?u(dc):u(dm)},[d]);let C=e=>e&&""!==e.trim()?null:"Custom path cannot be empty when enabled",w=async()=>{if(f){let e=C(y);if(e)return void S(e)}l(!0),E(null),S(null);try{for(let e=0;e<m.length-1;e++)await N(e,"in-progress"),await I(400),await N(e,"complete");let e={type:d,...f?{sourceDirectory:y.trim()}:{}},t=await em(e);await N(m.length-1,"complete"),_(t),t.success?r?.():E(t.errorMessage||"Initialization failed. Please try again.")}catch(e){E(e.message||"An unexpected error occurred during initialization."),u(e=>e.map((e,t)=>t===i?{...e,status:"error"}:e))}finally{l(!1)}},N=async(e,t)=>{e>=0&&e<m.length&&(s(e+1),u(r=>r.map((r,a)=>a===e?{...r,status:t}:r))),await I(100)},I=e=>new Promise(t=>setTimeout(t,e)),k=!f||f&&!v&&""!==y.trim(),A=!a&&!p;return n().createElement(o.aFV,{open:e,onRequestClose:t,modalHeading:"Initialize Report Builder",modalLabel:"Report Builder",primaryButtonText:A?"Initialize":p?.success?"Done":"Close",primaryButtonDisabled:A&&(!k||a),onRequestSubmit:A?w:t,secondaryButtonText:A?"Cancel":void 0,size:"md"},n().createElement(o.cwr,null,!a&&!p&&n().createElement("div",{className:eg},n().createElement("div",{className:eE},n().createElement("label",{className:"-esm-report-builder__import-export-styles__label___z+IN8"},"Import Scope"),n().createElement(o.zWQ,{name:"importScope",valueSelected:d,onChange:e=>c(e),orientation:"vertical"},n().createElement(o.aaP,{value:"artifacts",id:"scope-artifacts",labelText:"Report Builder Artifacts (Categories, Indicators, Themes, Sections, etc.)",disabled:!1}),n().createElement(o.aaP,{value:"compiledReports",id:"scope-compiled-reports",labelText:"Compiled Reports",disabled:!1}))),n().createElement("div",{className:"-esm-report-builder__import-export-styles__infoBox___Ge83-"},n().createElement(tN.$$,{size:20,className:"-esm-report-builder__import-export-styles__infoIcon___4jEyh"}),n().createElement("div",null,n().createElement("p",{style:{margin:"0 0 0.5rem 0",fontSize:"0.875rem",fontWeight:500}},"Quick Initialization"),n().createElement("p",{style:{margin:0,fontSize:"0.875rem",color:"var(--cds-text-02)"}},"artifacts"===d?"Loads all Report Builder artifacts (categories, indicators, themes, sections, library, etc.) from the default OpenMRS configuration directory.":"Loads all compiled reports from the default OpenMRS configuration directory."))),n().createElement("div",{className:"-esm-report-builder__import-export-styles__loadedItemsBox___WXV9Y"},n().createElement("h5",{style:{fontSize:"0.875rem",fontWeight:500,margin:"0 0 0.75rem 0"}},"What will be loaded:"),"artifacts"===d?n().createElement("div",{className:eF},n().createElement("span",{className:ez},"Report Categories"),n().createElement("span",{className:ez},"Age Categories & Groups"),n().createElement("span",{className:ez},"Data Themes"),n().createElement("span",{className:ez},"Indicators"),n().createElement("span",{className:ez},"Sections"),n().createElement("span",{className:ez},"Report Library"),n().createElement("span",{className:ez},"ETL Sources & Tasks")):n().createElement("div",{className:eF},n().createElement("span",{className:ez},"Compiled Reports"))),n().createElement("div",{className:"-esm-report-builder__import-export-styles__advancedSection___ls5lE"},n().createElement(o.lMk,{id:"use-custom-path-toggle",labelText:"Use custom directory path",toggled:f,onChange:e=>{b(e.target.checked),S(null)},labelA:"Default",labelB:"Custom"})),f&&n().createElement("div",{className:"-esm-report-builder__import-export-styles__customPathSection___niukW"},n().createElement(o.ksK,{id:"custom-path-input",labelText:"Custom directory path",placeholder:"/path/to/distribution/package",value:y,onChange:e=>{h(e.target.value),v&&S(C(e.target.value))},invalid:!!v,invalidText:v||""}),n().createElement("p",{className:"-esm-report-builder__import-export-styles__hintText___OBlwJ"},"Enter the full path to the directory containing the exported report package.")),g&&n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:g,hideCloseButton:!0,lowContrast:!0,style:{marginTop:"1rem"}})),a&&n().createElement("div",{className:ef},n().createElement("div",{className:eb},n().createElement("h4",null,"Initializing Report Builder..."),n().createElement("p",{style:{fontSize:"0.875rem",color:"var(--cds-text-02)"}},"artifacts"===d?"Loading and configuring Report Builder artifacts":"Loading and configuring compiled reports"," from ",f?"custom directory":"default location",".")),n().createElement(o.z21,{value:Math.round(i/m.length*100),label:m[i]?.label||"Initializing...",className:ey}),n().createElement("div",{className:eh,style:{maxHeight:"200px"}},m.map(e=>n().createElement("div",{key:e.key,className:ev},n().createElement("span",{className:eS},"complete"===e.status&&n().createElement(U.MG,{size:16,className:eI}),"error"===e.status&&n().createElement(es.$D,{size:16,className:eN}),"in-progress"===e.status&&n().createElement(ed.lP,{size:16,className:eC})),n().createElement("span",{className:`${eT} ${"complete"===e.status?ew:"error"===e.status?eN:"in-progress"===e.status?eC:""}`},e.label))))),p&&p.success&&n().createElement("div",{className:ek},n().createElement("div",{className:eA},n().createElement(U.MG,{size:32,className:eR}),n().createElement("h4",null,"Initialization completed")),n().createElement("div",{className:eO},n().createElement("p",{className:eD},p.summary),n().createElement("div",{className:"-esm-report-builder__import-export-styles__statsRow___EwgdN"},n().createElement("div",{className:ex},n().createElement("span",{className:eL},p.successCount),n().createElement("span",{className:eM},"Processed")),void 0!==p.errorCount&&p.errorCount>0&&n().createElement("div",{className:ex},n().createElement("span",{className:eL,style:{color:"#da1e28"}},p.errorCount),n().createElement("span",{className:eM},"Errors")))),p.successes&&p.successes.length>0&&n().createElement("div",{className:e$},n().createElement("h5",null,"Successfully Loaded:"),n().createElement("div",{className:eP},p.successes.slice(0,10).map((e,t)=>n().createElement("div",{key:t,className:eU},n().createElement(o.vwO,{type:"green"},e.type),n().createElement("span",null,e.filename))),p.successes.length>10&&n().createElement("div",{style:{fontSize:"0.75rem",color:"var(--cds-text-02)",padding:"0.25rem 0"}},"... and ",p.successes.length-10," more"))),p.errors&&p.errors.length>0&&n().createElement("div",{className:e$},n().createElement("h5",{style:{color:"#da1e28"}},"Errors:"),n().createElement("div",{className:eP},p.errors.map((e,t)=>n().createElement("div",{key:t,className:`${eU} -esm-report-builder__import-export-styles__errorItem___Lz9pL`},n().createElement(o.vwO,{type:"red"},e.type),n().createElement("span",null,e.filename),e.error&&n().createElement("span",{className:"-esm-report-builder__import-export-styles__errorMessage___2vi9t"},": ",e.error))))))))},dp=e=>t=>e(t).then(e=>e.length),d_=[{key:"ageCategories",label:"Age Categories",kind:"metadata",Icon:s.YJ,count:dp(rM),path:"/admin/age-categories"},{key:"ageGroups",label:"Age Groups",kind:"metadata",Icon:P.Gp,count:e=>rM(e).then(e=>e.reduce((e,t)=>e+(t.ageGroups?.length??0),0)),path:"/admin/age-groups"},{key:"categories",label:"Categories",kind:"metadata",Icon:m.vd,count:dp(e=>en(void 0,e)),path:"/admin/report-categories"},{key:"dashboards",label:"Dashboards",kind:"metadata",Icon:_._C,count:dp(e=>oy(void 0,e)),path:"/admin/dashboards"},{key:"etlMonitors",label:"ETL Monitors",kind:"metadata",Icon:g.wB,count:dp(e=>lO(void 0,e)),path:"/admin/etl-monitors"},{key:"etlSources",label:"ETL Sources",kind:"metadata",Icon:c.EN,count:dp(e=>lg(void 0,e)),path:"/admin/etl-sources"},{key:"indicators",label:"Indicators",kind:"metadata",Icon:b.j0,count:dp(e=>r_(void 0,e)),path:"/indicators"},{key:"library",label:"Library",kind:"metadata",Icon:E.E3,count:dp(e=>ll(void 0,e)),path:"/admin/report-library"},{key:"sections",label:"Sections",kind:"metadata",Icon:p.B8,count:dp(e=>tp(void 0,e)),path:"/sections"},{key:"themes",label:"Themes",kind:"metadata",Icon:c.rE,count:dp(e=>tx(void 0,e)),path:"/admin/themes"},{key:"aggregateReports",label:"Aggregate Reports",kind:"reports",Icon:es.yo,count:dp(e=>X(void 0,e)),path:"/reports"},{key:"linelistReports",label:"Line-list Reports",kind:"reports",Icon:es.yo,count:dp(e=>(0,si.CB)(void 0,e)),path:"/linelist"}],dg=[{key:"name",header:"Configuration"},{key:"version",header:"Version"},{key:"size",header:"Size"},{key:"createdDate",header:"Created"},{key:"status",header:"Status"},{key:"actions",header:"Action"}],dE=()=>{let{has:e}=v(),t=e(y.RB.PACKAGE_IMPORT),r=e(y.RB.PACKAGE_EXPORT),a=(0,i.Zp)(),[l,s]=n().useState(!1),[c,m]=n().useState(!1),[p,g]=n().useState(0),[E,f]=n().useState(()=>Object.fromEntries(d_.map(e=>[e.key,{count:null,status:"loading"}]))),[b,h]=n().useState(null),[S,T]=n().useState(!0),C=n().useRef(),w=n().useCallback(()=>{C.current?.abort();let e=new AbortController;C.current=e,f(Object.fromEntries(d_.map(e=>[e.key,{count:null,status:"loading"}]))),T(!0),Promise.all(d_.map(async t=>{try{let r=await t.count(e.signal);if(e.signal.aborted)return;f(e=>({...e,[t.key]:{count:r,status:r>0?"ready":"empty"}}))}catch(r){if(e.signal.aborted||r?.name==="AbortError")return;console.error(`Failed to scan artifacts for ${t.label}:`,r),f(e=>({...e,[t.key]:{count:null,status:"error"}}))}})).then(()=>{e.signal.aborted||(T(!1),h(new Date))})},[]);n().useEffect(()=>(w(),()=>C.current?.abort()),[w]);let[N,I]=n().useState(""),[k,A]=n().useState("all"),R=d_.filter(e=>{if("all"!==k&&e.kind!==k)return!1;let t=N.trim().toLowerCase();return!t||e.label.toLowerCase().includes(t)}),O=R.filter(e=>"metadata"===e.kind),D=R.filter(e=>"reports"===e.kind),x=d_.filter(e=>"metadata"===e.kind).length,L=d_.filter(e=>"reports"===e.kind).length,M=d_.reduce((e,t)=>E[t.key]?.status==="ready"?e+(E[t.key].count??0):e,0),[$,U]=n().useState([]),[B,F]=n().useState(!1),[z,q]=n().useState(null),[j,H]=n().useState(""),[J,V]=n().useState("all"),[W,K]=n().useState(0);n().useEffect(()=>{if(1!==p)return;let e=new AbortController;return(async()=>{F(!0),q(null);try{let t=await eu({q:j||void 0,status:"all"===J?void 0:J},e.signal);e.signal.aborted||U(t)}catch(t){if(e.signal.aborted)return;console.error("Failed to load packages:",t),q(t.message||"Failed to load packages")}finally{e.signal.aborted||F(!1)}})(),()=>e.abort()},[p,j,J,W]);let Q=n().useRef(),Y=e=>e&&"loading"!==e.status?"error"===e.status?n().createElement("span",{className:`${e5} -esm-report-builder__import-export-styles__statusError___ZG0SH`},n().createElement("span",{className:e6}),"Error"):"empty"===e.status?n().createElement("span",{className:`${e5} -esm-report-builder__import-export-styles__statusEmpty___xsDc4`},n().createElement("span",{className:e6}),"Empty"):n().createElement("span",{className:`${e5} -esm-report-builder__import-export-styles__statusReady___s+K6Q`},n().createElement("span",{className:e6}),"Ready"):null;return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Report Builder Import / Export",subtitle:"Initialize Report Builder from backend-configured artifacts or extract the current reporting configuration."}),(t||r)&&n().createElement("div",{className:"-esm-report-builder__import-export-styles__actionCards___IPpuB"},t&&n().createElement("div",{className:eq},n().createElement("div",{className:ej},n().createElement(es.f5,{size:26})),n().createElement("div",{className:eH},n().createElement("h3",{className:eJ},"Initialize from Artifacts"),n().createElement("p",{className:eG},"Loads Report Builder configuration from artifacts available on the server.")),n().createElement(o.$nd,{className:eV,onClick:()=>m(!0)},"Initialize")),r&&n().createElement("div",{className:eq},n().createElement("div",{className:ej},n().createElement(P._O,{size:26})),n().createElement("div",{className:eH},n().createElement("h3",{className:eJ},"Extract Artifacts"),n().createElement("p",{className:eG},"Exports the current Report Builder configuration to the configured artifacts location.")),n().createElement(o.$nd,{className:eV,onClick:()=>s(!0)},"Extract"))),n().createElement("div",{className:"-esm-report-builder__import-export-styles__infoBanner___ZQOU9"},n().createElement(tN.$$,{size:16,className:"-esm-report-builder__import-export-styles__infoBannerIcon___tOaQX"}),n().createElement("span",null,"Artifact storage is configured by the system administrator. No file or folder selection is required.")),n().createElement(o.tUM,{selectedIndex:p,onChange:e=>g(e.selectedIndex??0)},n().createElement(o.wbY,{"aria-label":"Import / Export sections"},n().createElement(o.ozo,null,"Available Artifacts"),n().createElement(o.ozo,null,"Current Configuration"),n().createElement(o.ozo,null,"History")),n().createElement(o.T2N,null,n().createElement(o.KpK,null,n().createElement("div",{className:"-esm-report-builder__import-export-styles__artifactsLayout___yAV3n"},n().createElement("div",{className:eQ},n().createElement("div",{className:"-esm-report-builder__import-export-styles__toolbar___YWIMb"},n().createElement(o.vji,{size:"md",labelText:"Search artifacts",placeholder:"Search artifacts...",className:eW,onChange:e=>I(e.target.value)}),n().createElement("div",{className:"-esm-report-builder__import-export-styles__toolbarActions___OtEa1"},n().createElement("select",{className:eB,value:k,onChange:e=>A(e.target.value),"aria-label":"Filter by type"},n().createElement("option",{value:"all"},"Type: All"),n().createElement("option",{value:"metadata"},"Type: Metadata"),n().createElement("option",{value:"reports"},"Type: Reports")),n().createElement(o.$nd,{kind:"ghost",className:eK,renderIcon:u.wM,onClick:w,disabled:S},"Refresh"),t&&n().createElement(o.$nd,{kind:"ghost",className:"-esm-report-builder__import-export-styles__initAllButton___M-DQI",renderIcon:d.jG,onClick:()=>m(!0)},"Initialize All"))),O.length>0&&n().createElement("div",{className:eY},n().createElement("h4",{className:eX},"Metadata"),n().createElement("p",{className:eZ},"Available metadata artifact groups"),n().createElement("div",{className:"-esm-report-builder__import-export-styles__groupGrid___s8ESa"},O.map(e=>{let t=E[e.key];return n().createElement("button",{key:e.key,type:"button",className:"-esm-report-builder__import-export-styles__groupCard___+tSQc",onClick:()=>a(e.path),title:`View ${e.label}`},n().createElement("span",{className:e0},n().createElement(e.Icon,{size:18})),n().createElement("span",{className:e1},n().createElement("span",{className:"-esm-report-builder__import-export-styles__groupCardName___25YoJ"},e.label),n().createElement("span",{className:e2},t?.status==="loading"?"Scanning…":`${t?.count??0} artifacts`),Y(t)))}))),D.length>0&&n().createElement("div",{className:eY},n().createElement("h4",{className:eX},"Reports"),n().createElement("p",{className:eZ},"Available report artifacts"),n().createElement("div",{className:"-esm-report-builder__import-export-styles__reportGrid___0xUPd"},D.map(e=>{let t=E[e.key];return n().createElement("div",{key:e.key,className:"-esm-report-builder__import-export-styles__reportCard___ShS3m"},n().createElement("span",{className:e0},n().createElement(e.Icon,{size:20})),n().createElement("span",{className:e1},n().createElement("span",{className:"-esm-report-builder__import-export-styles__reportCardName___+vL59"},e.label),n().createElement("span",{className:e2},t?.status==="loading"?"Scanning…":`${t?.count??0} artifacts`),Y(t)),n().createElement(o.$nd,{kind:"ghost",size:"sm",className:eK,onClick:()=>a(e.path)},"View"))}))),0===O.length&&0===D.length&&n().createElement("div",{className:ep},n().createElement("p",null,"No artifacts match your search."))),n().createElement("div",{className:"-esm-report-builder__import-export-styles__summaryCard___kDHtg"},n().createElement("div",{className:"-esm-report-builder__import-export-styles__summaryHeader___8ZbwL"},n().createElement("span",{className:"-esm-report-builder__import-export-styles__summaryHeaderIcon___Pu7b5"},n().createElement(_._C,{size:14})),n().createElement("span",null,"Artifact Summary")),n().createElement("div",{className:e3},n().createElement("span",null,"Metadata groups"),n().createElement("span",{className:e4},x)),n().createElement("div",{className:e3},n().createElement("span",null,"Report types"),n().createElement("span",{className:e4},L)),n().createElement("div",{className:e3},n().createElement("span",null,"Ready artifacts"),n().createElement("span",{className:e4},S?"—":M)),n().createElement("div",{className:e3},n().createElement("span",null,"Last scanned"),n().createElement("span",{className:"-esm-report-builder__import-export-styles__summaryRowTime___VXhcr"},(e=>{if(!e)return"—";let t=e.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!1});return e.toDateString()===new Date().toDateString()?`Today, ${t}`:`${e.toLocaleDateString("en-US",{month:"short",day:"numeric"})}, ${t}`})(b))),n().createElement("hr",{className:"-esm-report-builder__import-export-styles__summaryDivider___ahqSv"}),n().createElement("div",{className:"-esm-report-builder__import-export-styles__aboutTitle___Zifhh"},n().createElement(tN.$$,{size:14}),n().createElement("span",null,"About")),n().createElement("p",{className:"-esm-report-builder__import-export-styles__aboutText___zNqv3"},"Initialize Report Builder from backend-configured artifacts or extract the current reporting configuration.")))),n().createElement(o.KpK,null,n().createElement("div",{className:eQ},n().createElement("div",{className:"-esm-report-builder__import-export-styles__packagesToolbar___Czdtc"},n().createElement(o.vji,{size:"md",labelText:"Search configurations",placeholder:"Search configurations…",className:eW,onChange:e=>{clearTimeout(Q.current),Q.current=setTimeout(()=>H(e.target.value),300)}}),n().createElement("select",{className:eB,value:J,onChange:e=>V(e.target.value),"aria-label":"Filter by status"},n().createElement("option",{value:"all"},"Status: All"),n().createElement("option",{value:"valid"},"Valid"),n().createElement("option",{value:"invalid"},"Invalid"))),B?n().createElement("div",{className:"-esm-report-builder__import-export-styles__packagesMessage___QVciE"},"Loading…"):null,!B&&z?n().createElement("div",{className:"-esm-report-builder__import-export-styles__packagesError___Wa69-"},z):null,!B&&$.length>0&&n().createElement(o.bQt,{rows:$.map(e=>{var t,r;return{id:e.path||e.name,name:e.name,version:e.version,size:(t=e.size)?t<1048576?(t/1024).toFixed(1)+" KB":(t/1048576).toFixed(1)+" MB":"-",createdDate:(r=e.exportedAt||"")?new Date(r).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}):"-",status:"valid"===e.status?"Valid":"Invalid",action:"Import"}}),headers:dg},({rows:e,headers:r,getHeaderProps:a,getTableProps:l})=>n().createElement(o.K3K,null,n().createElement(o.XIK,l(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,r.map((e,t)=>n().createElement(o.A0N,{key:t,...a({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>{let a=$.find(t=>(t.path||t.name)===e.id);return n().createElement(o.Hjg,{key:e.id},e.cells.map((e,l)=>"status"===r[l].key&&a?n().createElement(o.nA6,{key:e.id},n().createElement(o.vwO,{type:"valid"===a.status?"green":"red"},e.value)):"action"===r[l].key&&a?n().createElement(o.nA6,{key:e.id},t&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>{m(!0)},disabled:"valid"!==a.status},"Import")):n().createElement(o.nA6,{key:e.id},e.value)))}))))),!B&&0===$.length&&n().createElement("div",{className:ep},n().createElement("p",{className:e8},"No configuration artifacts are available."),n().createElement("p",{className:e_},"Extract artifacts to backup or distribute reporting configuration."),r&&n().createElement(o.$nd,{kind:"primary",className:eV,renderIcon:es.f5,onClick:()=>s(!0)},"Extract Artifacts")))),n().createElement(o.KpK,null,n().createElement("div",{className:eQ},n().createElement("div",{className:ep},n().createElement("p",{className:e8},"No history recorded yet."),n().createElement("p",{className:e_},"Import and export operations will appear here after they are performed.")))))),n().createElement(e9,{isOpen:l,onClose:()=>s(!1),onSuccess:()=>{w(),K(e=>e+1)}}),n().createElement(du,{isOpen:c,onClose:()=>m(!1),onSuccess:()=>{w(),K(e=>e+1)}}))},df=({requiredPrivileges:e})=>{let{t}=(0,A.useTranslation)(),r=(0,i.Zp)(),{has:a}=v(),l=e??[];return n().createElement("div",{className:"-esm-report-builder__access-denied-page__container___fZWeZ"},n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:t("accessDenied","Access denied"),subtitle:t("accessDeniedSubtitle","Your account does not have permission to open this page."),hideCloseButton:!0}),l.length>0&&n().createElement("div",{className:"-esm-report-builder__access-denied-page__section___w2vgM"},n().createElement("p",{className:"-esm-report-builder__access-denied-page__label___STHy+"},t("requiredPrivileges","Required privilege(s):")),n().createElement("div",{className:"-esm-report-builder__access-denied-page__tags___bJY2x"},l.map(e=>n().createElement(o.vwO,{key:e,type:"red"},(0,y.XT)(e)))),n().createElement("p",{className:"-esm-report-builder__access-denied-page__hint___YbFnL"},t("accessDeniedHint","Ask your administrator to grant you the report builder role carrying these privileges."))),n().createElement("div",{className:"-esm-report-builder__access-denied-page__actions___0cAkB"},a(y.RB.REPORT_VIEW)&&n().createElement(o.$nd,{kind:"primary",onClick:()=>r("/")},t("goToHome","Go to Home")),n().createElement(o.$nd,{kind:"secondary",onClick:()=>r(-1)},t("goBack","Go back"))))},db=({required:e,children:t})=>{let{has:r,isAuthenticated:l}=v();return((0,a.useEffect)(()=>{l||(0,aD.jL)()},[l]),l)?r(...e)?n().createElement(n().Fragment,null,t):n().createElement(df,{requiredPrivileges:e}):null},dy=(e,t)=>n().createElement(db,{required:y.bO[e]},t),dh=()=>n().createElement(i.BV,null,n().createElement(i.qh,{element:n().createElement(k,null)},n().createElement(i.qh,{path:"/",element:dy("/",n().createElement(V,null))}),n().createElement(i.qh,{path:"/reports",element:dy("/reports",n().createElement(te,null))}),n().createElement(i.qh,{path:"/new",element:dy("/new",n().createElement(tR,null))}),n().createElement(i.qh,{path:"/edit/:reportId",element:dy("/edit/:reportId",n().createElement(tR,null))}),n().createElement(i.qh,{path:"/indicators",element:dy("/indicators",n().createElement(ah,null))}),n().createElement(i.qh,{path:"/sections",element:dy("/sections",n().createElement(aB,null))}),n().createElement(i.qh,{path:"/run",element:dy("/run",n().createElement(nI,null))}),n().createElement(i.qh,{path:"/run-reports",element:dy("/run-reports",n().createElement(nI,null))}),n().createElement(i.qh,{path:"/admin",element:dy("/admin",n().createElement(n8,null))}),n().createElement(i.qh,{path:"/admin/report-categories",element:dy("/admin/report-categories",n().createElement(le,null))}),n().createElement(i.qh,{path:"/admin/age-categories",element:dy("/admin/age-categories",n().createElement(lt,null))}),n().createElement(i.qh,{path:"/admin/age-groups",element:dy("/admin/age-groups",n().createElement(la,null))}),n().createElement(i.qh,{path:"/admin/report-library",element:dy("/admin/report-library",n().createElement(lp,null))}),n().createElement(i.qh,{path:"/admin/etl-sources",element:dy("/admin/etl-sources",n().createElement(lv,null))}),n().createElement(i.qh,{path:"/admin/etl-tasks",element:dy("/admin/etl-tasks",n().createElement(is,null))}),n().createElement(i.qh,{path:"/admin/etl-monitors",element:dy("/admin/etl-monitors",n().createElement(of,null))}),n().createElement(i.qh,{path:"/admin/etl-monitors/builder",element:dy("/admin/etl-monitors/builder",n().createElement(os,null))}),n().createElement(i.qh,{path:"/admin/etl-browser",element:dy("/admin/etl-browser",n().createElement(iI,null))}),n().createElement(i.qh,{path:"/admin/dashboards",element:dy("/admin/dashboards",n().createElement(sl,null))}),n().createElement(i.qh,{path:"/dashboards",element:dy("/dashboards",n().createElement(oG,null))}),n().createElement(i.qh,{path:"/dashboards/:code",element:dy("/dashboards/:code",n().createElement(oH,null))}),n().createElement(i.qh,{path:"/etl-dashboard",element:dy("/etl-dashboard",n().createElement(oW,null))}),n().createElement(i.qh,{path:"/admin/themes",element:dy("/admin/themes",n().createElement(n3,null))}),n().createElement(i.qh,{path:"/linelist",element:dy("/linelist",n().createElement(so,null))}),n().createElement(i.qh,{path:"/linelist/new",element:dy("/linelist/new",n().createElement(di,null))}),n().createElement(i.qh,{path:"/linelist/edit/:reportId",element:dy("/linelist/edit/:reportId",n().createElement(di,null))}),n().createElement(i.qh,{path:"/linelist/run/:reportId",element:dy("/linelist/run/:reportId",n().createElement(dd,null))}),n().createElement(i.qh,{path:"/import-export",element:dy("/import-export",n().createElement(dE,null))}),n().createElement(i.qh,{path:"/themes",element:n().createElement(i.C5,{to:"/admin/themes",replace:!0})}),n().createElement(i.qh,{path:"*",element:n().createElement(i.C5,{to:"/",replace:!0})}))),dv=()=>n().createElement(l.Kd,{basename:`${window.spaBase}/report-builder`},n().createElement(i.BV,null,n().createElement(i.qh,{path:"/*",element:n().createElement(dh,null)}),n().createElement(i.qh,{path:"*",element:n().createElement(i.C5,{to:"/",replace:!0})})))},3155(e,t,r){function a(e){let t={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"}};return t[e]||t.SUMMARY_CARD}function n(e){let t={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}};return t[e]||t.SUMMARY_CARD}r.d(t,{Qc:()=>a,kK:()=>n})},1672(e,t,r){r.d(t,{_R:()=>i,jL:()=>d,jX:()=>o});var a=r(5022);let n=RegExp(`${a.Ue}[a-z.]+`,"g");class l extends Error{status;requiredPrivileges;serverMessage;isAuthError;response;constructor(e){super(e.message),this.name="PrivilegeError",this.status=e.status,this.requiredPrivileges=e.requiredPrivileges,this.serverMessage=e.serverMessage,this.isAuthError=e.isAuthError??!1,this.response=e.response}}function i(e,t="Request failed"){let r;if(e?.name==="AbortError"||e?.code==="ERR_CANCELED"||e instanceof l)return e;let o=e?.response?.status,s="string"==typeof(r=e?.response?.data)?r:r?.error?.message??r?.message??e?.message??"";if(401===o)return d(),new l({status:401,isAuthError:!0,serverMessage:s,response:e?.response,message:"Your session has expired. Please sign in again."});if(403===o){let t=s.match(n)??[];if(t.length>0){let r=[...new Set(t)],n=r.map(e=>e.replace(a.Ue,"")).join(", ");return new l({status:403,requiredPrivileges:r,serverMessage:s,response:e?.response,message:`You do not have permission to perform this action. Required privilege: ${n}.`})}return new l({status:403,serverMessage:s,response:e?.response,message:s||"You do not have permission to perform this action."})}let c=Error(s||t);return c.status=o,c.response=e?.response,c}async function o(e){try{return await e}catch(e){throw i(e)}}let s=!1;function d(){if("u"<typeof window||s)return;let{pathname:e,search:t}=window.location;if(e.includes("/login"))return;s=!0;let r="function"==typeof window.getOpenmrsSpaBase?window.getOpenmrsSpaBase():`${window.spaBase}/`;window.location.href=`${r}login?returnTo=${encodeURIComponent(`${e}${t}`)}`}},4676(e,t,r){function a(e){if("number"!=typeof e)return String(e);let t=Math.floor(e/1e3),r=Math.floor(t/60),a=Math.floor(r/60),n=Math.floor(a/24);return n>0?`${n}d ${a%24}h`:a>0?`${a}h ${r%60}m`:r>0?`${r}m ${t%60}s`:`${t}s`}function n(e,t){let r,a;if(null==e||""===e)return"—";let n=new Date(e);if(isNaN(n.getTime()))return String(e);let l=n.getTime()-Date.now(),i=Math.abs(l);if(i<6e4)return l<0||t?.pastOnly?"just now":"in less than a minute";i<36e5?(r=Math.floor(i/6e4),a="minute"):i<864e5?(r=Math.floor(i/36e5),a="hour"):(r=Math.floor(i/864e5),a="day");let o=1===r?a:`${a}s`;return l>=0?`in ${r} ${o}`:`${r} ${o} ago`}r.d(t,{a3:()=>a,fw:()=>n})},300(e,t,r){r.d(t,{j:()=>a});function a(e){let t;if(!e||"string"!=typeof e)return e??"";if(!/[&]/.test(e))return e;let r=e;do t=r.length,r=r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(///g,"/").replace(/`/g,"`").replace(/=/g,"=");while(r.length!==t&&/[&]/.test(r));return r}}}]);
|