@openmrs/esm-report-builder 0.1.1-pre.177 → 0.1.1-pre.179
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 +11 -11
- package/dist/3378.js +1 -1
- package/dist/openmrs-esm-report-builder.js +2 -2
- package/dist/openmrs-esm-report-builder.js.map +1 -1
- package/dist/routes.json +1 -1
- package/package.json +2 -2
package/dist/128.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
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(116),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(116),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(116),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(8888),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(116),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(8888);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}
|
|
5
5
|
|
|
6
6
|
Use context: ${r?"Yes":"No"}
|
|
7
|
-
Context snapshot: ${r?JSON.stringify(t??{},null,2):"{}"}`,rawPrompt:e,usedContext:r}}function H({open:e,onClose:t,context:r}){let{t:l}=(0,A.useTranslation)(),[i,s]=(0,a.useState)(""),[d,c]=(0,a.useState)(!0),[m,u]=(0,a.useState)(!1),[p,_]=(0,a.useState)(null),g=!!i.trim()&&!m,E=async()=>{u(!0),_(null);try{let e=await j(i.trim(),r,d);_(e.body)}finally{u(!1)}};return n().createElement(o.aFV,{open:e,modalHeading:l("aiAssistPreview","AI Assist (Preview)"),primaryButtonText:m?l("generating","Generating…"):l("generate","Generate"),secondaryButtonText:l("close","Close"),primaryButtonDisabled:!g,onRequestClose:()=>{t()},onRequestSubmit:E},n().createElement("div",{style:{display:"grid",gap:"1rem"}},n().createElement(o.fs1,{labelText:l("aiPromptLabel","What do you want to build?"),helperText:l("aiPromptHelp","Example: 'Create an indicator for Malaria tested (RDT) grouped by facility and month.'"),value:i,onChange:e=>s(e.target.value),rows:5}),n().createElement(o.Sc0,{id:"aiUseContext",labelText:l("aiUseContext","Use current page context (filters, selections)"),checked:d,onChange:(e,{checked:t})=>c(t)}),m?n().createElement(o.OuH,{description:l("aiWorking","Generating suggestion…")}):null,p?n().createElement(o.z7k,{type:"multi",wrapText:!0},p):null))}function J({context:e,size:t="md",kind:r="secondary"}){let{t:l}=(0,A.useTranslation)(),[i,s]=(0,a.useState)(!1);return n().createElement(n().Fragment,null,n().createElement(o.$nd,{kind:r,size:t,onClick:()=>s(!0)},l("aiAssist","AI Assist")),n().createElement(H,{open:i,onClose:()=>s(!1),context:e}))}let G=({title:e,subtitle:t,status:r,actions:a,showAiAssist:l=!0})=>{let{t:i}=(0,A.useTranslation)(),o=(0,h.useSession)(),s=o?.sessionLocation?.display,d=r?.label;return n().createElement("div",{className:"-esm-report-builder__header__header___47xBe"},n().createElement("div",{className:"-esm-report-builder__header__left___MTnNb"},n().createElement("div",{className:"-esm-report-builder__header__illustrationWrap___wLvnU"},n().createElement(B,null)),n().createElement("div",{className:"-esm-report-builder__header__pageLabels___jGqXU"},n().createElement("div",{className:"-esm-report-builder__header__appName___vo79+"},i("reportBuilder","Report builder")),n().createElement("h1",{className:"-esm-report-builder__header__pageTitle___yen64"},e),(d||t)&&n().createElement("div",{className:"-esm-report-builder__header__metaLine___8udok"},d?n().createElement("span",{className:F},d):null,d&&t?n().createElement("span",{className:z},"•"):null,t?n().createElement("span",{className:F},t):null))),n().createElement("div",{className:"-esm-report-builder__header__right___ktlk0"},n().createElement("div",{className:"-esm-report-builder__header__rightTop___dHkjX"},n().createElement("div",{className:"-esm-report-builder__header__userRow___0NO8e"},n().createElement("span",{className:"-esm-report-builder__header__userName___5pWCK"},o?.user?.person?.display),n().createElement(P.rs,{size:18,className:"-esm-report-builder__header__userIcon___6zIIb"})),n().createElement("div",{className:"-esm-report-builder__header__contextRow___Gdfx6"},n().createElement(p.aZ,{size:16}),n().createElement("span",{className:q},s),n().createElement("span",{className:z},"•"),n().createElement(_.Vv,{size:16}),n().createElement("span",{className:q},(0,h.formatDate)(new Date,{mode:"standard"})),n().createElement(U.yQ,{size:16,className:"-esm-report-builder__header__chevron___gRrx2"}))),l||a?n().createElement("div",{className:"-esm-report-builder__header__actions___PN6-D"},l?n().createElement(J,{context:{page:e}}):null,a):null))},V=()=>{let{t:e}=(0,A.useTranslation)(),t=(0,i.Zp)(),{has:r}=v(),a=r(y.RB.REPORT_ADD),l=r(y.RB.INDICATOR_VIEW),s=r(y.RB.SECTION_VIEW),c=r(y.RB.REPORT_RUN),g=r(y.RB.REPORT_VIEW);return n().createElement("div",{className:"-esm-report-builder__report-builder-landing-page__page___gK8K9"},n().createElement(G,{title:e("welcomeReporting","Welcome Report Builder"),subtitle:e("welcomeReportingHint","Manage health data reports, define indicators, and run reports with ease.")}),n().createElement("div",{className:"-esm-report-builder__report-builder-landing-page__cardsGrid___jgHPO"},!a&&!l&&!s&&!c&&!g&&n().createElement(o.jeF,{lowContrast:!0,kind:"info",title:e("noAccessTitle","No access"),subtitle:e("noAccessSubtitle","You do not have access to any Report Builder features. Contact your administrator."),hideCloseButton:!0}),a&&n().createElement(o.FAs,{className:R},n().createElement("div",{className:O,"aria-hidden":!0},n().createElement("div",{className:D},n().createElement(u.pl,{size:56}))),n().createElement("h3",{className:x},e("createReports","Create Reports")),n().createElement("p",{className:L},e("createReportsHint","Define and configure health data reports tailored to your needs.")),n().createElement("div",{className:M},n().createElement(o.$nd,{kind:"primary",size:"lg",renderIcon:b.OM,className:$,onClick:()=>t("/new")},e("getStarted","Get started")))),l&&n().createElement(o.FAs,{className:R},n().createElement("div",{className:O,"aria-hidden":!0},n().createElement("div",{className:D},n().createElement(_.n5,{size:56}))),n().createElement("h3",{className:x},e("manageIndicators","Manage Indicators")),n().createElement("p",{className:L},e("manageIndicatorsHint","Create, edit, and organize indicators to measure key health metrics.")),n().createElement("div",{className:M},n().createElement(o.$nd,{kind:"primary",size:"lg",renderIcon:_.n5,className:$,onClick:()=>t("/indicators")},e("viewIndicators","View indicators")))),s&&n().createElement(o.FAs,{className:R},n().createElement("div",{className:O,"aria-hidden":!0},n().createElement("div",{className:D},n().createElement(m.vd,{size:56}))),n().createElement("h3",{className:x},e("manageSections","Manage Sections")),n().createElement("p",{className:L},e("manageSectionsHint","Create and manage indicator sections for organized report disaggregation.")),n().createElement("div",{className:M},n().createElement(o.$nd,{kind:"primary",size:"lg",renderIcon:m.vd,className:$,onClick:()=>t("/sections")},e("viewSections","View sections")))),c&&n().createElement(o.FAs,{className:R},n().createElement("div",{className:O,"aria-hidden":!0},n().createElement("div",{className:D},n().createElement(d.jG,{size:56}))),n().createElement("h3",{className:x},e("runReports","Run Reports")),n().createElement("p",{className:L},e("runReportsHint","Choose a report and run it for specific time periods and locations.")),n().createElement("div",{className:M},n().createElement(o.$nd,{kind:"primary",size:"lg",renderIcon:d.jG,className:$,onClick:()=>t("/run")},e("runNow","Run now")))),g&&n().createElement(o.FAs,{className:R},n().createElement("div",{className:O,"aria-hidden":!0},n().createElement("div",{className:D},n().createElement(p.B8,{size:56}))),n().createElement("h3",{className:x},e("linelistReports","Linelist Reports")),n().createElement("p",{className:L},e("linelistReportsHint","Create and manage patient list reports that return individual patient records.")),n().createElement("div",{className:M},n().createElement(o.$nd,{kind:"primary",size:"lg",renderIcon:p.B8,className:$,onClick:()=>t("/linelist")},e("viewLinelistReports","View linelist reports"))))))};var W=r(9669),K=r(300);let Q="/reportbuilder/report";function Y(e){return{...e,configJson:e.configJson?(0,K.j)(e.configJson):e.configJson,metaJson:e.metaJson?(0,K.j)(e.metaJson):e.metaJson}}async function X(e,t){var r;let a=e?.q?.trim(),n=e?.includeRetired===!0,l=e?.v??"default",i=new URLSearchParams;return i.set("v",l),a&&i.set("q",a),n&&i.set("includeRetired","true"),(!(r=await (0,W.wO)(`${Q}?${i.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid).filter(e=>{if("LINE_LIST"===e?.reportType)return!1;if(e.configJson)try{let t=JSON.parse(e.configJson);if(t?.type==="LINE_LIST")return!1}catch(e){}return!0}).map(Y)}async function Z(e,t,r="full"){return Y(await (0,W.wO)(`${Q}/${encodeURIComponent(e)}?v=${r}`,t))}async function ee(e,t){return Y(await (0,W.oV)(Q,e,t))}async function et(e,t,r){return Y(await (0,W.oV)(`${Q}/${encodeURIComponent(e)}`,t,r))}async function er(e,t,r){let a={reportUuid:e,category:t};return console.log("compileReport sending:",a),(0,W.oV)("/reportbuilder/reportcompile",a,r)}let ea="/reportbuilder/reportcategory";async function en(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)(`${ea}?${a.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid)}async function el(e,t){return(0,W.oV)(ea,e,t)}async function ei(e,t,r){return(0,W.oV)(`${ea}/${encodeURIComponent(e)}`,t,r)}async function eo(e,t="Retired from Report Builder Admin",r){let a=new URLSearchParams;return a.set("reason",t),(0,W.hI)(`${ea}/${encodeURIComponent(e)}?${a.toString()}`,r)}var es=r(771),ed=r(1673);async function ec(e,t){let r=await (0,W.oV)("/reportbuilder/ship",e,t);return{success:r.success,message:r.message,...r.data,errorMessage:r.success?void 0:r.message}}async function em(e,t){return(0,W.oV)("/reportbuilder/import",e,t)}async function eu(e,t){let r=new URLSearchParams;e?.q&&r.set("q",e.q),e?.status&&r.set("status",e.status),e?.startIndex!==void 0&&r.set("startIndex",e.startIndex.toString()),e?.limit!==void 0&&r.set("limit",e.limit.toString());let a=r.toString(),n=`/ws/rest/v1/reportbuilder/packages${a?`?${a}`:""}`;return(await (0,W.wO)(n,t)).results||[]}let ep="-esm-report-builder__import-export-styles__emptyState___I96L9",e_="-esm-report-builder__import-export-styles__emptyHint___nT4Nr",eg="-esm-report-builder__import-export-styles__formContainer___b6zNk",eE="-esm-report-builder__import-export-styles__formField___cWw-u",ef="-esm-report-builder__import-export-styles__progressContainer___I4MAL",eb="-esm-report-builder__import-export-styles__progressInfo___AhnlR",ey="-esm-report-builder__import-export-styles__progressBar___ET2Qo",eh="-esm-report-builder__import-export-styles__progressSteps___RfjAg",ev="-esm-report-builder__import-export-styles__progressStep___Bg6v6",eS="-esm-report-builder__import-export-styles__stepIcon___hUtTq",eT="-esm-report-builder__import-export-styles__stepLabel___9VwAv",eC="-esm-report-builder__import-export-styles__inProgress___NX0BD",ew="-esm-report-builder__import-export-styles__complete___TvaI9",eN="-esm-report-builder__import-export-styles__error___g7O-s",eI="-esm-report-builder__import-export-styles__success___2MCl-",ek="-esm-report-builder__import-export-styles__successContainer___abKLg",eA="-esm-report-builder__import-export-styles__successHeader___ljzON",eR="-esm-report-builder__import-export-styles__successIcon___Dp-ag",eO="-esm-report-builder__import-export-styles__resultInfo___acAZG",eD="-esm-report-builder__import-export-styles__summary___a-yFg",ex="-esm-report-builder__import-export-styles__stat___rsf0k",eL="-esm-report-builder__import-export-styles__statValue___wRXMb",eM="-esm-report-builder__import-export-styles__statLabel___rGVrJ",e$="-esm-report-builder__import-export-styles__importDetails___AkCbp",eP="-esm-report-builder__import-export-styles__itemList___RaOtp",eU="-esm-report-builder__import-export-styles__item___6ILQN",eB="-esm-report-builder__import-export-styles__filterSelect___4Zu1k",eF="-esm-report-builder__import-export-styles__itemsGrid___QxpSg",ez="-esm-report-builder__import-export-styles__itemTag___kVfdA",eq="-esm-report-builder__import-export-styles__actionCard___QCV3Z",ej="-esm-report-builder__import-export-styles__actionCardIcon___cvjeD",eH="-esm-report-builder__import-export-styles__actionCardContent___7BUgV",eJ="-esm-report-builder__import-export-styles__actionCardTitle___Uesgq",eG="-esm-report-builder__import-export-styles__actionCardDescription___izRDq",eV="-esm-report-builder__import-export-styles__tealButton___8l3au",eW="-esm-report-builder__import-export-styles__toolbarSearch___OgxuZ",eK="-esm-report-builder__import-export-styles__outlineButton___SK3Jb",eQ="-esm-report-builder__import-export-styles__panelCard___BBHbg",eY="-esm-report-builder__import-export-styles__section___mgFgw",eX="-esm-report-builder__import-export-styles__sectionTitle___7YSPe",eZ="-esm-report-builder__import-export-styles__sectionSubtitle___mrK3D",e0="-esm-report-builder__import-export-styles__groupCardIcon___ySaVM",e1="-esm-report-builder__import-export-styles__groupCardText___oIP-c",e2="-esm-report-builder__import-export-styles__groupCardCount___l4w-e",e5="-esm-report-builder__import-export-styles__groupCardStatus___RfCQs",e6="-esm-report-builder__import-export-styles__statusDot___GAmQo",e3="-esm-report-builder__import-export-styles__summaryRow___doWxx",e4="-esm-report-builder__import-export-styles__summaryRowValue___9U6F3",e8="-esm-report-builder__import-export-styles__emptyTitle___dlsSR",e7=[{key:"validate",label:"Validating resources...",status:"pending"},{key:"collect",label:"Resolving dependencies...",status:"pending"},{key:"package",label:"Creating package...",status:"pending"},{key:"complete",label:"Complete!",status:"pending"}],e9=({isOpen:e,onClose:t,onSuccess:r})=>{let[a,l]=n().useState(!1),[i,s]=n().useState(0),[d,c]=n().useState(e7),[m,u]=n().useState(null),[p,_]=n().useState(null),g=n().useCallback(()=>{l(!1),s(0),c(e7),u(null),_(null)},[]);n().useEffect(()=>{e&&g()},[e,g]);let E=async()=>{l(!0),_(null);try{let e,t,a,n,l,i;for(let e=0;e<d.length-1;e++)await f(e,"in-progress"),await b(600),await f(e,"complete");let o={type:"artifacts",version:(t=(e=new Date).getFullYear(),a=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0"),l=String(e.getHours()).padStart(2,"0"),i=String(e.getMinutes()).padStart(2,"0"),`${t}.${a}.${n}-${l}${i}`)},s=await ec(o);await f(d.length-1,"complete"),u(s),s.success?r?.(s):_(s.errorMessage||"Export failed. Please try again.")}catch(e){_(e.message||"An unexpected error occurred during export."),c(e=>e.map((e,t)=>t===i?{...e,status:"error"}:e))}finally{l(!1)}},f=async(e,t)=>{e>=0&&e<d.length&&(s(e+1),c(r=>r.map((r,a)=>a===e?{...r,status:t}:r))),await b(100)},b=e=>new Promise(t=>setTimeout(t,e)),y=!a&&!m;return n().createElement(o.aFV,{open:e,onRequestClose:t,modalHeading:"Extract Report Builder Artifacts",modalLabel:"Report Builder",primaryButtonText:y?"Extract":m?.success?"Done":"Close",primaryButtonDisabled:y&&!1,onRequestSubmit:y?E:t,secondaryButtonText:y?"Cancel":void 0,size:"md"},n().createElement(o.cwr,null,!a&&!m&&n().createElement("div",{className:eg},n().createElement("div",{className:eE},n().createElement(o.jeF,{kind:"info",title:"Extract All Artifacts",subtitle:"This will export all Report Builder artifacts (categories, indicators, themes, sections, library, etc.) from the current instance.",hideCloseButton:!0,lowContrast:!0})),p&&n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:p,hideCloseButton:!0,lowContrast:!0})),a&&n().createElement("div",{className:ef},n().createElement("div",{className:eb},n().createElement("h4",null,"Extracting artifacts..."),n().createElement("p",null,"All Report Builder artifacts")),n().createElement(o.z21,{value:Math.round(i/d.length*100),label:d[i]?.label||"Initializing...",className:ey}),n().createElement("div",{className:eh},d.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))))),m&&m.success&&n().createElement("div",{className:ek},n().createElement("div",{className:eA},n().createElement(U.MG,{size:32,className:eR}),n().createElement("div",null,n().createElement("h4",null,"Artifacts extracted successfully"),n().createElement("p",{style:{margin:"0.25rem 0 0 0",fontSize:"0.875rem",color:"var(--cds-text-02)"}},"All Report Builder artifacts"),n().createElement("p",{style:{margin:"0",fontSize:"0.875rem",color:"var(--cds-text-02)"}},"Version ",m.version||"auto"))),m.dependencies&&n().createElement("div",{className:"-esm-report-builder__import-export-styles__dependencies___ZRWtu"},n().createElement("h5",null,"Included"),n().createElement("div",{className:"-esm-report-builder__import-export-styles__dependencyTags___FIjkm"},m.dependencies.categories&&m.dependencies.categories.length>0&&n().createElement(o.vwO,{type:"blue"},"Report Categories ",m.dependencies.categories.length),m.dependencies.indicators&&m.dependencies.indicators.length>0&&n().createElement(o.vwO,{type:"green"},"Indicators ",m.dependencies.indicators.length),m.dependencies.themes&&m.dependencies.themes.length>0&&n().createElement(o.vwO,{type:"purple"},"Data Themes ",m.dependencies.themes.length),m.dependencies.sections&&m.dependencies.sections.length>0&&n().createElement(o.vwO,{type:"warm-gray"},"Sections ",m.dependencies.sections.length),m.dependencies.library&&m.dependencies.library.length>0&&n().createElement(o.vwO,{type:"cyan"},"Report Library ",m.dependencies.library.length),m.dependencies.ageCategories&&m.dependencies.ageCategories.length>0&&n().createElement(o.vwO,{type:"cool-gray"},"Age Categories ",m.dependencies.ageCategories.length),m.dependencies.ageGroups&&m.dependencies.ageGroups.length>0&&n().createElement(o.vwO,{type:"cool-gray"},"Age Groups ",m.dependencies.ageGroups.length))),n().createElement("div",{className:eO},m.sourceFile&&n().createElement("div",{className:"-esm-report-builder__import-export-styles__infoRow___OMBSg"},n().createElement("span",{className:eD},"Package"),n().createElement("span",{style:{fontSize:"0.875rem",fontFamily:"monospace"}},m.sourceFile.split("/").pop()))))))},te=()=>{let{has:e}=v(),t=e(y.RB.REPORT_ADD,y.RB.REPORT_EDIT),{t:r}=(0,A.useTranslation)(),a=(0,i.Zp)(),[l,s]=n().useState(""),[c,m]=n().useState([]),[p,_]=n().useState(!0),[g,E]=n().useState(new Set),[f,h]=n().useState(!1),[S,T]=n().useState(0),[C,w]=n().useState([]),[N,I]=n().useState(!1),[k,R]=n().useState(!1),[O,D]=n().useState(""),[x,L]=n().useState(1),[M,$]=n().useState(10),[P,U]=n().useState([]),[B,F]=n().useState(!1);n().useEffect(()=>{let e=new AbortController;return(async()=>{try{let[t,r]=await Promise.all([X({v:"full",includeRetired:!1},e.signal),en(void 0,e.signal)]),a=t.map(e=>{let t=null;try{e.configJson&&(t=JSON.parse(e.configJson))}catch(e){console.warn("Failed to parse config:",e)}let r=e.category?.name;return{...e,parsedConfig:t,categoryName:r}});m(a),U(r)}catch(e){console.error("Failed to load reports:",e)}finally{_(!1)}})(),()=>e.abort()},[]);let z=n().useMemo(()=>{if(!l.trim())return c;let e=l.toLowerCase();return c.filter(t=>t.name?.toLowerCase().includes(e)||t.code?.toLowerCase().includes(e)||t.description?.toLowerCase().includes(e))},[l,c]),q=n().useMemo(()=>{let e=(x-1)*M;return z.slice(e,e+M)},[z,x,M]),j=n().useCallback(e=>{E(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),H=n().useCallback(()=>{g.size===q.length&&q.length>0?E(new Set):E(new Set(q.map(e=>e.uuid)))},[g.size,q]),J=n().useCallback(()=>{0!==g.size&&(R(!0),D(""))},[g.size]),V=n().useCallback(async()=>{if(!O||""===O.trim())return void alert("Please select a report category before compiling.");R(!1),h(!0),T(0),w([]),I(!1);let e=z.filter(e=>g.has(e.uuid)),t=[];for(let r=0;r<e.length;r++){let a=e[r];try{let e=await er(a.uuid,O);t.push({name:a.name,success:!!e.compiled,error:e.compiled?void 0:"Failed to compile"})}catch(e){t.push({name:a.name,success:!1,error:e instanceof Error?e.message:"Unknown error"})}T((r+1)/e.length*100)}w(t),I(!0),h(!1),E(new Set)},[g,z,O]),W=n().useCallback(()=>q.map(e=>({id:e.uuid,uuid:e.uuid,select:e.uuid,name:e.name,code:e.code||"-",category:e.categoryName||"-",theme:e.themeName||"-",status:e.retired?"Retired":"Draft",lastModified:"-",actions:e.uuid})),[q]),K=n().useCallback(e=>{a(`/new?duplicate=${e.uuid}`)},[a]),Q=n().useCallback(e=>{let t=new Blob([JSON.stringify({name:e.name,description:e.description,code:e.code,config:e.parsedConfig},null,2)],{type:"application/json"}),r=URL.createObjectURL(t),a=document.createElement("a");a.href=r,a.download=`${e.name?.replace(/[^a-z0-9]/gi,"_")||"report"}.json`,a.click(),URL.revokeObjectURL(r)},[]),Y=n().useCallback(()=>{F(!0)},[]),Z=n().useCallback(e=>{console.log("Export package successful:",e),F(!1)},[]);return n().createElement("div",null,n().createElement(G,{title:r("aggregateReports","Aggregate Reports"),subtitle:r("manageAggregateReports","Manage and create aggregate reports")}),n().createElement("div",{style:{marginBottom:"1rem",display:"flex",gap:"0.5rem"}},g.size>0&&n().createElement(o.$nd,{kind:"primary",size:"md",renderIcon:d.jG,onClick:J,disabled:f},"Compile Selected (",g.size,")")),f&&n().createElement("div",{style:{marginBottom:"1rem"}},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"0.5rem"}},n().createElement("span",null,"Compiling reports..."),n().createElement("span",null,Math.round(S),"%")),n().createElement(o.z21,{label:"",value:S})),N&&C.length>0&&n().createElement(n().Fragment,null,n().createElement(o.jeF,{kind:C.every(e=>e.success)?"success":C.some(e=>e.success)?"warning":"error",title:"Compile Results",subtitle:`${C.filter(e=>e.success).length} of ${C.length} reports compiled successfully`,onClose:()=>I(!1),style:{marginBottom:"1rem"}}),n().createElement("div",{style:{marginBottom:"1rem"}},C.map((e,t)=>n().createElement("div",{key:t,style:{padding:"0.5rem",borderBottom:"1px solid #e0e0e0"}},e.success?"✓":"✗"," ",e.name,e.error&&n().createElement("span",{style:{color:"#da1e28",marginLeft:"0.5rem"}}," - ",e.error))))),n().createElement("div",{style:{marginBottom:"1rem",display:"flex",gap:"0.5rem",alignItems:"center"}},n().createElement(o.vji,{labelText:"",placeholder:"Search reports",value:l,onChange:e=>{s(e.target.value),L(1)},style:{flexGrow:1}}),g.size>0&&n().createElement(o.$nd,{kind:"primary",size:"md",renderIcon:d.jG,onClick:J,disabled:f},"Compile Selected (",g.size,")"),t&&n().createElement(o.$nd,{kind:"ghost",size:"md",renderIcon:b.OM,onClick:()=>a("/new")},"Create Report"),n().createElement(o.$nd,{kind:"ghost",size:"md",renderIcon:u.wM,onClick:()=>window.location.reload(),hasIconOnly:!0,iconDescription:"Refresh"})),!p&&z.length>0?n().createElement(o.bQt,{rows:W(),headers:[{key:"select",header:"Select"},{key:"name",header:"Report"},{key:"code",header:"Code"},{key:"category",header:"Category"},{key:"reportType",header:"Type"},{key:"compileStatus",header:"Status"},{key:"lastCompiledAt",header:"Last compiled"},{key:"actions",header:"Actions"}]},({rows:e,headers:t,getHeaderProps:r,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,...r({header:e})},"select"===e.key?n().createElement(o.Sc0,{id:"select-all-reports",checked:g.size===q.length&&q.length>0,indeterminate:g.size>0&&g.size<q.length,onChange:H,labelText:""}):e.header)))),n().createElement(o.BFY,null,e.map(e=>{let t=q.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:g.has(e.id),onChange:()=>j(e.id),labelText:""})),n().createElement(o.nA6,{style:{cursor:"pointer"},onClick:()=>a(`/edit/${e.id}`)},t?.name),n().createElement(o.nA6,null,t?.code||"—"),n().createElement(o.nA6,null,t?.categoryName||"—"),n().createElement(o.nA6,null,t?.reportType||"—"),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:t?.compileStatus==="COMPILED"?"green":t?.compileStatus==="PENDING"?"cyan":"gray"},t?.compileStatus||"Unknown")),n().createElement(o.nA6,null,t?.lastCompiledAt?new Date(t.lastCompiledAt).toLocaleDateString():"—"),n().createElement(o.nA6,null,n().createElement(o.obU,{flipped:!0},n().createElement(o.XSD,{itemText:"Edit",onClick:()=>a(`/edit/${e.id}`)}),n().createElement(o.XSD,{itemText:"Duplicate",onClick:()=>t&&K(t)}),n().createElement(o.XSD,{itemText:"Export",onClick:()=>t&&Q(t)}),n().createElement(o.XSD,{itemText:"Export Package",onClick:Y,requireTitle:!0}))))}))))):null,p||0!==z.length?null:n().createElement("div",{style:{opacity:.7,marginTop:"1rem",textAlign:"center",padding:"2rem"}},l.trim()?r("noReportsFound","No reports match your search"):r("noReports","No reports found. Create your first report to get started.")),p&&n().createElement("div",{style:{textAlign:"center",padding:"2rem"}},"Loading reports..."),!p&&z.length>0&&n().createElement(o.dKS,{totalItems:z.length,pageSize:M,pageSizes:[10,25,50],page:x,onChange:({page:e,pageSize:t})=>{L(e),$(t)}}),k&&n().createElement(o.aFV,{open:k,modalHeading:"Compile Reports",modalLabel:"Select Report Category",onRequestClose:()=>R(!1),primaryButtonText:"Compile",primaryButtonDisabled:!O||""===O.trim(),onRequestSubmit:V,secondaryButtonText:"Cancel",danger:void 0},n().createElement(o.cwr,null,n().createElement("p",{style:{marginBottom:"1rem"}},"Select a report category to apply to all ",g.size," selected report(s) during compilation."),n().createElement(o.l6P,{id:"bulk-compile-category",labelText:"Report Category *",value:O,onChange:e=>D(e.target.value)},n().createElement(o.ebT,{value:"",text:"Select a category..."}),P.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.name}))))),n().createElement(e9,{isOpen:B,onClose:()=>{F(!1)},onSuccess:Z}))},tt="-esm-report-builder__report-builder__designWorkspace___EMin9",tr="-esm-report-builder__report-builder__workspaceTitle___eTTEy",ta="-esm-report-builder__report-builder__workspaceHint___ExWo8",tn=({value:e,onChange:t,onCancel:r,onSaveDraft:a,isSaving:l})=>{let{t:i}=(0,A.useTranslation)(),s=r=>t({...e,...r});return n().createElement("div",{className:tt},n().createElement("h3",{className:tr},i("reportDetails","Report Details")),n().createElement("p",{className:ta},i("reportDetailsHint","Provide minimum report information such as name and description.")),n().createElement("div",{className:"-esm-report-builder__report-builder__panel___9NT2h"},n().createElement(o.BJc,{gap:6,style:{marginTop:"0.75rem",maxWidth:"64rem"}},n().createElement(o.ksK,{id:"rb-report-name",labelText:n().createElement(n().Fragment,null,i("name","Name")," ",n().createElement("span",{style:{color:"var(--cds-support-error, #da1e28)"}},"*")),value:e.name,onChange:e=>s({name:e.target.value})}),n().createElement(o.fs1,{id:"rb-report-description",labelText:i("description","Description"),value:e.description,onChange:e=>s({description:e.target.value}),rows:4}),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr auto",gap:"0.5rem",alignItems:"end"}},n().createElement(o.ksK,{id:"rb-report-uuid",labelText:i("uuid","UUID"),value:e.uuid,readOnly:!0}),n().createElement(o.i8y,{iconDescription:i("copyUuid","Copy UUID"),feedback:i("copied","Copied"),feedbackTimeout:1500,onClick:()=>{e.uuid&&navigator.clipboard?.writeText(e.uuid)}}))),n().createElement("div",{style:{marginTop:"1.25rem",paddingTop:"1rem",borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)",display:"flex",justifyContent:"flex-end",gap:"0.75rem"}},n().createElement(o.$nd,{kind:"secondary",onClick:r},i("cancel","Cancel")),n().createElement(o.$nd,{kind:"primary",onClick:a,disabled:!e.name.trim()||l},i("saveDraft","Save Draft")))))},tl=({title:e,right:t,children:r,bottom:a,minHeight:l=560})=>n().createElement("div",{style:{background:"#fff",border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:12,overflow:"hidden",display:"flex",flexDirection:"column",minHeight:l}},n().createElement("div",{style:{padding:"0.9rem 1rem",borderBottom:"1px solid var(--cds-border-subtle, #e0e0e0)",display:"flex",alignItems:"center",justifyContent:"space-between",gap:"0.75rem"}},n().createElement("div",{style:{fontWeight:600}},e),t??null),n().createElement("div",{style:{padding:"1rem",display:"flex",flexDirection:"column",gap:"0.75rem",flex:1}},r),a?n().createElement("div",{style:{padding:"0.9rem 1rem",borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)",display:"flex",alignItems:"center",justifyContent:"space-between",gap:"0.75rem"}},a):null),ti=({reportSections:e,sectionLibrary:t,selectedSectionUuid:r,search:a,onSearchChange:l,onSelectSection:i,onMoveSection:s,onRemoveSection:d,onFocusAvailableSections:c})=>{let u=n().useMemo(()=>{let r=a.trim().toLowerCase(),n=[...e].sort((e,t)=>e.sortOrder-t.sortOrder);return r?n.filter(e=>{let a=t.find(t=>t.uuid===e.sectionUuid);return a&&(a.name.toLowerCase().includes(r)||(a.description??"").toLowerCase().includes(r)||(a.code??"").toLowerCase().includes(r))}):n},[e,t,a]);return n().createElement(tl,{title:"Report Structure",right:n().createElement(o.obU,{size:"sm","aria-label":"report structure actions"},n().createElement(o.XSD,{itemText:"Browse sections",onClick:c})),bottom:n().createElement(n().Fragment,null,n().createElement("span",null),n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:b.OM,onClick:c},"Add Section"))},n().createElement(o.vji,{size:"lg",labelText:"Search selected sections",placeholder:"Search selected sections",value:a,onChange:e=>l(e.target.value)}),n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:10,overflow:"hidden"}},0===u.length?n().createElement("div",{style:{padding:"0.9rem",opacity:.75}},"No sections selected yet."):u.map((e,a)=>{let l=t.find(t=>t.uuid===e.sectionUuid);return l?n().createElement("div",{key:e.sectionUuid,role:"button",tabIndex:0,onClick:()=>i(e.sectionUuid),onKeyDown:t=>"Enter"===t.key&&i(e.sectionUuid),style:{padding:"0.85rem 0.9rem",borderBottom:"1px solid var(--cds-border-subtle, #e0e0e0)",background:r===e.sectionUuid?"rgba(0,0,0,0.03)":"#fff",cursor:"pointer"}},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",gap:"0.75rem",alignItems:"flex-start"}},n().createElement("div",{style:{minWidth:0}},n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.6rem",minWidth:0}},n().createElement(m.vd,{size:16}),n().createElement("div",{style:{fontWeight:600,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},e.titleOverride?.trim()?e.titleOverride:l.name),e.enabled?null:n().createElement(o.vwO,{size:"sm",type:"red"},"Disabled")),n().createElement("div",{style:{display:"flex",gap:"0.4rem",marginTop:6,flexWrap:"wrap"}},n().createElement(o.vwO,{size:"sm",type:"gray"},l.indicatorCount," indicators"),l.disaggregationEnabled?n().createElement(o.vwO,{size:"sm",type:"blue"},l.ageCategoryCode??"Disaggregated"):n().createElement(o.vwO,{size:"sm",type:"warm-gray"},"No disaggregation")),l.description?n().createElement("div",{style:{marginTop:6,opacity:.8}},l.description):null),n().createElement("div",{style:{display:"flex",gap:"0.25rem"}},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Move up",renderIcon:E.Do,disabled:0===a,onClick:t=>{t.stopPropagation(),s(e.sectionUuid,-1)}}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Move down",renderIcon:E.yd,disabled:a===u.length-1,onClick:t=>{t.stopPropagation(),s(e.sectionUuid,1)}}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Remove",renderIcon:P.zH,onClick:t=>{t.stopPropagation(),d(e.sectionUuid)}})))):null})))},to=({availableSections:e,reportSections:t,selectedAvailableSectionUuid:r,search:a,onSearchChange:l,onSelectAvailableSection:i,onToggleSection:s})=>{let d=n().useMemo(()=>{let t=a.trim().toLowerCase();return t?e.filter(e=>e.name.toLowerCase().includes(t)||(e.description??"").toLowerCase().includes(t)||(e.code??"").toLowerCase().includes(t)):e},[e,a]);return n().createElement(tl,{title:"Available Sections",bottom:n().createElement(n().Fragment,null,n().createElement("span",{style:{opacity:.75}},"Select sections to include in this report."),n().createElement(o.$nd,{size:"sm",kind:"secondary",renderIcon:b.OM,disabled:!0},"Sections are added directly"))},n().createElement(o.vji,{size:"lg",labelText:"Search sections",placeholder:"Search sections",value:a,onChange:e=>l(e.target.value)}),n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:10,overflow:"hidden"}},0===d.length?n().createElement("div",{style:{padding:"0.9rem",opacity:.75}},"No sections found."):d.map(e=>{let a,l=(a=e.uuid,t.some(e=>e.sectionUuid===a));return n().createElement("div",{key:e.uuid,role:"button",tabIndex:0,onClick:()=>i(e.uuid),onKeyDown:t=>"Enter"===t.key&&i(e.uuid),style:{padding:"0.85rem 0.9rem",borderBottom:"1px solid var(--cds-border-subtle, #e0e0e0)",background:r===e.uuid?"rgba(0,0,0,0.03)":"#fff",cursor:"pointer"}},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",gap:"0.75rem",alignItems:"flex-start"}},n().createElement("div",{style:{display:"flex",alignItems:"flex-start",gap:"0.65rem",minWidth:0}},n().createElement(o.Sc0,{id:`available-section-${e.uuid}`,checked:l,labelText:"",onChange:(t,r)=>{let a="boolean"==typeof t?t:"boolean"==typeof r?.checked?r.checked:!!t?.target?.checked;s(e.uuid,a)}}),n().createElement("div",{style:{minWidth:0}},n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",minWidth:0}},n().createElement(m.vd,{size:16}),n().createElement("div",{style:{fontWeight:600,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},e.name)),e.description?n().createElement("div",{style:{marginTop:6,opacity:.8}},e.description):null,n().createElement("div",{style:{display:"flex",gap:"0.4rem",marginTop:6,flexWrap:"wrap"}},n().createElement(o.vwO,{size:"sm",type:"gray"},e.indicatorCount," indicators"),e.disaggregationEnabled?n().createElement(o.vwO,{size:"sm",type:"blue"},e.ageCategoryCode??"Disaggregated"):n().createElement(o.vwO,{size:"sm",type:"warm-gray"},"No disaggregation")))),e.code?n().createElement(o.vwO,{size:"sm",type:"cool-gray"},e.code):null))})))},ts=({draft:e,onDraftChange:t,selectedSectionRef:r,selectedSection:a,onUpdateSelectedSection:l})=>n().createElement(tl,{title:"Properties",right:n().createElement("button",{type:"button","aria-label":"close properties",style:{border:0,background:"transparent",cursor:"pointer"},onClick:()=>void 0},n().createElement(U.bm,{size:18})),bottom:n().createElement(n().Fragment,null,n().createElement(o.$nd,{size:"sm",kind:"secondary"},"Cancel"),n().createElement(o.$nd,{size:"sm",kind:"primary"},"Save Draft"))},n().createElement("div",{style:{fontSize:"1rem",fontWeight:600}},"Report Details"),n().createElement(o.ksK,{id:"report-definition-name",labelText:"Report Name",value:e.name,onChange:e=>t({name:e.target.value})}),n().createElement(o.ksK,{id:"report-definition-code",labelText:"Report Code",value:e.code,onChange:e=>t({code:e.target.value})}),n().createElement(o.fs1,{id:"report-definition-description",labelText:"Description",value:e.description,onChange:e=>t({description:e.target.value})}),n().createElement("div",{style:{borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)",marginTop:"0.5rem",paddingTop:"1rem"}},n().createElement("div",{style:{fontSize:"1rem",fontWeight:600,marginBottom:"0.75rem"}},"Selected Section"),r&&a?n().createElement(n().Fragment,null,n().createElement("div",{style:{fontWeight:600}},a.name),n().createElement("div",{style:{display:"flex",gap:"0.4rem",flexWrap:"wrap",marginTop:"0.5rem",marginBottom:"0.75rem"}},n().createElement(o.vwO,{size:"sm",type:"gray"},a.indicatorCount," indicators"),a.disaggregationEnabled?n().createElement(o.vwO,{size:"sm",type:"blue"},a.ageCategoryCode??"Disaggregated"):n().createElement(o.vwO,{size:"sm",type:"warm-gray"},"No disaggregation")),n().createElement(o.ksK,{id:"selected-section-title-override",labelText:"Title Override (optional)",value:r.titleOverride??"",onChange:e=>l({titleOverride:e.target.value})}),n().createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"0.75rem",marginTop:"0.5rem"}},n().createElement("div",{style:{fontWeight:600}},"Enabled in this report"),n().createElement(o.lMk,{id:"selected-section-enabled",labelText:"",toggled:r.enabled,onToggle:e=>l({enabled:e})})),a.description?n().createElement("div",{style:{marginTop:"0.75rem",opacity:.8}},a.description):null):n().createElement("div",{style:{opacity:.75}},"Select a section from the report structure to edit section-level properties.")));function td(e){let t=0,r=!1,a=null;try{let n=e.configJson?JSON.parse(e.configJson):null;t=Array.isArray(n?.indicators)?n.indicators.length:0,r=!!(n?.disaggregation&&n?.disaggregation?.none!==!0),a=n?.disaggregation?.ageCategoryCode??null}catch{t=0,r=!1,a=null}return{uuid:e.uuid,name:e.name,description:e.description,code:e.code,indicatorCount:t,disaggregationEnabled:r,ageCategoryCode:a,raw:e}}function tc(e){return[...e].sort((e,t)=>e.sortOrder-t.sortOrder)}let tm="/reportbuilder/section";function tu(e){return{...e,configJson:e.configJson?(0,K.j)(e.configJson):e.configJson,metaJson:e.metaJson?(0,K.j)(e.metaJson):e.metaJson}}async function tp(e,t){var r;let a=e?.q?.trim(),n=e?.includeRetired===!0,l=e?.v??"default",i=new URLSearchParams;return i.set("v",l),a&&i.set("q",a),n&&i.set("includeRetired","true"),(!(r=await (0,W.wO)(`${tm}?${i.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid).map(tu)}async function t_(e,t,r="full"){return tu(await (0,W.wO)(`${tm}/${encodeURIComponent(e)}?v=${r}`,t))}async function tg(e,t){return tu(await (0,W.oV)(tm,e,t))}async function tE(e,t,r){return tu(await (0,W.oV)(`${tm}/${encodeURIComponent(e)}`,t,r))}let tf=({value:e,onChange:t})=>{let{t:r}=(0,A.useTranslation)(),[a,l]=n().useState([]),[i,s]=n().useState(!1),[d,c]=n().useState(null),[m,u]=n().useState(""),[p,_]=n().useState(""),[g,E]=n().useState(null),[f,b]=n().useState(null);n().useEffect(()=>{let e=new AbortController;return s(!0),c(null),tp({v:"full",includeRetired:!1},e.signal).then(e=>l(e.filter(e=>!e.retired).map(td))).catch(e=>c(e?.message??"Failed to load sections")).finally(()=>s(!1)),()=>e.abort()},[]);let y=n().useCallback(r=>t({...e,...r}),[e,t]),h=n().useMemo(()=>e.sections.find(e=>e.sectionUuid===g)??null,[e.sections,g]),v=n().useMemo(()=>a.find(e=>e.uuid===g)??null,[a,g]),S=n().useCallback(r=>{if(e.sections.some(e=>e.sectionUuid===r))return void E(r);let a={sectionUuid:r,sortOrder:e.sections.length+1,enabled:!0,titleOverride:""};t({...e,sections:[...e.sections,a]}),E(r)},[e,t]),T=n().useCallback(r=>{let a=e.sections.filter(e=>e.sectionUuid!==r);t({...e,sections:a.map((e,t)=>({...e,sortOrder:t+1}))}),g===r&&E(null),f===r&&b(null)},[e,t,g,f]),C=n().useCallback((e,t)=>t?S(e):T(e),[S,T]),w=n().useCallback((r,a)=>{let n=tc(e.sections),l=n.findIndex(e=>e.sectionUuid===r);if(l<0)return;let i=l+a;if(i<0||i>=n.length)return;let o=n[l];n[l]=n[i],n[i]=o,t({...e,sections:n.map((e,t)=>({...e,sortOrder:t+1}))})},[e,t]),N=n().useCallback(r=>{g&&t({...e,sections:e.sections.map(e=>e.sectionUuid===g?{...e,...r}:e)})},[e,t,g]),I=n().useMemo(()=>tc(e.sections),[e.sections]);return n().createElement("div",{className:tt},n().createElement("div",{style:{marginBottom:"1rem"}},n().createElement("h3",{className:tr},r("buildReport","Build Report"),": ",e.name||"Untitled report"),n().createElement("p",{className:ta},r("draftHint","Draft • Define reports as collections of reusable sections"))),i?n().createElement(o.OuH,{description:"Loading sections…"}):null,d?n().createElement("div",{style:{marginBottom:"1rem"}},n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Sections",subtitle:d})):null,n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1.1fr 1.1fr 0.9fr",gap:"1rem"}},n().createElement(ti,{reportSections:I,sectionLibrary:a,selectedSectionUuid:g,search:m,onSearchChange:u,onSelectSection:E,onMoveSection:w,onRemoveSection:T,onFocusAvailableSections:()=>{a.length>0&&b(e=>e??a[0].uuid)}}),n().createElement(to,{availableSections:a,reportSections:I,selectedAvailableSectionUuid:f,search:p,onSearchChange:_,onSelectAvailableSection:b,onToggleSection:C}),n().createElement(ts,{draft:e,onDraftChange:y,selectedSectionRef:h,selectedSection:v,onUpdateSelectedSection:N})),n().createElement("div",{style:{marginTop:"1rem",padding:"0.9rem 1rem",background:"#fff",border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:12}},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Current Authoring Draft"),n().createElement("pre",{style:{margin:0,whiteSpace:"pre-wrap",wordBreak:"break-word",fontSize:"0.85rem"}},JSON.stringify(e,null,2))))};var tb=r(8495);function ty(){return{version:1,template:"section-tabular",arrayName:"results",defaultValue:0,dimensions:{},groups:[]}}function th(e){return+("section-label"!==e)}function tv(e,t){let r=th(t),a=Number.isNaN(Number(e))?r:Number(e??r);return Math.max(r,Math.min(10,a))}function tS(e){var t;let r;t=e,r=new Set;let a=[];return(e=t.filter(e=>!r.has(e.id)&&(r.add(e.id),!0))).map(e=>{let t={...e},r=t.indent??0;for(;a.length>0&&(a[a.length-1].indent??0)>=r;)a.pop();let n=a[a.length-1];return t.groupingParentId=n?n.id:void 0,"group-label"===t.type&&a.push(t),t})}function tT(e,t){let r=e[t].indent??0,a=t+1;for(;a<e.length&&(e[a].indent??0)>r;)a++;return a}function tC(e=[],t){return{version:1,template:"section-tabular",arrayName:t?.arrayName??"results",defaultValue:t?.defaultValue??0,dimensions:t?.dimensions??{},groups:e.map(e=>{let t=[{id:`${e.sectionUuid}__section_label`,type:"section-label",label:e.title,indent:0,span:"all",emphasis:"section",showTotal:!1,showDisaggregation:!1},...e.indicators.map(e=>({id:e.id,type:"indicator",code:e.code,label:`${e.code}. ${e.name}`,indent:1,keyPattern:"{code}_{age}_{sex}",dims:{},showTotal:!0,showDisaggregation:!0,span:"label-only",emphasis:"normal"}))];return{id:e.sectionUuid,title:e.title,rows:tS(t)}})}}let tw=({value:e,onChange:t,definitionDraft:r,sectionSources:a=[]})=>{let{t:l}=(0,A.useTranslation)(),[i,s]=n().useState(null),[d,m]=n().useState(null),[_,g]=n().useState(null),[f,y]=n().useState(null),[h,v]=n().useState("details"),S=n().useMemo(()=>e??ty(),[e]),T=n().useCallback(e=>{t?.(e)},[t]),C=n().useMemo(()=>S.groups??[],[S.groups]);n().useEffect(()=>{!i&&C.length>0&&s(C[0].id)},[C,i]);let w=n().useMemo(()=>C.flatMap(e=>e.rows).find(e=>e.id===d)??null,[C,d]),N=n().useCallback(e=>{T({...S,groups:e.map(e=>({...e,rows:tS(e.rows)}))})},[S,T]),I=n().useCallback((e,t,r)=>{N(C.map(a=>{if(a.id!==e)return a;let n=a.rows.map(e=>{if(e.id!==t)return e;let a={...e,...r};return{...a,indent:tv(a.indent,a.type)}});return{...a,rows:n}}))},[C,N]),k=n().useCallback(e=>{let t={id:`row-${Math.random().toString(36).slice(2,10)}`,type:"indicator",code:"",label:"",indent:0,keyPattern:"{code}_{age}_{sex}",dims:{},showTotal:!0,showDisaggregation:!0};t.indent=1,N(C.map(r=>r.id===e?{...r,rows:[...r.rows,t]}:r)),s(e),m(t.id)},[C,N]),R=n().useCallback((e,t)=>{N(C.map(r=>r.id===e?{...r,rows:r.rows.filter(e=>e.id!==t)}:r)),d===t&&m(null)},[C,d,N]),O=n().useCallback((e,t,r)=>{let a=C.find(t=>t.id===e);if(!a)return;let n=a.rows.slice(),l=n.findIndex(e=>e.id===t);if(l<0)return;let i=n[l].indent??0,o=tT(n,l),s=n.slice(l,o),d=null;if(-1===r){let e=l-1;for(;e>=0&&(n[e].indent??0)>i;)e--;e>=0&&(n[e].indent??0)===i&&(d=[...n.slice(0,e),...s,...n.slice(e,l),...n.slice(o)])}else if(o<n.length&&(n[o].indent??0)>=i){let e=tT(n,o),t=n.slice(o,e);d=[...n.slice(0,l),...t,...s,...n.slice(e)]}d&&N(C.map(t=>t.id===e?{...t,rows:d}:t))},[C,N]),D=n().useCallback((e,t,r)=>{let a=C.find(t=>t.id===e),n=a?.rows.find(e=>e.id===t);if(!a||!n)return;let l=th(n.type),i=Math.max(l,Math.min(10,(n.indent??l)+r)),o=a.rows.map(e=>e.id===t?{...e,indent:i}:e);N(C.map(t=>t.id===e?{...t,rows:o}:t))},[C,N]),x=n().useCallback(()=>{let e=tC(a,S);T(e),s(e.groups[0]?.id??null),m(e.groups[0]?.rows[0]?.id??null)},[S,a,T]),L=n().useCallback(()=>{let e=function(e=[],t){if(!t||!t.groups.length)return tC(e,t);let r=new Map,a=new Map;t.groups.forEach(e=>{r.set(e.id,e),e.rows.forEach(t=>{a.set(t.id,{group:e,row:t})})});let n=new Set(e.map(e=>e.sectionUuid)),l=[],i=new Set;for(let t of e){if(i.has(t.sectionUuid))continue;i.add(t.sectionUuid);let e=r.get(t.sectionUuid);if(e){let r=[],a=new Set(t.indicators.map(e=>e.id)),n=new Map(t.indicators.map(e=>{let t=e.id.indexOf("__");return[t>=0?e.id.slice(t+2):e.id,e]})),i=new Map;t.indicators.forEach(e=>{i.set(e.code,(i.get(e.code)??0)+1)});let o=new Map(t.indicators.filter(e=>e.code&&1===i.get(e.code)).map(e=>[e.code,e])),s=e.rows.map(e=>{if("indicator"!==e.type||a.has(e.id))return e;let t=e.id.indexOf("__"),r=t>=0?e.id.slice(t+2):e.id,l=n.get(r)??o.get(e.code??"");return l?{...e,id:l.id}:e}),d=new Map;s.forEach(e=>{d.set(e.id,e)});let c=`${t.sectionUuid}__section_label`;for(let e of(d.has(c)||r.push({id:c,type:"section-label",label:t.title,indent:0,span:"all",emphasis:"section",showTotal:!1,showDisaggregation:!1}),s)){if(a.has(e.id)){r.push({...e});continue}"indicator"!==e.type&&r.push({...e})}let m=new Set(r.map(e=>e.id));t.indicators.forEach((e,a)=>{if(m.has(e.id))return;let n={id:e.id,type:"indicator",code:e.code,label:`${e.code}. ${e.name}`,indent:1,keyPattern:"{code}_{age}_{sex}",dims:{},showTotal:!0,showDisaggregation:!0,span:"label-only",emphasis:"normal"},l=!1;for(let e=a-1;e>=0&&!l;e--){let a=t.indicators[e].id;if(!m.has(a))continue;let i=r.findIndex(e=>e.id===a);if(i<0)break;let o=r[i].indent??0;n.indent=o;let s=i+1;for(;s<r.length&&(r[s].indent??0)>o;)s++;r.splice(s,0,n),l=!0}for(let e=a+1;e<t.indicators.length&&!l;e++){let a=t.indicators[e].id;if(!m.has(a))continue;let i=r.findIndex(e=>e.id===a);if(i<0)break;n.indent=r[i].indent??1,r.splice(i,0,n),l=!0}l||r.push(n),m.add(e.id)}),l.push({...e,title:t.title,rows:tS(r)})}else{let e=[{id:`${t.sectionUuid}__section_label`,type:"section-label",label:t.title,indent:0,span:"all",emphasis:"section",showTotal:!1,showDisaggregation:!1},...t.indicators.map(e=>({id:e.id,type:"indicator",code:e.code,label:`${e.code}. ${e.name}`,indent:1,keyPattern:"{code}_{age}_{sex}",dims:{},showTotal:!0,showDisaggregation:!0,span:"label-only",emphasis:"normal"}))];l.push({id:t.sectionUuid,title:t.title,rows:tS(e)})}}for(let[e,t]of r)n.has(e)||l.push({...t,rows:tS(t.rows.map(e=>({...e})))});return{version:t.version,template:t.template,arrayName:t.arrayName,defaultValue:t.defaultValue,dimensions:t.dimensions||{},groups:l}}(a,S);T(e);let t=e.groups.find(e=>e.id===i);if(t){if(t.rows.find(e=>e.id===d))return;m(t.rows[0]?.id??null)}else s(e.groups[0]?.id??null),m(e.groups[0]?.rows[0]?.id??null)},[S,a,T,i,d]),M=n().useCallback((e,t)=>{g({rowId:e,fromGroupId:t})},[]),$=n().useCallback((e,t,r)=>{if(g(null),y(null),!_||_.fromGroupId!==e||_.rowId===t)return;let a=C.find(t=>t.id===e);if(!a)return;let n=a.rows.slice(),l=n.findIndex(e=>e.id===_.rowId),i=n.findIndex(e=>e.id===t);if(l<0||i<0)return;let o=tT(n,l);if(i>=l&&i<o)return;let s=n.slice(l,o),d=[...n.slice(0,l),...n.slice(o)],c="before"===r?i:i+1;c>=o&&(c-=s.length),d.splice(Math.min(c,d.length),0,...s),N(C.map(t=>t.id===e?{...t,rows:d}:t))},[_,C,N]),U=n().useMemo(()=>C.flatMap(e=>[{kind:"group",group:e},...e.rows.map((t,r)=>({kind:"row",group:e,row:t,rowIndex:r}))]),[C]),B=n().useMemo(()=>{let e,t;return e=["Age <5 | Male","Age <5 | Female","5-14 | Male","5-14 | Female"],t=C.flatMap(t=>t.rows.map(r=>({id:r.id,type:r.type,code:r.code,label:r.label||r.code||"Untitled row",values:"section-label"===r.type||"group-label"===r.type?[]:e.map(()=>0),indent:r.indent??0,groupId:t.id}))),{columns:e,rows:t}},[C]),F=n().useMemo(()=>JSON.stringify(S,null,2),[S]);return n().createElement("div",{className:tt},n().createElement("div",{style:{marginBottom:"1rem"}},n().createElement("h3",{className:tr},l("reportDesign","Report Design")),n().createElement("p",{className:ta},l("reportDesignHint","Design the report structure, indicator presentation, JSON template, and mapping preview."))),r?null:n().createElement(o.jeF,{kind:"warning",lowContrast:!0,title:"Definition required",subtitle:"Build the report definition first so the design can align to it."}),n().createElement("div",{style:{display:"flex",gap:"0.5rem",marginBottom:"1rem"}},n().createElement(o.$nd,{size:"sm",kind:"primary",onClick:x,disabled:!a.length},"Generate From Definition"),n().createElement(o.$nd,{size:"sm",kind:"secondary",onClick:L,disabled:!a.length,renderIcon:u.wM},"Refresh from Definition")),n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #d0d0d0)",borderRadius:12,padding:"1rem",background:"#fff"}},n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement("div",{style:{display:"grid",gridTemplateRows:"auto auto",gap:"1rem"}},n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:10,padding:"1rem",background:"var(--cds-layer, #f4f4f4)"}},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"0.75rem"}},n().createElement("div",{style:{fontSize:"1.1rem",fontWeight:600}},"Template Structure"),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:u.wM,onClick:x},"Refresh JSON")),n().createElement("div",{style:{minHeight:"12rem",border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:8,background:"#fff",padding:"0.5rem",overflow:"auto"}},0===U.length?n().createElement("div",{style:{opacity:.7}},"No sections/rows yet. Generate from definition."):U.map(e=>{if("group"===e.kind)return null;let{group:t,row:r,rowIndex:a}=e,l=r.id===d,i=f?.rowId===r.id?f.position:null,c="section-label"===r.type,u="group-label"===r.type;return n().createElement("div",{key:r.id,draggable:!0,onDragStart:()=>M(r.id,t.id),onDragEnd:()=>{g(null),y(null)},onDragOver:e=>{if(e.preventDefault(),_&&_.fromGroupId===t.id){let e=t.rows.findIndex(e=>e.id===_.rowId);if(e>=0){let a=tT(t.rows,e),n=t.rows.findIndex(e=>e.id===r.id);if(n>=e&&n<a)return void y(null)}}let a=e.currentTarget.getBoundingClientRect(),n=e.clientY-a.top>a.height/2?"after":"before";y(e=>e&&e.rowId===r.id&&e.position===n?e:{rowId:r.id,position:n})},onDrop:e=>{e.preventDefault(),$(t.id,r.id,f?.rowId===r.id?f.position:"before")},onClick:()=>{s(t.id),m(r.id)},style:{display:"flex",alignItems:"center",gap:"0.5rem",padding:"0.65rem 0.75rem",marginBottom:"0.35rem",marginLeft:`${(r.indent??0)*18}px`,borderRadius:6,border:l?"2px solid var(--cds-border-interactive, #0f62fe)":"1px solid transparent",boxShadow:i?"before"===i?"inset 0 2px 0 var(--cds-border-interactive, #0f62fe)":"inset 0 -2px 0 var(--cds-border-interactive, #0f62fe)":void 0,background:l?"var(--cds-layer-selected, #e8f1ff)":"transparent",cursor:"pointer"}},n().createElement(es.sx,{size:16}),n().createElement("span",{style:{fontWeight:c?700:u?600:500}},r.label||r.code||"Untitled row"),n().createElement(o.vwO,{size:"sm",type:c?"purple":u?"cyan":"gray"},c?"section":u?"group":r.code||r.type),c?n().createElement(o.$nd,{size:"sm",kind:"ghost",renderIcon:b.OM,onClick:e=>{e.stopPropagation(),k(t.id)}},"Add Node"):null,n().createElement("div",{style:{marginLeft:"auto",display:"flex",gap:"0.25rem"}},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Move up",renderIcon:E.Do,disabled:0===a,onClick:e=>{e.stopPropagation(),O(t.id,r.id,-1)}}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Move down",renderIcon:E.yd,disabled:a===t.rows.length-1,onClick:e=>{e.stopPropagation(),O(t.id,r.id,1)}}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Indent",renderIcon:E.Qp,disabled:(r.indent??th(r.type))>=10,onClick:e=>{e.stopPropagation(),D(t.id,r.id,1)}}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Outdent",renderIcon:E.nk,disabled:(r.indent??th(r.type))<=th(r.type),onClick:e=>{e.stopPropagation(),D(t.id,r.id,-1)}}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Remove",renderIcon:P.zH,onClick:e=>{e.stopPropagation(),R(t.id,r.id)}})))}))),n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:10,padding:"1rem",background:"#fff"}},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"0.75rem"}},n().createElement("div",{style:{fontSize:"1.1rem",fontWeight:600}},"JSON Preview"),n().createElement("div",{style:{display:"flex",gap:"0.35rem"}},n().createElement(o.$nd,{kind:"ghost",hasIconOnly:!0,size:"sm",iconDescription:"Refresh",renderIcon:u.wM}),n().createElement(o.$nd,{kind:"ghost",hasIconOnly:!0,size:"sm",iconDescription:"Copy",renderIcon:c.QR}),n().createElement(o.$nd,{kind:"ghost",hasIconOnly:!0,size:"sm",iconDescription:"Download",renderIcon:es.f5}),n().createElement(o.$nd,{kind:"ghost",hasIconOnly:!0,size:"sm",iconDescription:"Expand",renderIcon:p.MQ}))),n().createElement("pre",{style:{margin:0,minHeight:"16rem",maxHeight:"22rem",overflow:"auto",whiteSpace:"pre-wrap",wordBreak:"break-word",fontSize:"0.85rem",background:"#f8f8f8",border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:8,padding:"0.75rem"}},F))),n().createElement("div",{style:{display:"grid",gridTemplateRows:"auto auto",gap:"1rem"}},n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:10,padding:"1rem",background:"var(--cds-layer, #f4f4f4)"}},n().createElement("div",{style:{fontSize:"1.1rem",fontWeight:600}},"Indicator Properties"),n().createElement("div",{style:{opacity:.8,marginBottom:"0.75rem"}},"Select an indicator/row to edit properties"),n().createElement(o.tUM,{selectedIndex:"details"===h?0:"disaggregation"===h?1:"mapping"===h?2:3,onChange:({selectedIndex:e})=>v(0===e?"details":1===e?"disaggregation":2===e?"mapping":"api")},n().createElement(o.wbY,{"aria-label":"Indicator properties tabs"},n().createElement(o.ozo,null,"Details"),n().createElement(o.ozo,null,"Disaggregation"),n().createElement(o.ozo,null,"Mapping"),n().createElement(o.ozo,null,"API"))),n().createElement("div",{style:{marginTop:"1rem"}},w&&i?"details"===h?n().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"0.75rem"}},n().createElement(o.ksK,{id:"design-row-label",labelText:"Label",value:w.label,onChange:e=>I(i,w.id,{label:e.target.value})}),n().createElement(o.ksK,{id:"design-row-code",labelText:"Code",value:w.code??"",onChange:e=>I(i,w.id,{code:e.target.value})}),n().createElement(o.l6P,{id:"design-row-type",labelText:"Row type",value:w.type,onChange:e=>{let t=e.target.value,r="section-label"===t?{...w,type:t,indent:0,span:"all",emphasis:"section",showTotal:!1,showDisaggregation:!1}:"group-label"===t?{...w,type:t,indent:tv(w.indent,t),span:"label-only",emphasis:"group",showTotal:!1,showDisaggregation:!1}:"indicator"===t?{...w,type:t,indent:tv(w.indent,t),span:"label-only",emphasis:"normal",showTotal:!0,showDisaggregation:!0}:{...w,type:t,indent:tv(w.indent,t),span:"label-only",emphasis:"normal"};I(i,w.id,r)}},n().createElement(o.ebT,{value:"section-label",text:"Section Label"}),n().createElement(o.ebT,{value:"group-label",text:"Group Label"}),n().createElement(o.ebT,{value:"indicator",text:"Indicator"}),n().createElement(o.ebT,{value:"label",text:"Label"}),n().createElement(o.ebT,{value:"spacer",text:"Spacer"})),n().createElement(o.Q7x,{id:"design-row-indent",label:"Indent",min:th(w.type),max:10,value:w.indent??th(w.type),onChange:e=>{let t=Number(e.target.value||th(w.type));I(i,w.id,{indent:tv(t,w.type)})}})):"disaggregation"===h?n().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"0.75rem"}},n().createElement(o.Sc0,{id:"design-row-total",labelText:"Show total",checked:!!w.showTotal,onChange:e=>I(i,w.id,{showTotal:!!e})}),n().createElement(o.Sc0,{id:"design-row-disagg",labelText:"Show disaggregation",checked:!!w.showDisaggregation,onChange:e=>I(i,w.id,{showDisaggregation:!!e})})):"mapping"===h?n().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"0.75rem"}},n().createElement(o.ksK,{id:"design-row-key-pattern",labelText:"Key pattern",value:w.keyPattern??"",onChange:e=>I(i,w.id,{keyPattern:e.target.value})}),n().createElement("div",{style:{opacity:.8,fontSize:"0.875rem"}},"Example: ","{code}_{age}_{sex}")):n().createElement("div",{style:{opacity:.8,fontSize:"0.875rem"}},"Node API preview and compile-time bindings will appear here."):n().createElement("div",{style:{opacity:.7}},"Select a node to edit."))),n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:10,padding:"1rem",background:"var(--cds-layer, #f4f4f4)"}},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"0.75rem"}},n().createElement("div",{style:{fontSize:"1.1rem",fontWeight:600}},"Mapping Preview"),n().createElement(tb.Ss,{size:18})),n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:8,overflow:"hidden",background:"#fff"}},n().createElement("div",{style:{display:"grid",gridTemplateColumns:`minmax(220px, 1.3fr) repeat(${B.columns.length}, minmax(120px, 1fr))`,borderBottom:"1px solid var(--cds-border-subtle, #e0e0e0)",fontWeight:600,background:"#fafafa"}},n().createElement("div",{style:{padding:"0.75rem"}}),B.columns.map(e=>n().createElement("div",{key:e,style:{padding:"0.75rem"}},e))),0===B.rows.length?n().createElement("div",{style:{padding:"1rem",opacity:.7}},"No rows to preview."):B.rows.map(e=>"section-label"===e.type?n().createElement("div",{key:e.id,style:{borderTop:"1px solid var(--cds-border-subtle, #f0f0f0)",background:"var(--cds-layer-accent, #f4f4f4)",fontWeight:700,padding:"0.85rem 0.75rem"}},e.label):"group-label"===e.type?n().createElement("div",{key:e.id,style:{display:"grid",gridTemplateColumns:`minmax(220px, 1.3fr) repeat(${B.columns.length}, minmax(120px, 1fr))`,borderTop:"1px solid var(--cds-border-subtle, #f0f0f0)",background:"#fafafa"}},n().createElement("div",{style:{padding:"0.75rem",fontWeight:600,paddingLeft:`${12+18*e.indent}px`}},e.code?`${e.code} ${e.label}`:e.label),B.columns.map((e,t)=>n().createElement("div",{key:t,style:{padding:"0.75rem"}}))):n().createElement("div",{key:e.id,style:{display:"grid",gridTemplateColumns:`minmax(220px, 1.3fr) repeat(${B.columns.length}, minmax(120px, 1fr))`,borderTop:"1px solid var(--cds-border-subtle, #f0f0f0)"}},n().createElement("div",{style:{padding:"0.75rem",fontWeight:600,paddingLeft:`${12+18*e.indent}px`}},e.label),e.values.map((e,t)=>n().createElement("div",{key:t,style:{padding:"0.75rem"}},e))))))))))};var tN=r(7136);let tI=({open:e,currentCategoryUuid:t="",onConfirm:r,onClose:l,reportType:i="linelist"})=>{let[s,d]=(0,a.useState)([]),[c,m]=(0,a.useState)(!1),[u,p]=(0,a.useState)(null),[_,g]=(0,a.useState)(null);(0,a.useEffect)(()=>{e&&(m(!0),p(null),en().then(e=>{if(d(e),t){let r=e.find(e=>e.uuid===t);r&&g(r)}}).catch(e=>{p(e?.message||"Failed to load categories")}).finally(()=>{m(!1)}))},[e,t]);let E=!!_?.uuid;return n().createElement(o.aFV,{open:e,onRequestClose:l,size:"sm",modalHeading:"Setup Report Before Compile",modalLabel:"Report Organization",passiveModal:!0},n().createElement(o.rQ0,null),n().createElement(o.cwr,null,n().createElement(o.BJc,{gap:6},n().createElement(o.FAs,null,n().createElement("div",{style:{display:"flex",gap:"0.75rem",alignItems:"flex-start"}},n().createElement(tN.$$,{size:20}),n().createElement("div",null,n().createElement("p",{style:{margin:0,fontWeight:500}},"Before compiling, please organize your report."),n().createElement("p",{style:{margin:"0.5rem 0 0 0",fontSize:"0.875rem",opacity:.9}},"Select a category to help organize and publish your report in the system.")))),u&&n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:u,hideCloseButton:!0}),n().createElement("div",null,n().createElement(o.msM,{id:"category-select",titleText:"Category *",label:"Select a category",items:s,itemToString:e=>e?.name||"",selectedItem:_,onChange:({selectedItem:e})=>g(e),disabled:c}),n().createElement("p",{style:{fontSize:"0.875rem",marginTop:"0.5rem",opacity:.8}},"Required. The category determines where this report appears in the report library.")),"linelist"===i&&n().createElement(o.FAs,{style:{background:"var(--cds-layer-01, #f4f4f4)"}},n().createElement("p",{style:{margin:0,fontSize:"0.875rem"}},n().createElement("strong",null,"Linelist Reports:")," These reports display patient-level data in rows. Categorizing helps users find linelist reports for specific use cases.")))),n().createElement(o.jlY,null,n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"secondary",onClick:l},"Cancel"),n().createElement(o.$nd,{kind:"primary",onClick:()=>{_?.uuid&&r({categoryUuid:_.uuid})},disabled:!E||c},"Save & Compile"))))};function tk(){return{uuid:crypto.randomUUID(),name:"",description:"",code:"",sections:[],design:ty(),categoryUuid:"",themeUuid:""}}function tA(e){return(e||"").trim().toUpperCase().replace(/[^A-Z0-9]+/g,"_").replace(/^_+|_+$/g,"")}function tR(){let{t:e}=(0,A.useTranslation)(),{reportId:t}=(0,i.g)(),{has:r}=v(),a=t?"edit":"create",[l,s]=n().useState("details"),[d,c]=n().useState(()=>tk()),[m,u]=n().useState(null),[p,_]=n().useState([]),[E,f]=n().useState([]),[b,h]=n().useState("edit"===a),[S,T]=n().useState(!0),[C,w]=n().useState(!1),[N,I]=n().useState(!1),[k,R]=n().useState(null),[O,D]=n().useState(null),[x,L]=n().useState(null),[M,$]=n().useState(null),[P,U]=n().useState(!1);n().useEffect(()=>{let e=new AbortController;return T(!0),tp({v:"full",includeRetired:!1},e.signal).then(e=>_(Array.isArray(e)?e:[])).catch(()=>_([])).finally(()=>T(!1)),en().then(e=>f(e)).catch(()=>f([])),()=>e.abort()},[]),n().useEffect(()=>{let e=!1;return async function(){if("edit"!==a||!t){c(tk()),u(null),h(!1);return}try{h(!0),R(null),L(null);let r=await Z(t);if(e)return;u(r),c(function(e){let t={},r={};try{t=e.configJson?JSON.parse(e.configJson):{}}catch{t={}}try{r=e.metaJson?JSON.parse(e.metaJson):{}}catch{r={}}let a=t?.definition??{},n=Array.isArray(t?.sections)?t.sections:[],l=t?.design??null;return{uuid:e.uuid,name:e.name??t?.name??"",description:e.description??t?.description??"",code:e.code??t?.code??"",sections:Array.isArray(a?.sections)?a.sections:n,design:l??ty(),categoryUuid:r?.categoryUuid??t?.categoryUuid??"",themeUuid:r?.themeUuid??t?.themeUuid??""}}(r))}catch(t){e||R(t?.message??"Failed to load report")}finally{e||h(!1)}}(),()=>{e=!0}},[a,t]);let B={uuid:d.uuid,name:d.name,description:d.description},F={name:d.name,description:d.description,code:d.code,sections:d.sections},z=d.design,q=n().useMemo(()=>p.reduce((e,t)=>(e[t.uuid]=t.name??t.uuid,e),{}),[p]),j=n().useMemo(()=>{let e=Array.isArray(d.sections)?d.sections:[],t=new Map(p.map(e=>[e.uuid,e]));return e.filter((t,r)=>e.findIndex(e=>e.sectionUuid===t.sectionUuid)===r).slice().sort((e,t)=>Number(e.sortOrder??0)-Number(t.sortOrder??0)).map(e=>{let r=t.get(e.sectionUuid),a=function(e){try{return e?JSON.parse(e):{}}catch{return{}}}(r?.configJson),n=Array.isArray(a?.indicators)?a.indicators:[];return{sectionUuid:e.sectionUuid,title:e.titleOverride?.trim()||r?.name||e.sectionUuid,indicators:n.slice().sort((e,t)=>Number(e.sortOrder??0)-Number(t.sortOrder??0)).map(t=>({id:`${e.sectionUuid}__${String(t.indicatorUuid??t.id??t.code??(function(e,t){let r=`${e}|${t}`;if(!e&&!t)return"";let a=5381;for(let e=0;e<r.length;e++)a=(a<<5)+a+r.charCodeAt(e)|0;return`ind-${(a>>>0).toString(36)}`}(String(t.code??""),String(t.name??""))||"indicator"))}`,code:String(t.code??""),name:String(t.name??t.code??""),type:String(t.kind??"indicator")}))}})},[p,d.sections]),H=n().useCallback(e=>{c(t=>({...t,name:e.name,description:e.description,uuid:e.uuid,code:t.code?.trim()?t.code:tA(e.name)}))},[]),V=n().useCallback(e=>{c(t=>({...t,code:e.code,sections:e.sections}))},[]),W=n().useCallback(e=>{c(t=>({...t,design:e}))},[]),K=n().useCallback(async()=>{try{w(!0),R(null),D(null),L(null);let e={version:1,uuid:m?.uuid??d.uuid,name:d.name,code:d.code||tA(d.name),description:d.description,definition:{sections:d.sections??[]},design:d.design,categoryUuid:d.categoryUuid,themeUuid:d.themeUuid},r={name:e.name,description:e.description,code:e.code,configJson:JSON.stringify(e,null,2),metaJson:JSON.stringify({categoryUuid:d.categoryUuid,themeUuid:d.themeUuid})},n="edit"===a&&(m?.uuid||t)?await et(m?.uuid||t,r):await ee(r);return u(n),c(e=>({...e,uuid:n.uuid,code:n.code??e.code})),D("Draft saved successfully."),n}catch(e){throw R(e?.message??"Failed to save report draft"),e}finally{w(!1)}},[d,a,t,m?.uuid]),Q=n().useCallback(async()=>{try{if(I(!0),L(null),$(null),R(null),!d.categoryUuid){U(!0),I(!1);return}let e=m?.uuid||t||null;if(!e){let t=await K();e=t?.uuid??null}if(!e)throw Error("Save the report first before compiling.");let r=E.find(e=>e.uuid===d.categoryUuid)?.name;console.log("Aggregate Editor - Compiling with:",{reportUuid:e,categoryUuid:d.categoryUuid,categoryName:r,categoriesCount:E.length});let a=await er(e,d.categoryUuid);$(a?.reportDefinitionUuid?`Compiled successfully. Runtime report UUID: ${a.reportDefinitionUuid}`:"Compiled successfully.")}catch(e){L(e?.message??"Failed to compile report")}finally{I(!1)}},[E,d.categoryUuid,K,t,m?.uuid]),Y=n().useCallback(async e=>{U(!1),c(t=>({...t,categoryUuid:e.categoryUuid}));let r=m?.uuid||t||null;if(!r)try{let e=await K();r=e?.uuid??null}catch(e){R(e?.message??"Failed to save report");return}if(!r)return void L("Cannot compile: Report must be saved first");I(!0),L(null),$(null);try{let e=E.find(e=>e.uuid===d.categoryUuid)?.name;console.log("Aggregate Editor (compile setup) - Compiling with:",{reportUuid:r,categoryUuid:d.categoryUuid,categoryName:e,categoriesCount:E.length});let t=await er(r,d.categoryUuid);$(t?.reportDefinitionUuid?`Compiled successfully. Runtime report UUID: ${t.reportDefinitionUuid}`:"Compiled successfully.")}catch(e){L(e?.message??"Failed to compile report")}finally{I(!1)}},[E,d.categoryUuid,m?.uuid,t,K]),X=n().useCallback(()=>{U(!1)},[]),ea=n().useCallback(()=>{c(tk()),u(null),R(null),D(null),L(null),$(null),s("details")},[]),el=!!d.name.trim()&&!C&&!b,ei=r(y.RB.REPORT_COMPILE)&&!!((m?.uuid||t||d.name.trim())&&!C&&!N&&!b),eo=n().useMemo(()=>JSON.stringify({uuid:d.uuid,name:d.name,description:d.description,code:d.code,definition:{sections:d.sections},design:d.design,sectionSources:j,mode:a,savedReportUuid:m?.uuid??null},null,2),[d,j,a,m]);return n().createElement(n().Fragment,null,n().createElement(G,{title:e("reportBuilder","Report Builder"),subtitle:e("reportBuilderSubtitle","Create and manage reports as collections of reusable sections.")}),n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"end",marginBottom:"1rem"}},n().createElement("div",null,b?n().createElement(o.OuH,{description:"Loading report…"}):null,S?n().createElement(o.OuH,{description:"Loading sections…"}):null,C?n().createElement(o.OuH,{description:"Saving draft…"}):null,N?n().createElement(o.OuH,{description:"Compiling report…"}):null,b||C||!k?null:n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Save failed",subtitle:k}),b||C||!O?null:n().createElement(o.jeF,{lowContrast:!0,kind:"success",title:"Saved",subtitle:O}),b||N||!x?null:n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Compile failed",subtitle:x}),b||N||!M?null:n().createElement(o.jeF,{lowContrast:!0,kind:"success",title:"Compiled",subtitle:M})),n().createElement("div",{style:{display:"flex",gap:"0.5rem"}},n().createElement(J,{context:{page:"Report Builder"},size:"sm",kind:"secondary"}),n().createElement(o.$nd,{size:"sm",kind:"secondary",renderIcon:es.f5,disabled:!0},"Export"),n().createElement(o.$nd,{size:"sm",kind:"secondary",onClick:Q,disabled:!ei},"Compile"),n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:g.eM,onClick:K,disabled:!el},"Save Draft"))),n().createElement(o.tUM,{selectedIndex:"details"===l?0:"definition"===l?1:2,onChange:({selectedIndex:e})=>s(0===e?"details":1===e?"definition":"design")},n().createElement(o.wbY,{"aria-label":"Report editor tabs"},n().createElement(o.ozo,null,"Report Detail"),n().createElement(o.ozo,null,"Report Definition"),n().createElement(o.ozo,null,"Report Design")),n().createElement(o.T2N,null,n().createElement(o.KpK,null,n().createElement(tn,{value:B,onChange:H,onSaveDraft:K,isSaving:C,onCancel:ea})),n().createElement(o.KpK,null,n().createElement(tf,{value:F,onChange:V})),n().createElement(o.KpK,null,n().createElement(tw,{value:z,onChange:W,definitionDraft:F,sectionSources:j,sectionNameLookup:q})))),n().createElement("div",{style:{marginTop:"1rem",padding:"0.9rem 1rem",background:"#fff",border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:12}},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Current Report Form"),n().createElement("pre",{style:{margin:0,whiteSpace:"pre-wrap",wordBreak:"break-word",fontSize:"0.85rem"}},eo)),n().createElement(tI,{open:P,currentCategoryUuid:d.categoryUuid,onConfirm:Y,onClose:X,reportType:"aggregate"}))}function tO({rows:e,onOpen:t,onEdit:r,onRun:a,onDelete:l,onDuplicate:i,canEdit:s=!0,canRun:d=!0,canDelete:c=!0}){let m=(e??[]).map(e=>({id:e.id,code:e.code,name:e.name,kind:e.kind,theme:e.themeName??"",themeColor:e.themeColor??"",status:e.status}));return n().createElement(o.K3K,{title:"",description:""},n().createElement(o.bQt,{rows:m,headers:[{key:"code",header:"Code"},{key:"name",header:"Name"},{key:"kind",header:"Kind"},{key:"theme",header:"Theme"},{key:"status",header:"Status"},{key:"actions",header:""}],isSortable:!0},({rows:e,headers:m,getHeaderProps:u,getRowProps:p})=>n().createElement(o.XIK,{size:"lg",useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,m.map(e=>n().createElement(o.A0N,{key:e.key,...u({header:e})},e.header)))),n().createElement(o.BFY,null,0===e.length?n().createElement(o.Hjg,null,n().createElement(o.nA6,{colSpan:m.length,style:{padding:"1rem",opacity:.75}},"No indicators found.")):null,e.map(e=>{let m,u,_=String(e.cells.find(e=>"code"===e.info.header)?.value??""),g=String(e.cells.find(e=>"name"===e.info.header)?.value??""),E=String(e.cells.find(e=>"kind"===e.info.header)?.value??""),f=String(e.cells.find(e=>"theme"===e.info.header)?.value??""),b=String(e.cells.find(e=>"status"===e.info.header)?.value??""),y=String(e.themeColor??"");return n().createElement(o.Hjg,{key:e.id,...p({row:e}),onClick:()=>t?.(e.id),style:{cursor:t?"pointer":"default"}},n().createElement(o.nA6,null,_||n().createElement("span",{style:{opacity:.7}},"—")),n().createElement(o.nA6,{style:{fontWeight:600,paddingLeft:"0.75rem",borderLeft:y?`6px solid ${y}`:"6px solid transparent"}},g),n().createElement(o.nA6,null,"FINAL"===(m=(E??"").toUpperCase())?n().createElement(o.vwO,{type:"purple"},"FINAL"):"COMPOSITE"===m?n().createElement(o.vwO,{type:"teal"},"COMPOSITE"):n().createElement(o.vwO,{type:"blue"},"BASE")),n().createElement(o.nA6,null,f?n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"}},n().createElement("span",{"aria-hidden":"true",style:{width:10,height:10,borderRadius:999,background:y||"var(--cds-icon-primary)",display:"inline-block",border:"1px solid var(--cds-border-subtle)"}}),n().createElement("span",{style:{fontWeight:500}},f)):n().createElement("span",{style:{opacity:.7}},"—")),n().createElement(o.nA6,null,(u=(b??"").toLowerCase()).includes("publish")?n().createElement(o.vwO,{type:"green"},"Published"):u.includes("retire")?n().createElement(o.vwO,{type:"red"},"Retired"):n().createElement(o.vwO,{type:"gray"},"Draft")),n().createElement(o.nA6,{onClick:e=>e.stopPropagation(),style:{width:56}},n().createElement(o.obU,{size:"sm",flipped:!0},s&&n().createElement(o.XSD,{itemText:"Edit",onClick:()=>r?.(e.id,E)}),n().createElement(o.XSD,{itemText:"Duplicate",onClick:()=>i?.(e.id,E)}),d&&n().createElement(o.XSD,{itemText:"Run",onClick:()=>a?.(e.id)}),c&&n().createElement(o.XSD,{itemText:"Delete",isDelete:!0,onClick:()=>l?.(e.id)}))))})))))}let tD="/reportbuilder/datatheme";async function tx(e,t){var r;let a=e?.trim(),n=a?`${tD}?q=${encodeURIComponent(a)}&v=full`:`${tD}?v=full`;return(r=await (0,W.wO)(n,t))?Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]:[]}async function tL(e,t){return(0,W.wO)(`${tD}/${encodeURIComponent(e)}?v=full`,t)}async function tM(e,t){return(0,W.oV)(tD,e,t)}async function t$(e,t,r){return(0,W.oV)(`${tD}/${encodeURIComponent(e)}`,t,r)}async function tP(e,t=!1,r="Retired via UI",a){let n=t?"purge=true":`purge=false&reason=${encodeURIComponent(r)}`;await (0,W.hI)(`${tD}/${encodeURIComponent(e)}?${n}`,a)}async function tU(e,t){var r;let a=e?.trim(),n=a?`${tD}?q=${encodeURIComponent(a)}&v=full`:`${tD}?v=full`;return Array.isArray(r=await (0,W.wO)(n,t))?r:r?.results??[]}async function tB(e,t){return(0,W.wO)(`${tD}/${e}?v=full`,t)}function tF({value:e,onChange:t}){return n().createElement(o.BJc,{gap:6},n().createElement(o.ksK,{id:"indicator-code",labelText:"Code (optional)",value:e.code,onChange:r=>t({...e,code:r.target.value})}),n().createElement(o.ksK,{id:"indicator-name",labelText:"Name",value:e.name,onChange:r=>t({...e,name:r.target.value})}),n().createElement(o.fs1,{id:"indicator-desc",labelText:"Description (optional)",value:e.description,onChange:r=>t({...e,description:r.target.value})}))}function tz({themes:e,loading:t,error:r,themeUuid:a,onThemeUuidChange:l,themeConfigError:i}){return n().createElement(o.BJc,{gap:4},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.25rem"}},"Data Theme"),t?n().createElement(o.OuH,{description:"Loading themes…"}):null,!t&&r?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},r):null,n().createElement(o.l6P,{id:"indicator-theme",labelText:"Select a theme",value:a,onChange:e=>l(e.target.value)},n().createElement(o.ebT,{value:"",text:"Select…"}),(e??[]).map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:`${e.name}${e.code?` (${e.code})`:""}`}))),i?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)",marginTop:"0.25rem"}},i):null)}let tq="/concept",tj="custom:(id,uuid,display,datatype:(uuid,name),conceptClass:(uuid,name),answers:(id,uuid,display),mappings:(display,uuid,conceptMapType:(display)))";async function tH(e,t){let r=await (0,W.wO)(`${tq}/?q=${encodeURIComponent(e)}&v=${tj}`,t);return r?.results??[]}async function tJ(e,t){let r=String(e??"").trim();if(!r)throw Error("Concept uuid is required");return(0,W.wO)(`${tq}/${encodeURIComponent(r)}?v=${tj}`,t)}async function tG(e,t){let r=await (0,W.wO)(`${tq}/${e}?v=${tj}`,t);return r?.answers??[]}function tV(e){let[t,r]=(0,a.useState)(!1),[n,l]=(0,a.useState)([]),[i,o]=(0,a.useState)(null);return(0,a.useEffect)(()=>{let t=e.trim();if(t.length<2){l([]),o(null);return}let a=new AbortController,n=window.setTimeout(async()=>{try{r(!0),o(null);let e=await tH(t,a.signal);l(e)}catch(e){e?.name!=="AbortError"&&o("Failed to search concepts")}finally{r(!1)}},300);return()=>{a.abort(),window.clearTimeout(n)}},[e]),{loading:t,results:n,error:i}}function tW(e,t){let r=(e??"").trim(),a=`${t}:`;if(!r.startsWith(a))return;let n=r.slice(a.length).trim();if(n)return n.split(" ")[0]?.split("(")[0]?.trim()||void 0}function tK(e){let t,r;for(let a of e.mappings??[]){let e=a?.display??"";if(t||(t=tW(e,"ICD-10-WHO")),r||(r=tW(e,"ICD-11-WHO")),t&&r)break}return{icd10Code:t,icd11Code:r}}function tQ(e){let{icd10Code:t,icd11Code:r}=tK(e);return{id:Number(e.id)||0,uuid:e.uuid,display:e.display,icd10Code:t,icd11Code:r,conceptClass:e.conceptClass?.name,datatype:e.datatype?.name}}function tY(e){if(!e)return"";let{icd10Code:t,icd11Code:r}=tK(e),a=[];return t&&a.push(`ICD-10:${t}`),r&&a.push(`ICD-11:${r}`),e.conceptClass?.name&&a.push(e.conceptClass.name),a.length?`${e.display} • ${a.join(" • ")}`:e.display}function tX({id:e,labelText:t,helperText:r,value:a,onChange:l}){let[i,s]=n().useState(""),{loading:d,results:c,error:m}=tV(i),u=n().useCallback(e=>{if(!e)return;let t=tQ(e),r=new Map;for(let e of a??[])r.set(e.uuid,e);r.set(t.uuid,t),l(Array.from(r.values()))},[l,a]),p=n().useCallback(e=>{l((a??[]).filter(t=>t.uuid!==e))},[l,a]);return n().createElement("div",null,n().createElement("div",{style:{marginBottom:"0.5rem",fontWeight:600}},t),r?n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8,marginBottom:"0.75rem"}},r):null,n().createElement(o.a32,{id:`${e}-search`,titleText:"Search concepts",items:c??[],itemToString:tY,placeholder:"Type to search concepts…",onInputChange:e=>s(String(e??"")),onChange:e=>u(e?.selectedItem??null)}),n().createElement("div",{style:{marginTop:"0.5rem"}},d?n().createElement(o.OuH,{description:"Searching…"}):null,!d&&m?n().createElement("div",{style:{fontSize:"0.875rem",color:"var(--cds-text-error, #da1e28)"}},m):null),a?.length?n().createElement("div",{style:{marginTop:"0.75rem",display:"flex",flexWrap:"wrap",gap:"0.5rem"}},a.map(e=>n().createElement(o.vwO,{key:e.uuid,type:"gray",filter:!0,onClose:()=>p(e.uuid),title:e.icd10Code||e.icd11Code?`${e.display}`:e.display},e.display,e.icd10Code?` • ICD-10:${e.icd10Code}`:"",e.icd11Code?` • ICD-11:${e.icd11Code}`:""))):null)}function tZ(e,t){let r=(e??"").trim(),a=`${t}:`;if(!r.startsWith(a))return;let n=r.slice(a.length).trim();if(n)return n.split(" ")[0]?.split("(")[0]?.trim()||void 0}function t0(e){let t,r;for(let a of e.mappings??[]){let e=a?.display??"";if(t||(t=tZ(e,"ICD-10-WHO")),r||(r=tZ(e,"ICD-11-WHO")),t&&r)break}return{icd10Code:t,icd11Code:r}}function t1(e){let{icd10Code:t,icd11Code:r}=t0(e);return{id:Number(e.id)||0,uuid:e.uuid,display:e.display,icd10Code:t,icd11Code:r,conceptClass:e.conceptClass?.name,datatype:e.datatype?.name}}function t2(e){if(!e)return"";let{icd10Code:t,icd11Code:r}=t0(e),a=[];return t&&a.push(`ICD-10:${t}`),r&&a.push(`ICD-11:${r}`),e.conceptClass?.name&&a.push(e.conceptClass.name),a.length?`${e.display} • ${a.join(" • ")}`:e.display}function t5(e){if(!e)return"";let t=[];return e.icd10Code&&t.push(`ICD-10:${e.icd10Code}`),e.icd11Code&&t.push(`ICD-11:${e.icd11Code}`),e.conceptClass&&t.push(e.conceptClass),t.length?`${e.display} • ${t.join(" • ")}`:e.display}function t6({id:e,labelText:t,helperText:r,questionsLabelText:a="Question concept(s)",answersLabelText:l="Expected answers",value:i,onChange:s}){let[d,c]=n().useState(""),{loading:m,results:u,error:p}=tV(d),[_,g]=n().useState([]),[E,f]=n().useState(!1),[b,y]=n().useState(null),[h,v]=n().useState(0),[S,T]=n().useState(0),C=n().useMemo(()=>i.questions??[],[i.questions]),w=n().useMemo(()=>i.answers??[],[i.answers]),N=n().useCallback(e=>{let t=new Map;for(let r of e??[])r?.uuid&&t.set(r.uuid,r);return Array.from(t.values())},[]),I=n().useCallback(async(e,t)=>{f(!0),y(null),g([]);try{let r=Array.from(new Set(e.filter(Boolean)));if(!r.length){g([]),y(null);return}let a=await Promise.all(r.map(async e=>{try{return(await tG(e,t)??[]).map(t1).filter(e=>!!e.uuid)}catch{return[]}})),n=N(a.flat());if(!n.length){y("Selected question(s) have no configured answers. Please choose a different question."),g([]);return}g(n);let l=new Set(n.map(e=>e.uuid)),i=(w??[]).filter(e=>e?.uuid&&l.has(e.uuid));i.length!==(w?.length??0)&&s({questions:C,answers:i})}finally{f(!1)}},[N,s,w,C]);n().useEffect(()=>{let e=(C??[]).map(e=>e.uuid).filter(Boolean);if(!e.length){g([]),y(null),f(!1);return}let t=new AbortController;return I(e,t.signal),()=>t.abort()},[I,C]);let k=(C?.length??0)>0&&!E&&!b;return n().createElement("div",null,n().createElement("div",{style:{marginBottom:"0.5rem",fontWeight:600}},t),r?n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8,marginBottom:"0.75rem"}},r):null,n().createElement("div",{style:{marginBottom:"1rem"}},n().createElement("div",{style:{marginBottom:"0.5rem",fontWeight:600}},a),n().createElement(o.a32,{key:S,id:`${e}-questions`,titleText:"Search question concept",items:u??[],itemToString:t2,placeholder:"Type to search question…",onInputChange:e=>c(String(e??"")),onChange:e=>{var t;(t=e?.selectedItem??null)&&(s({questions:N([...C??[],t1(t)]),answers:w}),T(e=>e+1))}}),n().createElement("div",{style:{marginTop:"0.5rem"}},m?n().createElement(o.OuH,{description:"Searching…"}):null,!m&&p?n().createElement("div",{style:{fontSize:"0.875rem",color:"var(--cds-text-error, #da1e28)"}},p):null),C?.length?n().createElement("div",{style:{marginTop:"0.75rem",display:"flex",flexWrap:"wrap",gap:"0.5rem"}},C.map(e=>n().createElement(o.vwO,{key:e.uuid,type:"gray",filter:!0,onClose:()=>{var t;return t=e.uuid,void s({questions:(C??[]).filter(e=>e.uuid!==t),answers:w})},title:t5(e)},e.display,e.icd10Code?` • ICD-10:${e.icd10Code}`:"",e.icd11Code?` • ICD-11:${e.icd11Code}`:"")),n().createElement(o.vwO,{type:"red",filter:!0,onClose:()=>{s({questions:[],answers:[]}),g([]),y(null),f(!1)},title:"Clear all questions"},"Clear all")):null),n().createElement("div",null,n().createElement("div",{style:{marginBottom:"0.5rem",fontWeight:600}},l),(C?.length??0)>0?n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8,marginBottom:"0.75rem"}},"Pick answer concept(s) for selected question(s)."):n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8,marginBottom:"0.75rem"}},"Select at least one question first to load allowed answers."),E?n().createElement(o.OuH,{description:"Loading answers…"}):null,!E&&b?n().createElement("div",{style:{fontSize:"0.875rem",color:"var(--cds-text-error, #da1e28)",marginBottom:"0.75rem"}},b):null,n().createElement(o.a32,{key:h,id:`${e}-answers`,titleText:"Select answer",items:_,itemToString:e=>t5(e),disabled:!k,placeholder:k?"Type to filter answers…":"Answers disabled",onChange:e=>{var t;(t=e?.selectedItem??null)&&(s({questions:C,answers:N([...w??[],t])}),v(e=>e+1))}}),w?.length?n().createElement("div",{style:{marginTop:"0.75rem",display:"flex",flexWrap:"wrap",gap:"0.5rem"}},w.map(e=>n().createElement(o.vwO,{key:e.uuid,type:"gray",filter:!0,onClose:()=>{var t;return t=e.uuid,void s({questions:C,answers:(w??[]).filter(e=>e.uuid!==t)})},title:t5(e)},e.display,e.icd10Code?` • ICD-10:${e.icd10Code}`:"",e.icd11Code?` • ICD-11:${e.icd11Code}`:""))):null))}function t3({id:e,labelText:t,placeholder:r="Type and press Enter or comma to add",value:a=[],onChange:l,disabled:i=!1}){let[s,d]=n().useState(""),[c,m]=n().useState(!1),u=e=>{l(a.filter((t,r)=>r!==e))},p=e=>{let t=e.trim();t&&!a.includes(t)&&l([...a,t]),d("")};return n().createElement("div",{className:"tag-input-container"},t&&n().createElement("label",{htmlFor:e,style:{display:"block",marginBottom:"0.5rem",fontSize:"0.75rem",fontWeight:400,lineHeight:"1.34",color:"var(--cds-text-secondary, #525252)"}},t),n().createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.5rem",padding:"0.5rem",border:"1px solid var(--cds-text-primary, #161616)",borderRadius:"0.125rem",backgroundColor:c?"var(--cds-field-1, #ffffff)":"var(--cds-field-2, #f4f4f4)",minHeight:"3rem",alignItems:"center"},onFocus:()=>m(!0),onBlur:()=>{setTimeout(()=>{document.activeElement?.tagName!=="BUTTON"&&(m(!1),s.trim()&&p(s))},100)}},a.map((e,t)=>n().createElement(o.vwO,{key:t,type:"cool-gray",onClose:()=>u(t),style:{margin:0}},e)),n().createElement(o.ksK,{id:e,labelText:"",value:s,onChange:e=>{d(e.target.value)},onKeyDown:e=>{"Enter"===e.key||","===e.key?(e.preventDefault(),p(","===e.key?s.slice(0,-1):s)):"Backspace"===e.key&&!s&&a.length>0&&u(a.length-1)},onPaste:e=>{e.preventDefault();let t=e.clipboardData.getData("text").split(/[,\n\t]+/).map(e=>e.trim()).filter(Boolean);if(t.length>0){let e=t.filter(e=>!a.includes(e));l([...a,...e])}},placeholder:0===a.length?r:"",disabled:i,hideLabel:!0,style:{flex:1,minWidth:"120px",border:"none",boxShadow:"none",backgroundColor:"transparent",padding:0}})),n().createElement("div",{style:{marginTop:"0.25rem",fontSize:"0.75rem",color:"var(--cds-text-secondary, #525252)"}},"Press Enter or comma (,) to add a value. Click \xd7 to remove."))}function t4(e){let t=String(e??"").trim().toUpperCase();return"EQUALS"===t?"=":"GTE"===t?">=":"LTE"===t?"<=":"NOT_IN"===t?"NOT IN":"IN"===t?"IN":"LIKE"===t?"LIKE":"BETWEEN"===t?"BETWEEN":"IS_NULL"===t?"IS NULL":"IS_NOT_NULL"===t?"IS NOT NULL":"="===t||"!="===t||">"===t||">="===t||"<"===t||"<="===t||"IS NULL"===t||"IS NOT NULL"===t?t:"IN"}function t8(e){return"IN"===e||"NOT IN"===e}function t7(e){return"IS NULL"===e||"IS NOT NULL"===e}function t9(e){return e.map(e=>Number(e)).filter(e=>Number.isFinite(e)&&e>0)}function re(e){return e.map(e=>String(e)).filter(Boolean)}function rt({conditions:e,picked:t,onPickedChange:r,conceptUi:a,onConceptUiChange:l,qaUi:i,onQaUiChange:s}){let d=n().useCallback((e,a)=>{let n=(t??[]).find(t=>t.key===e.key)??{key:e.key,operator:e.operator,valueType:e.valueType,value:"QUESTION_ANSWER_CONCEPT_SEARCH"===e.handler?{questions:[],answers:[]}:"IN"===e.operator||"NOT_IN"===e.operator?[]:"BETWEEN"===e.operator||"DATE_RANGE"===e.handler?{start:"",end:""}:""};r(function(e,t){let r=(e??[]).findIndex(e=>e.key===t.key);if(-1===r)return[...e??[],t];let a=[...e??[]];return a[r]={...a[r],...t},a}(t??[],{...n,...a,key:e.key}))},[r,t]),c=n().useCallback((e,t)=>{s({...i??{},[e]:{...i?.[e]??{questions:[],answers:[]},...t}})},[s,i]),m=n().useCallback((e,t)=>{l({...a??{},[e]:t})},[l,a]);return e?.length?n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.75rem"}},"Conditions"),n().createElement(o.BJc,{gap:5},e.map(e=>{let r=(t??[]).find(t=>t.key===e.key);if("QUESTION_ANSWER_CONCEPT_SEARCH"===e.handler){let t=i?.[e.key]??{questions:[],answers:[]};return n().createElement("div",{key:e.key},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.25rem"}},e.label||e.key),n().createElement(t6,{id:`cond-${e.key}`,labelText:e.label||"Select question(s) & answers",value:{questions:t.questions,answers:t.answers},onChange:t=>{c(e.key,{questions:t.questions,answers:t.answers,error:void 0});let r="conceptUuid"===e.valueType?re((t.questions??[]).map(e=>e.uuid)):t9((t.questions??[]).map(e=>e.id)),a="conceptUuid"===e.valueType?re((t.answers??[]).map(e=>e.uuid)):t9((t.answers??[]).map(e=>e.id));d(e,{value:{questions:r,answers:a}})}}),i?.[e.key]?.error?n().createElement("div",{style:{marginTop:"0.5rem",color:"var(--cds-text-error, #da1e28)",fontSize:"0.875rem"}},i[e.key].error):null)}if("CONCEPT_SEARCH"===e.handler){let t=a?.[e.key]??[];return n().createElement("div",{key:e.key},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.25rem"}},e.label||e.key),n().createElement(tX,{id:`cond-${e.key}`,labelText:e.label||"Select concepts",value:t,onChange:t=>{m(e.key,t),"conceptUuid"===e.valueType?d(e,{value:re(t.map(e=>e.uuid))}):d(e,{value:t9(t.map(e=>e.id))})}}))}if("DATE_RANGE"===e.handler||"BETWEEN"===e.operator){let t=r?.value,a=t?.start??"",l=t?.end??"";return n().createElement("div",{key:e.key},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.25rem"}},e.label||e.key),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.5rem"}},n().createElement(o.ksK,{id:`cond-${e.key}-start`,labelText:"Start value",placeholder:"Start",value:a,onChange:t=>{d(e,{value:{start:t.target.value,end:l}})}}),n().createElement(o.ksK,{id:`cond-${e.key}-end`,labelText:"End value",placeholder:"End",value:l,onChange:t=>{d(e,{value:{start:a,end:t.target.value}})}})))}if(t7(t4(e.operator))){let t=r?.value===!0||r?.value==="true"||r?.value===1;return n().createElement("div",{key:e.key},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.25rem"}},e.label||e.key),n().createElement(o.lMk,{id:`cond-${e.key}`,labelText:"IS_NULL"===e.operator?"Include NULL values":"Include NOT NULL values",labelA:"Off",labelB:"On",toggled:t,onToggle:t=>d(e,{value:t})}))}if(t8(t4(e.operator))){let t=Array.isArray(r?.value)?r.value.map(e=>String(e)):"string"==typeof r?.value&&r.value.trim()?r.value.split(",").map(e=>e.trim()).filter(Boolean):[];return n().createElement("div",{key:e.key},n().createElement(t3,{id:`cond-${e.key}`,labelText:e.label||e.key,placeholder:"Type and press Enter or comma to add",value:t,onChange:t=>d(e,{value:t})}))}return n().createElement("div",{key:e.key},n().createElement(o.ksK,{id:`cond-${e.key}`,labelText:e.label||e.key,value:"string"==typeof r?.value?r.value:"",onChange:t=>d(e,{value:t.target.value})}))}))):n().createElement("div",{style:{opacity:.8}},"No conditions configured for this theme.")}function rr({sql:e,onChange:t,onReset:r,editable:a=!0}){return e?n().createElement("div",null,n().createElement(o.BJc,{gap:4},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"}},n().createElement("div",{style:{fontWeight:600}},"SQL Preview"),a&&r&&n().createElement(o.$nd,{size:"sm",kind:"ghost",onClick:r},"Reset to Generated")),a?n().createElement("textarea",{value:e,onChange:e=>t?.(e.target.value),style:{width:"100%",minHeight:"200px",fontSize:"0.875rem",fontFamily:"monospace",background:"var(--cds-layer-01)",padding:"0.75rem",borderRadius:"6px",border:"1px solid var(--cds-border-01, #e0e0e0)",resize:"vertical"},placeholder:"SQL query will appear here..."}):n().createElement("pre",{style:{fontSize:"0.875rem",background:"var(--cds-layer-01)",padding:"0.75rem",borderRadius:6,overflowX:"auto"}},e))):n().createElement("div",{style:{opacity:.8}},"SQL preview will appear once a theme is selected.")}let ra=[{value:"=",label:"Equals",requiresValue:!0},{value:"!=",label:"Not Equals",requiresValue:!0},{value:">",label:"Greater Than",requiresValue:!0},{value:">=",label:"Greater Than or Equal",requiresValue:!0},{value:"<",label:"Less Than",requiresValue:!0},{value:"<=",label:"Less Than or Equal",requiresValue:!0},{value:"IN",label:"IN (comma-separated)",requiresValue:!0},{value:"NOT IN",label:"NOT IN (comma-separated)",requiresValue:!0},{value:"LIKE",label:"LIKE (pattern matching)",requiresValue:!0},{value:"IS NULL",label:"IS NULL",requiresValue:!1},{value:"IS NOT NULL",label:"IS NOT NULL",requiresValue:!1},{value:"BETWEEN",label:"BETWEEN (two values)",requiresValue:!0}];function rn({conditions:e,onChange:t}){let[r,a]=n().useState({column:"",operator:"=",value:"",wildcardMode:"contains"}),l=ra.find(e=>e.value===r.operator);return n().createElement("div",null,n().createElement("div",{style:{marginBottom:"1rem"}},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Add Custom Condition"),n().createElement(o.BJc,{gap:3},n().createElement("div",null,n().createElement("label",{htmlFor:"custom-column",style:{display:"block",marginBottom:"0.25rem",fontSize:"0.75rem",color:"var(--cds-text-secondary, #525252)"}},"Column name"),n().createElement(o.ksK,{id:"custom-column",labelText:"",value:r.column,placeholder:"e.g., a.status, a.encounter_type",onChange:e=>a({...r,column:e.target.value})})),n().createElement("div",{style:{maxWidth:"300px"}},n().createElement(o.l6P,{id:"custom-operator",labelText:"Operator",value:r.operator,onChange:e=>a({...r,operator:e.target.value})},ra.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label})))),l?.requiresValue&&n().createElement("div",null,n().createElement("label",{htmlFor:"custom-value",style:{display:"block",marginBottom:"0.25rem",fontSize:"0.75rem",color:"var(--cds-text-secondary, #525252)"}},"Value","IN"===r.operator||"NOT IN"===r.operator?" (comma-separated)":"BETWEEN"===r.operator?" (two values, comma-separated)":""),n().createElement(o.ksK,{id:"custom-value",labelText:"",value:r.value,placeholder:"IN"===r.operator||"NOT IN"===r.operator?"e.g., 1,2,3 or a,b,c":"BETWEEN"===r.operator?"e.g., 10,50":"Enter value",onChange:e=>a({...r,value:e.target.value})}),"LIKE"===r.operator&&n().createElement("div",{style:{marginTop:"0.5rem"}},n().createElement("label",{style:{display:"block",marginBottom:"0.25rem",fontSize:"0.75rem",color:"var(--cds-text-secondary, #525252)"}},"Wildcard pattern"),n().createElement("div",{style:{display:"flex",gap:"1rem",flexWrap:"wrap"}},n().createElement("label",{style:{display:"flex",alignItems:"center",gap:"0.25rem",cursor:"pointer"}},n().createElement("input",{type:"radio",name:"wildcard-mode",value:"contains",checked:"contains"===r.wildcardMode,onChange:()=>a({...r,wildcardMode:"contains"})}),n().createElement("span",{style:{fontSize:"0.875rem"}},"Contains (%value%)")),n().createElement("label",{style:{display:"flex",alignItems:"center",gap:"0.25rem",cursor:"pointer"}},n().createElement("input",{type:"radio",name:"wildcard-mode",value:"startsWith",checked:"startsWith"===r.wildcardMode,onChange:()=>a({...r,wildcardMode:"startsWith"})}),n().createElement("span",{style:{fontSize:"0.875rem"}},"Starts with (value%)")),n().createElement("label",{style:{display:"flex",alignItems:"center",gap:"0.25rem",cursor:"pointer"}},n().createElement("input",{type:"radio",name:"wildcard-mode",value:"endsWith",checked:"endsWith"===r.wildcardMode,onChange:()=>a({...r,wildcardMode:"endsWith"})}),n().createElement("span",{style:{fontSize:"0.875rem"}},"Ends with (%value)")),n().createElement("label",{style:{display:"flex",alignItems:"center",gap:"0.25rem",cursor:"pointer"}},n().createElement("input",{type:"radio",name:"wildcard-mode",value:"none",checked:"none"===r.wildcardMode,onChange:()=>a({...r,wildcardMode:"none"})}),n().createElement("span",{style:{fontSize:"0.875rem"}},"None (exact match)"))))),n().createElement(o.$nd,{onClick:()=>{if(!r.column.trim())return;let n=ra.find(e=>e.value===r.operator);n?.requiresValue&&!r.value.trim()||(t([...e,{id:`custom_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,column:r.column.trim(),operator:r.operator,value:((e,t)=>{if("IS NULL"===e||"IS NOT NULL"===e)return!0;if("IN"===e||"NOT IN"===e)return t.split(",").map(e=>e.trim()).filter(Boolean);if("BETWEEN"===e){let e=t.split(",").map(e=>e.trim()).filter(Boolean);if(2===e.length)return JSON.stringify({start:e[0],end:e[1]})}return t})(r.operator,r.value),wildcardMode:"LIKE"===r.operator?r.wildcardMode:void 0}]),a({column:"",operator:"=",value:"",wildcardMode:"contains"}))},size:"sm"},"Add Condition"))),e.length>0&&n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Custom Conditions"),n().createElement(o.BJc,{gap:3},e.map(r=>n().createElement("div",{key:r.id,style:{display:"flex",alignItems:"center",gap:"0.5rem",padding:"0.5rem",backgroundColor:"var(--cds-background, #ffffff)",border:"1px solid var(--cds-interactive-01, #0f62fe)",borderRadius:"0.25rem"}},n().createElement(o.vwO,{type:"blue",style:{margin:0}},r.column),n().createElement("span",null,r.operator),r.wildcardMode&&"LIKE"===r.operator&&n().createElement(o.vwO,{type:"cool-gray",style:{margin:0,fontSize:"0.75rem"}},"contains"===r.wildcardMode?"%value%":"startsWith"===r.wildcardMode?"value%":"endsWith"===r.wildcardMode?"%value":"exact"),"boolean"==typeof r.value?n().createElement("span",{style:{color:"var(--cds-text-secondary, #525252)"}},"(toggle enabled)"):Array.isArray(r.value)?n().createElement(o.vwO,{type:"cool-gray",style:{margin:0}},r.value.join(", ")):n().createElement("span",{style:{fontFamily:"monospace"}},String(r.value)),n().createElement(o.$nd,{size:"sm",kind:"ghost",hasIconOnly:!0,renderIcon:()=>n().createElement("span",null,"\xd7"),onClick:()=>{var a;return a=r.id,void t(e.filter(e=>e.id!==a))},style:{marginLeft:"auto"}},"Remove"))))))}function rl(e){return`'${String(e).replace(/'/g,"''")}'`}function ri(e){let t=String(e??"").trim();return!t||t.includes(".")||t.includes("(")||t.includes(" ")||t.includes("`")?t:`a.${t}`}function ro(e){let t=String(e).trim(),r=t.match(/^(\d+)A+$/);if(r)return r[1];let a=t.match(/^(\d+)/);return a?a[1]:t}function rs(e){return(Array.isArray(e)?e:[e]).map(e=>String(e)).filter(e=>e.trim().length>0)}function rd(e){if(!e?.configJson)return null;let t=null;try{t=JSON.parse(e.configJson)}catch{return null}if(!t||"object"!=typeof t)return null;if(t.themeUuid&&t.themeConfig)return{version:1,themeUuid:t.themeUuid,themeConfig:t.themeConfig,conditions:Array.isArray(t.conditions)?t.conditions:[],customConditions:Array.isArray(t.customConditions)?t.customConditions:[],excludeDateFilter:!0===t.excludeDateFilter,countDistinctPatientId:!0===t.countDistinctPatientId,sqlPreview:t.sqlPreview??e.sqlTemplate??""};if(t.base?.themeUuid&&t.base?.themeConfig)return{version:1,themeUuid:t.base.themeUuid,themeConfig:t.base.themeConfig,conditions:Array.isArray(t.base.conditions)?t.base.conditions:[],customConditions:Array.isArray(t.base.customConditions)?t.base.customConditions:[],excludeDateFilter:!0===t.base.excludeDateFilter,countDistinctPatientId:!0===t.base.countDistinctPatientId,sqlPreview:t.base.sqlPreview??e.sqlTemplate??""};if(t.authoring?.base?.themeUuid&&t.authoring?.base?.themeConfig){let r=t.authoring.base;return{version:1,themeUuid:r.themeUuid,themeConfig:r.themeConfig,conditions:Array.isArray(r.conditions)?r.conditions:[],customConditions:Array.isArray(r.customConditions)?r.customConditions:[],excludeDateFilter:!0===r.excludeDateFilter,countDistinctPatientId:!0===r.countDistinctPatientId,sqlPreview:r.sqlPreview??e.sqlTemplate??""}}return null}function rc(e){return"QUESTION_ANSWER_CONCEPT_SEARCH"===e.handler?{questions:[],answers:[]}:"IN"===e.operator||"NOT_IN"===e.operator?[]:"BETWEEN"===e.operator||"DATE_RANGE"===e.handler?{start:"",end:""}:""}function rm({open:e,mode:t,initial:r,initialConceptUi:a,initialQaUi:l,onClose:i,onCreate:s,onUpdate:d,onSaved:c}){let m="edit"===t,u="duplicate"===t,[p,_]=n().useState("basics"),[g,E]=n().useState(""),[f,b]=n().useState(""),[y,h]=n().useState(""),[v,S]=n().useState([]),[T,C]=n().useState(!1),[w,N]=n().useState(null),[I,k]=n().useState(""),[A,R]=n().useState(null),[O,D]=n().useState(null),[x,L]=n().useState([]),[M,$]=n().useState([]),[P,U]=n().useState(!1),[B,F]=n().useState(!1),[z,q]=n().useState({}),[j,H]=n().useState({}),[J,G]=n().useState(""),[V,W]=n().useState(!1),[K,Q]=n().useState(!1);n().useEffect(()=>{if(!e)return;_("basics");let t=new AbortController;return C(!0),N(null),S([]),tU(void 0,t.signal).then(e=>S(e??[])).catch(e=>N(e?.message??"Failed to load themes")).finally(()=>C(!1)),()=>t.abort()},[e]),n().useEffect(()=>{if(e)if((m||u)&&r){E(r.name??""),b(r.code??""),h(r.description??"");let e=rd(r);e?.themeUuid&&e?.themeConfig?(k(e.themeUuid),R(e.themeConfig),L(e.conditions??[]),$(e.customConditions??[]),U(e.excludeDateFilter??!1),F(e.countDistinctPatientId??!1),G(e.sqlPreview??"")):(k(r.themeUuid??""),R(null),L([]),$([]),U(!1),F(!1),G("")),q(a??{}),H(l??{}),W(!1)}else E(""),b(""),h(""),k(""),R(null),D(null),L([]),$([]),U(!1),F(!1),q({}),H({}),G(""),W(!0)},[e,m,u,r,a,l]);let Y=n().useCallback(e=>{k(e),W(!0)},[]),X=n().useCallback(e=>{L(e),W(!0)},[]);n().useEffect(()=>{if(!e)return;if(!I){R(null),D(null),L([]),m||G("");return}if(A?.sourceTable&&r?.configJson){let e=rd(r);if(e?.themeUuid===I&&e?.themeConfig?.sourceTable===A.sourceTable)return}let t=new AbortController;return D(null),tB(I,t.signal).then(e=>{let t,r=(t=function(e,t){try{if(!e)return t;return JSON.parse(e)??t}catch{return t}}(e.configJson,{}))&&"object"==typeof t&&t.configJson&&"object"==typeof t.configJson?t.configJson:t;R(r),L(e=>(function(e,t){let r=new Map;for(let e of t??[])e?.key&&r.set(e.key,e);let a=[];for(let t of e??[]){if(!t?.key)continue;let e=r.get(t.key);if(e){a.push(e);continue}a.push({key:t.key,operator:t.operator,valueType:t.valueType,value:rc(t)})}for(let e of t??[])if(e?.key&&!r.has(e.key))continue;for(let r of t??[])r?.key&&((e??[]).some(e=>e?.key===r.key)||a.push(r));return a})(r.conditions??[],e??[])),q(e=>{let t={...e??{}};for(let e of r.conditions??[])"CONCEPT_SEARCH"!==e.handler||e.key in t||(t[e.key]=[]);return t}),H(e=>{let t={...e??{}};for(let e of r.conditions??[])"QUESTION_ANSWER_CONCEPT_SEARCH"!==e.handler||e.key in t||(t[e.key]={questions:[],answers:[]});return t})}).catch(e=>D(e?.message??"Failed to load theme config")),()=>t.abort()},[e,I]),n().useEffect(()=>{!A||K||(m||u)&&!V||G(function(e,t){if(!t||0===t.length)return e;let r=e.split("\n"),a=r.findIndex(e=>"WHERE"===e.trim()),n=r.length;if(a>=0)for(let e=a+1;e<r.length;e++){let t=r[e]?.trim();if(!t||";"===t||t.startsWith("JOIN")||t.startsWith("ORDER BY")||t.startsWith("GROUP BY")||t.startsWith("LIMIT")||t.startsWith("HAVING")){n=e;break}}let l=[],i=e=>{l.push(` AND ${e}`)};for(let e of t){let t=ri(e.column),r=t4(e.operator),a=e.value;if(t7(r)){!0===a&&i(`${t} ${r}`);continue}if(Array.isArray(a)){if(0===a.length)continue;let e=a.every(e=>/^[0-9]+$/.test(String(e))),n=a.map(t=>e?t:rl(String(t))).join(",");i("NOT IN"===r?`${t} NOT IN (${n})`:"IN"===r?`${t} IN (${n})`:`${t} ${r} (${n})`);continue}let n=null;if("object"==typeof a&&null!==a&&"start"in a&&"end"in a)n=a;else if("string"==typeof a)try{let e=JSON.parse(a);e&&"object"==typeof e&&"start"in e&&"end"in e&&(n=e)}catch{}if(n){let e=n.start,r=n.end;if(null!=e&&""!==e&&null!=r&&""!==r){let a=/^[0-9]+$/.test(String(e)),n=/^[0-9]+$/.test(String(r)),l=a?e:rl(String(e)),o=n?r:rl(String(r));i(`${t} BETWEEN ${l} AND ${o}`)}continue}let l=String(a);if(""===l)continue;if(t8(r)&&l.includes(",")){let e=l.split(",").map(e=>e.trim()).filter(Boolean);if(0===e.length)continue;let a=e.every(e=>/^[0-9]+$/.test(e)),n=e.map(e=>a?e:rl(e)).join(",");i("NOT IN"===r?`${t} NOT IN (${n})`:`${t} IN (${n})`);continue}let o=/^[0-9]+$/.test(l)?l:rl(l);if(t8(r))i("NOT IN"===r?`${t} NOT IN (${o})`:`${t} IN (${o})`);else if("BETWEEN"===r)continue;else if("LIKE"===r){let r=l;"contains"===e.wildcardMode?r=`%${l}%`:"startsWith"===e.wildcardMode?r=`${l}%`:"endsWith"===e.wildcardMode&&(r=`%${l}`);let a=rl(r);i(`${t} LIKE ${a}`)}else i(`${t} ${r} ${o}`)}return 0===l.length?e:(r.splice(n,0,...l),r.join("\n"))}(function(e,t,r){let a=e.split("\n"),n=a.findIndex(e=>"WHERE"===e.trim()),l=a.length;if(n>=0)for(let e=n+1;e<a.length;e++){let t=a[e]?.trim();if(!t||";"===t||t.startsWith("JOIN")||t.startsWith("ORDER BY")||t.startsWith("GROUP BY")||t.startsWith("LIMIT")||t.startsWith("HAVING")){l=e;break}}let i=[],o=e=>{i.push(` AND ${e}`)};for(let e of t??[]){var s;let t=r.find(t=>t.key===e.key);if(!t)continue;let a=t.value;if(null==a)continue;let n=t4(t.operator??e.operator??"IN");if("QUESTION_ANSWER_CONCEPT_SEARCH"===e.handler&&(s=a)&&"object"==typeof s&&("question"in s||"questions"in s||"answers"in s)){let t=Array.isArray(a.questions)?a.questions:null!==a.question&&void 0!==a.question&&""!==String(a.question).trim()?[a.question]:[],r=Array.isArray(a.answers)?a.answers:[],l=e?.columns?.question??e.questionColumn,i=e?.columns?.answer??e.answerColumn;if((!l||!i)&&e?.column){let t=function(e){let t=String(e??"").trim();if(!t)return{questionColumn:void 0,answerColumn:void 0};let r=t.match(/QA\s*$begin:math:text$\(\.\*\)$end:math:text$/i);if(!r)return{questionColumn:void 0,answerColumn:void 0};let a=(r[1]??"").trim();if(!a)return{questionColumn:void 0,answerColumn:void 0};let n=a.split(",").map(e=>e.trim()).filter(Boolean);return{questionColumn:n[0],answerColumn:n[1]}}(e.column);l=l??t.questionColumn,i=i??t.answerColumn}let s=e?.column;if(!l&&s&&(l=s),!i&&s&&!function(e){let t=String(e??"").trim();return/^([a-z]\.)?QA\s*\(/i.test(t)}(s)&&(i=s),l&&t.length){let r=rs(t);if(r.length){let t="conceptId"===e.valueType||r.every(e=>/^[0-9]+$/.test(e)),a=r.map(e=>t?e:rl(e)).join(","),n=ri(l);o(1===r.length?`${n} = ${a}`:`${n} IN (${a})`)}}if(i&&Array.isArray(r)&&r.length){let t=rs(r);if(t.length){let r=/diagnosis_coded|diagnosis|concept|coded/i.test(i||"")&&("conceptUuid"===e.valueType||t.some(e=>/^[0-9]+A+$/.test(String(e)))||t.some(e=>String(e).length>20))?t.map(e=>ro(String(e))):t,a="conceptId"===e.valueType||r.every(e=>/^[0-9]+$/.test(e)),l=r.map(e=>a?e:rl(e)).join(","),s=ri(i);o("NOT IN"===n?`${s} NOT IN (${l})`:`${s} IN (${l})`)}}continue}if(Array.isArray(a)){let t=rs(a);if(!t.length)continue;let r=/diagnosis_coded|diagnosis|concept|coded/i.test(e.column||"")&&("conceptUuid"===e.valueType||t.some(e=>/^[0-9]+A+$/.test(String(e)))||t.some(e=>String(e).length>20))?t.map(e=>ro(String(e))):t,l="conceptId"===e.valueType||r.every(e=>/^[0-9]+$/.test(e)),i=r.map(e=>l?e:rl(e)).join(","),s=ri(e.column);if("BETWEEN"===n){if(2===t.length){let[e,t]=r.map(e=>l?e:rl(e));o(`${s} BETWEEN ${e} AND ${t}`)}continue}o("NOT IN"===n?`${s} NOT IN (${i})`:"IN"===n?`${s} IN (${i})`:`${s} ${n} (${i})`);continue}if("BETWEEN"===n&&"object"==typeof a&&null!==a&&"start"in a&&"end"in a){let t=a.start,r=a.end;if(null!=t&&""!==t&&null!=r&&""!==r){let a="conceptId"===e.valueType||/^[0-9]+$/.test(String(t)),n="conceptId"===e.valueType||/^[0-9]+$/.test(String(r)),l=a?t:rl(String(t)),i=n?r:rl(String(r)),s=ri(e.column);o(`${s} BETWEEN ${l} AND ${i}`)}continue}if("object"==typeof a)continue;let l=ri(e.column);if(t7(n)){o(`${l} ${n}`);continue}let i=String(a);if(""===i)continue;let d="conceptId"===e.valueType||/^[0-9]+$/.test(i)?i:rl(i);if(t8(n))o("NOT IN"===n?`${l} NOT IN (${d})`:`${l} IN (${d})`);else{if("BETWEEN"===n)continue;o(`${l} ${n} ${d}`)}}return a.splice(l,0,...i),a.join("\n")}(function(e,t=!1,r=!1){let a=e.sourceTable,n=e.patientIdColumn,l=e.dateColumn,i=[];return i.push("SELECT"),i.push(` COUNT${r?`(DISTINCT a.${n})`:"(*)"} AS total`),i.push(`FROM ${a} a`),i.push("JOIN mamba_fact_patients_latest_patient_demographics mdp"),i.push(` ON mdp.${n} = a.${n}`),i.push("WHERE"),t||(i.push(` a.${l} >= :startDate`),i.push(` AND a.${l} < :endDate`)),t?i.push(" mdp.birthdate IS NOT NULL"):i.push(" AND mdp.birthdate IS NOT NULL"),i.push(" AND mdp.gender IS NOT NULL"),i.push(";"),i.join("\n")}(A,P,B),A.conditions??[],x),M))},[A,x,M,P,B,m,u,V,K]);let Z=!!g.trim()&&!!I&&!!A?.sourceTable&&!!A?.patientIdColumn&&!!A?.dateColumn,ee=async()=>{if(!Z||!A)return;let e=function(e,t,r,a){let n=new Map;for(let e of t??[])e?.key&&n.set(e.key,e);let l=[];for(let t of e??[]){if(!t?.key)continue;let e=n.get(t.key),i=e?{...e}:{key:t.key,operator:t.operator,valueType:t.valueType,value:rc(t)};if("CONCEPT_SEARCH"===t.handler){let e=(r?.[t.key]??[]??[]).map(e=>e.uuid).filter(Boolean);i.valueType="conceptUuid",i.value=e}if("QUESTION_ANSWER_CONCEPT_SEARCH"===t.handler){let e=a?.[t.key]??{questions:[],answers:[]},r=(e.questions??[]).map(e=>e.uuid).filter(Boolean),n=(e.answers??[]).map(e=>e.uuid).filter(Boolean);i.valueType="conceptUuid",i.value={questions:r,answers:n}}l.push(i)}let i=new Set((e??[]).map(e=>e?.key).filter(Boolean));for(let e of t??[])e?.key&&(i.has(e.key)||l.push(e));return l}(A.conditions??[],x,z,j),t={version:1,themeUuid:I,themeConfig:A,conditions:e,customConditions:M,excludeDateFilter:P,countDistinctPatientId:B,sqlPreview:J},a={name:g.trim(),code:f.trim()||void 0,description:y.trim()||void 0,kind:"BASE",defaultValueType:"NUMBER",themeUuid:I,configJson:JSON.stringify(t,null,2),sqlTemplate:J,metaJson:void 0};m&&r?.uuid?await d(r.uuid,a):await s(a),c()};if(!e)return null;let et=({id:e,label:t})=>n().createElement(o.VxE,{isActive:p===e,onClick:()=>_(e)},t);return n().createElement(o.aFV,{open:e,modalHeading:m?"Edit Base Indicator":u?"Duplicate Base Indicator":"Create Base Indicator",primaryButtonText:m?"Save":u?"Create Duplicate":"Create",secondaryButtonText:"Cancel",onRequestClose:i,onRequestSubmit:ee,primaryButtonDisabled:!Z,size:"lg"},n().createElement(o.BJc,{gap:6},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":"Indicator editor sections"},n().createElement(o.BC4,null,n().createElement(et,{id:"basics",label:"Basics"}),n().createElement(et,{id:"theme",label:"Theme"}),n().createElement(et,{id:"conditions",label:"Conditions"}),n().createElement(et,{id:"sql",label:"SQL Preview"})))),n().createElement(o.UCW,{style:{padding:0}},"basics"===p?n().createElement(tF,{value:{name:g,code:f,description:y},onChange:e=>{E(e.name),b(e.code),h(e.description)}}):null,"theme"===p?n().createElement(o.BJc,{gap:6},n().createElement(tz,{themes:v,loading:T,error:w,themeUuid:I,onThemeUuidChange:Y,themeConfigError:O}),A?.dateColumn?n().createElement("div",{style:{padding:"1rem",backgroundColor:"var(--cds-background, #f4f4f4)",borderRadius:"0.25rem",border:"1px solid var(--cds-interactive-01, #0f62fe)"}},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Date Filtering Control"),n().createElement("div",{style:{fontSize:"0.875rem",color:"var(--cds-text-secondary, #525252)",marginBottom:"1rem"}},"By default, the theme automatically filters by ",n().createElement("code",null,A.dateColumn)," between the start and end dates. You can exclude this to define your own custom date conditions."),n().createElement(o.lMk,{id:"exclude-date-filter",labelText:"Exclude automatic date filtering",labelA:"Use theme date filtering",labelB:"Use custom date conditions",toggled:P,onToggle:e=>{U(e),W(!0)}})):null,A?.patientIdColumn?n().createElement("div",{style:{padding:"1rem",backgroundColor:"var(--cds-background, #f4f4f4)",borderRadius:"0.25rem",border:"1px solid var(--cds-interactive-01, #0f62fe)"}},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Patient Counting Method"),n().createElement("div",{style:{fontSize:"0.875rem",color:"var(--cds-text-secondary, #525252)",marginBottom:"1rem"}},"By default, the indicator counts all matching rows. Enable this option to count ",n().createElement("strong",null,"distinct patients only")," based on ",n().createElement("code",null,A.patientIdColumn),". This ensures each patient is counted only once, even if they have multiple matching records."),n().createElement(o.lMk,{id:"count-distinct-patients",labelText:"Count distinct patients",labelA:"Count all rows",labelB:"Count distinct patients",toggled:B,onToggle:e=>{F(e),W(!0)}})):null):null,"conditions"===p?n().createElement(o.BJc,{gap:8},n().createElement(rt,{conditions:A?.conditions??[],picked:x,onPickedChange:X,conceptUi:z,onConceptUiChange:e=>{q(e),W(!0)},qaUi:j,onQaUiChange:e=>{H(e),W(!0)}}),n().createElement("div",{style:{marginTop:"2rem",borderTop:"1px solid var(--cds-interactive-01, #0f62fe)",paddingTop:"1.5rem"}},n().createElement("div",{style:{fontWeight:600,marginBottom:"1rem"}},"Custom Conditions"),n().createElement("div",{style:{fontSize:"0.875rem",color:"var(--cds-text-secondary, #525252)",marginBottom:"1rem"}},"Add your own conditions beyond the theme-defined ones. These will be applied in addition to the theme conditions."),n().createElement(rn,{conditions:M,onChange:e=>{$(e),W(!0)}}))):null,"sql"===p?n().createElement(rr,{sql:J,onChange:e=>{G(e),Q(!0)},onReset:()=>{Q(!1),W(!0)}}):null))))}let ru="/reportbuilder/indicator";function rp(e){return{...e,configJson:e.configJson?(0,K.j)(e.configJson):e.configJson,metaJson:e.metaJson?(0,K.j)(e.metaJson):e.metaJson,sqlTemplate:e.sqlTemplate?(0,K.j)(e.sqlTemplate):e.sqlTemplate,denominatorSqlTemplate:e.denominatorSqlTemplate?(0,K.j)(e.denominatorSqlTemplate):e.denominatorSqlTemplate}}async function r_(e,t){var r;let a=e?.q?.trim(),n=e?.kind?.trim?.()?e.kind:e?.kind,l=e?.includeRetired===!0,i=e?.v??"default",o=new URLSearchParams;return o.set("v",i),a&&o.set("q",a),n&&o.set("kind",n),l&&o.set("includeRetired","true"),(!(r=await (0,W.wO)(`${ru}?${o.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid).map(rp)}async function rg(e,t,r="full"){return rp(await (0,W.wO)(`${ru}/${encodeURIComponent(e)}?v=${r}`,t))}async function rE(e,t){return(0,W.oV)(ru,e,t)}async function rf(e,t,r){return(0,W.oV)(`${ru}/${encodeURIComponent(e)}`,t,r)}async function rb(e,t=!1,r="Retired via UI",a){let n=t?"purge=true":`purge=false&reason=${encodeURIComponent(r)}`;await (0,W.hI)(`${ru}/${encodeURIComponent(e)}?${n}`,a)}function ry({value:e,onChange:t}){return n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"composite-name",labelText:"Indicator Name",value:e.name,onChange:r=>t({...e,name:r.target.value})}),n().createElement(o.ksK,{id:"composite-code",labelText:"Code",helperText:"Auto-generated if blank",value:e.code,onChange:r=>t({...e,code:r.target.value}),placeholder:"E.g. PREG_AND_MAL"}),n().createElement(o.fs1,{id:"composite-description",labelText:"Description",value:e.description,onChange:r=>t({...e,description:r.target.value})}))}function rh(e){let t=[],r=(e?.sqlTemplate??"").trim();if(r)return{sql:rT(r),source:"indicator.sqlTemplate"};t.push("indicator.sqlTemplate");let a=null;try{a=e?.configJson?JSON.parse(e.configJson):null}catch(e){a=null}if(!a)return rv(e,t,"configJson is null or invalid JSON");let n=(e,r)=>{t.push(e);let n=(r(a)??"").trim();return n?{sql:rT(n),source:e,parsedConfig:a}:null},l=n("configJson.sqlPreview",e=>e.sqlPreview)||n("configJson.sqlTemplate",e=>e.sqlTemplate)||n("configJson.base.sqlPreview",e=>e.base?.sqlPreview)||n("configJson.base.sqlTemplate",e=>e.base?.sqlTemplate)||n("configJson.authoring.base.sqlPreview",e=>e.authoring?.base?.sqlPreview)||n("configJson.authoring.base.sqlTemplate",e=>e.authoring?.base?.sqlTemplate)||n("configJson.baseIndicator.sqlPreview",e=>e.baseIndicator?.sqlPreview)||n("configJson.baseIndicator.sqlTemplate",e=>e.baseIndicator?.sqlTemplate);return l||(t.push("none"),rv(e,t,"No SQL found in any known config location"))}function rv(e,t,r){return{success:!1,error:`SQL_RESOLUTION_FAILED: ${r}`,indicator:{uuid:e.uuid,code:e.code,name:e.name,kind:e.kind},attemptedSources:t}}function rS(e){return!1===e.success}function rT(e){return e?e.replace(/\\n/g,"\n"):e}function rC(e,t){return t||("Encounters"===e?"encounter_id":"patient_id")}function rw(e){try{let t=e?.configJson?JSON.parse(e.configJson):null,r=t?.themeConfig?{...t.themeConfig,_source:"themeConfig"}:t?.base?.themeConfig?{...t.base.themeConfig,_source:"base.themeConfig"}:t?.authoring?.base?.themeConfig?{...t.authoring.base.themeConfig,_source:"authoring.base.themeConfig"}:t?.baseIndicator?.themeConfig?{...t.baseIndicator.themeConfig,_source:"baseIndicator.themeConfig"}:null,a=r?.patientIdColumn;return a?String(a):"patient_id"}catch{return"patient_id"}}function rN(e){let t=rh(e);return rS(t)?{sql:"",source:!1===t.success?"none(parse-error)":"none"}:{sql:t.sql,source:t.source}}function rI(e){let t=e.match(/FROM\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+(?:AS\s+)?([a-zA-Z_][a-zA-Z0-9_]*)\b/i);return t?t[2]:null}function rk(e,t,r){var a;let n=t||rC(r),l=(e??"").trim();if(!l)return"";let i=(l=(a=l)?a.replace(/\\n/g,"\n"):a).replace(/;+\s*$/,""),o=i.match(/SELECT\s+COUNT\s*\(\s*DISTINCT\s+([a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)?)\s*\)\s+FROM/i);if(o){let e=o[1],t=o[0].length-5,r=i.substring(t).trim();if(e.includes("."))return rA(`SELECT DISTINCT ${e} AS ${n} ${r}`.trim(),n);let a=rI(r)||"a";return rA(`SELECT DISTINCT ${a}.${e} AS ${n} ${r}`.trim(),n)}let s=i.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(s){let e=s[1],t=i.substring(s[0].length);if(e.includes("."))return rA(`SELECT DISTINCT ${e} AS ${n} ${t}`.trim(),n);let r=rI(t)||"a";return rA(`SELECT DISTINCT ${r}.${e} AS ${n} ${t}`.trim(),n)}let d=i.search(/SELECT\s+COUNT\s*\(\s*\*\s*\)\s+AS\s+total/i),c=i.match(/FROM\s*\(\s*(SELECT[\s\S]*?)\)\s*X\b/i);if(d>=0&&c?.[1]){let e=i.slice(0,d).trim(),t=c[1].trim().replace(/;+\s*$/,"");return rA(`
|
|
7
|
+
Context snapshot: ${r?JSON.stringify(t??{},null,2):"{}"}`,rawPrompt:e,usedContext:r}}function H({open:e,onClose:t,context:r}){let{t:l}=(0,A.useTranslation)(),[i,s]=(0,a.useState)(""),[d,c]=(0,a.useState)(!0),[m,u]=(0,a.useState)(!1),[p,_]=(0,a.useState)(null),g=!!i.trim()&&!m,E=async()=>{u(!0),_(null);try{let e=await j(i.trim(),r,d);_(e.body)}finally{u(!1)}};return n().createElement(o.aFV,{open:e,modalHeading:l("aiAssistPreview","AI Assist (Preview)"),primaryButtonText:m?l("generating","Generating…"):l("generate","Generate"),secondaryButtonText:l("close","Close"),primaryButtonDisabled:!g,onRequestClose:()=>{t()},onRequestSubmit:E},n().createElement("div",{style:{display:"grid",gap:"1rem"}},n().createElement(o.fs1,{labelText:l("aiPromptLabel","What do you want to build?"),helperText:l("aiPromptHelp","Example: 'Create an indicator for Malaria tested (RDT) grouped by facility and month.'"),value:i,onChange:e=>s(e.target.value),rows:5}),n().createElement(o.Sc0,{id:"aiUseContext",labelText:l("aiUseContext","Use current page context (filters, selections)"),checked:d,onChange:(e,{checked:t})=>c(t)}),m?n().createElement(o.OuH,{description:l("aiWorking","Generating suggestion…")}):null,p?n().createElement(o.z7k,{type:"multi",wrapText:!0},p):null))}function J({context:e,size:t="md",kind:r="secondary"}){let{t:l}=(0,A.useTranslation)(),[i,s]=(0,a.useState)(!1);return n().createElement(n().Fragment,null,n().createElement(o.$nd,{kind:r,size:t,onClick:()=>s(!0)},l("aiAssist","AI Assist")),n().createElement(H,{open:i,onClose:()=>s(!1),context:e}))}let G=({title:e,subtitle:t,status:r,actions:a,showAiAssist:l=!0})=>{let{t:i}=(0,A.useTranslation)(),o=(0,h.useSession)(),s=o?.sessionLocation?.display,d=r?.label;return n().createElement("div",{className:"-esm-report-builder__header__header___47xBe"},n().createElement("div",{className:"-esm-report-builder__header__left___MTnNb"},n().createElement("div",{className:"-esm-report-builder__header__illustrationWrap___wLvnU"},n().createElement(B,null)),n().createElement("div",{className:"-esm-report-builder__header__pageLabels___jGqXU"},n().createElement("div",{className:"-esm-report-builder__header__appName___vo79+"},i("reportBuilder","Report builder")),n().createElement("h1",{className:"-esm-report-builder__header__pageTitle___yen64"},e),(d||t)&&n().createElement("div",{className:"-esm-report-builder__header__metaLine___8udok"},d?n().createElement("span",{className:F},d):null,d&&t?n().createElement("span",{className:z},"•"):null,t?n().createElement("span",{className:F},t):null))),n().createElement("div",{className:"-esm-report-builder__header__right___ktlk0"},n().createElement("div",{className:"-esm-report-builder__header__rightTop___dHkjX"},n().createElement("div",{className:"-esm-report-builder__header__userRow___0NO8e"},n().createElement("span",{className:"-esm-report-builder__header__userName___5pWCK"},o?.user?.person?.display),n().createElement(P.rs,{size:18,className:"-esm-report-builder__header__userIcon___6zIIb"})),n().createElement("div",{className:"-esm-report-builder__header__contextRow___Gdfx6"},n().createElement(p.aZ,{size:16}),n().createElement("span",{className:q},s),n().createElement("span",{className:z},"•"),n().createElement(_.Vv,{size:16}),n().createElement("span",{className:q},(0,h.formatDate)(new Date,{mode:"standard"})),n().createElement(U.yQ,{size:16,className:"-esm-report-builder__header__chevron___gRrx2"}))),l||a?n().createElement("div",{className:"-esm-report-builder__header__actions___PN6-D"},l?n().createElement(J,{context:{page:e}}):null,a):null))},V=()=>{let{t:e}=(0,A.useTranslation)(),t=(0,i.Zp)(),{has:r}=v(),a=r(y.RB.REPORT_ADD),l=r(y.RB.INDICATOR_VIEW),s=r(y.RB.SECTION_VIEW),c=r(y.RB.REPORT_RUN),g=r(y.RB.REPORT_VIEW);return n().createElement("div",{className:"-esm-report-builder__report-builder-landing-page__page___gK8K9"},n().createElement(G,{title:e("welcomeReporting","Welcome Report Builder"),subtitle:e("welcomeReportingHint","Manage health data reports, define indicators, and run reports with ease.")}),n().createElement("div",{className:"-esm-report-builder__report-builder-landing-page__cardsGrid___jgHPO"},!a&&!l&&!s&&!c&&!g&&n().createElement(o.jeF,{lowContrast:!0,kind:"info",title:e("noAccessTitle","No access"),subtitle:e("noAccessSubtitle","You do not have access to any Report Builder features. Contact your administrator."),hideCloseButton:!0}),a&&n().createElement(o.FAs,{className:R},n().createElement("div",{className:O,"aria-hidden":!0},n().createElement("div",{className:D},n().createElement(u.pl,{size:56}))),n().createElement("h3",{className:x},e("createReports","Create Reports")),n().createElement("p",{className:L},e("createReportsHint","Define and configure health data reports tailored to your needs.")),n().createElement("div",{className:M},n().createElement(o.$nd,{kind:"primary",size:"lg",renderIcon:b.OM,className:$,onClick:()=>t("/new")},e("getStarted","Get started")))),l&&n().createElement(o.FAs,{className:R},n().createElement("div",{className:O,"aria-hidden":!0},n().createElement("div",{className:D},n().createElement(_.n5,{size:56}))),n().createElement("h3",{className:x},e("manageIndicators","Manage Indicators")),n().createElement("p",{className:L},e("manageIndicatorsHint","Create, edit, and organize indicators to measure key health metrics.")),n().createElement("div",{className:M},n().createElement(o.$nd,{kind:"primary",size:"lg",renderIcon:_.n5,className:$,onClick:()=>t("/indicators")},e("viewIndicators","View indicators")))),s&&n().createElement(o.FAs,{className:R},n().createElement("div",{className:O,"aria-hidden":!0},n().createElement("div",{className:D},n().createElement(m.vd,{size:56}))),n().createElement("h3",{className:x},e("manageSections","Manage Sections")),n().createElement("p",{className:L},e("manageSectionsHint","Create and manage indicator sections for organized report disaggregation.")),n().createElement("div",{className:M},n().createElement(o.$nd,{kind:"primary",size:"lg",renderIcon:m.vd,className:$,onClick:()=>t("/sections")},e("viewSections","View sections")))),c&&n().createElement(o.FAs,{className:R},n().createElement("div",{className:O,"aria-hidden":!0},n().createElement("div",{className:D},n().createElement(d.jG,{size:56}))),n().createElement("h3",{className:x},e("runReports","Run Reports")),n().createElement("p",{className:L},e("runReportsHint","Choose a report and run it for specific time periods and locations.")),n().createElement("div",{className:M},n().createElement(o.$nd,{kind:"primary",size:"lg",renderIcon:d.jG,className:$,onClick:()=>t("/run")},e("runNow","Run now")))),g&&n().createElement(o.FAs,{className:R},n().createElement("div",{className:O,"aria-hidden":!0},n().createElement("div",{className:D},n().createElement(p.B8,{size:56}))),n().createElement("h3",{className:x},e("linelistReports","Linelist Reports")),n().createElement("p",{className:L},e("linelistReportsHint","Create and manage patient list reports that return individual patient records.")),n().createElement("div",{className:M},n().createElement(o.$nd,{kind:"primary",size:"lg",renderIcon:p.B8,className:$,onClick:()=>t("/linelist")},e("viewLinelistReports","View linelist reports"))))))};var W=r(9669),K=r(300);let Q="/reportbuilder/report";function Y(e){return{...e,configJson:e.configJson?(0,K.j)(e.configJson):e.configJson,metaJson:e.metaJson?(0,K.j)(e.metaJson):e.metaJson}}async function X(e,t){var r;let a=e?.q?.trim(),n=e?.includeRetired===!0,l=e?.v??"default",i=new URLSearchParams;return i.set("v",l),a&&i.set("q",a),n&&i.set("includeRetired","true"),(!(r=await (0,W.wO)(`${Q}?${i.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid).filter(e=>{if("LINE_LIST"===e?.reportType)return!1;if(e.configJson)try{let t=JSON.parse(e.configJson);if(t?.type==="LINE_LIST")return!1}catch(e){}return!0}).map(Y)}async function Z(e,t,r="full"){return Y(await (0,W.wO)(`${Q}/${encodeURIComponent(e)}?v=${r}`,t))}async function ee(e,t){return Y(await (0,W.oV)(Q,e,t))}async function et(e,t,r){return Y(await (0,W.oV)(`${Q}/${encodeURIComponent(e)}`,t,r))}async function er(e,t,r){let a={reportUuid:e,category:t};return console.log("compileReport sending:",a),(0,W.oV)("/reportbuilder/reportcompile",a,r)}let ea="/reportbuilder/reportcategory";async function en(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)(`${ea}?${a.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid)}async function el(e,t){return(0,W.oV)(ea,e,t)}async function ei(e,t,r){return(0,W.oV)(`${ea}/${encodeURIComponent(e)}`,t,r)}async function eo(e,t="Retired from Report Builder Admin",r){let a=new URLSearchParams;return a.set("reason",t),(0,W.hI)(`${ea}/${encodeURIComponent(e)}?${a.toString()}`,r)}var es=r(771),ed=r(1673);async function ec(e,t){let r=await (0,W.oV)("/reportbuilder/ship",e,t);return{success:r.success,message:r.message,...r.data,errorMessage:r.success?void 0:r.message}}async function em(e,t){return(0,W.oV)("/reportbuilder/import",e,t)}async function eu(e,t){let r=new URLSearchParams;e?.q&&r.set("q",e.q),e?.status&&r.set("status",e.status),e?.startIndex!==void 0&&r.set("startIndex",e.startIndex.toString()),e?.limit!==void 0&&r.set("limit",e.limit.toString());let a=r.toString(),n=`/ws/rest/v1/reportbuilder/packages${a?`?${a}`:""}`;return(await (0,W.wO)(n,t)).results||[]}let ep="-esm-report-builder__import-export-styles__emptyState___I96L9",e_="-esm-report-builder__import-export-styles__emptyHint___nT4Nr",eg="-esm-report-builder__import-export-styles__formContainer___b6zNk",eE="-esm-report-builder__import-export-styles__formField___cWw-u",ef="-esm-report-builder__import-export-styles__progressContainer___I4MAL",eb="-esm-report-builder__import-export-styles__progressInfo___AhnlR",ey="-esm-report-builder__import-export-styles__progressBar___ET2Qo",eh="-esm-report-builder__import-export-styles__progressSteps___RfjAg",ev="-esm-report-builder__import-export-styles__progressStep___Bg6v6",eS="-esm-report-builder__import-export-styles__stepIcon___hUtTq",eT="-esm-report-builder__import-export-styles__stepLabel___9VwAv",eC="-esm-report-builder__import-export-styles__inProgress___NX0BD",ew="-esm-report-builder__import-export-styles__complete___TvaI9",eN="-esm-report-builder__import-export-styles__error___g7O-s",eI="-esm-report-builder__import-export-styles__success___2MCl-",ek="-esm-report-builder__import-export-styles__successContainer___abKLg",eA="-esm-report-builder__import-export-styles__successHeader___ljzON",eR="-esm-report-builder__import-export-styles__successIcon___Dp-ag",eO="-esm-report-builder__import-export-styles__resultInfo___acAZG",eD="-esm-report-builder__import-export-styles__summary___a-yFg",ex="-esm-report-builder__import-export-styles__stat___rsf0k",eL="-esm-report-builder__import-export-styles__statValue___wRXMb",eM="-esm-report-builder__import-export-styles__statLabel___rGVrJ",e$="-esm-report-builder__import-export-styles__importDetails___AkCbp",eP="-esm-report-builder__import-export-styles__itemList___RaOtp",eU="-esm-report-builder__import-export-styles__item___6ILQN",eB="-esm-report-builder__import-export-styles__filterSelect___4Zu1k",eF="-esm-report-builder__import-export-styles__itemsGrid___QxpSg",ez="-esm-report-builder__import-export-styles__itemTag___kVfdA",eq="-esm-report-builder__import-export-styles__actionCard___QCV3Z",ej="-esm-report-builder__import-export-styles__actionCardIcon___cvjeD",eH="-esm-report-builder__import-export-styles__actionCardContent___7BUgV",eJ="-esm-report-builder__import-export-styles__actionCardTitle___Uesgq",eG="-esm-report-builder__import-export-styles__actionCardDescription___izRDq",eV="-esm-report-builder__import-export-styles__tealButton___8l3au",eW="-esm-report-builder__import-export-styles__toolbarSearch___OgxuZ",eK="-esm-report-builder__import-export-styles__outlineButton___SK3Jb",eQ="-esm-report-builder__import-export-styles__panelCard___BBHbg",eY="-esm-report-builder__import-export-styles__section___mgFgw",eX="-esm-report-builder__import-export-styles__sectionTitle___7YSPe",eZ="-esm-report-builder__import-export-styles__sectionSubtitle___mrK3D",e0="-esm-report-builder__import-export-styles__groupCardIcon___ySaVM",e1="-esm-report-builder__import-export-styles__groupCardText___oIP-c",e2="-esm-report-builder__import-export-styles__groupCardCount___l4w-e",e5="-esm-report-builder__import-export-styles__groupCardStatus___RfCQs",e6="-esm-report-builder__import-export-styles__statusDot___GAmQo",e4="-esm-report-builder__import-export-styles__summaryRow___doWxx",e3="-esm-report-builder__import-export-styles__summaryRowValue___9U6F3",e8="-esm-report-builder__import-export-styles__emptyTitle___dlsSR",e7=[{key:"validate",label:"Validating resources...",status:"pending"},{key:"collect",label:"Resolving dependencies...",status:"pending"},{key:"package",label:"Creating package...",status:"pending"},{key:"complete",label:"Complete!",status:"pending"}],e9=({isOpen:e,onClose:t,onSuccess:r})=>{let[a,l]=n().useState(!1),[i,s]=n().useState(0),[d,c]=n().useState(e7),[m,u]=n().useState(null),[p,_]=n().useState(null),g=n().useCallback(()=>{l(!1),s(0),c(e7),u(null),_(null)},[]);n().useEffect(()=>{e&&g()},[e,g]);let E=async()=>{l(!0),_(null);try{let e,t,a,n,l,i;for(let e=0;e<d.length-1;e++)await f(e,"in-progress"),await b(600),await f(e,"complete");let o={type:"artifacts",version:(t=(e=new Date).getFullYear(),a=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0"),l=String(e.getHours()).padStart(2,"0"),i=String(e.getMinutes()).padStart(2,"0"),`${t}.${a}.${n}-${l}${i}`)},s=await ec(o);await f(d.length-1,"complete"),u(s),s.success?r?.(s):_(s.errorMessage||"Export failed. Please try again.")}catch(e){_(e.message||"An unexpected error occurred during export."),c(e=>e.map((e,t)=>t===i?{...e,status:"error"}:e))}finally{l(!1)}},f=async(e,t)=>{e>=0&&e<d.length&&(s(e+1),c(r=>r.map((r,a)=>a===e?{...r,status:t}:r))),await b(100)},b=e=>new Promise(t=>setTimeout(t,e)),y=!a&&!m;return n().createElement(o.aFV,{open:e,onRequestClose:t,modalHeading:"Extract Report Builder Artifacts",modalLabel:"Report Builder",primaryButtonText:y?"Extract":m?.success?"Done":"Close",primaryButtonDisabled:y&&!1,onRequestSubmit:y?E:t,secondaryButtonText:y?"Cancel":void 0,size:"md"},n().createElement(o.cwr,null,!a&&!m&&n().createElement("div",{className:eg},n().createElement("div",{className:eE},n().createElement(o.jeF,{kind:"info",title:"Extract All Artifacts",subtitle:"This will export all Report Builder artifacts (categories, indicators, themes, sections, library, etc.) from the current instance.",hideCloseButton:!0,lowContrast:!0})),p&&n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:p,hideCloseButton:!0,lowContrast:!0})),a&&n().createElement("div",{className:ef},n().createElement("div",{className:eb},n().createElement("h4",null,"Extracting artifacts..."),n().createElement("p",null,"All Report Builder artifacts")),n().createElement(o.z21,{value:Math.round(i/d.length*100),label:d[i]?.label||"Initializing...",className:ey}),n().createElement("div",{className:eh},d.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))))),m&&m.success&&n().createElement("div",{className:ek},n().createElement("div",{className:eA},n().createElement(U.MG,{size:32,className:eR}),n().createElement("div",null,n().createElement("h4",null,"Artifacts extracted successfully"),n().createElement("p",{style:{margin:"0.25rem 0 0 0",fontSize:"0.875rem",color:"var(--cds-text-02)"}},"All Report Builder artifacts"),n().createElement("p",{style:{margin:"0",fontSize:"0.875rem",color:"var(--cds-text-02)"}},"Version ",m.version||"auto"))),m.dependencies&&n().createElement("div",{className:"-esm-report-builder__import-export-styles__dependencies___ZRWtu"},n().createElement("h5",null,"Included"),n().createElement("div",{className:"-esm-report-builder__import-export-styles__dependencyTags___FIjkm"},m.dependencies.categories&&m.dependencies.categories.length>0&&n().createElement(o.vwO,{type:"blue"},"Report Categories ",m.dependencies.categories.length),m.dependencies.indicators&&m.dependencies.indicators.length>0&&n().createElement(o.vwO,{type:"green"},"Indicators ",m.dependencies.indicators.length),m.dependencies.themes&&m.dependencies.themes.length>0&&n().createElement(o.vwO,{type:"purple"},"Data Themes ",m.dependencies.themes.length),m.dependencies.sections&&m.dependencies.sections.length>0&&n().createElement(o.vwO,{type:"warm-gray"},"Sections ",m.dependencies.sections.length),m.dependencies.library&&m.dependencies.library.length>0&&n().createElement(o.vwO,{type:"cyan"},"Report Library ",m.dependencies.library.length),m.dependencies.ageCategories&&m.dependencies.ageCategories.length>0&&n().createElement(o.vwO,{type:"cool-gray"},"Age Categories ",m.dependencies.ageCategories.length),m.dependencies.ageGroups&&m.dependencies.ageGroups.length>0&&n().createElement(o.vwO,{type:"cool-gray"},"Age Groups ",m.dependencies.ageGroups.length))),n().createElement("div",{className:eO},m.sourceFile&&n().createElement("div",{className:"-esm-report-builder__import-export-styles__infoRow___OMBSg"},n().createElement("span",{className:eD},"Package"),n().createElement("span",{style:{fontSize:"0.875rem",fontFamily:"monospace"}},m.sourceFile.split("/").pop()))))))},te=()=>{let{has:e}=v(),t=e(y.RB.REPORT_ADD,y.RB.REPORT_EDIT),{t:r}=(0,A.useTranslation)(),a=(0,i.Zp)(),[l,s]=n().useState(""),[c,m]=n().useState([]),[p,_]=n().useState(!0),[g,E]=n().useState(new Set),[f,h]=n().useState(!1),[S,T]=n().useState(0),[C,w]=n().useState([]),[N,I]=n().useState(!1),[k,R]=n().useState(!1),[O,D]=n().useState(""),[x,L]=n().useState(1),[M,$]=n().useState(10),[P,U]=n().useState([]),[B,F]=n().useState(!1);n().useEffect(()=>{let e=new AbortController;return(async()=>{try{let[t,r]=await Promise.all([X({v:"full",includeRetired:!1},e.signal),en(void 0,e.signal)]),a=t.map(e=>{let t=null;try{e.configJson&&(t=JSON.parse(e.configJson))}catch(e){console.warn("Failed to parse config:",e)}let r=e.category?.name;return{...e,parsedConfig:t,categoryName:r}});m(a),U(r)}catch(e){console.error("Failed to load reports:",e)}finally{_(!1)}})(),()=>e.abort()},[]);let z=n().useMemo(()=>{if(!l.trim())return c;let e=l.toLowerCase();return c.filter(t=>t.name?.toLowerCase().includes(e)||t.code?.toLowerCase().includes(e)||t.description?.toLowerCase().includes(e))},[l,c]),q=n().useMemo(()=>{let e=(x-1)*M;return z.slice(e,e+M)},[z,x,M]),j=n().useCallback(e=>{E(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),H=n().useCallback(()=>{g.size===q.length&&q.length>0?E(new Set):E(new Set(q.map(e=>e.uuid)))},[g.size,q]),J=n().useCallback(()=>{0!==g.size&&(R(!0),D(""))},[g.size]),V=n().useCallback(async()=>{if(!O||""===O.trim())return void alert("Please select a report category before compiling.");R(!1),h(!0),T(0),w([]),I(!1);let e=z.filter(e=>g.has(e.uuid)),t=[];for(let r=0;r<e.length;r++){let a=e[r];try{let e=await er(a.uuid,O);t.push({name:a.name,success:!!e.compiled,error:e.compiled?void 0:"Failed to compile"})}catch(e){t.push({name:a.name,success:!1,error:e instanceof Error?e.message:"Unknown error"})}T((r+1)/e.length*100)}w(t),I(!0),h(!1),E(new Set)},[g,z,O]),W=n().useCallback(()=>q.map(e=>({id:e.uuid,uuid:e.uuid,select:e.uuid,name:e.name,code:e.code||"-",category:e.categoryName||"-",theme:e.themeName||"-",status:e.retired?"Retired":"Draft",lastModified:"-",actions:e.uuid})),[q]),K=n().useCallback(e=>{a(`/new?duplicate=${e.uuid}`)},[a]),Q=n().useCallback(e=>{let t=new Blob([JSON.stringify({name:e.name,description:e.description,code:e.code,config:e.parsedConfig},null,2)],{type:"application/json"}),r=URL.createObjectURL(t),a=document.createElement("a");a.href=r,a.download=`${e.name?.replace(/[^a-z0-9]/gi,"_")||"report"}.json`,a.click(),URL.revokeObjectURL(r)},[]),Y=n().useCallback(()=>{F(!0)},[]),Z=n().useCallback(e=>{console.log("Export package successful:",e),F(!1)},[]);return n().createElement("div",null,n().createElement(G,{title:r("aggregateReports","Aggregate Reports"),subtitle:r("manageAggregateReports","Manage and create aggregate reports")}),n().createElement("div",{style:{marginBottom:"1rem",display:"flex",gap:"0.5rem"}},g.size>0&&n().createElement(o.$nd,{kind:"primary",size:"md",renderIcon:d.jG,onClick:J,disabled:f},"Compile Selected (",g.size,")")),f&&n().createElement("div",{style:{marginBottom:"1rem"}},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"0.5rem"}},n().createElement("span",null,"Compiling reports..."),n().createElement("span",null,Math.round(S),"%")),n().createElement(o.z21,{label:"",value:S})),N&&C.length>0&&n().createElement(n().Fragment,null,n().createElement(o.jeF,{kind:C.every(e=>e.success)?"success":C.some(e=>e.success)?"warning":"error",title:"Compile Results",subtitle:`${C.filter(e=>e.success).length} of ${C.length} reports compiled successfully`,onClose:()=>I(!1),style:{marginBottom:"1rem"}}),n().createElement("div",{style:{marginBottom:"1rem"}},C.map((e,t)=>n().createElement("div",{key:t,style:{padding:"0.5rem",borderBottom:"1px solid #e0e0e0"}},e.success?"✓":"✗"," ",e.name,e.error&&n().createElement("span",{style:{color:"#da1e28",marginLeft:"0.5rem"}}," - ",e.error))))),n().createElement("div",{style:{marginBottom:"1rem",display:"flex",gap:"0.5rem",alignItems:"center"}},n().createElement(o.vji,{labelText:"",placeholder:"Search reports",value:l,onChange:e=>{s(e.target.value),L(1)},style:{flexGrow:1}}),g.size>0&&n().createElement(o.$nd,{kind:"primary",size:"md",renderIcon:d.jG,onClick:J,disabled:f},"Compile Selected (",g.size,")"),t&&n().createElement(o.$nd,{kind:"ghost",size:"md",renderIcon:b.OM,onClick:()=>a("/new")},"Create Report"),n().createElement(o.$nd,{kind:"ghost",size:"md",renderIcon:u.wM,onClick:()=>window.location.reload(),hasIconOnly:!0,iconDescription:"Refresh"})),!p&&z.length>0?n().createElement(o.bQt,{rows:W(),headers:[{key:"select",header:"Select"},{key:"name",header:"Report"},{key:"code",header:"Code"},{key:"category",header:"Category"},{key:"reportType",header:"Type"},{key:"compileStatus",header:"Status"},{key:"lastCompiledAt",header:"Last compiled"},{key:"actions",header:"Actions"}]},({rows:e,headers:t,getHeaderProps:r,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,...r({header:e})},"select"===e.key?n().createElement(o.Sc0,{id:"select-all-reports",checked:g.size===q.length&&q.length>0,indeterminate:g.size>0&&g.size<q.length,onChange:H,labelText:""}):e.header)))),n().createElement(o.BFY,null,e.map(e=>{let t=q.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:g.has(e.id),onChange:()=>j(e.id),labelText:""})),n().createElement(o.nA6,{style:{cursor:"pointer"},onClick:()=>a(`/edit/${e.id}`)},t?.name),n().createElement(o.nA6,null,t?.code||"—"),n().createElement(o.nA6,null,t?.categoryName||"—"),n().createElement(o.nA6,null,t?.reportType||"—"),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:t?.compileStatus==="COMPILED"?"green":t?.compileStatus==="PENDING"?"cyan":"gray"},t?.compileStatus||"Unknown")),n().createElement(o.nA6,null,t?.lastCompiledAt?new Date(t.lastCompiledAt).toLocaleDateString():"—"),n().createElement(o.nA6,null,n().createElement(o.obU,{flipped:!0},n().createElement(o.XSD,{itemText:"Edit",onClick:()=>a(`/edit/${e.id}`)}),n().createElement(o.XSD,{itemText:"Duplicate",onClick:()=>t&&K(t)}),n().createElement(o.XSD,{itemText:"Export",onClick:()=>t&&Q(t)}),n().createElement(o.XSD,{itemText:"Export Package",onClick:Y,requireTitle:!0}))))}))))):null,p||0!==z.length?null:n().createElement("div",{style:{opacity:.7,marginTop:"1rem",textAlign:"center",padding:"2rem"}},l.trim()?r("noReportsFound","No reports match your search"):r("noReports","No reports found. Create your first report to get started.")),p&&n().createElement("div",{style:{textAlign:"center",padding:"2rem"}},"Loading reports..."),!p&&z.length>0&&n().createElement(o.dKS,{totalItems:z.length,pageSize:M,pageSizes:[10,25,50],page:x,onChange:({page:e,pageSize:t})=>{L(e),$(t)}}),k&&n().createElement(o.aFV,{open:k,modalHeading:"Compile Reports",modalLabel:"Select Report Category",onRequestClose:()=>R(!1),primaryButtonText:"Compile",primaryButtonDisabled:!O||""===O.trim(),onRequestSubmit:V,secondaryButtonText:"Cancel",danger:void 0},n().createElement(o.cwr,null,n().createElement("p",{style:{marginBottom:"1rem"}},"Select a report category to apply to all ",g.size," selected report(s) during compilation."),n().createElement(o.l6P,{id:"bulk-compile-category",labelText:"Report Category *",value:O,onChange:e=>D(e.target.value)},n().createElement(o.ebT,{value:"",text:"Select a category..."}),P.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.name}))))),n().createElement(e9,{isOpen:B,onClose:()=>{F(!1)},onSuccess:Z}))},tt="-esm-report-builder__report-builder__designWorkspace___EMin9",tr="-esm-report-builder__report-builder__workspaceTitle___eTTEy",ta="-esm-report-builder__report-builder__workspaceHint___ExWo8",tn=({value:e,onChange:t,onCancel:r,onSaveDraft:a,isSaving:l})=>{let{t:i}=(0,A.useTranslation)(),s=r=>t({...e,...r});return n().createElement("div",{className:tt},n().createElement("h3",{className:tr},i("reportDetails","Report Details")),n().createElement("p",{className:ta},i("reportDetailsHint","Provide minimum report information such as name and description.")),n().createElement("div",{className:"-esm-report-builder__report-builder__panel___9NT2h"},n().createElement(o.BJc,{gap:6,style:{marginTop:"0.75rem",maxWidth:"64rem"}},n().createElement(o.ksK,{id:"rb-report-name",labelText:n().createElement(n().Fragment,null,i("name","Name")," ",n().createElement("span",{style:{color:"var(--cds-support-error, #da1e28)"}},"*")),value:e.name,onChange:e=>s({name:e.target.value})}),n().createElement(o.fs1,{id:"rb-report-description",labelText:i("description","Description"),value:e.description,onChange:e=>s({description:e.target.value}),rows:4}),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr auto",gap:"0.5rem",alignItems:"end"}},n().createElement(o.ksK,{id:"rb-report-uuid",labelText:i("uuid","UUID"),value:e.uuid,readOnly:!0}),n().createElement(o.i8y,{iconDescription:i("copyUuid","Copy UUID"),feedback:i("copied","Copied"),feedbackTimeout:1500,onClick:()=>{e.uuid&&navigator.clipboard?.writeText(e.uuid)}}))),n().createElement("div",{style:{marginTop:"1.25rem",paddingTop:"1rem",borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)",display:"flex",justifyContent:"flex-end",gap:"0.75rem"}},n().createElement(o.$nd,{kind:"secondary",onClick:r},i("cancel","Cancel")),n().createElement(o.$nd,{kind:"primary",onClick:a,disabled:!e.name.trim()||l},i("saveDraft","Save Draft")))))},tl=({title:e,right:t,children:r,bottom:a,minHeight:l=560})=>n().createElement("div",{style:{background:"#fff",border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:12,overflow:"hidden",display:"flex",flexDirection:"column",minHeight:l}},n().createElement("div",{style:{padding:"0.9rem 1rem",borderBottom:"1px solid var(--cds-border-subtle, #e0e0e0)",display:"flex",alignItems:"center",justifyContent:"space-between",gap:"0.75rem"}},n().createElement("div",{style:{fontWeight:600}},e),t??null),n().createElement("div",{style:{padding:"1rem",display:"flex",flexDirection:"column",gap:"0.75rem",flex:1}},r),a?n().createElement("div",{style:{padding:"0.9rem 1rem",borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)",display:"flex",alignItems:"center",justifyContent:"space-between",gap:"0.75rem"}},a):null),ti=({reportSections:e,sectionLibrary:t,selectedSectionUuid:r,search:a,onSearchChange:l,onSelectSection:i,onMoveSection:s,onRemoveSection:d,onFocusAvailableSections:c})=>{let u=n().useMemo(()=>{let r=a.trim().toLowerCase(),n=[...e].sort((e,t)=>e.sortOrder-t.sortOrder);return r?n.filter(e=>{let a=t.find(t=>t.uuid===e.sectionUuid);return a&&(a.name.toLowerCase().includes(r)||(a.description??"").toLowerCase().includes(r)||(a.code??"").toLowerCase().includes(r))}):n},[e,t,a]);return n().createElement(tl,{title:"Report Structure",right:n().createElement(o.obU,{size:"sm","aria-label":"report structure actions"},n().createElement(o.XSD,{itemText:"Browse sections",onClick:c})),bottom:n().createElement(n().Fragment,null,n().createElement("span",null),n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:b.OM,onClick:c},"Add Section"))},n().createElement(o.vji,{size:"lg",labelText:"Search selected sections",placeholder:"Search selected sections",value:a,onChange:e=>l(e.target.value)}),n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:10,overflow:"hidden"}},0===u.length?n().createElement("div",{style:{padding:"0.9rem",opacity:.75}},"No sections selected yet."):u.map((e,a)=>{let l=t.find(t=>t.uuid===e.sectionUuid);return l?n().createElement("div",{key:e.sectionUuid,role:"button",tabIndex:0,onClick:()=>i(e.sectionUuid),onKeyDown:t=>"Enter"===t.key&&i(e.sectionUuid),style:{padding:"0.85rem 0.9rem",borderBottom:"1px solid var(--cds-border-subtle, #e0e0e0)",background:r===e.sectionUuid?"rgba(0,0,0,0.03)":"#fff",cursor:"pointer"}},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",gap:"0.75rem",alignItems:"flex-start"}},n().createElement("div",{style:{minWidth:0}},n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.6rem",minWidth:0}},n().createElement(m.vd,{size:16}),n().createElement("div",{style:{fontWeight:600,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},e.titleOverride?.trim()?e.titleOverride:l.name),e.enabled?null:n().createElement(o.vwO,{size:"sm",type:"red"},"Disabled")),n().createElement("div",{style:{display:"flex",gap:"0.4rem",marginTop:6,flexWrap:"wrap"}},n().createElement(o.vwO,{size:"sm",type:"gray"},l.indicatorCount," indicators"),l.disaggregationEnabled?n().createElement(o.vwO,{size:"sm",type:"blue"},l.ageCategoryCode??"Disaggregated"):n().createElement(o.vwO,{size:"sm",type:"warm-gray"},"No disaggregation")),l.description?n().createElement("div",{style:{marginTop:6,opacity:.8}},l.description):null),n().createElement("div",{style:{display:"flex",gap:"0.25rem"}},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Move up",renderIcon:E.Do,disabled:0===a,onClick:t=>{t.stopPropagation(),s(e.sectionUuid,-1)}}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Move down",renderIcon:E.yd,disabled:a===u.length-1,onClick:t=>{t.stopPropagation(),s(e.sectionUuid,1)}}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Remove",renderIcon:P.zH,onClick:t=>{t.stopPropagation(),d(e.sectionUuid)}})))):null})))},to=({availableSections:e,reportSections:t,selectedAvailableSectionUuid:r,search:a,onSearchChange:l,onSelectAvailableSection:i,onToggleSection:s})=>{let d=n().useMemo(()=>{let t=a.trim().toLowerCase();return t?e.filter(e=>e.name.toLowerCase().includes(t)||(e.description??"").toLowerCase().includes(t)||(e.code??"").toLowerCase().includes(t)):e},[e,a]);return n().createElement(tl,{title:"Available Sections",bottom:n().createElement(n().Fragment,null,n().createElement("span",{style:{opacity:.75}},"Select sections to include in this report."),n().createElement(o.$nd,{size:"sm",kind:"secondary",renderIcon:b.OM,disabled:!0},"Sections are added directly"))},n().createElement(o.vji,{size:"lg",labelText:"Search sections",placeholder:"Search sections",value:a,onChange:e=>l(e.target.value)}),n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:10,overflow:"hidden"}},0===d.length?n().createElement("div",{style:{padding:"0.9rem",opacity:.75}},"No sections found."):d.map(e=>{let a,l=(a=e.uuid,t.some(e=>e.sectionUuid===a));return n().createElement("div",{key:e.uuid,role:"button",tabIndex:0,onClick:()=>i(e.uuid),onKeyDown:t=>"Enter"===t.key&&i(e.uuid),style:{padding:"0.85rem 0.9rem",borderBottom:"1px solid var(--cds-border-subtle, #e0e0e0)",background:r===e.uuid?"rgba(0,0,0,0.03)":"#fff",cursor:"pointer"}},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",gap:"0.75rem",alignItems:"flex-start"}},n().createElement("div",{style:{display:"flex",alignItems:"flex-start",gap:"0.65rem",minWidth:0}},n().createElement(o.Sc0,{id:`available-section-${e.uuid}`,checked:l,labelText:"",onChange:(t,r)=>{let a="boolean"==typeof t?t:"boolean"==typeof r?.checked?r.checked:!!t?.target?.checked;s(e.uuid,a)}}),n().createElement("div",{style:{minWidth:0}},n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",minWidth:0}},n().createElement(m.vd,{size:16}),n().createElement("div",{style:{fontWeight:600,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},e.name)),e.description?n().createElement("div",{style:{marginTop:6,opacity:.8}},e.description):null,n().createElement("div",{style:{display:"flex",gap:"0.4rem",marginTop:6,flexWrap:"wrap"}},n().createElement(o.vwO,{size:"sm",type:"gray"},e.indicatorCount," indicators"),e.disaggregationEnabled?n().createElement(o.vwO,{size:"sm",type:"blue"},e.ageCategoryCode??"Disaggregated"):n().createElement(o.vwO,{size:"sm",type:"warm-gray"},"No disaggregation")))),e.code?n().createElement(o.vwO,{size:"sm",type:"cool-gray"},e.code):null))})))},ts=({draft:e,onDraftChange:t,selectedSectionRef:r,selectedSection:a,onUpdateSelectedSection:l})=>n().createElement(tl,{title:"Properties",right:n().createElement("button",{type:"button","aria-label":"close properties",style:{border:0,background:"transparent",cursor:"pointer"},onClick:()=>void 0},n().createElement(U.bm,{size:18})),bottom:n().createElement(n().Fragment,null,n().createElement(o.$nd,{size:"sm",kind:"secondary"},"Cancel"),n().createElement(o.$nd,{size:"sm",kind:"primary"},"Save Draft"))},n().createElement("div",{style:{fontSize:"1rem",fontWeight:600}},"Report Details"),n().createElement(o.ksK,{id:"report-definition-name",labelText:"Report Name",value:e.name,onChange:e=>t({name:e.target.value})}),n().createElement(o.ksK,{id:"report-definition-code",labelText:"Report Code",value:e.code,onChange:e=>t({code:e.target.value})}),n().createElement(o.fs1,{id:"report-definition-description",labelText:"Description",value:e.description,onChange:e=>t({description:e.target.value})}),n().createElement("div",{style:{borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)",marginTop:"0.5rem",paddingTop:"1rem"}},n().createElement("div",{style:{fontSize:"1rem",fontWeight:600,marginBottom:"0.75rem"}},"Selected Section"),r&&a?n().createElement(n().Fragment,null,n().createElement("div",{style:{fontWeight:600}},a.name),n().createElement("div",{style:{display:"flex",gap:"0.4rem",flexWrap:"wrap",marginTop:"0.5rem",marginBottom:"0.75rem"}},n().createElement(o.vwO,{size:"sm",type:"gray"},a.indicatorCount," indicators"),a.disaggregationEnabled?n().createElement(o.vwO,{size:"sm",type:"blue"},a.ageCategoryCode??"Disaggregated"):n().createElement(o.vwO,{size:"sm",type:"warm-gray"},"No disaggregation")),n().createElement(o.ksK,{id:"selected-section-title-override",labelText:"Title Override (optional)",value:r.titleOverride??"",onChange:e=>l({titleOverride:e.target.value})}),n().createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"0.75rem",marginTop:"0.5rem"}},n().createElement("div",{style:{fontWeight:600}},"Enabled in this report"),n().createElement(o.lMk,{id:"selected-section-enabled",labelText:"",toggled:r.enabled,onToggle:e=>l({enabled:e})})),a.description?n().createElement("div",{style:{marginTop:"0.75rem",opacity:.8}},a.description):null):n().createElement("div",{style:{opacity:.75}},"Select a section from the report structure to edit section-level properties.")));function td(e){let t=0,r=!1,a=null;try{let n=e.configJson?JSON.parse(e.configJson):null;t=Array.isArray(n?.indicators)?n.indicators.length:0,r=!!(n?.disaggregation&&n?.disaggregation?.none!==!0),a=n?.disaggregation?.ageCategoryCode??null}catch{t=0,r=!1,a=null}return{uuid:e.uuid,name:e.name,description:e.description,code:e.code,indicatorCount:t,disaggregationEnabled:r,ageCategoryCode:a,raw:e}}function tc(e){return[...e].sort((e,t)=>e.sortOrder-t.sortOrder)}let tm="/reportbuilder/section";function tu(e){return{...e,configJson:e.configJson?(0,K.j)(e.configJson):e.configJson,metaJson:e.metaJson?(0,K.j)(e.metaJson):e.metaJson}}async function tp(e,t){var r;let a=e?.q?.trim(),n=e?.includeRetired===!0,l=e?.v??"default",i=new URLSearchParams;return i.set("v",l),a&&i.set("q",a),n&&i.set("includeRetired","true"),(!(r=await (0,W.wO)(`${tm}?${i.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid).map(tu)}async function t_(e,t,r="full"){return tu(await (0,W.wO)(`${tm}/${encodeURIComponent(e)}?v=${r}`,t))}async function tg(e,t){return tu(await (0,W.oV)(tm,e,t))}async function tE(e,t,r){return tu(await (0,W.oV)(`${tm}/${encodeURIComponent(e)}`,t,r))}let tf=({value:e,onChange:t})=>{let{t:r}=(0,A.useTranslation)(),[a,l]=n().useState([]),[i,s]=n().useState(!1),[d,c]=n().useState(null),[m,u]=n().useState(""),[p,_]=n().useState(""),[g,E]=n().useState(null),[f,b]=n().useState(null);n().useEffect(()=>{let e=new AbortController;return s(!0),c(null),tp({v:"full",includeRetired:!1},e.signal).then(e=>l(e.filter(e=>!e.retired).map(td))).catch(e=>c(e?.message??"Failed to load sections")).finally(()=>s(!1)),()=>e.abort()},[]);let y=n().useCallback(r=>t({...e,...r}),[e,t]),h=n().useMemo(()=>e.sections.find(e=>e.sectionUuid===g)??null,[e.sections,g]),v=n().useMemo(()=>a.find(e=>e.uuid===g)??null,[a,g]),S=n().useCallback(r=>{if(e.sections.some(e=>e.sectionUuid===r))return void E(r);let a={sectionUuid:r,sortOrder:e.sections.length+1,enabled:!0,titleOverride:""};t({...e,sections:[...e.sections,a]}),E(r)},[e,t]),T=n().useCallback(r=>{let a=e.sections.filter(e=>e.sectionUuid!==r);t({...e,sections:a.map((e,t)=>({...e,sortOrder:t+1}))}),g===r&&E(null),f===r&&b(null)},[e,t,g,f]),C=n().useCallback((e,t)=>t?S(e):T(e),[S,T]),w=n().useCallback((r,a)=>{let n=tc(e.sections),l=n.findIndex(e=>e.sectionUuid===r);if(l<0)return;let i=l+a;if(i<0||i>=n.length)return;let o=n[l];n[l]=n[i],n[i]=o,t({...e,sections:n.map((e,t)=>({...e,sortOrder:t+1}))})},[e,t]),N=n().useCallback(r=>{g&&t({...e,sections:e.sections.map(e=>e.sectionUuid===g?{...e,...r}:e)})},[e,t,g]),I=n().useMemo(()=>tc(e.sections),[e.sections]);return n().createElement("div",{className:tt},n().createElement("div",{style:{marginBottom:"1rem"}},n().createElement("h3",{className:tr},r("buildReport","Build Report"),": ",e.name||"Untitled report"),n().createElement("p",{className:ta},r("draftHint","Draft • Define reports as collections of reusable sections"))),i?n().createElement(o.OuH,{description:"Loading sections…"}):null,d?n().createElement("div",{style:{marginBottom:"1rem"}},n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Sections",subtitle:d})):null,n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1.1fr 1.1fr 0.9fr",gap:"1rem"}},n().createElement(ti,{reportSections:I,sectionLibrary:a,selectedSectionUuid:g,search:m,onSearchChange:u,onSelectSection:E,onMoveSection:w,onRemoveSection:T,onFocusAvailableSections:()=>{a.length>0&&b(e=>e??a[0].uuid)}}),n().createElement(to,{availableSections:a,reportSections:I,selectedAvailableSectionUuid:f,search:p,onSearchChange:_,onSelectAvailableSection:b,onToggleSection:C}),n().createElement(ts,{draft:e,onDraftChange:y,selectedSectionRef:h,selectedSection:v,onUpdateSelectedSection:N})),n().createElement("div",{style:{marginTop:"1rem",padding:"0.9rem 1rem",background:"#fff",border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:12}},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Current Authoring Draft"),n().createElement("pre",{style:{margin:0,whiteSpace:"pre-wrap",wordBreak:"break-word",fontSize:"0.85rem"}},JSON.stringify(e,null,2))))};var tb=r(8495);function ty(){return{version:1,template:"section-tabular",arrayName:"results",defaultValue:0,dimensions:{},groups:[]}}function th(e){return+("section-label"!==e)}function tv(e,t){let r=th(t),a=Number.isNaN(Number(e))?r:Number(e??r);return Math.max(r,Math.min(10,a))}function tS(e){var t;let r;t=e,r=new Set;let a=[];return(e=t.filter(e=>!r.has(e.id)&&(r.add(e.id),!0))).map(e=>{let t={...e},r=t.indent??0;for(;a.length>0&&(a[a.length-1].indent??0)>=r;)a.pop();let n=a[a.length-1];return t.groupingParentId=n?n.id:void 0,"group-label"===t.type&&a.push(t),t})}function tT(e,t){let r=e[t].indent??0,a=t+1;for(;a<e.length&&(e[a].indent??0)>r;)a++;return a}function tC(e=[],t){return{version:1,template:"section-tabular",arrayName:t?.arrayName??"results",defaultValue:t?.defaultValue??0,dimensions:t?.dimensions??{},groups:e.map(e=>{let t=[{id:`${e.sectionUuid}__section_label`,type:"section-label",label:e.title,indent:0,span:"all",emphasis:"section",showTotal:!1,showDisaggregation:!1},...e.indicators.map(e=>({id:e.id,type:"indicator",code:e.code,label:`${e.code}. ${e.name}`,indent:1,keyPattern:"{code}_{age}_{sex}",dims:{},showTotal:!0,showDisaggregation:!0,span:"label-only",emphasis:"normal"}))];return{id:e.sectionUuid,title:e.title,rows:tS(t)}})}}let tw=({value:e,onChange:t,definitionDraft:r,sectionSources:a=[]})=>{let{t:l}=(0,A.useTranslation)(),[i,s]=n().useState(null),[d,m]=n().useState(null),[_,g]=n().useState(null),[f,y]=n().useState(null),[h,v]=n().useState("details"),S=n().useMemo(()=>e??ty(),[e]),T=n().useCallback(e=>{t?.(e)},[t]),C=n().useMemo(()=>S.groups??[],[S.groups]);n().useEffect(()=>{!i&&C.length>0&&s(C[0].id)},[C,i]);let w=n().useMemo(()=>C.flatMap(e=>e.rows).find(e=>e.id===d)??null,[C,d]),N=n().useCallback(e=>{T({...S,groups:e.map(e=>({...e,rows:tS(e.rows)}))})},[S,T]),I=n().useCallback((e,t,r)=>{N(C.map(a=>{if(a.id!==e)return a;let n=a.rows.map(e=>{if(e.id!==t)return e;let a={...e,...r};return{...a,indent:tv(a.indent,a.type)}});return{...a,rows:n}}))},[C,N]),k=n().useCallback(e=>{let t={id:`row-${Math.random().toString(36).slice(2,10)}`,type:"indicator",code:"",label:"",indent:0,keyPattern:"{code}_{age}_{sex}",dims:{},showTotal:!0,showDisaggregation:!0};t.indent=1,N(C.map(r=>r.id===e?{...r,rows:[...r.rows,t]}:r)),s(e),m(t.id)},[C,N]),R=n().useCallback((e,t)=>{N(C.map(r=>r.id===e?{...r,rows:r.rows.filter(e=>e.id!==t)}:r)),d===t&&m(null)},[C,d,N]),O=n().useCallback((e,t,r)=>{let a=C.find(t=>t.id===e);if(!a)return;let n=a.rows.slice(),l=n.findIndex(e=>e.id===t);if(l<0)return;let i=n[l].indent??0,o=tT(n,l),s=n.slice(l,o),d=null;if(-1===r){let e=l-1;for(;e>=0&&(n[e].indent??0)>i;)e--;e>=0&&(n[e].indent??0)===i&&(d=[...n.slice(0,e),...s,...n.slice(e,l),...n.slice(o)])}else if(o<n.length&&(n[o].indent??0)>=i){let e=tT(n,o),t=n.slice(o,e);d=[...n.slice(0,l),...t,...s,...n.slice(e)]}d&&N(C.map(t=>t.id===e?{...t,rows:d}:t))},[C,N]),D=n().useCallback((e,t,r)=>{let a=C.find(t=>t.id===e),n=a?.rows.find(e=>e.id===t);if(!a||!n)return;let l=th(n.type),i=Math.max(l,Math.min(10,(n.indent??l)+r)),o=a.rows.map(e=>e.id===t?{...e,indent:i}:e);N(C.map(t=>t.id===e?{...t,rows:o}:t))},[C,N]),x=n().useCallback(()=>{let e=tC(a,S);T(e),s(e.groups[0]?.id??null),m(e.groups[0]?.rows[0]?.id??null)},[S,a,T]),L=n().useCallback(()=>{let e=function(e=[],t){if(!t||!t.groups.length)return tC(e,t);let r=new Map,a=new Map;t.groups.forEach(e=>{r.set(e.id,e),e.rows.forEach(t=>{a.set(t.id,{group:e,row:t})})});let n=new Set(e.map(e=>e.sectionUuid)),l=[],i=new Set;for(let t of e){if(i.has(t.sectionUuid))continue;i.add(t.sectionUuid);let e=r.get(t.sectionUuid);if(e){let r=[],a=new Set(t.indicators.map(e=>e.id)),n=new Map(t.indicators.map(e=>{let t=e.id.indexOf("__");return[t>=0?e.id.slice(t+2):e.id,e]})),i=new Map;t.indicators.forEach(e=>{i.set(e.code,(i.get(e.code)??0)+1)});let o=new Map(t.indicators.filter(e=>e.code&&1===i.get(e.code)).map(e=>[e.code,e])),s=e.rows.map(e=>{if("indicator"!==e.type||a.has(e.id))return e;let t=e.id.indexOf("__"),r=t>=0?e.id.slice(t+2):e.id,l=n.get(r)??o.get(e.code??"");return l?{...e,id:l.id}:e}),d=new Map;s.forEach(e=>{d.set(e.id,e)});let c=`${t.sectionUuid}__section_label`;for(let e of(d.has(c)||r.push({id:c,type:"section-label",label:t.title,indent:0,span:"all",emphasis:"section",showTotal:!1,showDisaggregation:!1}),s)){if(a.has(e.id)){r.push({...e});continue}"indicator"!==e.type&&r.push({...e})}let m=new Set(r.map(e=>e.id));t.indicators.forEach((e,a)=>{if(m.has(e.id))return;let n={id:e.id,type:"indicator",code:e.code,label:`${e.code}. ${e.name}`,indent:1,keyPattern:"{code}_{age}_{sex}",dims:{},showTotal:!0,showDisaggregation:!0,span:"label-only",emphasis:"normal"},l=!1;for(let e=a-1;e>=0&&!l;e--){let a=t.indicators[e].id;if(!m.has(a))continue;let i=r.findIndex(e=>e.id===a);if(i<0)break;let o=r[i].indent??0;n.indent=o;let s=i+1;for(;s<r.length&&(r[s].indent??0)>o;)s++;r.splice(s,0,n),l=!0}for(let e=a+1;e<t.indicators.length&&!l;e++){let a=t.indicators[e].id;if(!m.has(a))continue;let i=r.findIndex(e=>e.id===a);if(i<0)break;n.indent=r[i].indent??1,r.splice(i,0,n),l=!0}l||r.push(n),m.add(e.id)}),l.push({...e,title:t.title,rows:tS(r)})}else{let e=[{id:`${t.sectionUuid}__section_label`,type:"section-label",label:t.title,indent:0,span:"all",emphasis:"section",showTotal:!1,showDisaggregation:!1},...t.indicators.map(e=>({id:e.id,type:"indicator",code:e.code,label:`${e.code}. ${e.name}`,indent:1,keyPattern:"{code}_{age}_{sex}",dims:{},showTotal:!0,showDisaggregation:!0,span:"label-only",emphasis:"normal"}))];l.push({id:t.sectionUuid,title:t.title,rows:tS(e)})}}for(let[e,t]of r)n.has(e)||l.push({...t,rows:tS(t.rows.map(e=>({...e})))});return{version:t.version,template:t.template,arrayName:t.arrayName,defaultValue:t.defaultValue,dimensions:t.dimensions||{},groups:l}}(a,S);T(e);let t=e.groups.find(e=>e.id===i);if(t){if(t.rows.find(e=>e.id===d))return;m(t.rows[0]?.id??null)}else s(e.groups[0]?.id??null),m(e.groups[0]?.rows[0]?.id??null)},[S,a,T,i,d]),M=n().useCallback((e,t)=>{g({rowId:e,fromGroupId:t})},[]),$=n().useCallback((e,t,r)=>{if(g(null),y(null),!_||_.fromGroupId!==e||_.rowId===t)return;let a=C.find(t=>t.id===e);if(!a)return;let n=a.rows.slice(),l=n.findIndex(e=>e.id===_.rowId),i=n.findIndex(e=>e.id===t);if(l<0||i<0)return;let o=tT(n,l);if(i>=l&&i<o)return;let s=n.slice(l,o),d=[...n.slice(0,l),...n.slice(o)],c="before"===r?i:i+1;c>=o&&(c-=s.length),d.splice(Math.min(c,d.length),0,...s),N(C.map(t=>t.id===e?{...t,rows:d}:t))},[_,C,N]),U=n().useMemo(()=>C.flatMap(e=>[{kind:"group",group:e},...e.rows.map((t,r)=>({kind:"row",group:e,row:t,rowIndex:r}))]),[C]),B=n().useMemo(()=>{let e,t;return e=["Age <5 | Male","Age <5 | Female","5-14 | Male","5-14 | Female"],t=C.flatMap(t=>t.rows.map(r=>({id:r.id,type:r.type,code:r.code,label:r.label||r.code||"Untitled row",values:"section-label"===r.type||"group-label"===r.type?[]:e.map(()=>0),indent:r.indent??0,groupId:t.id}))),{columns:e,rows:t}},[C]),F=n().useMemo(()=>JSON.stringify(S,null,2),[S]);return n().createElement("div",{className:tt},n().createElement("div",{style:{marginBottom:"1rem"}},n().createElement("h3",{className:tr},l("reportDesign","Report Design")),n().createElement("p",{className:ta},l("reportDesignHint","Design the report structure, indicator presentation, JSON template, and mapping preview."))),r?null:n().createElement(o.jeF,{kind:"warning",lowContrast:!0,title:"Definition required",subtitle:"Build the report definition first so the design can align to it."}),n().createElement("div",{style:{display:"flex",gap:"0.5rem",marginBottom:"1rem"}},n().createElement(o.$nd,{size:"sm",kind:"primary",onClick:x,disabled:!a.length},"Generate From Definition"),n().createElement(o.$nd,{size:"sm",kind:"secondary",onClick:L,disabled:!a.length,renderIcon:u.wM},"Refresh from Definition")),n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #d0d0d0)",borderRadius:12,padding:"1rem",background:"#fff"}},n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement("div",{style:{display:"grid",gridTemplateRows:"auto auto",gap:"1rem"}},n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:10,padding:"1rem",background:"var(--cds-layer, #f4f4f4)"}},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"0.75rem"}},n().createElement("div",{style:{fontSize:"1.1rem",fontWeight:600}},"Template Structure"),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:u.wM,onClick:x},"Refresh JSON")),n().createElement("div",{style:{minHeight:"12rem",border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:8,background:"#fff",padding:"0.5rem",overflow:"auto"}},0===U.length?n().createElement("div",{style:{opacity:.7}},"No sections/rows yet. Generate from definition."):U.map(e=>{if("group"===e.kind)return null;let{group:t,row:r,rowIndex:a}=e,l=r.id===d,i=f?.rowId===r.id?f.position:null,c="section-label"===r.type,u="group-label"===r.type;return n().createElement("div",{key:r.id,draggable:!0,onDragStart:()=>M(r.id,t.id),onDragEnd:()=>{g(null),y(null)},onDragOver:e=>{if(e.preventDefault(),_&&_.fromGroupId===t.id){let e=t.rows.findIndex(e=>e.id===_.rowId);if(e>=0){let a=tT(t.rows,e),n=t.rows.findIndex(e=>e.id===r.id);if(n>=e&&n<a)return void y(null)}}let a=e.currentTarget.getBoundingClientRect(),n=e.clientY-a.top>a.height/2?"after":"before";y(e=>e&&e.rowId===r.id&&e.position===n?e:{rowId:r.id,position:n})},onDrop:e=>{e.preventDefault(),$(t.id,r.id,f?.rowId===r.id?f.position:"before")},onClick:()=>{s(t.id),m(r.id)},style:{display:"flex",alignItems:"center",gap:"0.5rem",padding:"0.65rem 0.75rem",marginBottom:"0.35rem",marginLeft:`${(r.indent??0)*18}px`,borderRadius:6,border:l?"2px solid var(--cds-border-interactive, #0f62fe)":"1px solid transparent",boxShadow:i?"before"===i?"inset 0 2px 0 var(--cds-border-interactive, #0f62fe)":"inset 0 -2px 0 var(--cds-border-interactive, #0f62fe)":void 0,background:l?"var(--cds-layer-selected, #e8f1ff)":"transparent",cursor:"pointer"}},n().createElement(es.sx,{size:16}),n().createElement("span",{style:{fontWeight:c?700:u?600:500}},r.label||r.code||"Untitled row"),n().createElement(o.vwO,{size:"sm",type:c?"purple":u?"cyan":"gray"},c?"section":u?"group":r.code||r.type),c?n().createElement(o.$nd,{size:"sm",kind:"ghost",renderIcon:b.OM,onClick:e=>{e.stopPropagation(),k(t.id)}},"Add Node"):null,n().createElement("div",{style:{marginLeft:"auto",display:"flex",gap:"0.25rem"}},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Move up",renderIcon:E.Do,disabled:0===a,onClick:e=>{e.stopPropagation(),O(t.id,r.id,-1)}}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Move down",renderIcon:E.yd,disabled:a===t.rows.length-1,onClick:e=>{e.stopPropagation(),O(t.id,r.id,1)}}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Indent",renderIcon:E.Qp,disabled:(r.indent??th(r.type))>=10,onClick:e=>{e.stopPropagation(),D(t.id,r.id,1)}}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Outdent",renderIcon:E.nk,disabled:(r.indent??th(r.type))<=th(r.type),onClick:e=>{e.stopPropagation(),D(t.id,r.id,-1)}}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Remove",renderIcon:P.zH,onClick:e=>{e.stopPropagation(),R(t.id,r.id)}})))}))),n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:10,padding:"1rem",background:"#fff"}},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"0.75rem"}},n().createElement("div",{style:{fontSize:"1.1rem",fontWeight:600}},"JSON Preview"),n().createElement("div",{style:{display:"flex",gap:"0.35rem"}},n().createElement(o.$nd,{kind:"ghost",hasIconOnly:!0,size:"sm",iconDescription:"Refresh",renderIcon:u.wM}),n().createElement(o.$nd,{kind:"ghost",hasIconOnly:!0,size:"sm",iconDescription:"Copy",renderIcon:c.QR}),n().createElement(o.$nd,{kind:"ghost",hasIconOnly:!0,size:"sm",iconDescription:"Download",renderIcon:es.f5}),n().createElement(o.$nd,{kind:"ghost",hasIconOnly:!0,size:"sm",iconDescription:"Expand",renderIcon:p.MQ}))),n().createElement("pre",{style:{margin:0,minHeight:"16rem",maxHeight:"22rem",overflow:"auto",whiteSpace:"pre-wrap",wordBreak:"break-word",fontSize:"0.85rem",background:"#f8f8f8",border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:8,padding:"0.75rem"}},F))),n().createElement("div",{style:{display:"grid",gridTemplateRows:"auto auto",gap:"1rem"}},n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:10,padding:"1rem",background:"var(--cds-layer, #f4f4f4)"}},n().createElement("div",{style:{fontSize:"1.1rem",fontWeight:600}},"Indicator Properties"),n().createElement("div",{style:{opacity:.8,marginBottom:"0.75rem"}},"Select an indicator/row to edit properties"),n().createElement(o.tUM,{selectedIndex:"details"===h?0:"disaggregation"===h?1:"mapping"===h?2:3,onChange:({selectedIndex:e})=>v(0===e?"details":1===e?"disaggregation":2===e?"mapping":"api")},n().createElement(o.wbY,{"aria-label":"Indicator properties tabs"},n().createElement(o.ozo,null,"Details"),n().createElement(o.ozo,null,"Disaggregation"),n().createElement(o.ozo,null,"Mapping"),n().createElement(o.ozo,null,"API"))),n().createElement("div",{style:{marginTop:"1rem"}},w&&i?"details"===h?n().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"0.75rem"}},n().createElement(o.ksK,{id:"design-row-label",labelText:"Label",value:w.label,onChange:e=>I(i,w.id,{label:e.target.value})}),n().createElement(o.ksK,{id:"design-row-code",labelText:"Code",value:w.code??"",onChange:e=>I(i,w.id,{code:e.target.value})}),n().createElement(o.l6P,{id:"design-row-type",labelText:"Row type",value:w.type,onChange:e=>{let t=e.target.value,r="section-label"===t?{...w,type:t,indent:0,span:"all",emphasis:"section",showTotal:!1,showDisaggregation:!1}:"group-label"===t?{...w,type:t,indent:tv(w.indent,t),span:"label-only",emphasis:"group",showTotal:!1,showDisaggregation:!1}:"indicator"===t?{...w,type:t,indent:tv(w.indent,t),span:"label-only",emphasis:"normal",showTotal:!0,showDisaggregation:!0}:{...w,type:t,indent:tv(w.indent,t),span:"label-only",emphasis:"normal"};I(i,w.id,r)}},n().createElement(o.ebT,{value:"section-label",text:"Section Label"}),n().createElement(o.ebT,{value:"group-label",text:"Group Label"}),n().createElement(o.ebT,{value:"indicator",text:"Indicator"}),n().createElement(o.ebT,{value:"label",text:"Label"}),n().createElement(o.ebT,{value:"spacer",text:"Spacer"})),n().createElement(o.Q7x,{id:"design-row-indent",label:"Indent",min:th(w.type),max:10,value:w.indent??th(w.type),onChange:e=>{let t=Number(e.target.value||th(w.type));I(i,w.id,{indent:tv(t,w.type)})}})):"disaggregation"===h?n().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"0.75rem"}},n().createElement(o.Sc0,{id:"design-row-total",labelText:"Show total",checked:!!w.showTotal,onChange:e=>I(i,w.id,{showTotal:!!e})}),n().createElement(o.Sc0,{id:"design-row-disagg",labelText:"Show disaggregation",checked:!!w.showDisaggregation,onChange:e=>I(i,w.id,{showDisaggregation:!!e})})):"mapping"===h?n().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"0.75rem"}},n().createElement(o.ksK,{id:"design-row-key-pattern",labelText:"Key pattern",value:w.keyPattern??"",onChange:e=>I(i,w.id,{keyPattern:e.target.value})}),n().createElement("div",{style:{opacity:.8,fontSize:"0.875rem"}},"Example: ","{code}_{age}_{sex}")):n().createElement("div",{style:{opacity:.8,fontSize:"0.875rem"}},"Node API preview and compile-time bindings will appear here."):n().createElement("div",{style:{opacity:.7}},"Select a node to edit."))),n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:10,padding:"1rem",background:"var(--cds-layer, #f4f4f4)"}},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"0.75rem"}},n().createElement("div",{style:{fontSize:"1.1rem",fontWeight:600}},"Mapping Preview"),n().createElement(tb.Ss,{size:18})),n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:8,overflow:"hidden",background:"#fff"}},n().createElement("div",{style:{display:"grid",gridTemplateColumns:`minmax(220px, 1.3fr) repeat(${B.columns.length}, minmax(120px, 1fr))`,borderBottom:"1px solid var(--cds-border-subtle, #e0e0e0)",fontWeight:600,background:"#fafafa"}},n().createElement("div",{style:{padding:"0.75rem"}}),B.columns.map(e=>n().createElement("div",{key:e,style:{padding:"0.75rem"}},e))),0===B.rows.length?n().createElement("div",{style:{padding:"1rem",opacity:.7}},"No rows to preview."):B.rows.map(e=>"section-label"===e.type?n().createElement("div",{key:e.id,style:{borderTop:"1px solid var(--cds-border-subtle, #f0f0f0)",background:"var(--cds-layer-accent, #f4f4f4)",fontWeight:700,padding:"0.85rem 0.75rem"}},e.label):"group-label"===e.type?n().createElement("div",{key:e.id,style:{display:"grid",gridTemplateColumns:`minmax(220px, 1.3fr) repeat(${B.columns.length}, minmax(120px, 1fr))`,borderTop:"1px solid var(--cds-border-subtle, #f0f0f0)",background:"#fafafa"}},n().createElement("div",{style:{padding:"0.75rem",fontWeight:600,paddingLeft:`${12+18*e.indent}px`}},e.code?`${e.code} ${e.label}`:e.label),B.columns.map((e,t)=>n().createElement("div",{key:t,style:{padding:"0.75rem"}}))):n().createElement("div",{key:e.id,style:{display:"grid",gridTemplateColumns:`minmax(220px, 1.3fr) repeat(${B.columns.length}, minmax(120px, 1fr))`,borderTop:"1px solid var(--cds-border-subtle, #f0f0f0)"}},n().createElement("div",{style:{padding:"0.75rem",fontWeight:600,paddingLeft:`${12+18*e.indent}px`}},e.label),e.values.map((e,t)=>n().createElement("div",{key:t,style:{padding:"0.75rem"}},e))))))))))};var tN=r(7136);let tI=({open:e,currentCategoryUuid:t="",onConfirm:r,onClose:l,reportType:i="linelist"})=>{let[s,d]=(0,a.useState)([]),[c,m]=(0,a.useState)(!1),[u,p]=(0,a.useState)(null),[_,g]=(0,a.useState)(null);(0,a.useEffect)(()=>{e&&(m(!0),p(null),en().then(e=>{if(d(e),t){let r=e.find(e=>e.uuid===t);r&&g(r)}}).catch(e=>{p(e?.message||"Failed to load categories")}).finally(()=>{m(!1)}))},[e,t]);let E=!!_?.uuid;return n().createElement(o.aFV,{open:e,onRequestClose:l,size:"sm",modalHeading:"Setup Report Before Compile",modalLabel:"Report Organization",passiveModal:!0},n().createElement(o.rQ0,null),n().createElement(o.cwr,null,n().createElement(o.BJc,{gap:6},n().createElement(o.FAs,null,n().createElement("div",{style:{display:"flex",gap:"0.75rem",alignItems:"flex-start"}},n().createElement(tN.$$,{size:20}),n().createElement("div",null,n().createElement("p",{style:{margin:0,fontWeight:500}},"Before compiling, please organize your report."),n().createElement("p",{style:{margin:"0.5rem 0 0 0",fontSize:"0.875rem",opacity:.9}},"Select a category to help organize and publish your report in the system.")))),u&&n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:u,hideCloseButton:!0}),n().createElement("div",null,n().createElement(o.msM,{id:"category-select",titleText:"Category *",label:"Select a category",items:s,itemToString:e=>e?.name||"",selectedItem:_,onChange:({selectedItem:e})=>g(e),disabled:c}),n().createElement("p",{style:{fontSize:"0.875rem",marginTop:"0.5rem",opacity:.8}},"Required. The category determines where this report appears in the report library.")),"linelist"===i&&n().createElement(o.FAs,{style:{background:"var(--cds-layer-01, #f4f4f4)"}},n().createElement("p",{style:{margin:0,fontSize:"0.875rem"}},n().createElement("strong",null,"Linelist Reports:")," These reports display patient-level data in rows. Categorizing helps users find linelist reports for specific use cases.")))),n().createElement(o.jlY,null,n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"secondary",onClick:l},"Cancel"),n().createElement(o.$nd,{kind:"primary",onClick:()=>{_?.uuid&&r({categoryUuid:_.uuid})},disabled:!E||c},"Save & Compile"))))};function tk(){return{uuid:crypto.randomUUID(),name:"",description:"",code:"",sections:[],design:ty(),categoryUuid:"",themeUuid:""}}function tA(e){return(e||"").trim().toUpperCase().replace(/[^A-Z0-9]+/g,"_").replace(/^_+|_+$/g,"")}function tR(){let{t:e}=(0,A.useTranslation)(),{reportId:t}=(0,i.g)(),{has:r}=v(),a=t?"edit":"create",[l,s]=n().useState("details"),[d,c]=n().useState(()=>tk()),[m,u]=n().useState(null),[p,_]=n().useState([]),[E,f]=n().useState([]),[b,h]=n().useState("edit"===a),[S,T]=n().useState(!0),[C,w]=n().useState(!1),[N,I]=n().useState(!1),[k,R]=n().useState(null),[O,D]=n().useState(null),[x,L]=n().useState(null),[M,$]=n().useState(null),[P,U]=n().useState(!1);n().useEffect(()=>{let e=new AbortController;return T(!0),tp({v:"full",includeRetired:!1},e.signal).then(e=>_(Array.isArray(e)?e:[])).catch(()=>_([])).finally(()=>T(!1)),en().then(e=>f(e)).catch(()=>f([])),()=>e.abort()},[]),n().useEffect(()=>{let e=!1;return async function(){if("edit"!==a||!t){c(tk()),u(null),h(!1);return}try{h(!0),R(null),L(null);let r=await Z(t);if(e)return;u(r),c(function(e){let t={},r={};try{t=e.configJson?JSON.parse(e.configJson):{}}catch{t={}}try{r=e.metaJson?JSON.parse(e.metaJson):{}}catch{r={}}let a=t?.definition??{},n=Array.isArray(t?.sections)?t.sections:[],l=t?.design??null;return{uuid:e.uuid,name:e.name??t?.name??"",description:e.description??t?.description??"",code:e.code??t?.code??"",sections:Array.isArray(a?.sections)?a.sections:n,design:l??ty(),categoryUuid:r?.categoryUuid??t?.categoryUuid??"",themeUuid:r?.themeUuid??t?.themeUuid??""}}(r))}catch(t){e||R(t?.message??"Failed to load report")}finally{e||h(!1)}}(),()=>{e=!0}},[a,t]);let B={uuid:d.uuid,name:d.name,description:d.description},F={name:d.name,description:d.description,code:d.code,sections:d.sections},z=d.design,q=n().useMemo(()=>p.reduce((e,t)=>(e[t.uuid]=t.name??t.uuid,e),{}),[p]),j=n().useMemo(()=>{let e=Array.isArray(d.sections)?d.sections:[],t=new Map(p.map(e=>[e.uuid,e]));return e.filter((t,r)=>e.findIndex(e=>e.sectionUuid===t.sectionUuid)===r).slice().sort((e,t)=>Number(e.sortOrder??0)-Number(t.sortOrder??0)).map(e=>{let r=t.get(e.sectionUuid),a=function(e){try{return e?JSON.parse(e):{}}catch{return{}}}(r?.configJson),n=Array.isArray(a?.indicators)?a.indicators:[];return{sectionUuid:e.sectionUuid,title:e.titleOverride?.trim()||r?.name||e.sectionUuid,indicators:n.slice().sort((e,t)=>Number(e.sortOrder??0)-Number(t.sortOrder??0)).map(t=>({id:`${e.sectionUuid}__${String(t.indicatorUuid??t.id??t.code??(function(e,t){let r=`${e}|${t}`;if(!e&&!t)return"";let a=5381;for(let e=0;e<r.length;e++)a=(a<<5)+a+r.charCodeAt(e)|0;return`ind-${(a>>>0).toString(36)}`}(String(t.code??""),String(t.name??""))||"indicator"))}`,code:String(t.code??""),name:String(t.name??t.code??""),type:String(t.kind??"indicator")}))}})},[p,d.sections]),H=n().useCallback(e=>{c(t=>({...t,name:e.name,description:e.description,uuid:e.uuid,code:t.code?.trim()?t.code:tA(e.name)}))},[]),V=n().useCallback(e=>{c(t=>({...t,code:e.code,sections:e.sections}))},[]),W=n().useCallback(e=>{c(t=>({...t,design:e}))},[]),K=n().useCallback(async()=>{try{w(!0),R(null),D(null),L(null);let e={version:1,uuid:m?.uuid??d.uuid,name:d.name,code:d.code||tA(d.name),description:d.description,definition:{sections:d.sections??[]},design:d.design,categoryUuid:d.categoryUuid,themeUuid:d.themeUuid},r={name:e.name,description:e.description,code:e.code,configJson:JSON.stringify(e,null,2),metaJson:JSON.stringify({categoryUuid:d.categoryUuid,themeUuid:d.themeUuid})},n="edit"===a&&(m?.uuid||t)?await et(m?.uuid||t,r):await ee(r);return u(n),c(e=>({...e,uuid:n.uuid,code:n.code??e.code})),D("Draft saved successfully."),n}catch(e){throw R(e?.message??"Failed to save report draft"),e}finally{w(!1)}},[d,a,t,m?.uuid]),Q=n().useCallback(async()=>{try{if(I(!0),L(null),$(null),R(null),!d.categoryUuid){U(!0),I(!1);return}let e=m?.uuid||t||null;if(!e){let t=await K();e=t?.uuid??null}if(!e)throw Error("Save the report first before compiling.");let r=E.find(e=>e.uuid===d.categoryUuid)?.name;console.log("Aggregate Editor - Compiling with:",{reportUuid:e,categoryUuid:d.categoryUuid,categoryName:r,categoriesCount:E.length});let a=await er(e,d.categoryUuid);$(a?.reportDefinitionUuid?`Compiled successfully. Runtime report UUID: ${a.reportDefinitionUuid}`:"Compiled successfully.")}catch(e){L(e?.message??"Failed to compile report")}finally{I(!1)}},[E,d.categoryUuid,K,t,m?.uuid]),Y=n().useCallback(async e=>{U(!1),c(t=>({...t,categoryUuid:e.categoryUuid}));let r=m?.uuid||t||null;if(!r)try{let e=await K();r=e?.uuid??null}catch(e){R(e?.message??"Failed to save report");return}if(!r)return void L("Cannot compile: Report must be saved first");I(!0),L(null),$(null);try{let e=E.find(e=>e.uuid===d.categoryUuid)?.name;console.log("Aggregate Editor (compile setup) - Compiling with:",{reportUuid:r,categoryUuid:d.categoryUuid,categoryName:e,categoriesCount:E.length});let t=await er(r,d.categoryUuid);$(t?.reportDefinitionUuid?`Compiled successfully. Runtime report UUID: ${t.reportDefinitionUuid}`:"Compiled successfully.")}catch(e){L(e?.message??"Failed to compile report")}finally{I(!1)}},[E,d.categoryUuid,m?.uuid,t,K]),X=n().useCallback(()=>{U(!1)},[]),ea=n().useCallback(()=>{c(tk()),u(null),R(null),D(null),L(null),$(null),s("details")},[]),el=!!d.name.trim()&&!C&&!b,ei=r(y.RB.REPORT_COMPILE)&&!!((m?.uuid||t||d.name.trim())&&!C&&!N&&!b),eo=n().useMemo(()=>JSON.stringify({uuid:d.uuid,name:d.name,description:d.description,code:d.code,definition:{sections:d.sections},design:d.design,sectionSources:j,mode:a,savedReportUuid:m?.uuid??null},null,2),[d,j,a,m]);return n().createElement(n().Fragment,null,n().createElement(G,{title:e("reportBuilder","Report Builder"),subtitle:e("reportBuilderSubtitle","Create and manage reports as collections of reusable sections.")}),n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"end",marginBottom:"1rem"}},n().createElement("div",null,b?n().createElement(o.OuH,{description:"Loading report…"}):null,S?n().createElement(o.OuH,{description:"Loading sections…"}):null,C?n().createElement(o.OuH,{description:"Saving draft…"}):null,N?n().createElement(o.OuH,{description:"Compiling report…"}):null,b||C||!k?null:n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Save failed",subtitle:k}),b||C||!O?null:n().createElement(o.jeF,{lowContrast:!0,kind:"success",title:"Saved",subtitle:O}),b||N||!x?null:n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Compile failed",subtitle:x}),b||N||!M?null:n().createElement(o.jeF,{lowContrast:!0,kind:"success",title:"Compiled",subtitle:M})),n().createElement("div",{style:{display:"flex",gap:"0.5rem"}},n().createElement(J,{context:{page:"Report Builder"},size:"sm",kind:"secondary"}),n().createElement(o.$nd,{size:"sm",kind:"secondary",renderIcon:es.f5,disabled:!0},"Export"),n().createElement(o.$nd,{size:"sm",kind:"secondary",onClick:Q,disabled:!ei},"Compile"),n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:g.eM,onClick:K,disabled:!el},"Save Draft"))),n().createElement(o.tUM,{selectedIndex:"details"===l?0:"definition"===l?1:2,onChange:({selectedIndex:e})=>s(0===e?"details":1===e?"definition":"design")},n().createElement(o.wbY,{"aria-label":"Report editor tabs"},n().createElement(o.ozo,null,"Report Detail"),n().createElement(o.ozo,null,"Report Definition"),n().createElement(o.ozo,null,"Report Design")),n().createElement(o.T2N,null,n().createElement(o.KpK,null,n().createElement(tn,{value:B,onChange:H,onSaveDraft:K,isSaving:C,onCancel:ea})),n().createElement(o.KpK,null,n().createElement(tf,{value:F,onChange:V})),n().createElement(o.KpK,null,n().createElement(tw,{value:z,onChange:W,definitionDraft:F,sectionSources:j,sectionNameLookup:q})))),n().createElement("div",{style:{marginTop:"1rem",padding:"0.9rem 1rem",background:"#fff",border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:12}},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Current Report Form"),n().createElement("pre",{style:{margin:0,whiteSpace:"pre-wrap",wordBreak:"break-word",fontSize:"0.85rem"}},eo)),n().createElement(tI,{open:P,currentCategoryUuid:d.categoryUuid,onConfirm:Y,onClose:X,reportType:"aggregate"}))}function tO({rows:e,onOpen:t,onEdit:r,onRun:a,onDelete:l,onDuplicate:i,canEdit:s=!0,canRun:d=!0,canDelete:c=!0}){let m=(e??[]).map(e=>({id:e.id,code:e.code,name:e.name,kind:e.kind,theme:e.themeName??"",themeColor:e.themeColor??"",status:e.status}));return n().createElement(o.K3K,{title:"",description:""},n().createElement(o.bQt,{rows:m,headers:[{key:"code",header:"Code"},{key:"name",header:"Name"},{key:"kind",header:"Kind"},{key:"theme",header:"Theme"},{key:"status",header:"Status"},{key:"actions",header:""}],isSortable:!0},({rows:e,headers:m,getHeaderProps:u,getRowProps:p})=>n().createElement(o.XIK,{size:"lg",useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,m.map(e=>n().createElement(o.A0N,{key:e.key,...u({header:e})},e.header)))),n().createElement(o.BFY,null,0===e.length?n().createElement(o.Hjg,null,n().createElement(o.nA6,{colSpan:m.length,style:{padding:"1rem",opacity:.75}},"No indicators found.")):null,e.map(e=>{let m,u,_=String(e.cells.find(e=>"code"===e.info.header)?.value??""),g=String(e.cells.find(e=>"name"===e.info.header)?.value??""),E=String(e.cells.find(e=>"kind"===e.info.header)?.value??""),f=String(e.cells.find(e=>"theme"===e.info.header)?.value??""),b=String(e.cells.find(e=>"status"===e.info.header)?.value??""),y=String(e.themeColor??"");return n().createElement(o.Hjg,{key:e.id,...p({row:e}),onClick:()=>t?.(e.id),style:{cursor:t?"pointer":"default"}},n().createElement(o.nA6,null,_||n().createElement("span",{style:{opacity:.7}},"—")),n().createElement(o.nA6,{style:{fontWeight:600,paddingLeft:"0.75rem",borderLeft:y?`6px solid ${y}`:"6px solid transparent"}},g),n().createElement(o.nA6,null,"FINAL"===(m=(E??"").toUpperCase())?n().createElement(o.vwO,{type:"purple"},"FINAL"):"COMPOSITE"===m?n().createElement(o.vwO,{type:"teal"},"COMPOSITE"):n().createElement(o.vwO,{type:"blue"},"BASE")),n().createElement(o.nA6,null,f?n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"}},n().createElement("span",{"aria-hidden":"true",style:{width:10,height:10,borderRadius:999,background:y||"var(--cds-icon-primary)",display:"inline-block",border:"1px solid var(--cds-border-subtle)"}}),n().createElement("span",{style:{fontWeight:500}},f)):n().createElement("span",{style:{opacity:.7}},"—")),n().createElement(o.nA6,null,(u=(b??"").toLowerCase()).includes("publish")?n().createElement(o.vwO,{type:"green"},"Published"):u.includes("retire")?n().createElement(o.vwO,{type:"red"},"Retired"):n().createElement(o.vwO,{type:"gray"},"Draft")),n().createElement(o.nA6,{onClick:e=>e.stopPropagation(),style:{width:56}},n().createElement(o.obU,{size:"sm",flipped:!0},s&&n().createElement(o.XSD,{itemText:"Edit",onClick:()=>r?.(e.id,E)}),n().createElement(o.XSD,{itemText:"Duplicate",onClick:()=>i?.(e.id,E)}),d&&n().createElement(o.XSD,{itemText:"Run",onClick:()=>a?.(e.id)}),c&&n().createElement(o.XSD,{itemText:"Delete",isDelete:!0,onClick:()=>l?.(e.id)}))))})))))}let tD="/reportbuilder/datatheme";async function tx(e,t){var r;let a=e?.trim(),n=a?`${tD}?q=${encodeURIComponent(a)}&v=full`:`${tD}?v=full`;return(r=await (0,W.wO)(n,t))?Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]:[]}async function tL(e,t){return(0,W.wO)(`${tD}/${encodeURIComponent(e)}?v=full`,t)}async function tM(e,t){return(0,W.oV)(tD,e,t)}async function t$(e,t,r){return(0,W.oV)(`${tD}/${encodeURIComponent(e)}`,t,r)}async function tP(e,t=!1,r="Retired via UI",a){let n=t?"purge=true":`purge=false&reason=${encodeURIComponent(r)}`;await (0,W.hI)(`${tD}/${encodeURIComponent(e)}?${n}`,a)}async function tU(e,t){var r;let a=e?.trim(),n=a?`${tD}?q=${encodeURIComponent(a)}&v=full`:`${tD}?v=full`;return Array.isArray(r=await (0,W.wO)(n,t))?r:r?.results??[]}async function tB(e,t){return(0,W.wO)(`${tD}/${e}?v=full`,t)}function tF({value:e,onChange:t}){return n().createElement(o.BJc,{gap:6},n().createElement(o.ksK,{id:"indicator-code",labelText:"Code (optional)",value:e.code,onChange:r=>t({...e,code:r.target.value})}),n().createElement(o.ksK,{id:"indicator-name",labelText:"Name",value:e.name,onChange:r=>t({...e,name:r.target.value})}),n().createElement(o.fs1,{id:"indicator-desc",labelText:"Description (optional)",value:e.description,onChange:r=>t({...e,description:r.target.value})}))}function tz({themes:e,loading:t,error:r,themeUuid:a,onThemeUuidChange:l,themeConfigError:i}){return n().createElement(o.BJc,{gap:4},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.25rem"}},"Data Theme"),t?n().createElement(o.OuH,{description:"Loading themes…"}):null,!t&&r?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},r):null,n().createElement(o.l6P,{id:"indicator-theme",labelText:"Select a theme",value:a,onChange:e=>l(e.target.value)},n().createElement(o.ebT,{value:"",text:"Select…"}),(e??[]).map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:`${e.name}${e.code?` (${e.code})`:""}`}))),i?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)",marginTop:"0.25rem"}},i):null)}let tq="/concept",tj="custom:(id,uuid,display,datatype:(uuid,name),conceptClass:(uuid,name),answers:(id,uuid,display),mappings:(display,uuid,conceptMapType:(display)))";async function tH(e,t){let r=await (0,W.wO)(`${tq}/?q=${encodeURIComponent(e)}&v=${tj}`,t);return r?.results??[]}async function tJ(e,t){let r=String(e??"").trim();if(!r)throw Error("Concept uuid is required");return(0,W.wO)(`${tq}/${encodeURIComponent(r)}?v=${tj}`,t)}async function tG(e,t){let r=await (0,W.wO)(`${tq}/${e}?v=${tj}`,t);return r?.answers??[]}function tV(e){let[t,r]=(0,a.useState)(!1),[n,l]=(0,a.useState)([]),[i,o]=(0,a.useState)(null);return(0,a.useEffect)(()=>{let t=e.trim();if(t.length<2){l([]),o(null);return}let a=new AbortController,n=window.setTimeout(async()=>{try{r(!0),o(null);let e=await tH(t,a.signal);l(e)}catch(e){e?.name!=="AbortError"&&o("Failed to search concepts")}finally{r(!1)}},300);return()=>{a.abort(),window.clearTimeout(n)}},[e]),{loading:t,results:n,error:i}}function tW(e,t){let r=(e??"").trim(),a=`${t}:`;if(!r.startsWith(a))return;let n=r.slice(a.length).trim();if(n)return n.split(" ")[0]?.split("(")[0]?.trim()||void 0}function tK(e){let t,r;for(let a of e.mappings??[]){let e=a?.display??"";if(t||(t=tW(e,"ICD-10-WHO")),r||(r=tW(e,"ICD-11-WHO")),t&&r)break}return{icd10Code:t,icd11Code:r}}function tQ(e){let{icd10Code:t,icd11Code:r}=tK(e);return{id:Number(e.id)||0,uuid:e.uuid,display:e.display,icd10Code:t,icd11Code:r,conceptClass:e.conceptClass?.name,datatype:e.datatype?.name}}function tY(e){if(!e)return"";let{icd10Code:t,icd11Code:r}=tK(e),a=[];return t&&a.push(`ICD-10:${t}`),r&&a.push(`ICD-11:${r}`),e.conceptClass?.name&&a.push(e.conceptClass.name),a.length?`${e.display} • ${a.join(" • ")}`:e.display}function tX({id:e,labelText:t,helperText:r,value:a,onChange:l}){let[i,s]=n().useState(""),{loading:d,results:c,error:m}=tV(i),u=n().useCallback(e=>{if(!e)return;let t=tQ(e),r=new Map;for(let e of a??[])r.set(e.uuid,e);r.set(t.uuid,t),l(Array.from(r.values()))},[l,a]),p=n().useCallback(e=>{l((a??[]).filter(t=>t.uuid!==e))},[l,a]);return n().createElement("div",null,n().createElement("div",{style:{marginBottom:"0.5rem",fontWeight:600}},t),r?n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8,marginBottom:"0.75rem"}},r):null,n().createElement(o.a32,{id:`${e}-search`,titleText:"Search concepts",items:c??[],itemToString:tY,placeholder:"Type to search concepts…",onInputChange:e=>s(String(e??"")),onChange:e=>u(e?.selectedItem??null)}),n().createElement("div",{style:{marginTop:"0.5rem"}},d?n().createElement(o.OuH,{description:"Searching…"}):null,!d&&m?n().createElement("div",{style:{fontSize:"0.875rem",color:"var(--cds-text-error, #da1e28)"}},m):null),a?.length?n().createElement("div",{style:{marginTop:"0.75rem",display:"flex",flexWrap:"wrap",gap:"0.5rem"}},a.map(e=>n().createElement(o.vwO,{key:e.uuid,type:"gray",filter:!0,onClose:()=>p(e.uuid),title:e.icd10Code||e.icd11Code?`${e.display}`:e.display},e.display,e.icd10Code?` • ICD-10:${e.icd10Code}`:"",e.icd11Code?` • ICD-11:${e.icd11Code}`:""))):null)}function tZ(e,t){let r=(e??"").trim(),a=`${t}:`;if(!r.startsWith(a))return;let n=r.slice(a.length).trim();if(n)return n.split(" ")[0]?.split("(")[0]?.trim()||void 0}function t0(e){let t,r;for(let a of e.mappings??[]){let e=a?.display??"";if(t||(t=tZ(e,"ICD-10-WHO")),r||(r=tZ(e,"ICD-11-WHO")),t&&r)break}return{icd10Code:t,icd11Code:r}}function t1(e){let{icd10Code:t,icd11Code:r}=t0(e);return{id:Number(e.id)||0,uuid:e.uuid,display:e.display,icd10Code:t,icd11Code:r,conceptClass:e.conceptClass?.name,datatype:e.datatype?.name}}function t2(e){if(!e)return"";let{icd10Code:t,icd11Code:r}=t0(e),a=[];return t&&a.push(`ICD-10:${t}`),r&&a.push(`ICD-11:${r}`),e.conceptClass?.name&&a.push(e.conceptClass.name),a.length?`${e.display} • ${a.join(" • ")}`:e.display}function t5(e){if(!e)return"";let t=[];return e.icd10Code&&t.push(`ICD-10:${e.icd10Code}`),e.icd11Code&&t.push(`ICD-11:${e.icd11Code}`),e.conceptClass&&t.push(e.conceptClass),t.length?`${e.display} • ${t.join(" • ")}`:e.display}function t6({id:e,labelText:t,helperText:r,questionsLabelText:a="Question concept(s)",answersLabelText:l="Expected answers",value:i,onChange:s}){let[d,c]=n().useState(""),{loading:m,results:u,error:p}=tV(d),[_,g]=n().useState([]),[E,f]=n().useState(!1),[b,y]=n().useState(null),[h,v]=n().useState(0),[S,T]=n().useState(0),C=n().useMemo(()=>i.questions??[],[i.questions]),w=n().useMemo(()=>i.answers??[],[i.answers]),N=n().useCallback(e=>{let t=new Map;for(let r of e??[])r?.uuid&&t.set(r.uuid,r);return Array.from(t.values())},[]),I=n().useCallback(async(e,t)=>{f(!0),y(null),g([]);try{let r=Array.from(new Set(e.filter(Boolean)));if(!r.length){g([]),y(null);return}let a=await Promise.all(r.map(async e=>{try{return(await tG(e,t)??[]).map(t1).filter(e=>!!e.uuid)}catch{return[]}})),n=N(a.flat());if(!n.length){y("Selected question(s) have no configured answers. Please choose a different question."),g([]);return}g(n);let l=new Set(n.map(e=>e.uuid)),i=(w??[]).filter(e=>e?.uuid&&l.has(e.uuid));i.length!==(w?.length??0)&&s({questions:C,answers:i})}finally{f(!1)}},[N,s,w,C]);n().useEffect(()=>{let e=(C??[]).map(e=>e.uuid).filter(Boolean);if(!e.length){g([]),y(null),f(!1);return}let t=new AbortController;return I(e,t.signal),()=>t.abort()},[I,C]);let k=(C?.length??0)>0&&!E&&!b;return n().createElement("div",null,n().createElement("div",{style:{marginBottom:"0.5rem",fontWeight:600}},t),r?n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8,marginBottom:"0.75rem"}},r):null,n().createElement("div",{style:{marginBottom:"1rem"}},n().createElement("div",{style:{marginBottom:"0.5rem",fontWeight:600}},a),n().createElement(o.a32,{key:S,id:`${e}-questions`,titleText:"Search question concept",items:u??[],itemToString:t2,placeholder:"Type to search question…",onInputChange:e=>c(String(e??"")),onChange:e=>{var t;(t=e?.selectedItem??null)&&(s({questions:N([...C??[],t1(t)]),answers:w}),T(e=>e+1))}}),n().createElement("div",{style:{marginTop:"0.5rem"}},m?n().createElement(o.OuH,{description:"Searching…"}):null,!m&&p?n().createElement("div",{style:{fontSize:"0.875rem",color:"var(--cds-text-error, #da1e28)"}},p):null),C?.length?n().createElement("div",{style:{marginTop:"0.75rem",display:"flex",flexWrap:"wrap",gap:"0.5rem"}},C.map(e=>n().createElement(o.vwO,{key:e.uuid,type:"gray",filter:!0,onClose:()=>{var t;return t=e.uuid,void s({questions:(C??[]).filter(e=>e.uuid!==t),answers:w})},title:t5(e)},e.display,e.icd10Code?` • ICD-10:${e.icd10Code}`:"",e.icd11Code?` • ICD-11:${e.icd11Code}`:"")),n().createElement(o.vwO,{type:"red",filter:!0,onClose:()=>{s({questions:[],answers:[]}),g([]),y(null),f(!1)},title:"Clear all questions"},"Clear all")):null),n().createElement("div",null,n().createElement("div",{style:{marginBottom:"0.5rem",fontWeight:600}},l),(C?.length??0)>0?n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8,marginBottom:"0.75rem"}},"Pick answer concept(s) for selected question(s)."):n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8,marginBottom:"0.75rem"}},"Select at least one question first to load allowed answers."),E?n().createElement(o.OuH,{description:"Loading answers…"}):null,!E&&b?n().createElement("div",{style:{fontSize:"0.875rem",color:"var(--cds-text-error, #da1e28)",marginBottom:"0.75rem"}},b):null,n().createElement(o.a32,{key:h,id:`${e}-answers`,titleText:"Select answer",items:_,itemToString:e=>t5(e),disabled:!k,placeholder:k?"Type to filter answers…":"Answers disabled",onChange:e=>{var t;(t=e?.selectedItem??null)&&(s({questions:C,answers:N([...w??[],t])}),v(e=>e+1))}}),w?.length?n().createElement("div",{style:{marginTop:"0.75rem",display:"flex",flexWrap:"wrap",gap:"0.5rem"}},w.map(e=>n().createElement(o.vwO,{key:e.uuid,type:"gray",filter:!0,onClose:()=>{var t;return t=e.uuid,void s({questions:C,answers:(w??[]).filter(e=>e.uuid!==t)})},title:t5(e)},e.display,e.icd10Code?` • ICD-10:${e.icd10Code}`:"",e.icd11Code?` • ICD-11:${e.icd11Code}`:""))):null))}function t4({id:e,labelText:t,placeholder:r="Type and press Enter or comma to add",value:a=[],onChange:l,disabled:i=!1}){let[s,d]=n().useState(""),[c,m]=n().useState(!1),u=e=>{l(a.filter((t,r)=>r!==e))},p=e=>{let t=e.trim();t&&!a.includes(t)&&l([...a,t]),d("")};return n().createElement("div",{className:"tag-input-container"},t&&n().createElement("label",{htmlFor:e,style:{display:"block",marginBottom:"0.5rem",fontSize:"0.75rem",fontWeight:400,lineHeight:"1.34",color:"var(--cds-text-secondary, #525252)"}},t),n().createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.5rem",padding:"0.5rem",border:"1px solid var(--cds-text-primary, #161616)",borderRadius:"0.125rem",backgroundColor:c?"var(--cds-field-1, #ffffff)":"var(--cds-field-2, #f4f4f4)",minHeight:"3rem",alignItems:"center"},onFocus:()=>m(!0),onBlur:()=>{setTimeout(()=>{document.activeElement?.tagName!=="BUTTON"&&(m(!1),s.trim()&&p(s))},100)}},a.map((e,t)=>n().createElement(o.vwO,{key:t,type:"cool-gray",onClose:()=>u(t),style:{margin:0}},e)),n().createElement(o.ksK,{id:e,labelText:"",value:s,onChange:e=>{d(e.target.value)},onKeyDown:e=>{"Enter"===e.key||","===e.key?(e.preventDefault(),p(","===e.key?s.slice(0,-1):s)):"Backspace"===e.key&&!s&&a.length>0&&u(a.length-1)},onPaste:e=>{e.preventDefault();let t=e.clipboardData.getData("text").split(/[,\n\t]+/).map(e=>e.trim()).filter(Boolean);if(t.length>0){let e=t.filter(e=>!a.includes(e));l([...a,...e])}},placeholder:0===a.length?r:"",disabled:i,hideLabel:!0,style:{flex:1,minWidth:"120px",border:"none",boxShadow:"none",backgroundColor:"transparent",padding:0}})),n().createElement("div",{style:{marginTop:"0.25rem",fontSize:"0.75rem",color:"var(--cds-text-secondary, #525252)"}},"Press Enter or comma (,) to add a value. Click \xd7 to remove."))}function t3(e){let t=String(e??"").trim().toUpperCase();return"EQUALS"===t?"=":"GTE"===t?">=":"LTE"===t?"<=":"NOT_IN"===t?"NOT IN":"IN"===t?"IN":"LIKE"===t?"LIKE":"BETWEEN"===t?"BETWEEN":"IS_NULL"===t?"IS NULL":"IS_NOT_NULL"===t?"IS NOT NULL":"="===t||"!="===t||">"===t||">="===t||"<"===t||"<="===t||"IS NULL"===t||"IS NOT NULL"===t?t:"IN"}function t8(e){return"IN"===e||"NOT IN"===e}function t7(e){return"IS NULL"===e||"IS NOT NULL"===e}function t9(e){return e.map(e=>Number(e)).filter(e=>Number.isFinite(e)&&e>0)}function re(e){return e.map(e=>String(e)).filter(Boolean)}function rt({conditions:e,picked:t,onPickedChange:r,conceptUi:a,onConceptUiChange:l,qaUi:i,onQaUiChange:s}){let d=n().useCallback((e,a)=>{let n=(t??[]).find(t=>t.key===e.key)??{key:e.key,operator:e.operator,valueType:e.valueType,value:"QUESTION_ANSWER_CONCEPT_SEARCH"===e.handler?{questions:[],answers:[]}:"IN"===e.operator||"NOT_IN"===e.operator?[]:"BETWEEN"===e.operator||"DATE_RANGE"===e.handler?{start:"",end:""}:""};r(function(e,t){let r=(e??[]).findIndex(e=>e.key===t.key);if(-1===r)return[...e??[],t];let a=[...e??[]];return a[r]={...a[r],...t},a}(t??[],{...n,...a,key:e.key}))},[r,t]),c=n().useCallback((e,t)=>{s({...i??{},[e]:{...i?.[e]??{questions:[],answers:[]},...t}})},[s,i]),m=n().useCallback((e,t)=>{l({...a??{},[e]:t})},[l,a]);return e?.length?n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.75rem"}},"Conditions"),n().createElement(o.BJc,{gap:5},e.map(e=>{let r=(t??[]).find(t=>t.key===e.key);if("QUESTION_ANSWER_CONCEPT_SEARCH"===e.handler){let t=i?.[e.key]??{questions:[],answers:[]};return n().createElement("div",{key:e.key},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.25rem"}},e.label||e.key),n().createElement(t6,{id:`cond-${e.key}`,labelText:e.label||"Select question(s) & answers",value:{questions:t.questions,answers:t.answers},onChange:t=>{c(e.key,{questions:t.questions,answers:t.answers,error:void 0});let r="conceptUuid"===e.valueType?re((t.questions??[]).map(e=>e.uuid)):t9((t.questions??[]).map(e=>e.id)),a="conceptUuid"===e.valueType?re((t.answers??[]).map(e=>e.uuid)):t9((t.answers??[]).map(e=>e.id));d(e,{value:{questions:r,answers:a}})}}),i?.[e.key]?.error?n().createElement("div",{style:{marginTop:"0.5rem",color:"var(--cds-text-error, #da1e28)",fontSize:"0.875rem"}},i[e.key].error):null)}if("CONCEPT_SEARCH"===e.handler){let t=a?.[e.key]??[];return n().createElement("div",{key:e.key},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.25rem"}},e.label||e.key),n().createElement(tX,{id:`cond-${e.key}`,labelText:e.label||"Select concepts",value:t,onChange:t=>{m(e.key,t),"conceptUuid"===e.valueType?d(e,{value:re(t.map(e=>e.uuid))}):d(e,{value:t9(t.map(e=>e.id))})}}))}if("DATE_RANGE"===e.handler||"BETWEEN"===e.operator){let t=r?.value,a=t?.start??"",l=t?.end??"";return n().createElement("div",{key:e.key},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.25rem"}},e.label||e.key),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.5rem"}},n().createElement(o.ksK,{id:`cond-${e.key}-start`,labelText:"Start value",placeholder:"Start",value:a,onChange:t=>{d(e,{value:{start:t.target.value,end:l}})}}),n().createElement(o.ksK,{id:`cond-${e.key}-end`,labelText:"End value",placeholder:"End",value:l,onChange:t=>{d(e,{value:{start:a,end:t.target.value}})}})))}if(t7(t3(e.operator))){let t=r?.value===!0||r?.value==="true"||r?.value===1;return n().createElement("div",{key:e.key},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.25rem"}},e.label||e.key),n().createElement(o.lMk,{id:`cond-${e.key}`,labelText:"IS_NULL"===e.operator?"Include NULL values":"Include NOT NULL values",labelA:"Off",labelB:"On",toggled:t,onToggle:t=>d(e,{value:t})}))}if(t8(t3(e.operator))){let t=Array.isArray(r?.value)?r.value.map(e=>String(e)):"string"==typeof r?.value&&r.value.trim()?r.value.split(",").map(e=>e.trim()).filter(Boolean):[];return n().createElement("div",{key:e.key},n().createElement(t4,{id:`cond-${e.key}`,labelText:e.label||e.key,placeholder:"Type and press Enter or comma to add",value:t,onChange:t=>d(e,{value:t})}))}return n().createElement("div",{key:e.key},n().createElement(o.ksK,{id:`cond-${e.key}`,labelText:e.label||e.key,value:"string"==typeof r?.value?r.value:"",onChange:t=>d(e,{value:t.target.value})}))}))):n().createElement("div",{style:{opacity:.8}},"No conditions configured for this theme.")}function rr({sql:e,onChange:t,onReset:r,editable:a=!0}){return e?n().createElement("div",null,n().createElement(o.BJc,{gap:4},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"}},n().createElement("div",{style:{fontWeight:600}},"SQL Preview"),a&&r&&n().createElement(o.$nd,{size:"sm",kind:"ghost",onClick:r},"Reset to Generated")),a?n().createElement("textarea",{value:e,onChange:e=>t?.(e.target.value),style:{width:"100%",minHeight:"200px",fontSize:"0.875rem",fontFamily:"monospace",background:"var(--cds-layer-01)",padding:"0.75rem",borderRadius:"6px",border:"1px solid var(--cds-border-01, #e0e0e0)",resize:"vertical"},placeholder:"SQL query will appear here..."}):n().createElement("pre",{style:{fontSize:"0.875rem",background:"var(--cds-layer-01)",padding:"0.75rem",borderRadius:6,overflowX:"auto"}},e))):n().createElement("div",{style:{opacity:.8}},"SQL preview will appear once a theme is selected.")}let ra=[{value:"=",label:"Equals",requiresValue:!0},{value:"!=",label:"Not Equals",requiresValue:!0},{value:">",label:"Greater Than",requiresValue:!0},{value:">=",label:"Greater Than or Equal",requiresValue:!0},{value:"<",label:"Less Than",requiresValue:!0},{value:"<=",label:"Less Than or Equal",requiresValue:!0},{value:"IN",label:"IN (comma-separated)",requiresValue:!0},{value:"NOT IN",label:"NOT IN (comma-separated)",requiresValue:!0},{value:"LIKE",label:"LIKE (pattern matching)",requiresValue:!0},{value:"IS NULL",label:"IS NULL",requiresValue:!1},{value:"IS NOT NULL",label:"IS NOT NULL",requiresValue:!1},{value:"BETWEEN",label:"BETWEEN (two values)",requiresValue:!0}];function rn({conditions:e,onChange:t}){let[r,a]=n().useState({column:"",operator:"=",value:"",wildcardMode:"contains"}),l=ra.find(e=>e.value===r.operator);return n().createElement("div",null,n().createElement("div",{style:{marginBottom:"1rem"}},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Add Custom Condition"),n().createElement(o.BJc,{gap:3},n().createElement("div",null,n().createElement("label",{htmlFor:"custom-column",style:{display:"block",marginBottom:"0.25rem",fontSize:"0.75rem",color:"var(--cds-text-secondary, #525252)"}},"Column name"),n().createElement(o.ksK,{id:"custom-column",labelText:"",value:r.column,placeholder:"e.g., a.status, a.encounter_type",onChange:e=>a({...r,column:e.target.value})})),n().createElement("div",{style:{maxWidth:"300px"}},n().createElement(o.l6P,{id:"custom-operator",labelText:"Operator",value:r.operator,onChange:e=>a({...r,operator:e.target.value})},ra.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label})))),l?.requiresValue&&n().createElement("div",null,n().createElement("label",{htmlFor:"custom-value",style:{display:"block",marginBottom:"0.25rem",fontSize:"0.75rem",color:"var(--cds-text-secondary, #525252)"}},"Value","IN"===r.operator||"NOT IN"===r.operator?" (comma-separated)":"BETWEEN"===r.operator?" (two values, comma-separated)":""),n().createElement(o.ksK,{id:"custom-value",labelText:"",value:r.value,placeholder:"IN"===r.operator||"NOT IN"===r.operator?"e.g., 1,2,3 or a,b,c":"BETWEEN"===r.operator?"e.g., 10,50":"Enter value",onChange:e=>a({...r,value:e.target.value})}),"LIKE"===r.operator&&n().createElement("div",{style:{marginTop:"0.5rem"}},n().createElement("label",{style:{display:"block",marginBottom:"0.25rem",fontSize:"0.75rem",color:"var(--cds-text-secondary, #525252)"}},"Wildcard pattern"),n().createElement("div",{style:{display:"flex",gap:"1rem",flexWrap:"wrap"}},n().createElement("label",{style:{display:"flex",alignItems:"center",gap:"0.25rem",cursor:"pointer"}},n().createElement("input",{type:"radio",name:"wildcard-mode",value:"contains",checked:"contains"===r.wildcardMode,onChange:()=>a({...r,wildcardMode:"contains"})}),n().createElement("span",{style:{fontSize:"0.875rem"}},"Contains (%value%)")),n().createElement("label",{style:{display:"flex",alignItems:"center",gap:"0.25rem",cursor:"pointer"}},n().createElement("input",{type:"radio",name:"wildcard-mode",value:"startsWith",checked:"startsWith"===r.wildcardMode,onChange:()=>a({...r,wildcardMode:"startsWith"})}),n().createElement("span",{style:{fontSize:"0.875rem"}},"Starts with (value%)")),n().createElement("label",{style:{display:"flex",alignItems:"center",gap:"0.25rem",cursor:"pointer"}},n().createElement("input",{type:"radio",name:"wildcard-mode",value:"endsWith",checked:"endsWith"===r.wildcardMode,onChange:()=>a({...r,wildcardMode:"endsWith"})}),n().createElement("span",{style:{fontSize:"0.875rem"}},"Ends with (%value)")),n().createElement("label",{style:{display:"flex",alignItems:"center",gap:"0.25rem",cursor:"pointer"}},n().createElement("input",{type:"radio",name:"wildcard-mode",value:"none",checked:"none"===r.wildcardMode,onChange:()=>a({...r,wildcardMode:"none"})}),n().createElement("span",{style:{fontSize:"0.875rem"}},"None (exact match)"))))),n().createElement(o.$nd,{onClick:()=>{if(!r.column.trim())return;let n=ra.find(e=>e.value===r.operator);n?.requiresValue&&!r.value.trim()||(t([...e,{id:`custom_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,column:r.column.trim(),operator:r.operator,value:((e,t)=>{if("IS NULL"===e||"IS NOT NULL"===e)return!0;if("IN"===e||"NOT IN"===e)return t.split(",").map(e=>e.trim()).filter(Boolean);if("BETWEEN"===e){let e=t.split(",").map(e=>e.trim()).filter(Boolean);if(2===e.length)return JSON.stringify({start:e[0],end:e[1]})}return t})(r.operator,r.value),wildcardMode:"LIKE"===r.operator?r.wildcardMode:void 0}]),a({column:"",operator:"=",value:"",wildcardMode:"contains"}))},size:"sm"},"Add Condition"))),e.length>0&&n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Custom Conditions"),n().createElement(o.BJc,{gap:3},e.map(r=>n().createElement("div",{key:r.id,style:{display:"flex",alignItems:"center",gap:"0.5rem",padding:"0.5rem",backgroundColor:"var(--cds-background, #ffffff)",border:"1px solid var(--cds-interactive-01, #0f62fe)",borderRadius:"0.25rem"}},n().createElement(o.vwO,{type:"blue",style:{margin:0}},r.column),n().createElement("span",null,r.operator),r.wildcardMode&&"LIKE"===r.operator&&n().createElement(o.vwO,{type:"cool-gray",style:{margin:0,fontSize:"0.75rem"}},"contains"===r.wildcardMode?"%value%":"startsWith"===r.wildcardMode?"value%":"endsWith"===r.wildcardMode?"%value":"exact"),"boolean"==typeof r.value?n().createElement("span",{style:{color:"var(--cds-text-secondary, #525252)"}},"(toggle enabled)"):Array.isArray(r.value)?n().createElement(o.vwO,{type:"cool-gray",style:{margin:0}},r.value.join(", ")):n().createElement("span",{style:{fontFamily:"monospace"}},String(r.value)),n().createElement(o.$nd,{size:"sm",kind:"ghost",hasIconOnly:!0,renderIcon:()=>n().createElement("span",null,"\xd7"),onClick:()=>{var a;return a=r.id,void t(e.filter(e=>e.id!==a))},style:{marginLeft:"auto"}},"Remove"))))))}function rl(e){return`'${String(e).replace(/'/g,"''")}'`}function ri(e){let t=String(e??"").trim();return!t||t.includes(".")||t.includes("(")||t.includes(" ")||t.includes("`")?t:`a.${t}`}function ro(e){let t=String(e).trim(),r=t.match(/^(\d+)A+$/);if(r)return r[1];let a=t.match(/^(\d+)/);return a?a[1]:t}function rs(e){return(Array.isArray(e)?e:[e]).map(e=>String(e)).filter(e=>e.trim().length>0)}function rd(e){if(!e?.configJson)return null;let t=null;try{t=JSON.parse(e.configJson)}catch{return null}if(!t||"object"!=typeof t)return null;if(t.themeUuid&&t.themeConfig)return{version:1,themeUuid:t.themeUuid,themeConfig:t.themeConfig,conditions:Array.isArray(t.conditions)?t.conditions:[],customConditions:Array.isArray(t.customConditions)?t.customConditions:[],excludeDateFilter:!0===t.excludeDateFilter,countDistinctPatientId:!0===t.countDistinctPatientId,sqlPreview:t.sqlPreview??e.sqlTemplate??""};if(t.base?.themeUuid&&t.base?.themeConfig)return{version:1,themeUuid:t.base.themeUuid,themeConfig:t.base.themeConfig,conditions:Array.isArray(t.base.conditions)?t.base.conditions:[],customConditions:Array.isArray(t.base.customConditions)?t.base.customConditions:[],excludeDateFilter:!0===t.base.excludeDateFilter,countDistinctPatientId:!0===t.base.countDistinctPatientId,sqlPreview:t.base.sqlPreview??e.sqlTemplate??""};if(t.authoring?.base?.themeUuid&&t.authoring?.base?.themeConfig){let r=t.authoring.base;return{version:1,themeUuid:r.themeUuid,themeConfig:r.themeConfig,conditions:Array.isArray(r.conditions)?r.conditions:[],customConditions:Array.isArray(r.customConditions)?r.customConditions:[],excludeDateFilter:!0===r.excludeDateFilter,countDistinctPatientId:!0===r.countDistinctPatientId,sqlPreview:r.sqlPreview??e.sqlTemplate??""}}return null}function rc(e){return"QUESTION_ANSWER_CONCEPT_SEARCH"===e.handler?{questions:[],answers:[]}:"IN"===e.operator||"NOT_IN"===e.operator?[]:"BETWEEN"===e.operator||"DATE_RANGE"===e.handler?{start:"",end:""}:""}function rm({open:e,mode:t,initial:r,initialConceptUi:a,initialQaUi:l,onClose:i,onCreate:s,onUpdate:d,onSaved:c}){let m="edit"===t,u="duplicate"===t,[p,_]=n().useState("basics"),[g,E]=n().useState(""),[f,b]=n().useState(""),[y,h]=n().useState(""),[v,S]=n().useState([]),[T,C]=n().useState(!1),[w,N]=n().useState(null),[I,k]=n().useState(""),[A,R]=n().useState(null),[O,D]=n().useState(null),[x,L]=n().useState([]),[M,$]=n().useState([]),[P,U]=n().useState(!1),[B,F]=n().useState(!1),[z,q]=n().useState({}),[j,H]=n().useState({}),[J,G]=n().useState(""),[V,W]=n().useState(!1),[K,Q]=n().useState(!1);n().useEffect(()=>{if(!e)return;_("basics");let t=new AbortController;return C(!0),N(null),S([]),tU(void 0,t.signal).then(e=>S(e??[])).catch(e=>N(e?.message??"Failed to load themes")).finally(()=>C(!1)),()=>t.abort()},[e]),n().useEffect(()=>{if(e)if((m||u)&&r){E(r.name??""),b(r.code??""),h(r.description??"");let e=rd(r);e?.themeUuid&&e?.themeConfig?(k(e.themeUuid),R(e.themeConfig),L(e.conditions??[]),$(e.customConditions??[]),U(e.excludeDateFilter??!1),F(e.countDistinctPatientId??!1),G(e.sqlPreview??"")):(k(r.themeUuid??""),R(null),L([]),$([]),U(!1),F(!1),G("")),q(a??{}),H(l??{}),W(!1)}else E(""),b(""),h(""),k(""),R(null),D(null),L([]),$([]),U(!1),F(!1),q({}),H({}),G(""),W(!0)},[e,m,u,r,a,l]);let Y=n().useCallback(e=>{k(e),W(!0)},[]),X=n().useCallback(e=>{L(e),W(!0)},[]);n().useEffect(()=>{if(!e)return;if(!I){R(null),D(null),L([]),m||G("");return}if(A?.sourceTable&&r?.configJson){let e=rd(r);if(e?.themeUuid===I&&e?.themeConfig?.sourceTable===A.sourceTable)return}let t=new AbortController;return D(null),tB(I,t.signal).then(e=>{let t,r=(t=function(e,t){try{if(!e)return t;return JSON.parse(e)??t}catch{return t}}(e.configJson,{}))&&"object"==typeof t&&t.configJson&&"object"==typeof t.configJson?t.configJson:t;R(r),L(e=>(function(e,t){let r=new Map;for(let e of t??[])e?.key&&r.set(e.key,e);let a=[];for(let t of e??[]){if(!t?.key)continue;let e=r.get(t.key);if(e){a.push(e);continue}a.push({key:t.key,operator:t.operator,valueType:t.valueType,value:rc(t)})}for(let e of t??[])if(e?.key&&!r.has(e.key))continue;for(let r of t??[])r?.key&&((e??[]).some(e=>e?.key===r.key)||a.push(r));return a})(r.conditions??[],e??[])),q(e=>{let t={...e??{}};for(let e of r.conditions??[])"CONCEPT_SEARCH"!==e.handler||e.key in t||(t[e.key]=[]);return t}),H(e=>{let t={...e??{}};for(let e of r.conditions??[])"QUESTION_ANSWER_CONCEPT_SEARCH"!==e.handler||e.key in t||(t[e.key]={questions:[],answers:[]});return t})}).catch(e=>D(e?.message??"Failed to load theme config")),()=>t.abort()},[e,I]),n().useEffect(()=>{!A||K||(m||u)&&!V||G(function(e,t){if(!t||0===t.length)return e;let r=e.split("\n"),a=r.findIndex(e=>"WHERE"===e.trim()),n=r.length;if(a>=0)for(let e=a+1;e<r.length;e++){let t=r[e]?.trim();if(!t||";"===t||t.startsWith("JOIN")||t.startsWith("ORDER BY")||t.startsWith("GROUP BY")||t.startsWith("LIMIT")||t.startsWith("HAVING")){n=e;break}}let l=[],i=e=>{l.push(` AND ${e}`)};for(let e of t){let t=ri(e.column),r=t3(e.operator),a=e.value;if(t7(r)){!0===a&&i(`${t} ${r}`);continue}if(Array.isArray(a)){if(0===a.length)continue;let e=a.every(e=>/^[0-9]+$/.test(String(e))),n=a.map(t=>e?t:rl(String(t))).join(",");i("NOT IN"===r?`${t} NOT IN (${n})`:"IN"===r?`${t} IN (${n})`:`${t} ${r} (${n})`);continue}let n=null;if("object"==typeof a&&null!==a&&"start"in a&&"end"in a)n=a;else if("string"==typeof a)try{let e=JSON.parse(a);e&&"object"==typeof e&&"start"in e&&"end"in e&&(n=e)}catch{}if(n){let e=n.start,r=n.end;if(null!=e&&""!==e&&null!=r&&""!==r){let a=/^[0-9]+$/.test(String(e)),n=/^[0-9]+$/.test(String(r)),l=a?e:rl(String(e)),o=n?r:rl(String(r));i(`${t} BETWEEN ${l} AND ${o}`)}continue}let l=String(a);if(""===l)continue;if(t8(r)&&l.includes(",")){let e=l.split(",").map(e=>e.trim()).filter(Boolean);if(0===e.length)continue;let a=e.every(e=>/^[0-9]+$/.test(e)),n=e.map(e=>a?e:rl(e)).join(",");i("NOT IN"===r?`${t} NOT IN (${n})`:`${t} IN (${n})`);continue}let o=/^[0-9]+$/.test(l)?l:rl(l);if(t8(r))i("NOT IN"===r?`${t} NOT IN (${o})`:`${t} IN (${o})`);else if("BETWEEN"===r)continue;else if("LIKE"===r){let r=l;"contains"===e.wildcardMode?r=`%${l}%`:"startsWith"===e.wildcardMode?r=`${l}%`:"endsWith"===e.wildcardMode&&(r=`%${l}`);let a=rl(r);i(`${t} LIKE ${a}`)}else i(`${t} ${r} ${o}`)}return 0===l.length?e:(r.splice(n,0,...l),r.join("\n"))}(function(e,t,r){let a=e.split("\n"),n=a.findIndex(e=>"WHERE"===e.trim()),l=a.length;if(n>=0)for(let e=n+1;e<a.length;e++){let t=a[e]?.trim();if(!t||";"===t||t.startsWith("JOIN")||t.startsWith("ORDER BY")||t.startsWith("GROUP BY")||t.startsWith("LIMIT")||t.startsWith("HAVING")){l=e;break}}let i=[],o=e=>{i.push(` AND ${e}`)};for(let e of t??[]){var s;let t=r.find(t=>t.key===e.key);if(!t)continue;let a=t.value;if(null==a)continue;let n=t3(t.operator??e.operator??"IN");if("QUESTION_ANSWER_CONCEPT_SEARCH"===e.handler&&(s=a)&&"object"==typeof s&&("question"in s||"questions"in s||"answers"in s)){let t=Array.isArray(a.questions)?a.questions:null!==a.question&&void 0!==a.question&&""!==String(a.question).trim()?[a.question]:[],r=Array.isArray(a.answers)?a.answers:[],l=e?.columns?.question??e.questionColumn,i=e?.columns?.answer??e.answerColumn;if((!l||!i)&&e?.column){let t=function(e){let t=String(e??"").trim();if(!t)return{questionColumn:void 0,answerColumn:void 0};let r=t.match(/QA\s*$begin:math:text$\(\.\*\)$end:math:text$/i);if(!r)return{questionColumn:void 0,answerColumn:void 0};let a=(r[1]??"").trim();if(!a)return{questionColumn:void 0,answerColumn:void 0};let n=a.split(",").map(e=>e.trim()).filter(Boolean);return{questionColumn:n[0],answerColumn:n[1]}}(e.column);l=l??t.questionColumn,i=i??t.answerColumn}let s=e?.column;if(!l&&s&&(l=s),!i&&s&&!function(e){let t=String(e??"").trim();return/^([a-z]\.)?QA\s*\(/i.test(t)}(s)&&(i=s),l&&t.length){let r=rs(t);if(r.length){let t="conceptId"===e.valueType||r.every(e=>/^[0-9]+$/.test(e)),a=r.map(e=>t?e:rl(e)).join(","),n=ri(l);o(1===r.length?`${n} = ${a}`:`${n} IN (${a})`)}}if(i&&Array.isArray(r)&&r.length){let t=rs(r);if(t.length){let r=/diagnosis_coded|diagnosis|concept|coded/i.test(i||"")&&("conceptUuid"===e.valueType||t.some(e=>/^[0-9]+A+$/.test(String(e)))||t.some(e=>String(e).length>20))?t.map(e=>ro(String(e))):t,a="conceptId"===e.valueType||r.every(e=>/^[0-9]+$/.test(e)),l=r.map(e=>a?e:rl(e)).join(","),s=ri(i);o("NOT IN"===n?`${s} NOT IN (${l})`:`${s} IN (${l})`)}}continue}if(Array.isArray(a)){let t=rs(a);if(!t.length)continue;let r=/diagnosis_coded|diagnosis|concept|coded/i.test(e.column||"")&&("conceptUuid"===e.valueType||t.some(e=>/^[0-9]+A+$/.test(String(e)))||t.some(e=>String(e).length>20))?t.map(e=>ro(String(e))):t,l="conceptId"===e.valueType||r.every(e=>/^[0-9]+$/.test(e)),i=r.map(e=>l?e:rl(e)).join(","),s=ri(e.column);if("BETWEEN"===n){if(2===t.length){let[e,t]=r.map(e=>l?e:rl(e));o(`${s} BETWEEN ${e} AND ${t}`)}continue}o("NOT IN"===n?`${s} NOT IN (${i})`:"IN"===n?`${s} IN (${i})`:`${s} ${n} (${i})`);continue}if("BETWEEN"===n&&"object"==typeof a&&null!==a&&"start"in a&&"end"in a){let t=a.start,r=a.end;if(null!=t&&""!==t&&null!=r&&""!==r){let a="conceptId"===e.valueType||/^[0-9]+$/.test(String(t)),n="conceptId"===e.valueType||/^[0-9]+$/.test(String(r)),l=a?t:rl(String(t)),i=n?r:rl(String(r)),s=ri(e.column);o(`${s} BETWEEN ${l} AND ${i}`)}continue}if("object"==typeof a)continue;let l=ri(e.column);if(t7(n)){o(`${l} ${n}`);continue}let i=String(a);if(""===i)continue;let d="conceptId"===e.valueType||/^[0-9]+$/.test(i)?i:rl(i);if(t8(n))o("NOT IN"===n?`${l} NOT IN (${d})`:`${l} IN (${d})`);else{if("BETWEEN"===n)continue;o(`${l} ${n} ${d}`)}}return a.splice(l,0,...i),a.join("\n")}(function(e,t=!1,r=!1){let a=e.sourceTable,n=e.patientIdColumn,l=e.dateColumn,i=[];return i.push("SELECT"),i.push(` COUNT${r?`(DISTINCT a.${n})`:"(*)"} AS total`),i.push(`FROM ${a} a`),i.push("JOIN mamba_fact_patients_latest_patient_demographics mdp"),i.push(` ON mdp.${n} = a.${n}`),i.push("WHERE"),t||(i.push(` a.${l} >= :startDate`),i.push(` AND a.${l} < :endDate`)),t?i.push(" mdp.birthdate IS NOT NULL"):i.push(" AND mdp.birthdate IS NOT NULL"),i.push(" AND mdp.gender IS NOT NULL"),i.push(";"),i.join("\n")}(A,P,B),A.conditions??[],x),M))},[A,x,M,P,B,m,u,V,K]);let Z=!!g.trim()&&!!I&&!!A?.sourceTable&&!!A?.patientIdColumn&&!!A?.dateColumn,ee=async()=>{if(!Z||!A)return;let e=function(e,t,r,a){let n=new Map;for(let e of t??[])e?.key&&n.set(e.key,e);let l=[];for(let t of e??[]){if(!t?.key)continue;let e=n.get(t.key),i=e?{...e}:{key:t.key,operator:t.operator,valueType:t.valueType,value:rc(t)};if("CONCEPT_SEARCH"===t.handler){let e=(r?.[t.key]??[]??[]).map(e=>e.uuid).filter(Boolean);i.valueType="conceptUuid",i.value=e}if("QUESTION_ANSWER_CONCEPT_SEARCH"===t.handler){let e=a?.[t.key]??{questions:[],answers:[]},r=(e.questions??[]).map(e=>e.uuid).filter(Boolean),n=(e.answers??[]).map(e=>e.uuid).filter(Boolean);i.valueType="conceptUuid",i.value={questions:r,answers:n}}l.push(i)}let i=new Set((e??[]).map(e=>e?.key).filter(Boolean));for(let e of t??[])e?.key&&(i.has(e.key)||l.push(e));return l}(A.conditions??[],x,z,j),t={version:1,themeUuid:I,themeConfig:A,conditions:e,customConditions:M,excludeDateFilter:P,countDistinctPatientId:B,sqlPreview:J},a={name:g.trim(),code:f.trim()||void 0,description:y.trim()||void 0,kind:"BASE",defaultValueType:"NUMBER",themeUuid:I,configJson:JSON.stringify(t,null,2),sqlTemplate:J,metaJson:void 0};m&&r?.uuid?await d(r.uuid,a):await s(a),c()};if(!e)return null;let et=({id:e,label:t})=>n().createElement(o.VxE,{isActive:p===e,onClick:()=>_(e)},t);return n().createElement(o.aFV,{open:e,modalHeading:m?"Edit Base Indicator":u?"Duplicate Base Indicator":"Create Base Indicator",primaryButtonText:m?"Save":u?"Create Duplicate":"Create",secondaryButtonText:"Cancel",onRequestClose:i,onRequestSubmit:ee,primaryButtonDisabled:!Z,size:"lg"},n().createElement(o.BJc,{gap:6},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":"Indicator editor sections"},n().createElement(o.BC4,null,n().createElement(et,{id:"basics",label:"Basics"}),n().createElement(et,{id:"theme",label:"Theme"}),n().createElement(et,{id:"conditions",label:"Conditions"}),n().createElement(et,{id:"sql",label:"SQL Preview"})))),n().createElement(o.UCW,{style:{padding:0}},"basics"===p?n().createElement(tF,{value:{name:g,code:f,description:y},onChange:e=>{E(e.name),b(e.code),h(e.description)}}):null,"theme"===p?n().createElement(o.BJc,{gap:6},n().createElement(tz,{themes:v,loading:T,error:w,themeUuid:I,onThemeUuidChange:Y,themeConfigError:O}),A?.dateColumn?n().createElement("div",{style:{padding:"1rem",backgroundColor:"var(--cds-background, #f4f4f4)",borderRadius:"0.25rem",border:"1px solid var(--cds-interactive-01, #0f62fe)"}},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Date Filtering Control"),n().createElement("div",{style:{fontSize:"0.875rem",color:"var(--cds-text-secondary, #525252)",marginBottom:"1rem"}},"By default, the theme automatically filters by ",n().createElement("code",null,A.dateColumn)," between the start and end dates. You can exclude this to define your own custom date conditions."),n().createElement(o.lMk,{id:"exclude-date-filter",labelText:"Exclude automatic date filtering",labelA:"Use theme date filtering",labelB:"Use custom date conditions",toggled:P,onToggle:e=>{U(e),W(!0)}})):null,A?.patientIdColumn?n().createElement("div",{style:{padding:"1rem",backgroundColor:"var(--cds-background, #f4f4f4)",borderRadius:"0.25rem",border:"1px solid var(--cds-interactive-01, #0f62fe)"}},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Patient Counting Method"),n().createElement("div",{style:{fontSize:"0.875rem",color:"var(--cds-text-secondary, #525252)",marginBottom:"1rem"}},"By default, the indicator counts all matching rows. Enable this option to count ",n().createElement("strong",null,"distinct patients only")," based on ",n().createElement("code",null,A.patientIdColumn),". This ensures each patient is counted only once, even if they have multiple matching records."),n().createElement(o.lMk,{id:"count-distinct-patients",labelText:"Count distinct patients",labelA:"Count all rows",labelB:"Count distinct patients",toggled:B,onToggle:e=>{F(e),W(!0)}})):null):null,"conditions"===p?n().createElement(o.BJc,{gap:8},n().createElement(rt,{conditions:A?.conditions??[],picked:x,onPickedChange:X,conceptUi:z,onConceptUiChange:e=>{q(e),W(!0)},qaUi:j,onQaUiChange:e=>{H(e),W(!0)}}),n().createElement("div",{style:{marginTop:"2rem",borderTop:"1px solid var(--cds-interactive-01, #0f62fe)",paddingTop:"1.5rem"}},n().createElement("div",{style:{fontWeight:600,marginBottom:"1rem"}},"Custom Conditions"),n().createElement("div",{style:{fontSize:"0.875rem",color:"var(--cds-text-secondary, #525252)",marginBottom:"1rem"}},"Add your own conditions beyond the theme-defined ones. These will be applied in addition to the theme conditions."),n().createElement(rn,{conditions:M,onChange:e=>{$(e),W(!0)}}))):null,"sql"===p?n().createElement(rr,{sql:J,onChange:e=>{G(e),Q(!0)},onReset:()=>{Q(!1),W(!0)}}):null))))}let ru="/reportbuilder/indicator";function rp(e){return{...e,configJson:e.configJson?(0,K.j)(e.configJson):e.configJson,metaJson:e.metaJson?(0,K.j)(e.metaJson):e.metaJson,sqlTemplate:e.sqlTemplate?(0,K.j)(e.sqlTemplate):e.sqlTemplate,denominatorSqlTemplate:e.denominatorSqlTemplate?(0,K.j)(e.denominatorSqlTemplate):e.denominatorSqlTemplate}}async function r_(e,t){var r;let a=e?.q?.trim(),n=e?.kind?.trim?.()?e.kind:e?.kind,l=e?.includeRetired===!0,i=e?.v??"default",o=new URLSearchParams;return o.set("v",i),a&&o.set("q",a),n&&o.set("kind",n),l&&o.set("includeRetired","true"),(!(r=await (0,W.wO)(`${ru}?${o.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid).map(rp)}async function rg(e,t,r="full"){return rp(await (0,W.wO)(`${ru}/${encodeURIComponent(e)}?v=${r}`,t))}async function rE(e,t){return(0,W.oV)(ru,e,t)}async function rf(e,t,r){return(0,W.oV)(`${ru}/${encodeURIComponent(e)}`,t,r)}async function rb(e,t=!1,r="Retired via UI",a){let n=t?"purge=true":`purge=false&reason=${encodeURIComponent(r)}`;await (0,W.hI)(`${ru}/${encodeURIComponent(e)}?${n}`,a)}function ry({value:e,onChange:t}){return n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"composite-name",labelText:"Indicator Name",value:e.name,onChange:r=>t({...e,name:r.target.value})}),n().createElement(o.ksK,{id:"composite-code",labelText:"Code",helperText:"Auto-generated if blank",value:e.code,onChange:r=>t({...e,code:r.target.value}),placeholder:"E.g. PREG_AND_MAL"}),n().createElement(o.fs1,{id:"composite-description",labelText:"Description",value:e.description,onChange:r=>t({...e,description:r.target.value})}))}function rh(e){let t=[],r=(e?.sqlTemplate??"").trim();if(r)return{sql:rT(r),source:"indicator.sqlTemplate"};t.push("indicator.sqlTemplate");let a=null;try{a=e?.configJson?JSON.parse(e.configJson):null}catch(e){a=null}if(!a)return rv(e,t,"configJson is null or invalid JSON");let n=(e,r)=>{t.push(e);let n=(r(a)??"").trim();return n?{sql:rT(n),source:e,parsedConfig:a}:null},l=n("configJson.sqlPreview",e=>e.sqlPreview)||n("configJson.sqlTemplate",e=>e.sqlTemplate)||n("configJson.base.sqlPreview",e=>e.base?.sqlPreview)||n("configJson.base.sqlTemplate",e=>e.base?.sqlTemplate)||n("configJson.authoring.base.sqlPreview",e=>e.authoring?.base?.sqlPreview)||n("configJson.authoring.base.sqlTemplate",e=>e.authoring?.base?.sqlTemplate)||n("configJson.baseIndicator.sqlPreview",e=>e.baseIndicator?.sqlPreview)||n("configJson.baseIndicator.sqlTemplate",e=>e.baseIndicator?.sqlTemplate);return l||(t.push("none"),rv(e,t,"No SQL found in any known config location"))}function rv(e,t,r){return{success:!1,error:`SQL_RESOLUTION_FAILED: ${r}`,indicator:{uuid:e.uuid,code:e.code,name:e.name,kind:e.kind},attemptedSources:t}}function rS(e){return!1===e.success}function rT(e){return e?e.replace(/\\n/g,"\n"):e}function rC(e,t){return t||("Encounters"===e?"encounter_id":"patient_id")}function rw(e){try{let t=e?.configJson?JSON.parse(e.configJson):null,r=t?.themeConfig?{...t.themeConfig,_source:"themeConfig"}:t?.base?.themeConfig?{...t.base.themeConfig,_source:"base.themeConfig"}:t?.authoring?.base?.themeConfig?{...t.authoring.base.themeConfig,_source:"authoring.base.themeConfig"}:t?.baseIndicator?.themeConfig?{...t.baseIndicator.themeConfig,_source:"baseIndicator.themeConfig"}:null,a=r?.patientIdColumn;return a?String(a):"patient_id"}catch{return"patient_id"}}function rN(e){let t=rh(e);return rS(t)?{sql:"",source:!1===t.success?"none(parse-error)":"none"}:{sql:t.sql,source:t.source}}function rI(e){let t=e.match(/FROM\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+(?:AS\s+)?([a-zA-Z_][a-zA-Z0-9_]*)\b/i);return t?t[2]:null}function rk(e,t,r){var a;let n=t||rC(r),l=(e??"").trim();if(!l)return"";let i=(l=(a=l)?a.replace(/\\n/g,"\n"):a).replace(/;+\s*$/,""),o=i.match(/SELECT\s+COUNT\s*\(\s*DISTINCT\s+([a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)?)\s*\)\s+FROM/i);if(o){let e=o[1],t=o[0].length-5,r=i.substring(t).trim();if(e.includes("."))return rA(`SELECT DISTINCT ${e} AS ${n} ${r}`.trim(),n);let a=rI(r)||"a";return rA(`SELECT DISTINCT ${a}.${e} AS ${n} ${r}`.trim(),n)}let s=i.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(s){let e=s[1],t=i.substring(s[0].length);if(e.includes("."))return rA(`SELECT DISTINCT ${e} AS ${n} ${t}`.trim(),n);let r=rI(t)||"a";return rA(`SELECT DISTINCT ${r}.${e} AS ${n} ${t}`.trim(),n)}let d=i.search(/SELECT\s+COUNT\s*\(\s*\*\s*\)\s+AS\s+total/i),c=i.match(/FROM\s*\(\s*(SELECT[\s\S]*?)\)\s*X\b/i);if(d>=0&&c?.[1]){let e=i.slice(0,d).trim(),t=c[1].trim().replace(/;+\s*$/,"");return rA(`
|
|
8
8
|
${e}
|
|
9
9
|
SELECT DISTINCT pop.${n}
|
|
10
10
|
FROM (
|
|
@@ -116,7 +116,7 @@ ORDER BY ag.sort_order, g.gender;
|
|
|
116
116
|
`.trim()}function r6({baseIndicator:e,ageCategoryCode:t,genders:r}){let{sql:a}=rN(e),n=rw(e),l=a?rk(a,n,"Patients"):"";if(!l.trim())return`-- Unable to build final indicator SQL: base indicator does not contain usable count SQL.
|
|
117
117
|
-- Ensure the base indicator has a valid sqlTemplate or configJson.sqlPreview.`;let i=(r??[]).length?r:["F","M"];r&&0!==r.length||console.warn("[buildFinalIndicatorSql] No genders specified, defaulting to both F and M. This default will be removed in a future version.");let o=i.map((e,t)=>0===t?`SELECT '${e}' AS gender`:`UNION ALL SELECT '${e}' AS gender`).join("\n");return`
|
|
118
118
|
WITH base_pop AS (
|
|
119
|
-
${
|
|
119
|
+
${r4(l.trim(),2)}
|
|
120
120
|
),
|
|
121
121
|
ag AS (
|
|
122
122
|
SELECT
|
|
@@ -132,7 +132,7 @@ ag AS (
|
|
|
132
132
|
AND ag.is_active = 1
|
|
133
133
|
),
|
|
134
134
|
genders AS (
|
|
135
|
-
${
|
|
135
|
+
${r4(o,2)}
|
|
136
136
|
),
|
|
137
137
|
cnt AS (
|
|
138
138
|
SELECT
|
|
@@ -160,10 +160,10 @@ LEFT JOIN cnt
|
|
|
160
160
|
ON cnt.age_group_id = ag.age_group_id
|
|
161
161
|
AND cnt.gender = g.gender
|
|
162
162
|
ORDER BY ag.sort_order, g.gender;
|
|
163
|
-
`.trim()}function
|
|
163
|
+
`.trim()}function r4(e,t){let r=" ".repeat(t);return e.split("\n").map(e=>e.trim().length?r+e:e).join("\n")}async function r3({baseIndicator:e,ageCategoryCode:t,genders:r,getIndicator:a,compilerOptions:n={}}){try{if(rY(),"COMPOSITE"===e.kind){let l=await rX(e,a,new Set,n);if(l.error)return`-- Error: ${l.error.message}
|
|
164
164
|
-- Base indicator: ${e.name} (${e.code||e.uuid})
|
|
165
165
|
-- Error Code: ${l.error.code}`;let i=l.sql;return r5({populationSql:i,ageCategoryCode:t,genders:r})}return r6({baseIndicator:e,ageCategoryCode:t,genders:r})}catch(r){let t=r instanceof Error?r.message:String(r);return`-- Error building final indicator SQL: ${t}
|
|
166
|
-
-- Base indicator: ${e.name} (${e.code||e.uuid})`}}function r8(){let e=new Date,t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return`${t}-${r}-${a}`}function r7({open:e,mode:t="create",initial:r,onClose:a,onCreate:l,onUpdate:i,onSaved:s}){let[d,c]=n().useState([]),[m,u]=n().useState(!1),[p,_]=n().useState(null),[g,E]=n().useState({name:"",code:"",description:""}),[f,b]=n().useState(""),[y,h]=n().useState(""),[v,S]=n().useState(["F","M"]),[T,C]=n().useState(null),[w,N]=n().useState(!1),[I,k]=n().useState(null),[A,R]=n().useState(""),[O,D]=n().useState("2025-01-01"),[x,L]=n().useState(r8);n().useEffect(()=>{if(!e)return;let t=new AbortController;return u(!0),_(null),rM(t.signal).then(e=>c(e)).catch(e=>_(e?.message??"Failed to load age categories")).finally(()=>u(!1)),()=>t.abort()},[e]),n().useEffect(()=>{if(e){if("edit"===t&&r?.uuid){let e=function(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}(r.configJson)??{};E({name:r.name??"",code:r.code??"",description:r.description??""}),b(String(e.baseIndicatorId??"")),h(String(e.ageGroupSetCode??e.ageCategoryCode??"")),S(e.genders??["F","M"]),R(String(e.sqlPreview??r.sqlTemplate??""));return}E({name:"",code:"",description:""}),b(""),h(""),S(["F","M"]),R(""),C(null),k(null)}},[e,t,r?.uuid]),n().useEffect(()=>{if(!e)return;if(!f)return void C(null);let t=new AbortController;return N(!0),k(null),rg(f,t.signal,"full").then(e=>C(e)).catch(e=>k(e?.message??"Failed to load selected base indicator")).finally(()=>N(!1)),()=>t.abort()},[e,f]),n().useEffect(()=>{e&&(T&&y?(async()=>{"COMPOSITE"===T.kind?R(await
|
|
166
|
+
-- Base indicator: ${e.name} (${e.code||e.uuid})`}}function r8(){let e=new Date,t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return`${t}-${r}-${a}`}function r7({open:e,mode:t="create",initial:r,onClose:a,onCreate:l,onUpdate:i,onSaved:s}){let[d,c]=n().useState([]),[m,u]=n().useState(!1),[p,_]=n().useState(null),[g,E]=n().useState({name:"",code:"",description:""}),[f,b]=n().useState(""),[y,h]=n().useState(""),[v,S]=n().useState(["F","M"]),[T,C]=n().useState(null),[w,N]=n().useState(!1),[I,k]=n().useState(null),[A,R]=n().useState(""),[O,D]=n().useState("2025-01-01"),[x,L]=n().useState(r8);n().useEffect(()=>{if(!e)return;let t=new AbortController;return u(!0),_(null),rM(t.signal).then(e=>c(e)).catch(e=>_(e?.message??"Failed to load age categories")).finally(()=>u(!1)),()=>t.abort()},[e]),n().useEffect(()=>{if(e){if("edit"===t&&r?.uuid){let e=function(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}(r.configJson)??{};E({name:r.name??"",code:r.code??"",description:r.description??""}),b(String(e.baseIndicatorId??"")),h(String(e.ageGroupSetCode??e.ageCategoryCode??"")),S(e.genders??["F","M"]),R(String(e.sqlPreview??r.sqlTemplate??""));return}E({name:"",code:"",description:""}),b(""),h(""),S(["F","M"]),R(""),C(null),k(null)}},[e,t,r?.uuid]),n().useEffect(()=>{if(!e)return;if(!f)return void C(null);let t=new AbortController;return N(!0),k(null),rg(f,t.signal,"full").then(e=>C(e)).catch(e=>k(e?.message??"Failed to load selected base indicator")).finally(()=>N(!1)),()=>t.abort()},[e,f]),n().useEffect(()=>{e&&(T&&y?(async()=>{"COMPOSITE"===T.kind?R(await r3({baseIndicator:T,ageCategoryCode:y,genders:v,getIndicator:async e=>{try{return await rg(e,void 0,"full")}catch{return null}},compilerOptions:{allowRetired:!0}})):R(r6({baseIndicator:T,ageCategoryCode:y,genders:v}))})():R(""))},[e,T,y,v]);let M=!!g.name.trim()&&!!f&&!!y&&!!A.trim(),$=async()=>{if(!M||!T)return;let e=g.code.trim()?g.code.trim().toUpperCase():g.name.toUpperCase().replace(/[^A-Z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,50),a={name:g.name.trim(),code:e,description:g.description.trim()||void 0,kind:"FINAL",defaultValueType:"NUMBER",themeUuid:null,configJson:JSON.stringify({version:1,baseIndicatorId:f,ageCategoryCode:y,ageGroupSetCode:y,genders:v,sqlPreview:A},null,2),sqlTemplate:A};if("edit"===t&&r?.uuid){if(!i)throw Error("onUpdate handler is required for edit mode");await i(r.uuid,a)}else await l(a);s()};return n().createElement(o.aFV,{open:e,onRequestClose:a,modalHeading:"edit"===t?"Edit Final Indicator":"Create Final Indicator",primaryButtonText:"edit"===t?"Update Indicator":"Save Indicator",secondaryButtonText:"Cancel",onRequestSubmit:$,primaryButtonDisabled:!M,size:"lg"},n().createElement(o.BJc,{gap:6},m?n().createElement(o.OuH,{description:"Loading age categories…"}):null,p?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Age categories",subtitle:p}):null,n().createElement(r$,{value:g,onChange:E}),n().createElement("hr",{style:{border:0,borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)"}}),n().createElement(rP,{ageCategories:d,selectedBaseId:f,selectedAgeCategoryCode:y,onChangeBaseId:b,onChangeAgeCategoryCode:h}),w?n().createElement(o.OuH,{description:"Loading base indicator details…"}):null,I?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Base indicator",subtitle:I}):null,n().createElement(rU,{genders:v,onChange:S}),n().createElement(rz,{sql:A,maxRows:200,startDate:O,endDate:x,onChangeStartDate:D,onChangeEndDate:L})))}let r9=new class{analyze(e,t){let r={patientIdColumn:t?.patientIdColumn||this.detectPatientIdColumn(e),hasPopulationQuery:!1,filters:[],joinStructure:[],redisaggregatable:!1,confidence:0};for(let t of[/SELECT\s+COUNT\s*\(\s*DISTINCT\s+(\w+)\.?(\w+)\s*\)\s*FROM\s*\(\s*SELECT/i,/FROM\s*\(\s*SELECT\s+.*?GROUP\s+BY\s+(patient_id|patient_id|person_id)/i,/SELECT\s+DISTINCT\s+(patient_id|patient_id|person_id)/i])if(t.test(e)){r.hasPopulationQuery=!0,r.confidence+=.3;break}for(let{type:t,pattern:a}of[{type:"INNER JOIN",pattern:/INNER\s+JOIN\s+(\w+(?:\s+\w+)?)\s+(?:AS\s+)?(\w+)\s+ON\s+([^\n]+)/gi},{type:"LEFT JOIN",pattern:/LEFT\s+(?:OUTER\s+)?JOIN\s+(\w+(?:\s+\w+)?)\s+(?:AS\s+)?(\w+)\s+ON\s+([^\n]+)/gi},{type:"CROSS JOIN",pattern:/CROSS\s+JOIN\s+(\w+(?:\s+\w+)?)\s+(?:AS\s+)?(\w+)/gi}]){let n;for(;null!==(n=a.exec(e));)r.joinStructure.push({type:t,table:n[1]?.trim()||"",alias:n[2]?.trim()||"",condition:n[3]?.trim()||""}),r.confidence+=.1}for(let{name:t,pattern:a,type:n}of[{name:"death_filter",pattern:/p\.dead\s*=\s*1/i,type:"WHERE"},{name:"transfer_out_filter",pattern:/mfto\.patient_id\s+IS\s+NULL/i,type:"WHERE"},{name:"lost_filter",pattern:/ltfp_days\s*>\s*(?:\d+)/i,type:"WHERE"},{name:"prison_filter",pattern:/special_category\s*=\s*'In prison'/i,type:"INNER JOIN"}])a.test(e)&&(r.filters.push({name:t,type:n,pattern:a.source}),r.confidence+=.05);return r.redisaggregatable=r.hasPopulationQuery&&r.confidence>=.5&&void 0!==r.patientIdColumn,r}extractPopulationSql(e,t){let r={sql:"",success:!1,warnings:[]};if(console.log("\uD83D\uDD0D [Interpreter] Extracting population SQL:",{sqlLength:e?.length||0,sqlPreview:e?.substring(0,200)||"EMPTY",config:t,fullSql:e?.substring(0,500)||"EMPTY"}),!e||!e.trim())return r.warnings?.push("CUSTOM_POPULATION_MISSING: Indicator has supportsRedisaggregation=true but no population SQL source"),r.warnings?.push("Expected one of: populationSql, sqlTemplate, or sqlPreview in configJson"),console.error("❌ [Interpreter] CUSTOM_POPULATION_MISSING: Empty SQL provided"),r;let a=e.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&").replace(/\\n/g,"\n").trim(),n=(a=a.replace(/':(\w+)'/g,":$1")).match(/SELECT\s+[\s\S]*?,\s*COUNT\s*\(\s*DISTINCT\s+(\w+)\.(\w+)\s*\)\s*(?:AS\s+\w+)?\s+FROM\s*\(\s*SELECT\s+patient_id/i);if(n){console.log("✅ [Pattern 0] Detected TX-RTT disaggregated query with age_group/sex");let e=n[2],t=n.index+n[0].length,l=this.matchBalancedParens(a,t);if(l){let t=`SELECT patient_id${l.text}`.trim(),n=l.endIndex,i=a.substring(n).match(/\s*(\w+)([\s\S]*)/i);if(i){let a=i[1],n=i[2]||"";r.patientIdColumn="patient_id"===e||"patient_id"===e||"person_id"===e?e:"patient_id";let l=n.replace(/GROUP\s+BY\s+[\s\S]*?;?\s*$/i,"").trim(),o=`SELECT DISTINCT ${a}.${e} AS patient_id
|
|
167
167
|
FROM (
|
|
168
168
|
${this.indent(t,2)}
|
|
169
169
|
) ${a}
|
|
@@ -232,7 +232,7 @@ CROSS JOIN genders g
|
|
|
232
232
|
LEFT JOIN cnt
|
|
233
233
|
ON cnt.age_group_id = ag.age_group_id
|
|
234
234
|
AND cnt.gender = g.gender
|
|
235
|
-
ORDER BY ag.sort_order, g.gender;`.trim()}validate(e,t){let r={valid:!0,errors:[],warnings:[],info:[]};if(e.patientIdColumn||(r.errors.push("patientIdColumn is required"),r.valid=!1),e.populationQuery||(r.errors.push("populationQuery configuration is required"),r.valid=!1),e.supportsRedisaggregation||"none"===e.redisaggregationStrategy||r.warnings.push("Redisaggregation strategy set but supportsRedisaggregation is false"),t&&t.trim()){let a=this.analyze(t,e);!a.hasPopulationQuery&&e.supportsRedisaggregation&&r.warnings.push("SQL does not appear to have a clear population query structure"),a.patientIdColumn!==e.patientIdColumn&&r.warnings.push(`Configured patientIdColumn (${e.patientIdColumn}) differs from detected (${a.patientIdColumn})`),e.supportsRedisaggregation&&!a.redisaggregatable&&(r.errors.push("SQL structure does not support re-disaggregation"),r.valid=!1),r.info.push(`Query analysis confidence: ${Math.round(100*a.confidence)}%`)}if(e.preserveFilters&&e.preserveFilters.length>0)for(let t of e.preserveFilters)t.name&&t.joinPattern&&t.wherePattern||(r.errors.push(`Filter "${t.name}" is missing required patterns`),r.valid=!1);return r}detectPatientIdColumn(e){let t=[{column:"patient_id",pattern:/\bpatient_id\b/i},{column:"patient_id",pattern:/\bpatient_id\b/i},{column:"person_id",pattern:/\bperson_id\b/i}].map(({column:t,pattern:r})=>({column:t,count:(e.match(r)||[]).length})).sort((e,t)=>t.count-e.count)[0];return t.count>0?t.column:"patient_id"}matchBalancedParens(e,t){let r=1,a=t,n=e.length;for(;a<n&&r>0;){let t=e[a];"("===t?r++:")"===t&&r--,a++}return 0!==r?null:{text:e.substring(t,a-1),endIndex:a}}indent(e,t){let r=" ".repeat(t);return e.split("\n").map(e=>e.trim()?r+e:e).join("\n")}};function ae({value:e,sqlTemplate:t,onChange:r,onSqlChange:a}){return n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(o.ksK,{id:"custom-name",labelText:"Custom indicator name",value:e.name,onChange:t=>r({...e,name:t.target.value}),placeholder:"e.g., RTT Treatment Outcomes"}),n().createElement(o.ksK,{id:"custom-code",labelText:"Code (optional)",value:e.code,onChange:t=>r({...e,code:t.target.value}),placeholder:"AUTO_GENERATED"}),n().createElement("div",{style:{gridColumn:"1 / -1"}},n().createElement(o.fs1,{id:"custom-desc",labelText:"Description (optional)",value:e.description,rows:2,onChange:t=>r({...e,description:t.target.value}),placeholder:"Short description of what this custom indicator represents."})),n().createElement("div",{style:{gridColumn:"1 / -1"}},n().createElement(o.fs1,{id:"custom-sql",labelText:"SQL Template",value:t,rows:10,onChange:e=>a(e.target.value),placeholder:"Enter your complex SQL query here. This can include multiple JOINs, subqueries, and custom business logic.",style:{fontFamily:"monospace",fontSize:"0.875rem"}})))}let at=[{id:"patient_id",label:"patient_id"},{id:"patient_id",label:"patient_id"},{id:"person_id",label:"person_id"}],ar=[{id:"sqlTemplate",label:"SQL Template (direct)"},{id:"configJson",label:"Config JSON Path"},{id:"auto",label:"Auto-detect"},{id:"custom",label:"Custom Extractor"}];function aa({patientIdColumn:e,extractionMethod:t,configPath:r,customExtractor:a,onChangePatientIdColumn:l,onChangeExtractionMethod:i,onChangeConfigPath:s,onChangeCustomExtractor:d}){let c=n().useMemo(()=>at.find(t=>t.id===e)||at[0],[e]),m=n().useMemo(()=>ar.find(e=>e.id===t)||ar[0],[t]);return n().createElement(o.BJc,{gap:4},n().createElement("h4",{style:{margin:0}},"Population Configuration"),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(o.a32,{id:"patient-id-column",titleText:"Patient ID Column",items:at,itemToString:e=>e?e.label:"",selectedItem:c,placeholder:"Select patient ID column",onChange:({selectedItem:e})=>{e&&l(e.id)}}),n().createElement(o.a32,{id:"extraction-method",titleText:"Population Extraction Method",items:ar,itemToString:e=>e?e.label:"",selectedItem:m,placeholder:"Select extraction method",onChange:({selectedItem:e})=>{e&&i(e.id)}})),"configJson"===t&&n().createElement(o.ksK,{id:"config-path",labelText:"Config JSON Path",value:r,onChange:e=>s(e.target.value),placeholder:"e.g., populationQuery.sql",helperText:"Path in configJson where population SQL is stored"}),"custom"===t&&n().createElement(o.ksK,{id:"custom-extractor",labelText:"Custom Extractor Function",value:a,onChange:e=>d(e.target.value),placeholder:"e.g., extractRttPopulation",helperText:"Name of the custom extractor function to use"}))}let an=[{id:"population-extraction",label:"Population Extraction"},{id:"query-rewriting",label:"Query Rewriting"},{id:"custom",label:"Custom Logic"},{id:"none",label:"Not Supported"}];function al({supportsRedisaggregation:e,redisaggregationStrategy:t,themeIndependent:r,onChangeSupportsRedisaggregation:a,onChangeRedisaggregationStrategy:l,onChangeThemeIndependent:i}){let s=n().useMemo(()=>an.find(e=>e.id===t)||an[0],[t]);return n().createElement(o.BJc,{gap:4},n().createElement("h4",{style:{margin:0}},"Re-disaggregation Configuration"),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(o.lMk,{id:"supports-redisaggregation",labelText:"Supports Re-disaggregation",labelA:"No",labelB:"Yes",toggled:e,onChange:e=>a(e.target.checked)}),n().createElement(o.lMk,{id:"theme-independent",labelText:"Theme Independent",labelA:"No",labelB:"Yes",toggled:r,onChange:e=>i(e.target.checked)})),e&&n().createElement(o.a32,{id:"redisaggregation-strategy",titleText:"Re-disaggregation Strategy",items:an,itemToString:e=>e?e.label:"",selectedItem:s,placeholder:"Select strategy",onChange:({selectedItem:e})=>{e&&l(e.id)},helperText:"How should the indicator handle re-disaggregation in sections?"}),!e&&n().createElement(o.vwO,{type:"gray"},"This indicator will not support re-disaggregation in report sections"))}function ai({preserveFilters:e,onChange:t}){let[r,l]=(0,a.useState)({name:"",description:"",joinPattern:"",wherePattern:"",required:!1}),[i,s]=(0,a.useState)(!1);return n().createElement(o.BJc,{gap:4},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"}},n().createElement("h4",{style:{margin:0}},"Filter Preservation Rules"),n().createElement(o.$nd,{size:"sm",kind:"ghost",onClick:()=>s(!i)},i?"Cancel":"+ Add Filter Rule")),n().createElement("p",{style:{color:"var(--cds-text-secondary, #666)",fontSize:"0.875rem"}},"Define which filters should be preserved during section disaggregation. Use regex patterns to identify JOIN and WHERE clauses."),i&&n().createElement("div",{style:{padding:"1rem",border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:"0.25rem",backgroundColor:"var(--cds-background, #fff)"}},n().createElement(o.BJc,{gap:3},n().createElement(o.ksK,{id:"new-filter-name",labelText:"Filter Name",value:r.name,onChange:e=>l({...r,name:e.target.value}),placeholder:"e.g., Location Filter"}),n().createElement(o.ksK,{id:"new-filter-desc",labelText:"Description",value:r.description,onChange:e=>l({...r,description:e.target.value}),placeholder:"What does this filter do?"}),n().createElement(o.ksK,{id:"new-filter-join",labelText:"JOIN Pattern (regex)",value:r.joinPattern,onChange:e=>l({...r,joinPattern:e.target.value}),placeholder:"e.g., JOIN\\\\s+location\\\\s+ON"}),n().createElement(o.ksK,{id:"new-filter-where",labelText:"WHERE Pattern (regex)",value:r.wherePattern,onChange:e=>l({...r,wherePattern:e.target.value}),placeholder:"e.g., location_id\\\\s*=\\\\s*?"}),n().createElement(o.lMk,{id:"new-filter-required",labelText:"Required for indicator",toggled:r.required,onChange:e=>l({...r,required:e.target.checked})}),n().createElement(o.$nd,{size:"sm",onClick:()=>{r.name&&r.joinPattern&&(t([...e,{name:r.name,description:r.description||"",joinPattern:r.joinPattern,wherePattern:r.wherePattern||r.joinPattern,required:r.required||!1}]),l({name:"",description:"",joinPattern:"",wherePattern:"",required:!1}),s(!1))},disabled:!r.name||!r.joinPattern},"Add Filter Rule"))),e.length>0&&n().createElement(o.BJc,{gap:2},e.map((r,a)=>n().createElement("div",{key:r.name,style:{padding:"0.75rem",border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:"0.25rem",display:"grid",gridTemplateColumns:"1fr auto",gap:"0.5rem"}},n().createElement(o.BJc,{gap:2},n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"}},n().createElement("strong",null,r.name),r.required&&n().createElement(o.vwO,{type:"red",size:"sm"},"Required"),n().createElement(o.vwO,{type:"blue",size:"sm"},r.joinPattern.includes("JOIN")?"JOIN":"WHERE")),n().createElement("p",{style:{margin:0,fontSize:"0.875rem",color:"var(--cds-text-secondary, #666)"}},r.description),n().createElement("div",{style:{fontSize:"0.75rem",fontFamily:"monospace",opacity:.8}},n().createElement("div",null,"JOIN: /",r.joinPattern,"/"),n().createElement("div",null,"WHERE: /",r.wherePattern,"/"))),n().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"0.25rem"}},n().createElement(o.$nd,{size:"sm",kind:"ghost",hasIconOnly:!0,iconDescription:"Remove",onClick:()=>{t(e.filter((e,t)=>t!==a))}},"\xd7"),n().createElement(o.lMk,{id:`filter-req-${a}`,labelText:"Required",hideLabel:!0,toggled:r.required,size:"sm",onChange:r=>{var n;let l;return n=r.target.checked,void((l=[...e])[a]={...l[a],required:n},t(l))}}))))),0===e.length&&n().createElement(o.vwO,{type:"gray"},"No filter preservation rules defined"))}let ao=({value:e})=>n().createElement(o.fs1,{id:"sql-preview",labelText:"Generated SQL (base indicator)",value:e,readOnly:!0}),as=["obs","person","patient","patient_identifier","encounter","programs","visit","provider"];function ad({sql:e,businessLogic:t,dataSources:r,dataSourceInput:a,onChangeBusinessLogic:l,onDataSourceInputChange:i,onAddDataSource:s,onRemoveDataSource:d}){return n().createElement(o.BJc,{gap:4},n().createElement("h4",{style:{margin:0}},"SQL Preview & Metadata"),n().createElement(ao,{value:e}),n().createElement(o.fs1,{id:"business-logic",labelText:"Business Logic Description",value:t,rows:4,onChange:e=>l(e.target.value),placeholder:"Describe what this indicator does, any special business rules, and how it should be interpreted..."}),n().createElement("div",null,n().createElement("div",{style:{fontSize:"0.875rem",fontWeight:600,marginBottom:"0.5rem"}},"Data Sources"),n().createElement("div",{style:{display:"flex",gap:"0.5rem",marginTop:"0.5rem"}},n().createElement(o.ksK,{id:"data-source-input",labelText:"",hideLabel:!0,value:a,onChange:e=>i(e.target.value),placeholder:"Enter table name (e.g., obs)",onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),s())}}),n().createElement(o.$nd,{onClick:s,disabled:!a.trim()},"Add")),n().createElement("div",{style:{marginTop:"0.5rem"}},r.map(e=>n().createElement(o.vwO,{key:e,type:"blue",style:{marginRight:"0.25rem"}},e,n().createElement("button",{type:"button",onClick:()=>d(e),style:{marginLeft:"0.5rem",background:"none",border:"none",cursor:"pointer",fontSize:"1rem",color:"inherit"}},"\xd7"))),0===r.length&&n().createElement(o.vwO,{type:"gray"},"No data sources specified")),n().createElement("div",{style:{marginTop:"0.5rem",fontSize:"0.75rem",color:"var(--cds-text-secondary, #666)"}},"Suggested: ",as.join(", "))))}function ac({open:e,mode:t="create",initial:r,onClose:l,onCreate:i,onUpdate:s,onSaved:d}){let[c,m]=(0,a.useState)(!1),[u,p]=(0,a.useState)(null),[_,g]=(0,a.useState)({valid:!1,canDisaggregate:!1,warnings:[],errors:[]}),[E,f]=(0,a.useState)(!1),[b,y]=(0,a.useState)({name:"",code:"",description:""}),[h,v]=(0,a.useState)(""),[S,T]=(0,a.useState)("patient_id"),[C,w]=(0,a.useState)("sqlTemplate"),[N,I]=(0,a.useState)(""),[k,A]=(0,a.useState)(""),[R,O]=(0,a.useState)(!0),[D,x]=(0,a.useState)("population-extraction"),[L,M]=(0,a.useState)([]),[$,P]=(0,a.useState)(""),[U,B]=(0,a.useState)([]),[F,z]=(0,a.useState)(""),[q,j]=(0,a.useState)(!0);(0,a.useEffect)(()=>{if(e)if(("edit"===t||"duplicate"===t)&&r){let e=function(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}(r.configJson);y({name:r.name??"",code:r.code??"",description:r.description??""});let t=e?.sqlTemplate;v(r.sqlTemplate??t??""),e&&(T(e.patientIdColumn??"patient_id"),w(e.populationQuery?.extractFrom??"sqlTemplate"),I(e.populationQuery?.configPath??""),A(e.populationQuery?.customExtractor??""),O(e.supportsRedisaggregation??!0),x(e.redisaggregationStrategy??"population-extraction"),M(e.preserveFilters??[]),P(e.businessLogic??""),B(e.dataSources??[]),j(e.themeIndependent??!0))}else y({name:"",code:"",description:""}),v(""),T("patient_id"),w("sqlTemplate"),I(""),A(""),O(!0),x("population-extraction"),M([]),P(""),B([]),j(!0),p(null)},[e,t,r]),(0,a.useEffect)(()=>{if(!h.trim())return void g({valid:!1,canDisaggregate:!1,warnings:[],errors:[]});try{let e={version:1,patientIdColumn:S,populationQuery:{extractFrom:C},supportsRedisaggregation:R,redisaggregationStrategy:D,themeIndependent:q,dataSources:U},t=r9.analyze(h,e),r=r9.extractPopulationSql(h,e),a=[],n=[],l=!1;r.success&&r.sql?(l=!0,a.push(...r.warnings||[]),t.redisaggregatable||a.push("SQL structure may not support optimal re-disaggregation"),r.patientIdColumn||e.patientIdColumn||a.push("Patient ID column could not be auto-detected")):(n.push(...r.warnings||["Could not extract population SQL"]),t.hasPopulationQuery||(n.push("SQL does not contain a recognizable population query structure"),n.push("Expected: SELECT COUNT(DISTINCT patient_id) FROM (...) alias"))),g({valid:0===n.length,canDisaggregate:l,warnings:a,errors:n,extractedPopulationSql:r.sql})}catch(e){g({valid:!1,canDisaggregate:!1,warnings:[],errors:["Validation error: "+(e instanceof Error?e.message:String(e))]})}},[h,S,C,R,D,q,U]);let H=!!b.name.trim()&&!!h.trim()&&!!S&&0===_.errors.length,J=async()=>{if(H){m(!0),p(null);try{let e,a=b.code.trim()||b.name.toUpperCase().replace(/[^A-Z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,50);if(h.trim())try{let t=r9.extractPopulationSql(h.trim(),{version:1,patientIdColumn:S,populationQuery:{extractFrom:C},supportsRedisaggregation:R,redisaggregationStrategy:D,themeIndependent:q,dataSources:U});t.success&&t.sql?e=t.sql:(e=h.trim(),console.warn("[CustomIndicator] Could not extract population SQL, using original SQL:",t.warnings))}catch(t){e=h.trim(),console.error("[CustomIndicator] Population SQL extraction failed:",t)}let n={version:1,patientIdColumn:S,populationQuery:{extractFrom:C,..."configJson"===C&&N?{configPath:N}:{},..."custom"===C&&k?{customExtractor:k}:{}},preserveFilters:L.length>0?L:void 0,supportsRedisaggregation:R,redisaggregationStrategy:D,themeIndependent:q,...$?{businessLogic:$}:{},...U.length>0?{dataSources:U}:{},sqlTemplate:h.trim(),...e?{sqlPreview:e}:{}},l={name:b.name.trim(),code:a,description:b.description.trim()||void 0,kind:"CUSTOM",defaultValueType:"NUMBER",themeUuid:null,configJson:JSON.stringify(n,null,2),sqlTemplate:h.trim()};if(console.log("\uD83D\uDCE6 [CustomIndicator] Saving indicator with config:",{configKeys:Object.keys(n),hasSqlTemplate:!!n.sqlTemplate,hasSqlPreview:!!n.sqlPreview,sqlTemplateLength:n.sqlTemplate?.length||0,sqlPreviewLength:n.sqlPreview?.length||0,fullConfig:n}),"edit"===t&&r?.uuid){if(!s)throw Error("onUpdate handler is required for edit mode");await s(r.uuid,l)}else await i(l);d()}catch(e){p(e?.message??"Failed to save custom indicator")}finally{m(!1)}}};return n().createElement(o.aFV,{open:e,onRequestClose:l,modalHeading:"edit"===t?"Edit Custom Indicator":"duplicate"===t?"Duplicate Custom Indicator":"Create Custom Indicator",primaryButtonText:"edit"===t?"Update Indicator":"duplicate"===t?"Create Duplicate":"Save Indicator",secondaryButtonText:"Cancel",onRequestSubmit:J,primaryButtonDisabled:!H||c,size:"lg"},n().createElement(o.BJc,{gap:6},c&&n().createElement(o.OuH,{description:"Saving indicator…",status:"active"}),u&&n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Error",subtitle:u}),n().createElement(ae,{value:b,sqlTemplate:h,onChange:y,onSqlChange:v}),h&&n().createElement("div",null,_.errors.length>0&&n().createElement(n().Fragment,null,n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"SQL Validation Failed",subtitle:"This SQL may not work with section-level disaggregation. See details below:",hideCloseButton:!0}),n().createElement("div",{style:{marginTop:"0.5rem",padding:"1rem",background:"var(--cds-field-01, #f4f4f4)",borderRadius:"4px"}},n().createElement("div",{style:{marginBottom:"0.5rem",fontWeight:600}},"Errors:"),n().createElement("ul",{style:{paddingLeft:"1.5rem",margin:0}},_.errors.map((e,t)=>n().createElement("li",{key:t,style:{marginBottom:"0.25rem"}},e))))),0===_.errors.length&&_.warnings.length>0&&n().createElement(n().Fragment,null,n().createElement(o.jeF,{kind:"warning",lowContrast:!0,title:"SQL Validation Warnings",subtitle:"See warnings below:",hideCloseButton:!0}),n().createElement("div",{style:{marginTop:"0.5rem",padding:"1rem",background:"var(--cds-field-01, #f4f4f4)",borderRadius:"4px"}},n().createElement("ul",{style:{paddingLeft:"1.5rem",margin:0}},_.warnings.map((e,t)=>n().createElement("li",{key:t,style:{marginBottom:"0.25rem"}},e))))),0===_.errors.length&&0===_.warnings.length&&_.canDisaggregate&&n().createElement(o.jeF,{kind:"success",lowContrast:!0,title:"SQL Validation Passed",subtitle:"This SQL is compatible with section-level disaggregation. The population SQL has been successfully extracted.",hideCloseButton:!0}),_.extractedPopulationSql&&n().createElement("details",{style:{marginTop:"0.5rem"}},n().createElement("summary",{style:{cursor:"pointer",fontWeight:600,fontSize:"0.875rem"}},"View extracted population SQL (for reference)"),n().createElement("pre",{style:{background:"var(--cds-field-01, #f4f4f4)",padding:"1rem",borderRadius:"4px",overflow:"auto",maxHeight:"200px",fontSize:"0.75rem",marginTop:"0.5rem"}},_.extractedPopulationSql))),h&&n().createElement("div",{style:{marginTop:"0.5rem"}},n().createElement("details",{open:E,onToggle:e=>f(e.target.open),style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:"4px",padding:"0.5rem"}},n().createElement("summary",{style:{cursor:"pointer",fontWeight:600,fontSize:"0.875rem",padding:"0.5rem",userSelect:"none"}},E?"▼":"▶"," Config JSON Preview",n().createElement("span",{style:{fontWeight:400,fontSize:"0.75rem",color:"var(--cds-text-secondary, #666)",marginLeft:"0.5rem"}},"(How the config will be saved)")),n().createElement("div",{style:{padding:"1rem",paddingTop:"0.5rem"}},n().createElement("pre",{style:{background:"var(--cds-field-01, #f4f4f4)",padding:"1rem",borderRadius:"4px",overflow:"auto",maxHeight:"400px",fontSize:"0.75rem",margin:0}},JSON.stringify({version:1,patientIdColumn:S,populationQuery:{extractFrom:C,..."configJson"===C&&N?{configPath:N}:{},..."custom"===C&&k?{customExtractor:k}:{}},preserveFilters:L.length>0?L:void 0,supportsRedisaggregation:R,redisaggregationStrategy:D,themeIndependent:q,...$?{businessLogic:$}:{},...U.length>0?{dataSources:U}:{},sqlTemplate:h.trim(),..._.extractedPopulationSql?{sqlPreview:_.extractedPopulationSql}:{}},null,2)),n().createElement("div",{style:{marginTop:"0.5rem",fontSize:"0.75rem",color:"var(--cds-text-secondary, #666)"}},"This is the config JSON that will be saved to the database. It includes both the full SQL template and the extracted population SQL for section-level disaggregation.")))),n().createElement("hr",{style:{border:0,borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)"}}),n().createElement(aa,{patientIdColumn:S,extractionMethod:C,configPath:N,customExtractor:k,onChangePatientIdColumn:T,onChangeExtractionMethod:w,onChangeConfigPath:I,onChangeCustomExtractor:A}),n().createElement("hr",{style:{border:0,borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)"}}),n().createElement(al,{supportsRedisaggregation:R,redisaggregationStrategy:D,themeIndependent:q,onChangeSupportsRedisaggregation:O,onChangeRedisaggregationStrategy:x,onChangeThemeIndependent:j}),n().createElement("hr",{style:{border:0,borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)"}}),n().createElement(ai,{preserveFilters:L,onChange:M}),n().createElement("hr",{style:{border:0,borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)"}}),n().createElement(ad,{sql:h,businessLogic:$,dataSources:U,dataSourceInput:F,onChangeBusinessLogic:P,onDataSourceInputChange:z,onAddDataSource:()=>{let e=F.trim();e&&!U.includes(e)&&(B([...U,e]),z(""))},onRemoveDataSource:e=>{B(U.filter(t=>t!==e))}})))}function am(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}let au=e=>{let t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return`${t}-${r}-${a}`};function ap({open:e,indicatorUuid:t,onClose:r}){let[a,l]=n().useState(!1),[i,s]=n().useState(null),[d,c]=n().useState(null),[m,u]=n().useState(""),[p,_]=n().useState(""),[g,E]=n().useState([]),[f,b]=n().useState(!1),[y,h]=n().useState(null),[v,S]=n().useState(""),[T,C]=n().useState(["F","M"]),[w,N]=n().useState(""),[I,k]=n().useState(!1);n().useEffect(()=>{if(!e){E([]),h(null);return}let t=new AbortController;return b(!0),h(null),rM(t.signal).then(e=>E(e??[])).catch(e=>h(e?.message??"Failed to load age categories")).finally(()=>b(!1)),()=>t.abort()},[e]),n().useEffect(()=>{if(!e||!t){c(null),N(""),s(null),u(""),_(""),S("");return}let r=new AbortController;return l(!0),s(null),Promise.all([rg(t,r.signal,"full")]).then(([e])=>{c(e);let t=new Date,r=new Date(t.getFullYear(),t.getMonth(),1),a=new Date(t.getFullYear(),t.getMonth()+1,0);u(au(r)),_(au(a));let n=am(e.configJson),i=String(n?.ageGroupSetCode??n?.ageCategoryCode??"");i?S(i):g.length>0&&S(String(g[0].code??"")),n?.genders&&Array.isArray(n.genders)?C(n.genders):C(["F","M"]),l(!1)}).catch(e=>{s(e?.message??"Failed to load indicator"),l(!1)}),()=>r.abort()},[e,t,g]),n().useEffect(()=>{if(d&&g.length>0&&!v){let e=am(d.configJson),t=String(e?.ageGroupSetCode??e?.ageCategoryCode??"");t?S(t):S(String(g[0].code??""))}},[d,g,v]),n().useEffect(()=>{e&&d&&v?(async()=>{k(!0);try{let e="";if("FINAL"===d.kind){let t=am(d.configJson),r=t?.baseIndicatorId;if(r){let t=async e=>{let t=new AbortController;try{return await rg(e,t.signal,"full")}finally{t.abort()}},a=await rg(r,void 0,"full");a?"COMPOSITE"===a.kind?(rY(),e=await r4({baseIndicator:a,ageCategoryCode:v,genders:T,getIndicator:t,compilerOptions:{allowRetired:!0}})):e=r6({baseIndicator:a,ageCategoryCode:v,genders:T}):e="-- Error: Failed to load base indicator"}else e="-- Error: No base indicator configured"}else if("COMPOSITE"===d.kind){rY();let t=await rX(d,async e=>{let t=new AbortController;try{return await rg(e,t.signal,"full")}finally{t.abort()}},new Set,{});e=r5({populationSql:t.sql,ageCategoryCode:v,genders:T})}else{let t=await rX(d,async e=>{let t=new AbortController;try{return await rg(e,t.signal,"full")}finally{t.abort()}},new Set,{});e=r5({populationSql:t.sql,ageCategoryCode:v,genders:T})}N(e)}catch(e){N(`-- Error building SQL: ${e instanceof Error?e.message:String(e)}`)}finally{k(!1)}})():N("")},[e,d,v,T]);let A=!!w?.trim()&&!!m&&!!p&&!I,R=e=>{let t=new Set(T);t.has(e)?t.delete(e):t.add(e),C(Array.from(t))},O=d?.kind??"...";return n().createElement(o.aFV,{open:e,onRequestClose:r,modalHeading:`Run Indicator: ${d?.name??"Loading..."}`,modalLabel:`Indicator Preview • ${O}`,primaryButtonText:"Close",secondaryButtonText:"",onRequestSubmit:r,size:"lg"},a?n().createElement("div",{style:{padding:"2rem",textAlign:"center"}},n().createElement(o.OuH,{description:"Loading indicator..."})):i?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Error",subtitle:i}):y?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Age Categories",subtitle:y}):d?n().createElement(o.BJc,{gap:6},n().createElement("div",{style:{padding:"1rem",background:"var(--cds-layer-accent, #f4f4f4)",borderRadius:"0.25rem"}},n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8}},n().createElement("strong",null,"Code:")," ",d.code||"—"," • ",n().createElement("strong",null,"Type:")," ",O),d.description?n().createElement("div",{style:{fontSize:"0.875rem",marginTop:"0.5rem",opacity:.8}},d.description):null),n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Date Range"),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(o.ksK,{id:"run-preview-start",labelText:"Start date",type:"date",value:m,onChange:e=>u(e.target.value)}),n().createElement(o.ksK,{id:"run-preview-end",labelText:"End date",type:"date",value:p,onChange:e=>_(e.target.value)}))),n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Age Disaggregation"),f?n().createElement(o.OuH,{description:"Loading age categories..."}):n().createElement(o.l6P,{id:"run-preview-age-category",labelText:"Age Category",value:v,onChange:e=>S(e.target.value),disabled:I},g.map(e=>n().createElement(o.ebT,{key:e.code,value:String(e.code),text:e.name}))),n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8,marginTop:"0.5rem"}},"Results will be disaggregated by age groups from this category.")),n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Gender Breakdown"),n().createElement("div",{style:{display:"flex",gap:"1rem"}},n().createElement(o.Sc0,{id:"run-gender-f",labelText:"Female",checked:T.includes("F"),onChange:()=>R("F"),disabled:I}),n().createElement(o.Sc0,{id:"run-gender-m",labelText:"Male",checked:T.includes("M"),onChange:()=>R("M"),disabled:I})),0===T.length&&n().createElement("div",{style:{marginTop:"0.5rem",fontSize:"0.875rem",opacity:.8}},"No gender filter - totals only")),I&&n().createElement(o.OuH,{description:"Building query with age/gender disaggregation..."}),n().createElement(rF,{title:"Query Results",sql:w,params:{startDate:m,endDate:p},maxRows:500,canRun:A})):null)}async function a_(e,t){let r=String(e??"").trim();if(!r)return null;try{let e=await tJ(r,t);if(!e?.uuid)return null;return e}catch{return null}}async function ag(e,t){let r=await a_(e,t);return r?tQ(r):null}async function aE(e,t,r=!0){let a=r?function(e){let t=[],r=new Set;for(let a of e){let e=String(a??"").trim();e&&(r.has(e)||(r.add(e),t.push(e)))}return t}(e):e.map(e=>String(e??"").trim()).filter(Boolean);if(!a.length)return[];let n=[];for(let e of a){if(t?.aborted)break;try{let r=await ag(e,t);r&&n.push(r)}catch{}}return n}async function af(e,t,r,a,n,l){let i={force:l?.force??!0,dedupe:l?.dedupe??!0,preserveUnknownKeys:l?.preserveUnknownKeys??!0},o=e??[],s=t??[],d=new Map;for(let e of o)e?.key&&d.set(e.key,e);let c={...r??{}},m={...a??{}},u=0,p=0,_=0,g=0,E=new Set;for(let e of s){if(!e?.key)continue;E.add(e.key);let t=d.get(e.key);if(!t){i.preserveUnknownKeys||(delete c[e.key],delete m[e.key]);continue}if("CONCEPT_SEARCH"===t.handler){if(!(i.force||!Array.isArray(c[t.key])||0===c[t.key].length))continue;let r=e.value;if(Array.isArray(r)&&r.length){let e=r.map(e=>String(e)).filter(Boolean),a=await aE(e,n,i.dedupe);_+=a.length,g+=Math.max(0,e.length-a.length),c[t.key]=a}else c[t.key]=[];u+=1;continue}if("QUESTION_ANSWER_CONCEPT_SEARCH"===t.handler){let r=m[t.key];if(!(i.force||!r||(r.questions?.length??0)===0&&(r.answers?.length??0)===0&&!r.error))continue;let a=e.value,l=a&&"object"==typeof a?a:null,o=Array.isArray(l?.questions)?(l?.questions??[]).map(e=>String(e).trim()).filter(Boolean):l?.question!==null&&l?.question!==void 0?[String(l.question).trim()].filter(Boolean):[],s=Array.isArray(l?.answers)?(l?.answers??[]).map(e=>String(e).trim()).filter(Boolean):[],d=o.length?await aE(o,n,i.dedupe):[],c=s.length?await aE(s,n,i.dedupe):[];_+=d.length+c.length,g+=Math.max(0,o.length-d.length)+Math.max(0,s.length-c.length),m[t.key]={questions:d,answers:c},p+=1;continue}}for(let e of o)e?.key&&!E.has(e.key)&&("CONCEPT_SEARCH"!==e.handler||Array.isArray(c[e.key])||(c[e.key]=[]),"QUESTION_ANSWER_CONCEPT_SEARCH"!==e.handler||m[e.key]||(m[e.key]={questions:[],answers:[]}));return{conceptUi:c,qaUi:m,stats:{themeConditionsCount:o.length,pickedConditionsCount:s.length,conceptConditionsHydrated:u,qaConditionsHydrated:p,tokensHydrated:_,tokensMissed:g}}}function ab(e){let t=function(e){try{if(!e)return null;return JSON.parse(e)??null}catch{return null}}(e);return t&&"object"==typeof t?t.configJson&&"object"==typeof t.configJson?t.configJson:t:null}function ay(e){let t;if(!e?.configJson)return null;try{t=JSON.parse(e.configJson)}catch{return null}if(!t||"object"!=typeof t)return null;if(t.themeUuid&&t.themeConfig)return{version:1,themeUuid:t.themeUuid,themeConfig:t.themeConfig,conditions:Array.isArray(t.conditions)?t.conditions:[],sqlPreview:t.sqlPreview||e.sqlTemplate||""};if(t.base?.themeUuid&&t.base?.themeConfig)return{version:1,themeUuid:t.base.themeUuid,themeConfig:t.base.themeConfig,conditions:Array.isArray(t.base.conditions)?t.base.conditions:[],sqlPreview:t.base.sqlPreview||e.sqlTemplate||""};if(t.authoring?.base?.themeUuid&&t.authoring?.base?.themeConfig){let r=t.authoring.base;return{version:1,themeUuid:r.themeUuid,themeConfig:r.themeConfig,conditions:Array.isArray(r.conditions)?r.conditions:[],sqlPreview:r.sqlPreview||e.sqlTemplate||""}}return null}function ah(){let{t:e}=(0,A.useTranslation)(),{has:t}=v(),r=t(y.RB.INDICATOR_ADD),a=t(y.RB.INDICATOR_EDIT),l=t(y.RB.SQL_EXECUTE),i=t(y.RB.INDICATOR_PURGE),[s,d]=n().useState("base"),[c,m]=n().useState(""),[u,p]=n().useState([]),[_,g]=n().useState(!1),[E,f]=n().useState(null),[h,S]=n().useState(!1),[T,C]=n().useState(!1),[w,N]=n().useState(!1),[I,k]=n().useState(!1),[R,O]=n().useState(!1),[D,x]=n().useState(null),[L,M]=n().useState("create"),[$,P]=n().useState(null),[U,B]=n().useState({}),[F,z]=n().useState({}),q=n().useRef({}),j=n().useCallback(async e=>{g(!0),f(null);try{let t=await r_({q:c,v:"full",includeRetired:!1},e),r=Array.from(new Set(t.map(e=>e.themeUuid||"").filter(e=>e&&!q.current[e])));r.length&&await Promise.all(r.map(async t=>{try{let r=await tB(t,e),a=r?.name?`${r.name}${r.code?` (${r.code})`:""}`:t,n=function(e){if(e)try{let t=JSON.parse(e),r=t?.metaJson??t??{};return r?.color}catch{return}}(r?.metaJson);q.current[t]={name:a,color:n}}catch{q.current[t]={name:t}}}));let a=t.map(e=>{let t=e.themeUuid||"",r=t?q.current[t]:void 0;return{id:e.uuid,code:e.code??"",name:e.name??"",kind:e.kind??"BASE",themeName:r?.name,themeColor:r?.color,status:e.retired?"Retired":"Draft"}});p(a)}catch(e){f(e?.message??"Failed to load indicators")}finally{g(!1)}},[c]);n().useEffect(()=>{let e=new AbortController;return j(e.signal),()=>e.abort()},[j]);let H=n().useMemo(()=>"base"===s?u.filter(e=>"BASE"===e.kind||"COMPOSITE"===e.kind):"final"===s?u.filter(e=>"FINAL"===e.kind):u.filter(e=>"CUSTOM"===e.kind),[u,s]),V=async(e,t)=>{let r=new AbortController;try{g(!0),f(null);let a=await rg(e,r.signal,"full"),n=String(a.kind??t??"BASE").toUpperCase();if("COMPOSITE"===n){P(a),M("edit"),C(!0);return}if("CUSTOM"===n){P(a),M("edit"),k(!0);return}if("FINAL"===n)return void f("Editing final indicators is not yet supported.");let l=ay(a),i=a.themeUuid??"",o=null,s=[];if(l?.themeUuid&&l?.themeConfig)i=l.themeUuid,o=l.themeConfig,s=l.conditions??[];else{if(i){let e=await tB(i,r.signal);o=ab(e?.configJson)}s=[]}let{conceptUi:d,qaUi:c}=await af(o?.conditions??[],s,{},{},r.signal,{force:!0,dedupe:!0});P(a),B(d),z(c),M("edit"),S(!0)}catch(e){f(e?.message??"Failed to load indicator for editing")}finally{g(!1)}},W=async e=>{try{await rb(e,!1,"Retired via UI");let t=new AbortController;await j(t.signal)}catch(e){f(e?.message??"Failed to delete indicator")}},K=e=>{x(e),O(!0)},Q=async(e,t)=>{let r=new AbortController;try{g(!0),f(null);let a=await rg(e,r.signal,"full"),n=String(a.kind??t??"BASE").toUpperCase(),l={...a};delete l.uuid;let i=a.name??"",o=a.code??"",s=i,d=o,c=i.match(/([a-zA-Z])(\s*)$/),m=o.match(/([a-zA-Z])(\s*)$/);if(c){let e=c[1],t=String.fromCharCode(e.charCodeAt(0)+1);s=i.slice(0,-1)+t}else s=`${i} (Copy)`;if(m){let e=m[1],t=String.fromCharCode(e.charCodeAt(0)+1);d=o.slice(0,-1)+t}else d=`${o}_COPY`;if(l.name=s,l.code=d,"COMPOSITE"===n){P(l),M("duplicate"),C(!0);return}if("CUSTOM"===n){P(l),M("duplicate"),k(!0);return}if("FINAL"===n){P(l),M("duplicate"),N(!0);return}let u=ay(a),p=a.themeUuid??"",_=null,E=[];if(u?.themeUuid&&u?.themeConfig)p=u.themeUuid,_=u.themeConfig,E=u.conditions??[];else{if(p){let e=await tB(p,r.signal);_=ab(e?.configJson)}E=[]}let{conceptUi:b,qaUi:y}=await af(_?.conditions??[],E,{},{},r.signal,{force:!0,dedupe:!0});P(l),B(b),z(y),M("duplicate"),S(!0)}catch(e){f(e?.message??"Failed to load indicator for duplication")}finally{g(!1)}};return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:e("indicators","Indicators"),subtitle:"Create and manage report indicators."}),n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"end"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search indicators…",value:c,onChange:e=>m(e.target.value)}),n().createElement("div",{style:{display:"flex",gap:"0.5rem"}},n().createElement(J,{context:{page:"Indicators"},size:"sm",kind:"secondary"}),n().createElement(o.$nd,{size:"sm",kind:"secondary",renderIcon:es.f5},"CSV"),r&&("base"===s?n().createElement(n().Fragment,null,n().createElement(o.$nd,{size:"sm",kind:"secondary",renderIcon:b.OM,onClick:()=>{M("create"),P(null),C(!0)}},"Create Composite Base"),n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:b.OM,onClick:()=>{M("create"),P(null),B({}),z({}),S(!0)}},"Create Base Indicator")):n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:b.OM,onClick:()=>N(!0)},"Create Final Indicator")),r&&"custom"===s&&n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:b.OM,onClick:()=>k(!0)},"Create Custom Indicator"))),n().createElement(o.tUM,{selectedIndex:"base"===s?0:"final"===s?1:2,onChange:({selectedIndex:e})=>d(0===e?"base":1===e?"final":"custom")},n().createElement(o.wbY,{"aria-label":"Indicator tabs"},n().createElement(o.ozo,null,"Base Indicators"),n().createElement(o.ozo,null,"Final Indicators"),n().createElement(o.ozo,null,"Custom Indicators")),n().createElement(o.T2N,null,n().createElement(o.KpK,null,_?n().createElement(o.OuH,{description:"Loading…"}):null,!_&&E?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},E):null,n().createElement(tO,{rows:H,onEdit:V,onRun:K,onDelete:W,onDuplicate:Q,canEdit:a,canRun:l,canDelete:i})),n().createElement(o.KpK,null,_?n().createElement(o.OuH,{description:"Loading…"}):null,!_&&E?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},E):null,n().createElement(tO,{rows:H,onEdit:V,onRun:K,onDelete:W,onDuplicate:Q,canEdit:a,canRun:l,canDelete:i})),n().createElement(o.KpK,null,_?n().createElement(o.OuH,{description:"Loading…"}):null,!_&&E?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},E):null,n().createElement(tO,{rows:H,onEdit:V,onRun:K,onDelete:W,onDuplicate:Q,canEdit:a,canRun:l,canDelete:i})))),n().createElement(rm,{open:h,mode:L,initial:$,initialConceptUi:"edit"===L?U:void 0,initialQaUi:"edit"===L?F:void 0,onClose:()=>{S(!1),P(null),B({}),z({}),M("create")},onSaved:async()=>{S(!1),P(null),B({}),z({}),M("create");let e=new AbortController;await j(e.signal)},onCreate:async e=>{await rE(e)},onUpdate:async(e,t)=>{await rf(e,t)}}),n().createElement(rL,{open:T,mode:L,initial:$,onClose:()=>{C(!1),P(null),M("create")},onCreate:async e=>{await rE(e)},onUpdate:async(e,t)=>{await rf(e,t)},onSaved:async()=>{C(!1),P(null),M("create");let e=new AbortController;await j(e.signal)}}),n().createElement(r7,{open:w,mode:"create",initial:null,onClose:()=>N(!1),onCreate:async e=>{await rE(e)},onSaved:async()=>{N(!1);let e=new AbortController;await j(e.signal)}}),n().createElement(ap,{open:R,indicatorUuid:D,onClose:()=>{O(!1),x(null)}}),n().createElement(ac,{open:I,mode:L,initial:$,onClose:()=>{k(!1),P(null),M("create")},onSaved:async()=>{k(!1),P(null),M("create");let e=new AbortController;await j(e.signal)},onCreate:async e=>{await rE(e)},onUpdate:async(e,t)=>{await rf(e,t)}}))}async function av({indicator:e,ageCategoryCode:t,genders:r,getIndicator:a,compilerOptions:n={}}){try{if("CUSTOM"===e.kind){let a=rh(e);if(rS(a))return console.error("❌ [CUSTOM] SQL resolution failed:",a.error),{sql:`-- Error: ${a.error}
|
|
235
|
+
ORDER BY ag.sort_order, g.gender;`.trim()}validate(e,t){let r={valid:!0,errors:[],warnings:[],info:[]};if(e.patientIdColumn||(r.errors.push("patientIdColumn is required"),r.valid=!1),e.populationQuery||(r.errors.push("populationQuery configuration is required"),r.valid=!1),e.supportsRedisaggregation||"none"===e.redisaggregationStrategy||r.warnings.push("Redisaggregation strategy set but supportsRedisaggregation is false"),t&&t.trim()){let a=this.analyze(t,e);!a.hasPopulationQuery&&e.supportsRedisaggregation&&r.warnings.push("SQL does not appear to have a clear population query structure"),a.patientIdColumn!==e.patientIdColumn&&r.warnings.push(`Configured patientIdColumn (${e.patientIdColumn}) differs from detected (${a.patientIdColumn})`),e.supportsRedisaggregation&&!a.redisaggregatable&&(r.errors.push("SQL structure does not support re-disaggregation"),r.valid=!1),r.info.push(`Query analysis confidence: ${Math.round(100*a.confidence)}%`)}if(e.preserveFilters&&e.preserveFilters.length>0)for(let t of e.preserveFilters)t.name&&t.joinPattern&&t.wherePattern||(r.errors.push(`Filter "${t.name}" is missing required patterns`),r.valid=!1);return r}detectPatientIdColumn(e){let t=[{column:"patient_id",pattern:/\bpatient_id\b/i},{column:"patient_id",pattern:/\bpatient_id\b/i},{column:"person_id",pattern:/\bperson_id\b/i}].map(({column:t,pattern:r})=>({column:t,count:(e.match(r)||[]).length})).sort((e,t)=>t.count-e.count)[0];return t.count>0?t.column:"patient_id"}matchBalancedParens(e,t){let r=1,a=t,n=e.length;for(;a<n&&r>0;){let t=e[a];"("===t?r++:")"===t&&r--,a++}return 0!==r?null:{text:e.substring(t,a-1),endIndex:a}}indent(e,t){let r=" ".repeat(t);return e.split("\n").map(e=>e.trim()?r+e:e).join("\n")}};function ae({value:e,sqlTemplate:t,onChange:r,onSqlChange:a}){return n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(o.ksK,{id:"custom-name",labelText:"Custom indicator name",value:e.name,onChange:t=>r({...e,name:t.target.value}),placeholder:"e.g., RTT Treatment Outcomes"}),n().createElement(o.ksK,{id:"custom-code",labelText:"Code (optional)",value:e.code,onChange:t=>r({...e,code:t.target.value}),placeholder:"AUTO_GENERATED"}),n().createElement("div",{style:{gridColumn:"1 / -1"}},n().createElement(o.fs1,{id:"custom-desc",labelText:"Description (optional)",value:e.description,rows:2,onChange:t=>r({...e,description:t.target.value}),placeholder:"Short description of what this custom indicator represents."})),n().createElement("div",{style:{gridColumn:"1 / -1"}},n().createElement(o.fs1,{id:"custom-sql",labelText:"SQL Template",value:t,rows:10,onChange:e=>a(e.target.value),placeholder:"Enter your complex SQL query here. This can include multiple JOINs, subqueries, and custom business logic.",style:{fontFamily:"monospace",fontSize:"0.875rem"}})))}let at=[{id:"patient_id",label:"patient_id"},{id:"patient_id",label:"patient_id"},{id:"person_id",label:"person_id"}],ar=[{id:"sqlTemplate",label:"SQL Template (direct)"},{id:"configJson",label:"Config JSON Path"},{id:"auto",label:"Auto-detect"},{id:"custom",label:"Custom Extractor"}];function aa({patientIdColumn:e,extractionMethod:t,configPath:r,customExtractor:a,onChangePatientIdColumn:l,onChangeExtractionMethod:i,onChangeConfigPath:s,onChangeCustomExtractor:d}){let c=n().useMemo(()=>at.find(t=>t.id===e)||at[0],[e]),m=n().useMemo(()=>ar.find(e=>e.id===t)||ar[0],[t]);return n().createElement(o.BJc,{gap:4},n().createElement("h4",{style:{margin:0}},"Population Configuration"),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(o.a32,{id:"patient-id-column",titleText:"Patient ID Column",items:at,itemToString:e=>e?e.label:"",selectedItem:c,placeholder:"Select patient ID column",onChange:({selectedItem:e})=>{e&&l(e.id)}}),n().createElement(o.a32,{id:"extraction-method",titleText:"Population Extraction Method",items:ar,itemToString:e=>e?e.label:"",selectedItem:m,placeholder:"Select extraction method",onChange:({selectedItem:e})=>{e&&i(e.id)}})),"configJson"===t&&n().createElement(o.ksK,{id:"config-path",labelText:"Config JSON Path",value:r,onChange:e=>s(e.target.value),placeholder:"e.g., populationQuery.sql",helperText:"Path in configJson where population SQL is stored"}),"custom"===t&&n().createElement(o.ksK,{id:"custom-extractor",labelText:"Custom Extractor Function",value:a,onChange:e=>d(e.target.value),placeholder:"e.g., extractRttPopulation",helperText:"Name of the custom extractor function to use"}))}let an=[{id:"population-extraction",label:"Population Extraction"},{id:"query-rewriting",label:"Query Rewriting"},{id:"custom",label:"Custom Logic"},{id:"none",label:"Not Supported"}];function al({supportsRedisaggregation:e,redisaggregationStrategy:t,themeIndependent:r,onChangeSupportsRedisaggregation:a,onChangeRedisaggregationStrategy:l,onChangeThemeIndependent:i}){let s=n().useMemo(()=>an.find(e=>e.id===t)||an[0],[t]);return n().createElement(o.BJc,{gap:4},n().createElement("h4",{style:{margin:0}},"Re-disaggregation Configuration"),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(o.lMk,{id:"supports-redisaggregation",labelText:"Supports Re-disaggregation",labelA:"No",labelB:"Yes",toggled:e,onChange:e=>a(e.target.checked)}),n().createElement(o.lMk,{id:"theme-independent",labelText:"Theme Independent",labelA:"No",labelB:"Yes",toggled:r,onChange:e=>i(e.target.checked)})),e&&n().createElement(o.a32,{id:"redisaggregation-strategy",titleText:"Re-disaggregation Strategy",items:an,itemToString:e=>e?e.label:"",selectedItem:s,placeholder:"Select strategy",onChange:({selectedItem:e})=>{e&&l(e.id)},helperText:"How should the indicator handle re-disaggregation in sections?"}),!e&&n().createElement(o.vwO,{type:"gray"},"This indicator will not support re-disaggregation in report sections"))}function ai({preserveFilters:e,onChange:t}){let[r,l]=(0,a.useState)({name:"",description:"",joinPattern:"",wherePattern:"",required:!1}),[i,s]=(0,a.useState)(!1);return n().createElement(o.BJc,{gap:4},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"}},n().createElement("h4",{style:{margin:0}},"Filter Preservation Rules"),n().createElement(o.$nd,{size:"sm",kind:"ghost",onClick:()=>s(!i)},i?"Cancel":"+ Add Filter Rule")),n().createElement("p",{style:{color:"var(--cds-text-secondary, #666)",fontSize:"0.875rem"}},"Define which filters should be preserved during section disaggregation. Use regex patterns to identify JOIN and WHERE clauses."),i&&n().createElement("div",{style:{padding:"1rem",border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:"0.25rem",backgroundColor:"var(--cds-background, #fff)"}},n().createElement(o.BJc,{gap:3},n().createElement(o.ksK,{id:"new-filter-name",labelText:"Filter Name",value:r.name,onChange:e=>l({...r,name:e.target.value}),placeholder:"e.g., Location Filter"}),n().createElement(o.ksK,{id:"new-filter-desc",labelText:"Description",value:r.description,onChange:e=>l({...r,description:e.target.value}),placeholder:"What does this filter do?"}),n().createElement(o.ksK,{id:"new-filter-join",labelText:"JOIN Pattern (regex)",value:r.joinPattern,onChange:e=>l({...r,joinPattern:e.target.value}),placeholder:"e.g., JOIN\\\\s+location\\\\s+ON"}),n().createElement(o.ksK,{id:"new-filter-where",labelText:"WHERE Pattern (regex)",value:r.wherePattern,onChange:e=>l({...r,wherePattern:e.target.value}),placeholder:"e.g., location_id\\\\s*=\\\\s*?"}),n().createElement(o.lMk,{id:"new-filter-required",labelText:"Required for indicator",toggled:r.required,onChange:e=>l({...r,required:e.target.checked})}),n().createElement(o.$nd,{size:"sm",onClick:()=>{r.name&&r.joinPattern&&(t([...e,{name:r.name,description:r.description||"",joinPattern:r.joinPattern,wherePattern:r.wherePattern||r.joinPattern,required:r.required||!1}]),l({name:"",description:"",joinPattern:"",wherePattern:"",required:!1}),s(!1))},disabled:!r.name||!r.joinPattern},"Add Filter Rule"))),e.length>0&&n().createElement(o.BJc,{gap:2},e.map((r,a)=>n().createElement("div",{key:r.name,style:{padding:"0.75rem",border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:"0.25rem",display:"grid",gridTemplateColumns:"1fr auto",gap:"0.5rem"}},n().createElement(o.BJc,{gap:2},n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"}},n().createElement("strong",null,r.name),r.required&&n().createElement(o.vwO,{type:"red",size:"sm"},"Required"),n().createElement(o.vwO,{type:"blue",size:"sm"},r.joinPattern.includes("JOIN")?"JOIN":"WHERE")),n().createElement("p",{style:{margin:0,fontSize:"0.875rem",color:"var(--cds-text-secondary, #666)"}},r.description),n().createElement("div",{style:{fontSize:"0.75rem",fontFamily:"monospace",opacity:.8}},n().createElement("div",null,"JOIN: /",r.joinPattern,"/"),n().createElement("div",null,"WHERE: /",r.wherePattern,"/"))),n().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"0.25rem"}},n().createElement(o.$nd,{size:"sm",kind:"ghost",hasIconOnly:!0,iconDescription:"Remove",onClick:()=>{t(e.filter((e,t)=>t!==a))}},"\xd7"),n().createElement(o.lMk,{id:`filter-req-${a}`,labelText:"Required",hideLabel:!0,toggled:r.required,size:"sm",onChange:r=>{var n;let l;return n=r.target.checked,void((l=[...e])[a]={...l[a],required:n},t(l))}}))))),0===e.length&&n().createElement(o.vwO,{type:"gray"},"No filter preservation rules defined"))}let ao=({value:e})=>n().createElement(o.fs1,{id:"sql-preview",labelText:"Generated SQL (base indicator)",value:e,readOnly:!0}),as=["obs","person","patient","patient_identifier","encounter","programs","visit","provider"];function ad({sql:e,businessLogic:t,dataSources:r,dataSourceInput:a,onChangeBusinessLogic:l,onDataSourceInputChange:i,onAddDataSource:s,onRemoveDataSource:d}){return n().createElement(o.BJc,{gap:4},n().createElement("h4",{style:{margin:0}},"SQL Preview & Metadata"),n().createElement(ao,{value:e}),n().createElement(o.fs1,{id:"business-logic",labelText:"Business Logic Description",value:t,rows:4,onChange:e=>l(e.target.value),placeholder:"Describe what this indicator does, any special business rules, and how it should be interpreted..."}),n().createElement("div",null,n().createElement("div",{style:{fontSize:"0.875rem",fontWeight:600,marginBottom:"0.5rem"}},"Data Sources"),n().createElement("div",{style:{display:"flex",gap:"0.5rem",marginTop:"0.5rem"}},n().createElement(o.ksK,{id:"data-source-input",labelText:"",hideLabel:!0,value:a,onChange:e=>i(e.target.value),placeholder:"Enter table name (e.g., obs)",onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),s())}}),n().createElement(o.$nd,{onClick:s,disabled:!a.trim()},"Add")),n().createElement("div",{style:{marginTop:"0.5rem"}},r.map(e=>n().createElement(o.vwO,{key:e,type:"blue",style:{marginRight:"0.25rem"}},e,n().createElement("button",{type:"button",onClick:()=>d(e),style:{marginLeft:"0.5rem",background:"none",border:"none",cursor:"pointer",fontSize:"1rem",color:"inherit"}},"\xd7"))),0===r.length&&n().createElement(o.vwO,{type:"gray"},"No data sources specified")),n().createElement("div",{style:{marginTop:"0.5rem",fontSize:"0.75rem",color:"var(--cds-text-secondary, #666)"}},"Suggested: ",as.join(", "))))}function ac({open:e,mode:t="create",initial:r,onClose:l,onCreate:i,onUpdate:s,onSaved:d}){let[c,m]=(0,a.useState)(!1),[u,p]=(0,a.useState)(null),[_,g]=(0,a.useState)({valid:!1,canDisaggregate:!1,warnings:[],errors:[]}),[E,f]=(0,a.useState)(!1),[b,y]=(0,a.useState)({name:"",code:"",description:""}),[h,v]=(0,a.useState)(""),[S,T]=(0,a.useState)("patient_id"),[C,w]=(0,a.useState)("sqlTemplate"),[N,I]=(0,a.useState)(""),[k,A]=(0,a.useState)(""),[R,O]=(0,a.useState)(!0),[D,x]=(0,a.useState)("population-extraction"),[L,M]=(0,a.useState)([]),[$,P]=(0,a.useState)(""),[U,B]=(0,a.useState)([]),[F,z]=(0,a.useState)(""),[q,j]=(0,a.useState)(!0);(0,a.useEffect)(()=>{if(e)if(("edit"===t||"duplicate"===t)&&r){let e=function(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}(r.configJson);y({name:r.name??"",code:r.code??"",description:r.description??""});let t=e?.sqlTemplate;v(r.sqlTemplate??t??""),e&&(T(e.patientIdColumn??"patient_id"),w(e.populationQuery?.extractFrom??"sqlTemplate"),I(e.populationQuery?.configPath??""),A(e.populationQuery?.customExtractor??""),O(e.supportsRedisaggregation??!0),x(e.redisaggregationStrategy??"population-extraction"),M(e.preserveFilters??[]),P(e.businessLogic??""),B(e.dataSources??[]),j(e.themeIndependent??!0))}else y({name:"",code:"",description:""}),v(""),T("patient_id"),w("sqlTemplate"),I(""),A(""),O(!0),x("population-extraction"),M([]),P(""),B([]),j(!0),p(null)},[e,t,r]),(0,a.useEffect)(()=>{if(!h.trim())return void g({valid:!1,canDisaggregate:!1,warnings:[],errors:[]});try{let e={version:1,patientIdColumn:S,populationQuery:{extractFrom:C},supportsRedisaggregation:R,redisaggregationStrategy:D,themeIndependent:q,dataSources:U},t=r9.analyze(h,e),r=r9.extractPopulationSql(h,e),a=[],n=[],l=!1;r.success&&r.sql?(l=!0,a.push(...r.warnings||[]),t.redisaggregatable||a.push("SQL structure may not support optimal re-disaggregation"),r.patientIdColumn||e.patientIdColumn||a.push("Patient ID column could not be auto-detected")):(n.push(...r.warnings||["Could not extract population SQL"]),t.hasPopulationQuery||(n.push("SQL does not contain a recognizable population query structure"),n.push("Expected: SELECT COUNT(DISTINCT patient_id) FROM (...) alias"))),g({valid:0===n.length,canDisaggregate:l,warnings:a,errors:n,extractedPopulationSql:r.sql})}catch(e){g({valid:!1,canDisaggregate:!1,warnings:[],errors:["Validation error: "+(e instanceof Error?e.message:String(e))]})}},[h,S,C,R,D,q,U]);let H=!!b.name.trim()&&!!h.trim()&&!!S&&0===_.errors.length,J=async()=>{if(H){m(!0),p(null);try{let e,a=b.code.trim()||b.name.toUpperCase().replace(/[^A-Z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,50);if(h.trim())try{let t=r9.extractPopulationSql(h.trim(),{version:1,patientIdColumn:S,populationQuery:{extractFrom:C},supportsRedisaggregation:R,redisaggregationStrategy:D,themeIndependent:q,dataSources:U});t.success&&t.sql?e=t.sql:(e=h.trim(),console.warn("[CustomIndicator] Could not extract population SQL, using original SQL:",t.warnings))}catch(t){e=h.trim(),console.error("[CustomIndicator] Population SQL extraction failed:",t)}let n={version:1,patientIdColumn:S,populationQuery:{extractFrom:C,..."configJson"===C&&N?{configPath:N}:{},..."custom"===C&&k?{customExtractor:k}:{}},preserveFilters:L.length>0?L:void 0,supportsRedisaggregation:R,redisaggregationStrategy:D,themeIndependent:q,...$?{businessLogic:$}:{},...U.length>0?{dataSources:U}:{},sqlTemplate:h.trim(),...e?{sqlPreview:e}:{}},l={name:b.name.trim(),code:a,description:b.description.trim()||void 0,kind:"CUSTOM",defaultValueType:"NUMBER",themeUuid:null,configJson:JSON.stringify(n,null,2),sqlTemplate:h.trim()};if(console.log("\uD83D\uDCE6 [CustomIndicator] Saving indicator with config:",{configKeys:Object.keys(n),hasSqlTemplate:!!n.sqlTemplate,hasSqlPreview:!!n.sqlPreview,sqlTemplateLength:n.sqlTemplate?.length||0,sqlPreviewLength:n.sqlPreview?.length||0,fullConfig:n}),"edit"===t&&r?.uuid){if(!s)throw Error("onUpdate handler is required for edit mode");await s(r.uuid,l)}else await i(l);d()}catch(e){p(e?.message??"Failed to save custom indicator")}finally{m(!1)}}};return n().createElement(o.aFV,{open:e,onRequestClose:l,modalHeading:"edit"===t?"Edit Custom Indicator":"duplicate"===t?"Duplicate Custom Indicator":"Create Custom Indicator",primaryButtonText:"edit"===t?"Update Indicator":"duplicate"===t?"Create Duplicate":"Save Indicator",secondaryButtonText:"Cancel",onRequestSubmit:J,primaryButtonDisabled:!H||c,size:"lg"},n().createElement(o.BJc,{gap:6},c&&n().createElement(o.OuH,{description:"Saving indicator…",status:"active"}),u&&n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Error",subtitle:u}),n().createElement(ae,{value:b,sqlTemplate:h,onChange:y,onSqlChange:v}),h&&n().createElement("div",null,_.errors.length>0&&n().createElement(n().Fragment,null,n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"SQL Validation Failed",subtitle:"This SQL may not work with section-level disaggregation. See details below:",hideCloseButton:!0}),n().createElement("div",{style:{marginTop:"0.5rem",padding:"1rem",background:"var(--cds-field-01, #f4f4f4)",borderRadius:"4px"}},n().createElement("div",{style:{marginBottom:"0.5rem",fontWeight:600}},"Errors:"),n().createElement("ul",{style:{paddingLeft:"1.5rem",margin:0}},_.errors.map((e,t)=>n().createElement("li",{key:t,style:{marginBottom:"0.25rem"}},e))))),0===_.errors.length&&_.warnings.length>0&&n().createElement(n().Fragment,null,n().createElement(o.jeF,{kind:"warning",lowContrast:!0,title:"SQL Validation Warnings",subtitle:"See warnings below:",hideCloseButton:!0}),n().createElement("div",{style:{marginTop:"0.5rem",padding:"1rem",background:"var(--cds-field-01, #f4f4f4)",borderRadius:"4px"}},n().createElement("ul",{style:{paddingLeft:"1.5rem",margin:0}},_.warnings.map((e,t)=>n().createElement("li",{key:t,style:{marginBottom:"0.25rem"}},e))))),0===_.errors.length&&0===_.warnings.length&&_.canDisaggregate&&n().createElement(o.jeF,{kind:"success",lowContrast:!0,title:"SQL Validation Passed",subtitle:"This SQL is compatible with section-level disaggregation. The population SQL has been successfully extracted.",hideCloseButton:!0}),_.extractedPopulationSql&&n().createElement("details",{style:{marginTop:"0.5rem"}},n().createElement("summary",{style:{cursor:"pointer",fontWeight:600,fontSize:"0.875rem"}},"View extracted population SQL (for reference)"),n().createElement("pre",{style:{background:"var(--cds-field-01, #f4f4f4)",padding:"1rem",borderRadius:"4px",overflow:"auto",maxHeight:"200px",fontSize:"0.75rem",marginTop:"0.5rem"}},_.extractedPopulationSql))),h&&n().createElement("div",{style:{marginTop:"0.5rem"}},n().createElement("details",{open:E,onToggle:e=>f(e.target.open),style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:"4px",padding:"0.5rem"}},n().createElement("summary",{style:{cursor:"pointer",fontWeight:600,fontSize:"0.875rem",padding:"0.5rem",userSelect:"none"}},E?"▼":"▶"," Config JSON Preview",n().createElement("span",{style:{fontWeight:400,fontSize:"0.75rem",color:"var(--cds-text-secondary, #666)",marginLeft:"0.5rem"}},"(How the config will be saved)")),n().createElement("div",{style:{padding:"1rem",paddingTop:"0.5rem"}},n().createElement("pre",{style:{background:"var(--cds-field-01, #f4f4f4)",padding:"1rem",borderRadius:"4px",overflow:"auto",maxHeight:"400px",fontSize:"0.75rem",margin:0}},JSON.stringify({version:1,patientIdColumn:S,populationQuery:{extractFrom:C,..."configJson"===C&&N?{configPath:N}:{},..."custom"===C&&k?{customExtractor:k}:{}},preserveFilters:L.length>0?L:void 0,supportsRedisaggregation:R,redisaggregationStrategy:D,themeIndependent:q,...$?{businessLogic:$}:{},...U.length>0?{dataSources:U}:{},sqlTemplate:h.trim(),..._.extractedPopulationSql?{sqlPreview:_.extractedPopulationSql}:{}},null,2)),n().createElement("div",{style:{marginTop:"0.5rem",fontSize:"0.75rem",color:"var(--cds-text-secondary, #666)"}},"This is the config JSON that will be saved to the database. It includes both the full SQL template and the extracted population SQL for section-level disaggregation.")))),n().createElement("hr",{style:{border:0,borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)"}}),n().createElement(aa,{patientIdColumn:S,extractionMethod:C,configPath:N,customExtractor:k,onChangePatientIdColumn:T,onChangeExtractionMethod:w,onChangeConfigPath:I,onChangeCustomExtractor:A}),n().createElement("hr",{style:{border:0,borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)"}}),n().createElement(al,{supportsRedisaggregation:R,redisaggregationStrategy:D,themeIndependent:q,onChangeSupportsRedisaggregation:O,onChangeRedisaggregationStrategy:x,onChangeThemeIndependent:j}),n().createElement("hr",{style:{border:0,borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)"}}),n().createElement(ai,{preserveFilters:L,onChange:M}),n().createElement("hr",{style:{border:0,borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)"}}),n().createElement(ad,{sql:h,businessLogic:$,dataSources:U,dataSourceInput:F,onChangeBusinessLogic:P,onDataSourceInputChange:z,onAddDataSource:()=>{let e=F.trim();e&&!U.includes(e)&&(B([...U,e]),z(""))},onRemoveDataSource:e=>{B(U.filter(t=>t!==e))}})))}function am(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}let au=e=>{let t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return`${t}-${r}-${a}`};function ap({open:e,indicatorUuid:t,onClose:r}){let[a,l]=n().useState(!1),[i,s]=n().useState(null),[d,c]=n().useState(null),[m,u]=n().useState(""),[p,_]=n().useState(""),[g,E]=n().useState([]),[f,b]=n().useState(!1),[y,h]=n().useState(null),[v,S]=n().useState(""),[T,C]=n().useState(["F","M"]),[w,N]=n().useState(""),[I,k]=n().useState(!1);n().useEffect(()=>{if(!e){E([]),h(null);return}let t=new AbortController;return b(!0),h(null),rM(t.signal).then(e=>E(e??[])).catch(e=>h(e?.message??"Failed to load age categories")).finally(()=>b(!1)),()=>t.abort()},[e]),n().useEffect(()=>{if(!e||!t){c(null),N(""),s(null),u(""),_(""),S("");return}let r=new AbortController;return l(!0),s(null),Promise.all([rg(t,r.signal,"full")]).then(([e])=>{c(e);let t=new Date,r=new Date(t.getFullYear(),t.getMonth(),1),a=new Date(t.getFullYear(),t.getMonth()+1,0);u(au(r)),_(au(a));let n=am(e.configJson),i=String(n?.ageGroupSetCode??n?.ageCategoryCode??"");i?S(i):g.length>0&&S(String(g[0].code??"")),n?.genders&&Array.isArray(n.genders)?C(n.genders):C(["F","M"]),l(!1)}).catch(e=>{s(e?.message??"Failed to load indicator"),l(!1)}),()=>r.abort()},[e,t,g]),n().useEffect(()=>{if(d&&g.length>0&&!v){let e=am(d.configJson),t=String(e?.ageGroupSetCode??e?.ageCategoryCode??"");t?S(t):S(String(g[0].code??""))}},[d,g,v]),n().useEffect(()=>{e&&d&&v?(async()=>{k(!0);try{let e="";if("FINAL"===d.kind){let t=am(d.configJson),r=t?.baseIndicatorId;if(r){let t=async e=>{let t=new AbortController;try{return await rg(e,t.signal,"full")}finally{t.abort()}},a=await rg(r,void 0,"full");a?"COMPOSITE"===a.kind?(rY(),e=await r3({baseIndicator:a,ageCategoryCode:v,genders:T,getIndicator:t,compilerOptions:{allowRetired:!0}})):e=r6({baseIndicator:a,ageCategoryCode:v,genders:T}):e="-- Error: Failed to load base indicator"}else e="-- Error: No base indicator configured"}else if("COMPOSITE"===d.kind){rY();let t=await rX(d,async e=>{let t=new AbortController;try{return await rg(e,t.signal,"full")}finally{t.abort()}},new Set,{});e=r5({populationSql:t.sql,ageCategoryCode:v,genders:T})}else{let t=await rX(d,async e=>{let t=new AbortController;try{return await rg(e,t.signal,"full")}finally{t.abort()}},new Set,{});e=r5({populationSql:t.sql,ageCategoryCode:v,genders:T})}N(e)}catch(e){N(`-- Error building SQL: ${e instanceof Error?e.message:String(e)}`)}finally{k(!1)}})():N("")},[e,d,v,T]);let A=!!w?.trim()&&!!m&&!!p&&!I,R=e=>{let t=new Set(T);t.has(e)?t.delete(e):t.add(e),C(Array.from(t))},O=d?.kind??"...";return n().createElement(o.aFV,{open:e,onRequestClose:r,modalHeading:`Run Indicator: ${d?.name??"Loading..."}`,modalLabel:`Indicator Preview • ${O}`,primaryButtonText:"Close",secondaryButtonText:"",onRequestSubmit:r,size:"lg"},a?n().createElement("div",{style:{padding:"2rem",textAlign:"center"}},n().createElement(o.OuH,{description:"Loading indicator..."})):i?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Error",subtitle:i}):y?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Age Categories",subtitle:y}):d?n().createElement(o.BJc,{gap:6},n().createElement("div",{style:{padding:"1rem",background:"var(--cds-layer-accent, #f4f4f4)",borderRadius:"0.25rem"}},n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8}},n().createElement("strong",null,"Code:")," ",d.code||"—"," • ",n().createElement("strong",null,"Type:")," ",O),d.description?n().createElement("div",{style:{fontSize:"0.875rem",marginTop:"0.5rem",opacity:.8}},d.description):null),n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Date Range"),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(o.ksK,{id:"run-preview-start",labelText:"Start date",type:"date",value:m,onChange:e=>u(e.target.value)}),n().createElement(o.ksK,{id:"run-preview-end",labelText:"End date",type:"date",value:p,onChange:e=>_(e.target.value)}))),n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Age Disaggregation"),f?n().createElement(o.OuH,{description:"Loading age categories..."}):n().createElement(o.l6P,{id:"run-preview-age-category",labelText:"Age Category",value:v,onChange:e=>S(e.target.value),disabled:I},g.map(e=>n().createElement(o.ebT,{key:e.code,value:String(e.code),text:e.name}))),n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8,marginTop:"0.5rem"}},"Results will be disaggregated by age groups from this category.")),n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Gender Breakdown"),n().createElement("div",{style:{display:"flex",gap:"1rem"}},n().createElement(o.Sc0,{id:"run-gender-f",labelText:"Female",checked:T.includes("F"),onChange:()=>R("F"),disabled:I}),n().createElement(o.Sc0,{id:"run-gender-m",labelText:"Male",checked:T.includes("M"),onChange:()=>R("M"),disabled:I})),0===T.length&&n().createElement("div",{style:{marginTop:"0.5rem",fontSize:"0.875rem",opacity:.8}},"No gender filter - totals only")),I&&n().createElement(o.OuH,{description:"Building query with age/gender disaggregation..."}),n().createElement(rF,{title:"Query Results",sql:w,params:{startDate:m,endDate:p},maxRows:500,canRun:A})):null)}async function a_(e,t){let r=String(e??"").trim();if(!r)return null;try{let e=await tJ(r,t);if(!e?.uuid)return null;return e}catch{return null}}async function ag(e,t){let r=await a_(e,t);return r?tQ(r):null}async function aE(e,t,r=!0){let a=r?function(e){let t=[],r=new Set;for(let a of e){let e=String(a??"").trim();e&&(r.has(e)||(r.add(e),t.push(e)))}return t}(e):e.map(e=>String(e??"").trim()).filter(Boolean);if(!a.length)return[];let n=[];for(let e of a){if(t?.aborted)break;try{let r=await ag(e,t);r&&n.push(r)}catch{}}return n}async function af(e,t,r,a,n,l){let i={force:l?.force??!0,dedupe:l?.dedupe??!0,preserveUnknownKeys:l?.preserveUnknownKeys??!0},o=e??[],s=t??[],d=new Map;for(let e of o)e?.key&&d.set(e.key,e);let c={...r??{}},m={...a??{}},u=0,p=0,_=0,g=0,E=new Set;for(let e of s){if(!e?.key)continue;E.add(e.key);let t=d.get(e.key);if(!t){i.preserveUnknownKeys||(delete c[e.key],delete m[e.key]);continue}if("CONCEPT_SEARCH"===t.handler){if(!(i.force||!Array.isArray(c[t.key])||0===c[t.key].length))continue;let r=e.value;if(Array.isArray(r)&&r.length){let e=r.map(e=>String(e)).filter(Boolean),a=await aE(e,n,i.dedupe);_+=a.length,g+=Math.max(0,e.length-a.length),c[t.key]=a}else c[t.key]=[];u+=1;continue}if("QUESTION_ANSWER_CONCEPT_SEARCH"===t.handler){let r=m[t.key];if(!(i.force||!r||(r.questions?.length??0)===0&&(r.answers?.length??0)===0&&!r.error))continue;let a=e.value,l=a&&"object"==typeof a?a:null,o=Array.isArray(l?.questions)?(l?.questions??[]).map(e=>String(e).trim()).filter(Boolean):l?.question!==null&&l?.question!==void 0?[String(l.question).trim()].filter(Boolean):[],s=Array.isArray(l?.answers)?(l?.answers??[]).map(e=>String(e).trim()).filter(Boolean):[],d=o.length?await aE(o,n,i.dedupe):[],c=s.length?await aE(s,n,i.dedupe):[];_+=d.length+c.length,g+=Math.max(0,o.length-d.length)+Math.max(0,s.length-c.length),m[t.key]={questions:d,answers:c},p+=1;continue}}for(let e of o)e?.key&&!E.has(e.key)&&("CONCEPT_SEARCH"!==e.handler||Array.isArray(c[e.key])||(c[e.key]=[]),"QUESTION_ANSWER_CONCEPT_SEARCH"!==e.handler||m[e.key]||(m[e.key]={questions:[],answers:[]}));return{conceptUi:c,qaUi:m,stats:{themeConditionsCount:o.length,pickedConditionsCount:s.length,conceptConditionsHydrated:u,qaConditionsHydrated:p,tokensHydrated:_,tokensMissed:g}}}function ab(e){let t=function(e){try{if(!e)return null;return JSON.parse(e)??null}catch{return null}}(e);return t&&"object"==typeof t?t.configJson&&"object"==typeof t.configJson?t.configJson:t:null}function ay(e){let t;if(!e?.configJson)return null;try{t=JSON.parse(e.configJson)}catch{return null}if(!t||"object"!=typeof t)return null;if(t.themeUuid&&t.themeConfig)return{version:1,themeUuid:t.themeUuid,themeConfig:t.themeConfig,conditions:Array.isArray(t.conditions)?t.conditions:[],sqlPreview:t.sqlPreview||e.sqlTemplate||""};if(t.base?.themeUuid&&t.base?.themeConfig)return{version:1,themeUuid:t.base.themeUuid,themeConfig:t.base.themeConfig,conditions:Array.isArray(t.base.conditions)?t.base.conditions:[],sqlPreview:t.base.sqlPreview||e.sqlTemplate||""};if(t.authoring?.base?.themeUuid&&t.authoring?.base?.themeConfig){let r=t.authoring.base;return{version:1,themeUuid:r.themeUuid,themeConfig:r.themeConfig,conditions:Array.isArray(r.conditions)?r.conditions:[],sqlPreview:r.sqlPreview||e.sqlTemplate||""}}return null}function ah(){let{t:e}=(0,A.useTranslation)(),{has:t}=v(),r=t(y.RB.INDICATOR_ADD),a=t(y.RB.INDICATOR_EDIT),l=t(y.RB.SQL_EXECUTE),i=t(y.RB.INDICATOR_PURGE),[s,d]=n().useState("base"),[c,m]=n().useState(""),[u,p]=n().useState([]),[_,g]=n().useState(!1),[E,f]=n().useState(null),[h,S]=n().useState(!1),[T,C]=n().useState(!1),[w,N]=n().useState(!1),[I,k]=n().useState(!1),[R,O]=n().useState(!1),[D,x]=n().useState(null),[L,M]=n().useState("create"),[$,P]=n().useState(null),[U,B]=n().useState({}),[F,z]=n().useState({}),q=n().useRef({}),j=n().useCallback(async e=>{g(!0),f(null);try{let t=await r_({q:c,v:"full",includeRetired:!1},e),r=Array.from(new Set(t.map(e=>e.themeUuid||"").filter(e=>e&&!q.current[e])));r.length&&await Promise.all(r.map(async t=>{try{let r=await tB(t,e),a=r?.name?`${r.name}${r.code?` (${r.code})`:""}`:t,n=function(e){if(e)try{let t=JSON.parse(e),r=t?.metaJson??t??{};return r?.color}catch{return}}(r?.metaJson);q.current[t]={name:a,color:n}}catch{q.current[t]={name:t}}}));let a=t.map(e=>{let t=e.themeUuid||"",r=t?q.current[t]:void 0;return{id:e.uuid,code:e.code??"",name:e.name??"",kind:e.kind??"BASE",themeName:r?.name,themeColor:r?.color,status:e.retired?"Retired":"Draft"}});p(a)}catch(e){f(e?.message??"Failed to load indicators")}finally{g(!1)}},[c]);n().useEffect(()=>{let e=new AbortController;return j(e.signal),()=>e.abort()},[j]);let H=n().useMemo(()=>"base"===s?u.filter(e=>"BASE"===e.kind||"COMPOSITE"===e.kind):"final"===s?u.filter(e=>"FINAL"===e.kind):u.filter(e=>"CUSTOM"===e.kind),[u,s]),V=async(e,t)=>{let r=new AbortController;try{g(!0),f(null);let a=await rg(e,r.signal,"full"),n=String(a.kind??t??"BASE").toUpperCase();if("COMPOSITE"===n){P(a),M("edit"),C(!0);return}if("CUSTOM"===n){P(a),M("edit"),k(!0);return}if("FINAL"===n)return void f("Editing final indicators is not yet supported.");let l=ay(a),i=a.themeUuid??"",o=null,s=[];if(l?.themeUuid&&l?.themeConfig)i=l.themeUuid,o=l.themeConfig,s=l.conditions??[];else{if(i){let e=await tB(i,r.signal);o=ab(e?.configJson)}s=[]}let{conceptUi:d,qaUi:c}=await af(o?.conditions??[],s,{},{},r.signal,{force:!0,dedupe:!0});P(a),B(d),z(c),M("edit"),S(!0)}catch(e){f(e?.message??"Failed to load indicator for editing")}finally{g(!1)}},W=async e=>{try{await rb(e,!1,"Retired via UI");let t=new AbortController;await j(t.signal)}catch(e){f(e?.message??"Failed to delete indicator")}},K=e=>{x(e),O(!0)},Q=async(e,t)=>{let r=new AbortController;try{g(!0),f(null);let a=await rg(e,r.signal,"full"),n=String(a.kind??t??"BASE").toUpperCase(),l={...a};delete l.uuid;let i=a.name??"",o=a.code??"",s=i,d=o,c=i.match(/([a-zA-Z])(\s*)$/),m=o.match(/([a-zA-Z])(\s*)$/);if(c){let e=c[1],t=String.fromCharCode(e.charCodeAt(0)+1);s=i.slice(0,-1)+t}else s=`${i} (Copy)`;if(m){let e=m[1],t=String.fromCharCode(e.charCodeAt(0)+1);d=o.slice(0,-1)+t}else d=`${o}_COPY`;if(l.name=s,l.code=d,"COMPOSITE"===n){P(l),M("duplicate"),C(!0);return}if("CUSTOM"===n){P(l),M("duplicate"),k(!0);return}if("FINAL"===n){P(l),M("duplicate"),N(!0);return}let u=ay(a),p=a.themeUuid??"",_=null,E=[];if(u?.themeUuid&&u?.themeConfig)p=u.themeUuid,_=u.themeConfig,E=u.conditions??[];else{if(p){let e=await tB(p,r.signal);_=ab(e?.configJson)}E=[]}let{conceptUi:b,qaUi:y}=await af(_?.conditions??[],E,{},{},r.signal,{force:!0,dedupe:!0});P(l),B(b),z(y),M("duplicate"),S(!0)}catch(e){f(e?.message??"Failed to load indicator for duplication")}finally{g(!1)}};return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:e("indicators","Indicators"),subtitle:"Create and manage report indicators."}),n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"end"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search indicators…",value:c,onChange:e=>m(e.target.value)}),n().createElement("div",{style:{display:"flex",gap:"0.5rem"}},n().createElement(J,{context:{page:"Indicators"},size:"sm",kind:"secondary"}),n().createElement(o.$nd,{size:"sm",kind:"secondary",renderIcon:es.f5},"CSV"),r&&("base"===s?n().createElement(n().Fragment,null,n().createElement(o.$nd,{size:"sm",kind:"secondary",renderIcon:b.OM,onClick:()=>{M("create"),P(null),C(!0)}},"Create Composite Base"),n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:b.OM,onClick:()=>{M("create"),P(null),B({}),z({}),S(!0)}},"Create Base Indicator")):n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:b.OM,onClick:()=>N(!0)},"Create Final Indicator")),r&&"custom"===s&&n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:b.OM,onClick:()=>k(!0)},"Create Custom Indicator"))),n().createElement(o.tUM,{selectedIndex:"base"===s?0:"final"===s?1:2,onChange:({selectedIndex:e})=>d(0===e?"base":1===e?"final":"custom")},n().createElement(o.wbY,{"aria-label":"Indicator tabs"},n().createElement(o.ozo,null,"Base Indicators"),n().createElement(o.ozo,null,"Final Indicators"),n().createElement(o.ozo,null,"Custom Indicators")),n().createElement(o.T2N,null,n().createElement(o.KpK,null,_?n().createElement(o.OuH,{description:"Loading…"}):null,!_&&E?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},E):null,n().createElement(tO,{rows:H,onEdit:V,onRun:K,onDelete:W,onDuplicate:Q,canEdit:a,canRun:l,canDelete:i})),n().createElement(o.KpK,null,_?n().createElement(o.OuH,{description:"Loading…"}):null,!_&&E?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},E):null,n().createElement(tO,{rows:H,onEdit:V,onRun:K,onDelete:W,onDuplicate:Q,canEdit:a,canRun:l,canDelete:i})),n().createElement(o.KpK,null,_?n().createElement(o.OuH,{description:"Loading…"}):null,!_&&E?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},E):null,n().createElement(tO,{rows:H,onEdit:V,onRun:K,onDelete:W,onDuplicate:Q,canEdit:a,canRun:l,canDelete:i})))),n().createElement(rm,{open:h,mode:L,initial:$,initialConceptUi:"edit"===L?U:void 0,initialQaUi:"edit"===L?F:void 0,onClose:()=>{S(!1),P(null),B({}),z({}),M("create")},onSaved:async()=>{S(!1),P(null),B({}),z({}),M("create");let e=new AbortController;await j(e.signal)},onCreate:async e=>{await rE(e)},onUpdate:async(e,t)=>{await rf(e,t)}}),n().createElement(rL,{open:T,mode:L,initial:$,onClose:()=>{C(!1),P(null),M("create")},onCreate:async e=>{await rE(e)},onUpdate:async(e,t)=>{await rf(e,t)},onSaved:async()=>{C(!1),P(null),M("create");let e=new AbortController;await j(e.signal)}}),n().createElement(r7,{open:w,mode:"create",initial:null,onClose:()=>N(!1),onCreate:async e=>{await rE(e)},onSaved:async()=>{N(!1);let e=new AbortController;await j(e.signal)}}),n().createElement(ap,{open:R,indicatorUuid:D,onClose:()=>{O(!1),x(null)}}),n().createElement(ac,{open:I,mode:L,initial:$,onClose:()=>{k(!1),P(null),M("create")},onSaved:async()=>{k(!1),P(null),M("create");let e=new AbortController;await j(e.signal)},onCreate:async e=>{await rE(e)},onUpdate:async(e,t)=>{await rf(e,t)}}))}async function av({indicator:e,ageCategoryCode:t,genders:r,getIndicator:a,compilerOptions:n={}}){try{if("CUSTOM"===e.kind){let a=rh(e);if(rS(a))return console.error("❌ [CUSTOM] SQL resolution failed:",a.error),{sql:`-- Error: ${a.error}
|
|
236
236
|
-- Indicator: ${e.name} (${e.code||e.uuid})`,warnings:[a.error]};let n=a.sql;console.log("\uD83D\uDCE6 [CUSTOM] Extracted SQL:",{source:a.source,length:n?.length||0,preview:n?.substring(0,200)||"EMPTY"}),console.log("\uD83D\uDD0D [CUSTOM] Processing custom indicator:",{uuid:e.uuid,name:e.name,code:e.code,hasSqlTemplate:!!e.sqlTemplate,hasConfigJson:!!e.configJson,finalSqlTemplateLength:n?.length||0,sqlTemplatePreview:n?.substring(0,300)||"EMPTY"});let l=null;if(e.configJson)try{let t=JSON.parse(e.configJson);if(t&&1===t.version&&t.patientIdColumn)l=t,console.log("✅ [CUSTOM] Parsed custom config:",l);else{console.warn("⚠️ [CUSTOM] Config JSON not valid custom indicator config, using fallback");let e=!!(t?.sqlPreview||t?.sqlTemplate);l={version:1,patientIdColumn:t?.patientIdColumn||t?.themeConfig?.patientIdColumn||"patient_id",populationQuery:e?{extractFrom:"configJson"}:{extractFrom:"sqlTemplate"},supportsRedisaggregation:!0,redisaggregationStrategy:"population-extraction",themeIndependent:t?.themeIndependent!==!1},console.log("\uD83D\uDD27 [CUSTOM] Created fallback config:",{patientIdColumn:l.patientIdColumn,extractFrom:l.populationQuery.extractFrom,hasSqlPreview:e})}}catch(e){console.error("❌ [CUSTOM] Failed to parse configJson:",e)}r9.analyze(n||"",l||void 0);let i=r9.extractPopulationSql(n||"",l||void 0);if(console.log("\uD83D\uDCCA [CUSTOM] Extraction result:",{success:i.success,hasSql:!!i.sql,sqlLength:i.sql?.length||0,warnings:i.warnings,patientIdColumn:i.patientIdColumn}),i.success&&i.sql){let e=r9.applyDisaggregation(i.sql,{ageCategoryCode:t,genders:r??[]},l||void 0);return console.log("✅ [CUSTOM] Successfully generated disaggregation SQL, length:",e.length),{sql:e,warnings:i.warnings}}if(n&&/SELECT\s+.*?AS\s+(?:age_group|gender|sex)/i.test(n))return console.log("⚠️ [CUSTOM] Could not extract population SQL; using indicator SQL as-is with warning"),{sql:n,warnings:["Could not extract population SQL; using indicator SQL as-is",`Indicator uses its own age groups, not section age category (${t})`,"Results may not match section configuration",...i.warnings]};return console.error("❌ [CUSTOM] Extraction failed:",i.warnings),{sql:`-- Error: Could not process CUSTOM indicator ${e.name||e.uuid}.
|
|
237
237
|
-- ${i.warnings?.join(", ")||"Unknown error"}`,warnings:i.warnings||["Failed to extract population SQL"]}}rY();let l=await rX(e,a,new Set,n);if(l.error)return{sql:`-- Error: ${l.error.message}
|
|
238
238
|
-- Indicator: ${e.name} (${e.code||e.uuid})
|
|
@@ -304,7 +304,7 @@ ORDER BY ag.sort_order, g.gender;
|
|
|
304
304
|
${a.slice(0,3).join("\n")}`}).join("\n\n");throw Error(`Failed to compile ${i.length} indicator(s). Please fix the following issues:
|
|
305
305
|
|
|
306
306
|
${e}`)}let o=l.filter(e=>!e.sql.compiled.trim()||"--"===e.sql.compiled.trim());if(o.length>0){let e=o.map(e=>`• ${e.name} (${e.code})`).join("\n");throw Error(`The following indicator(s) compiled to empty SQL:
|
|
307
|
-
${e}`)}console.log("✅ [Section] All indicators compiled successfully",{total:l.length,withWarnings:l.filter(e=>e.sql.compiled.includes("--"))});let d={version:1,name:u.name.trim(),description:u.description.trim()||void 0,disaggregation:n,indicators:l,exchangeMappings:{dhis2:{version:1,enabled:u.dhis2Enabled,datasetId: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>
|
|
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"}})))}))},a4=[{value:"TODAY",label:"Today"},{value:"YESTERDAY",label:"Yesterday"},{value:"THIS_WEEK",label:"This Week"},{value:"LAST_WEEK",label:"Last Week"},{value:"THIS_MONTH",label:"This Month"},{value:"LAST_MONTH",label:"Last Month"},{value:"THIS_QUARTER",label:"This Quarter"},{value:"LAST_QUARTER",label:"Last Quarter"},{value:"THIS_YEAR",label:"This Year"},{value:"LAST_YEAR",label:"Last Year"},{value:"LAST_7_DAYS",label:"Last 7 Days"},{value:"LAST_30_DAYS",label:"Last 30 Days"},{value:"LAST_90_DAYS",label:"Last 90 Days"}];function a3(e){let t=new Date;switch(e){case"TODAY":return{start:t,end:t};case"YESTERDAY":{let e=new Date(t);return e.setDate(t.getDate()-1),{start:e,end:e}}case"THIS_WEEK":{let e=new Date(t);e.setDate(t.getDate()-t.getDay());let r=new Date(t);return r.setDate(t.getDate()+(6-t.getDay())),{start:e,end:r}}case"LAST_WEEK":{let e=new Date(t);e.setDate(t.getDate()-t.getDay()-7);let r=new Date(t);return r.setDate(t.getDate()-t.getDay()-1),{start:e,end:r}}case"THIS_MONTH":return{start:new Date(t.getFullYear(),t.getMonth(),1),end:new Date(t.getFullYear(),t.getMonth()+1,0)};case"LAST_MONTH":return{start:new Date(t.getFullYear(),t.getMonth()-1,1),end:new Date(t.getFullYear(),t.getMonth(),0)};case"THIS_QUARTER":{let e=Math.floor(t.getMonth()/3);return{start:new Date(t.getFullYear(),3*e,1),end:new Date(t.getFullYear(),(e+1)*3,0)}}case"LAST_QUARTER":{let e=Math.floor(t.getMonth()/3);if(0===e)return{start:new Date(t.getFullYear()-1,9,1),end:new Date(t.getFullYear()-1,12,0)};return{start:new Date(t.getFullYear(),(e-1)*3,1),end:new Date(t.getFullYear(),3*e,0)}}case"THIS_YEAR":return{start:new Date(t.getFullYear(),0,1),end:new Date(t.getFullYear(),12,0)};case"LAST_YEAR":return{start:new Date(t.getFullYear()-1,0,1),end:new Date(t.getFullYear()-1,12,0)};case"LAST_7_DAYS":{let e=new Date(t);return e.setDate(t.getDate()-7),{start:e,end:t}}case"LAST_30_DAYS":{let e=new Date(t);return e.setDate(t.getDate()-30),{start:e,end:t}}case"LAST_90_DAYS":{let e=new Date(t);return e.setDate(t.getDate()-90),{start:e,end:t}}default:throw Error(`Unknown relative period: ${e}`)}}function 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}=a3(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"}),a4.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
308
|
<html lang="en">
|
|
309
309
|
<head>
|
|
310
310
|
<meta charset="utf-8" />
|
|
@@ -334,7 +334,7 @@ ${e}`)}console.log("✅ [Section] All indicators compiled successfully",{total:l
|
|
|
334
334
|
</div>
|
|
335
335
|
${i}
|
|
336
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:`{
|
|
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 n4(){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 n3={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: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 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 l4({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 l3({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(l4,{title:m,loading:a,error:r,onRefresh:l,size:"lg"},n().createElement(l3,{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 i4(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(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=>i4(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(i3,{key:e.type,config:e,selected:i4(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&&i4(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:`{
|
|
338
338
|
"columns": [
|
|
339
339
|
{
|
|
340
340
|
"key": "status",
|
|
@@ -344,7 +344,7 @@ ${e}`)}console.log("✅ [Section] All indicators compiled successfully",{total:l
|
|
|
344
344
|
"colorMap": { "true": "running", "false": "success" }
|
|
345
345
|
}
|
|
346
346
|
]
|
|
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}
|
|
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 o4(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 o3=[{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})},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 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:o4(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(...o4(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}
|
|
348
348
|
SELECT DISTINCT pop.patient_id
|
|
349
349
|
FROM (
|
|
350
350
|
${t}
|
|
@@ -365,4 +365,4 @@ INNER JOIN (${t}) indicators ON indicators.patient_id = base.patient_id`;return
|
|
|
365
365
|
"patientId": "vl.patient_id",
|
|
366
366
|
"orderId": "vl.native_order_id",
|
|
367
367
|
"episodeId": "vl.episode_id"
|
|
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}}}]);
|
|
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 s4(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,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:s4(e)},s4(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}=a3(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"}),a4.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(s3,{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}=a3(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"}),a4.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:e4},n().createElement("span",null,"Metadata groups"),n().createElement("span",{className:e3},x)),n().createElement("div",{className:e4},n().createElement("span",null,"Report types"),n().createElement("span",{className:e3},L)),n().createElement("div",{className:e4},n().createElement("span",null,"Ready artifacts"),n().createElement("span",{className:e3},S?"—":M)),n().createElement("div",{className:e4},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(n4,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}}}]);
|