@openmrs/esm-report-builder 0.1.1-pre.101

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.
Files changed (670) hide show
  1. package/.eslintignore +5 -0
  2. package/.eslintrc.js +19 -0
  3. package/.prettierrc +8 -0
  4. package/.tx/config +12 -0
  5. package/LICENSE +401 -0
  6. package/README.md +336 -0
  7. package/__mocks__/react-i18next.js +12 -0
  8. package/dist/128.css +1 -0
  9. package/dist/128.css.map +1 -0
  10. package/dist/128.js +338 -0
  11. package/dist/128.js.map +1 -0
  12. package/dist/1480.js +1 -0
  13. package/dist/1480.js.map +1 -0
  14. package/dist/1646.js +1 -0
  15. package/dist/1646.js.map +1 -0
  16. package/dist/1869.js +1 -0
  17. package/dist/1869.js.map +1 -0
  18. package/dist/1877.js +1 -0
  19. package/dist/1877.js.map +1 -0
  20. package/dist/2131.js +1 -0
  21. package/dist/2131.js.map +1 -0
  22. package/dist/2317.js +1 -0
  23. package/dist/2317.js.map +1 -0
  24. package/dist/2408.js +1 -0
  25. package/dist/2408.js.map +1 -0
  26. package/dist/2416.js +1 -0
  27. package/dist/2416.js.map +1 -0
  28. package/dist/282.js +1 -0
  29. package/dist/282.js.map +1 -0
  30. package/dist/2881.js +1 -0
  31. package/dist/2881.js.map +1 -0
  32. package/dist/2997.js +1 -0
  33. package/dist/2997.js.map +1 -0
  34. package/dist/3378.js +1 -0
  35. package/dist/3378.js.map +1 -0
  36. package/dist/3963.js +1 -0
  37. package/dist/3963.js.map +1 -0
  38. package/dist/4106.js +1 -0
  39. package/dist/4106.js.map +1 -0
  40. package/dist/4111.js +1 -0
  41. package/dist/4111.js.map +1 -0
  42. package/dist/4171.css +1 -0
  43. package/dist/4171.css.map +1 -0
  44. package/dist/4171.js +43 -0
  45. package/dist/4171.js.map +1 -0
  46. package/dist/434.js +1 -0
  47. package/dist/434.js.map +1 -0
  48. package/dist/4348.js +1 -0
  49. package/dist/4348.js.map +1 -0
  50. package/dist/4383.js +1 -0
  51. package/dist/4383.js.map +1 -0
  52. package/dist/4658.js +1 -0
  53. package/dist/4658.js.map +1 -0
  54. package/dist/4668.js +1 -0
  55. package/dist/4668.js.map +1 -0
  56. package/dist/4928.js +1 -0
  57. package/dist/4928.js.map +1 -0
  58. package/dist/5098.js +1 -0
  59. package/dist/5098.js.map +1 -0
  60. package/dist/5117.js +1 -0
  61. package/dist/5117.js.map +1 -0
  62. package/dist/5132.js +1 -0
  63. package/dist/5132.js.map +1 -0
  64. package/dist/5145.js +1 -0
  65. package/dist/5145.js.map +1 -0
  66. package/dist/550.js +1 -0
  67. package/dist/550.js.map +1 -0
  68. package/dist/5503.js +1 -0
  69. package/dist/5503.js.map +1 -0
  70. package/dist/556.js +1 -0
  71. package/dist/556.js.map +1 -0
  72. package/dist/5644.js +1 -0
  73. package/dist/5644.js.map +1 -0
  74. package/dist/5940.js +1 -0
  75. package/dist/5940.js.map +1 -0
  76. package/dist/6047.js +1 -0
  77. package/dist/6047.js.map +1 -0
  78. package/dist/6237.js +1 -0
  79. package/dist/6237.js.map +1 -0
  80. package/dist/6371.js +1 -0
  81. package/dist/6371.js.map +1 -0
  82. package/dist/6377.js +1 -0
  83. package/dist/6377.js.map +1 -0
  84. package/dist/6444.js +1 -0
  85. package/dist/6444.js.map +1 -0
  86. package/dist/6508.js +1 -0
  87. package/dist/6508.js.map +1 -0
  88. package/dist/6652.js +1 -0
  89. package/dist/6652.js.map +1 -0
  90. package/dist/6686.js +1 -0
  91. package/dist/6686.js.map +1 -0
  92. package/dist/6724.js +1 -0
  93. package/dist/6724.js.map +1 -0
  94. package/dist/6867.js +19 -0
  95. package/dist/6867.js.map +1 -0
  96. package/dist/6904.js +1 -0
  97. package/dist/6904.js.map +1 -0
  98. package/dist/7045.js +1 -0
  99. package/dist/7045.js.map +1 -0
  100. package/dist/7175.js +1 -0
  101. package/dist/7175.js.map +1 -0
  102. package/dist/7182.js +1 -0
  103. package/dist/7182.js.map +1 -0
  104. package/dist/7475.js +1 -0
  105. package/dist/7475.js.map +1 -0
  106. package/dist/7742.js +1 -0
  107. package/dist/7742.js.map +1 -0
  108. package/dist/7912.js +1 -0
  109. package/dist/7912.js.map +1 -0
  110. package/dist/8251.js +1 -0
  111. package/dist/8251.js.map +1 -0
  112. package/dist/8358.js +1 -0
  113. package/dist/8358.js.map +1 -0
  114. package/dist/8359.js +1 -0
  115. package/dist/8359.js.map +1 -0
  116. package/dist/8695.js +1 -0
  117. package/dist/8695.js.map +1 -0
  118. package/dist/903.js +1 -0
  119. package/dist/903.js.map +1 -0
  120. package/dist/9072.js +1 -0
  121. package/dist/9072.js.map +1 -0
  122. package/dist/9806.js +1 -0
  123. package/dist/9806.js.map +1 -0
  124. package/dist/997.js +1 -0
  125. package/dist/997.js.map +1 -0
  126. package/dist/openmrs-esm-report-builder.js +3 -0
  127. package/dist/openmrs-esm-report-builder.js.buildmanifest.json +1433 -0
  128. package/dist/openmrs-esm-report-builder.js.map +1 -0
  129. package/dist/routes.json +1 -0
  130. package/e2e/core/env.ts +5 -0
  131. package/e2e/core/global-setup.ts +34 -0
  132. package/e2e/core/test.ts +21 -0
  133. package/e2e/pages/app-shell.page.ts +35 -0
  134. package/e2e/pages/etl-sources.page.ts +36 -0
  135. package/e2e/pages/report-sections.page.ts +21 -0
  136. package/e2e/pages/section-preview.modal.ts +29 -0
  137. package/e2e/specs/etl-sources.spec.ts +51 -0
  138. package/e2e/specs/navigation.spec.ts +13 -0
  139. package/e2e/specs/section-preview-validation.spec.ts +38 -0
  140. package/e2e/specs/section-preview.spec.ts +94 -0
  141. package/e2e/support/github/Dockerfile +32 -0
  142. package/e2e/support/github/Dockerfile.dockerignore +13 -0
  143. package/e2e/support/github/docker-compose.yml +31 -0
  144. package/e2e/support/github/run-e2e-docker-env.sh +131 -0
  145. package/e2e/support/github/spa-assemble-config.json +6 -0
  146. package/e2e/tsconfig.json +11 -0
  147. package/example.env +5 -0
  148. package/linelist_report_builder_design_spec.md +816 -0
  149. package/package.json +98 -0
  150. package/playwright.config.ts +28 -0
  151. package/rspack.config.js +2 -0
  152. package/src/__debug__/all-designs.test.tsx +33 -0
  153. package/src/admin-card-link.extension.module.scss +55 -0
  154. package/src/admin-card-link.extension.tsx +24 -0
  155. package/src/components/admin/admin-page.component.tsx +75 -0
  156. package/src/components/admin/age-categories-page.component.tsx +109 -0
  157. package/src/components/admin/age-groups-page.component.tsx +146 -0
  158. package/src/components/admin/etl-browser/columns-tab.component.tsx +80 -0
  159. package/src/components/admin/etl-browser/etl-browser-page.component.tsx +309 -0
  160. package/src/components/admin/etl-browser/etl-browser.component.scss +424 -0
  161. package/src/components/admin/etl-browser/metadata-tab.component.tsx +65 -0
  162. package/src/components/admin/etl-browser/preview-grid.component.tsx +189 -0
  163. package/src/components/admin/etl-browser/relationships-tab.component.tsx +21 -0
  164. package/src/components/admin/etl-browser/sources-tree.component.tsx +118 -0
  165. package/src/components/admin/etl-browser/table-detail.component.tsx +124 -0
  166. package/src/components/admin/etl-browser/table-info-strip.component.tsx +51 -0
  167. package/src/components/admin/etl-browser/table-list.component.tsx +136 -0
  168. package/src/components/admin/etl-browser/use-table-preview.ts +47 -0
  169. package/src/components/admin/etl-sources-page.component.tsx +355 -0
  170. package/src/components/admin/etl-tasks-page.component.scss +370 -0
  171. package/src/components/admin/etl-tasks-page.component.tsx +768 -0
  172. package/src/components/admin/report-categories-page.component.tsx +267 -0
  173. package/src/components/admin/report-library-page.component.tsx +551 -0
  174. package/src/components/ai-support/ai-assist-button.component.tsx +30 -0
  175. package/src/components/ai-support/ai-assist-modal.component.tsx +81 -0
  176. package/src/components/ai-support/ai.service.ts +21 -0
  177. package/src/components/ai-support/ai.types.ts +12 -0
  178. package/src/components/app-shell/report-builder-shell.component.tsx +242 -0
  179. package/src/components/app-shell/report-builder-shell.scss +18 -0
  180. package/src/components/dashboards/dashboard-config.schema.ts +97 -0
  181. package/src/components/dashboards/dashboard-form-modal.component.tsx +150 -0
  182. package/src/components/dashboards/dashboards-admin.scss +62 -0
  183. package/src/components/dashboards/dashboards-page.component.tsx +153 -0
  184. package/src/components/dashboards/dashboards-table.component.tsx +130 -0
  185. package/src/components/dashboards/sections/dashboard-autoinclude.section.tsx +75 -0
  186. package/src/components/dashboards/sections/dashboard-basics.section.tsx +80 -0
  187. package/src/components/dashboards/sections/dashboard-json.section.tsx +79 -0
  188. package/src/components/dashboards/sections/dashboard-sections-editor.section.tsx +130 -0
  189. package/src/components/dashboards/sections/dashboard-widgets-editor.section.tsx +184 -0
  190. package/src/components/data-themes/data-theme-form.component.tsx +59 -0
  191. package/src/components/data-themes/data-theme-modal.component.tsx +349 -0
  192. package/src/components/data-themes/data-themes-page.component.tsx +139 -0
  193. package/src/components/data-themes/data-themes-table.component.tsx +98 -0
  194. package/src/components/data-themes/icon-registry.ts +35 -0
  195. package/src/components/data-themes/sections/data-theme-basics.section.tsx +63 -0
  196. package/src/components/data-themes/sections/data-theme-condition-columns.section.tsx +397 -0
  197. package/src/components/data-themes/sections/data-theme-fields-editor.section.tsx +125 -0
  198. package/src/components/data-themes/sections/data-theme-metadata.section.tsx +245 -0
  199. package/src/components/data-themes/sections/data-theme-preview.section.tsx +115 -0
  200. package/src/components/data-themes/sections/data-theme-source.section.tsx +184 -0
  201. package/src/components/data-visualizer/components/cqi-components/cqi-data-table.component.tsx +214 -0
  202. package/src/components/data-visualizer/components/cqi-components/cqi-elements.ts +203 -0
  203. package/src/components/data-visualizer/components/cqi-components/detail.component.tsx +110 -0
  204. package/src/components/data-visualizer/components/cqi-components/detail.scss +22 -0
  205. package/src/components/data-visualizer/components/data-table/data-table.component.tsx +208 -0
  206. package/src/components/data-visualizer/components/data-table/data-tables.scss +206 -0
  207. package/src/components/data-visualizer/components/empty-state/empty-state-illustration.component.tsx +53 -0
  208. package/src/components/data-visualizer/components/header/header.component.tsx +43 -0
  209. package/src/components/data-visualizer/components/header/header.scss +71 -0
  210. package/src/components/data-visualizer/components/model/confirm.component.tsx +40 -0
  211. package/src/components/data-visualizer/components/panel/panel.component.tsx +20 -0
  212. package/src/components/data-visualizer/components/panel/panel.scss +25 -0
  213. package/src/components/data-visualizer/components/popover/modifier-panel.tsx +53 -0
  214. package/src/components/data-visualizer/constants.ts +445 -0
  215. package/src/components/data-visualizer/data-visualizer-illustration.component.tsx +31 -0
  216. package/src/components/data-visualizer/data-visualizer.component.tsx +1935 -0
  217. package/src/components/data-visualizer/data-visualizer.resource.ts +462 -0
  218. package/src/components/data-visualizer/data-visualizer.scss +448 -0
  219. package/src/components/data-visualizer/declarations.d.ts +131 -0
  220. package/src/components/data-visualizer/parameter-inputs/boolean-parameter-input.component.tsx +34 -0
  221. package/src/components/data-visualizer/parameter-inputs/concept-parameter-input.component.tsx +81 -0
  222. package/src/components/data-visualizer/parameter-inputs/date-parameter-input.component.tsx +110 -0
  223. package/src/components/data-visualizer/parameter-inputs/date-range-input.component.scss +47 -0
  224. package/src/components/data-visualizer/parameter-inputs/date-range-input.component.tsx +228 -0
  225. package/src/components/data-visualizer/parameter-inputs/identifier-type-parameter-input.component.tsx +69 -0
  226. package/src/components/data-visualizer/parameter-inputs/list-parameter-input.component.tsx +73 -0
  227. package/src/components/data-visualizer/parameter-inputs/location-parameter-input.component.tsx +81 -0
  228. package/src/components/data-visualizer/parameter-inputs/number-parameter-input.component.tsx +40 -0
  229. package/src/components/data-visualizer/parameter-inputs/person-attribute-parameter-input.component.tsx +71 -0
  230. package/src/components/data-visualizer/parameter-inputs/text-parameter-input.component.tsx +52 -0
  231. package/src/components/data-visualizer/report-parameter-modal.component.tsx +383 -0
  232. package/src/components/data-visualizer/types.ts +206 -0
  233. package/src/components/etl-monitor/builder/builder-state-machine.ts +381 -0
  234. package/src/components/etl-monitor/builder/design-registry.tsx +139 -0
  235. package/src/components/etl-monitor/builder/etl-monitor-builder-context.tsx +702 -0
  236. package/src/components/etl-monitor/builder/etl-monitor-builder-modal.component.tsx +461 -0
  237. package/src/components/etl-monitor/builder/etl-monitor-builder-modal.scss +256 -0
  238. package/src/components/etl-monitor/builder/etl-monitor-builder-page.component.tsx +387 -0
  239. package/src/components/etl-monitor/builder/etl-monitor-builder-page.scss +976 -0
  240. package/src/components/etl-monitor/builder/generated-config-panel.component.tsx +168 -0
  241. package/src/components/etl-monitor/builder/generated-config-panel.scss +198 -0
  242. package/src/components/etl-monitor/builder/index.ts +5 -0
  243. package/src/components/etl-monitor/builder/monitor-preview.tsx +124 -0
  244. package/src/components/etl-monitor/builder/steps/data-source-step.component.tsx +667 -0
  245. package/src/components/etl-monitor/builder/steps/data-source-step.scss +284 -0
  246. package/src/components/etl-monitor/builder/steps/design-samples.ts +278 -0
  247. package/src/components/etl-monitor/builder/steps/design-step.component.tsx +299 -0
  248. package/src/components/etl-monitor/builder/steps/design-step.scss +479 -0
  249. package/src/components/etl-monitor/builder/steps/fields-step.component.tsx +859 -0
  250. package/src/components/etl-monitor/builder/steps/fields-step.scss +459 -0
  251. package/src/components/etl-monitor/builder/steps/general-step.component.tsx +288 -0
  252. package/src/components/etl-monitor/builder/steps/general-step.scss +103 -0
  253. package/src/components/etl-monitor/builder/steps/index.ts +5 -0
  254. package/src/components/etl-monitor/builder/steps/preview-step.component.tsx +245 -0
  255. package/src/components/etl-monitor/builder/steps/preview-step.scss +236 -0
  256. package/src/components/etl-monitor/etl-monitor-card-shell.component.tsx +154 -0
  257. package/src/components/etl-monitor/etl-monitor-card-shell.scss +103 -0
  258. package/src/components/etl-monitor/etl-monitor-dashboard.component.tsx +227 -0
  259. package/src/components/etl-monitor/etl-monitor-dashboard.scss +148 -0
  260. package/src/components/etl-monitor/etl-monitor-status-card.component.tsx +192 -0
  261. package/src/components/etl-monitor/etl-monitors-page.component.tsx +621 -0
  262. package/src/components/etl-monitor/renderers/DetailsRenderer.tsx +2 -0
  263. package/src/components/etl-monitor/renderers/ErrorLogRenderer.tsx +2 -0
  264. package/src/components/etl-monitor/renderers/EtlMonitorWidget.tsx +97 -0
  265. package/src/components/etl-monitor/renderers/MetricsGridRenderer.tsx +2 -0
  266. package/src/components/etl-monitor/renderers/MonitorRenderer.tsx +175 -0
  267. package/src/components/etl-monitor/renderers/ProgressRenderer.tsx +2 -0
  268. package/src/components/etl-monitor/renderers/StatusCardRenderer.tsx +2 -0
  269. package/src/components/etl-monitor/renderers/SummaryCardRenderer.tsx +2 -0
  270. package/src/components/etl-monitor/renderers/TableRenderer.tsx +2 -0
  271. package/src/components/etl-monitor/renderers/component-icons.tsx +33 -0
  272. package/src/components/etl-monitor/renderers/components/details-renderer.tsx +195 -0
  273. package/src/components/etl-monitor/renderers/components/error-log-renderer.tsx +104 -0
  274. package/src/components/etl-monitor/renderers/components/index.ts +6 -0
  275. package/src/components/etl-monitor/renderers/components/log-renderer.tsx +86 -0
  276. package/src/components/etl-monitor/renderers/components/metrics-grid-renderer.tsx +133 -0
  277. package/src/components/etl-monitor/renderers/components/progress-renderer.tsx +188 -0
  278. package/src/components/etl-monitor/renderers/components/status-card-renderer.tsx +247 -0
  279. package/src/components/etl-monitor/renderers/components/summary-card-renderer.tsx +160 -0
  280. package/src/components/etl-monitor/renderers/components/table-renderer.tsx +175 -0
  281. package/src/components/etl-monitor/renderers/components/time-series-renderer.tsx +310 -0
  282. package/src/components/etl-monitor/renderers/data-transformer.ts +361 -0
  283. package/src/components/etl-monitor/renderers/index.ts +11 -0
  284. package/src/components/etl-monitor/renderers/legacy-monitor-renderer.tsx +69 -0
  285. package/src/components/etl-monitor/renderers/monitor-renderer.tsx +6 -0
  286. package/src/components/etl-monitor/renderers/monitor-renderers.scss +1621 -0
  287. package/src/components/etl-monitor/renderers/monitor-widget-card.component.tsx +54 -0
  288. package/src/components/etl-monitor/renderers/monitor-widget-card.scss +16 -0
  289. package/src/components/etl-monitor/renderers/v2-monitor-renderer.tsx +227 -0
  290. package/src/components/import-export/artifact-groups.ts +153 -0
  291. package/src/components/import-export/export-report-modal.component.tsx +265 -0
  292. package/src/components/import-export/import-export-page.component.tsx +610 -0
  293. package/src/components/import-export/import-export.styles.scss +825 -0
  294. package/src/components/import-export/import-package-modal.component.tsx +401 -0
  295. package/src/components/import-export/index.ts +3 -0
  296. package/src/components/indicators/README.md +24 -0
  297. package/src/components/indicators/base-indicator-basic-fields.component.tsx +18 -0
  298. package/src/components/indicators/base-indicator-basics.section.tsx +54 -0
  299. package/src/components/indicators/base-indicator-countby.section.tsx +25 -0
  300. package/src/components/indicators/base-indicator-criteria.section.tsx +83 -0
  301. package/src/components/indicators/base-indicator-details-form.component.tsx +80 -0
  302. package/src/components/indicators/base-indicator-theme-unit-fields.component.tsx +39 -0
  303. package/src/components/indicators/create-base-indicator-modal.component.tsx +623 -0
  304. package/src/components/indicators/create-composite-base-indicator-modal.component.tsx +295 -0
  305. package/src/components/indicators/create-custom-indicator-modal.component.tsx +548 -0
  306. package/src/components/indicators/create-final-indicator-modal.component.tsx +285 -0
  307. package/src/components/indicators/custom-condition-input.component.tsx +310 -0
  308. package/src/components/indicators/diagnosis-filters-form.component.tsx +101 -0
  309. package/src/components/indicators/disaggregation-panel.component.tsx +93 -0
  310. package/src/components/indicators/handler/concept-search-multiselect.component.tsx +153 -0
  311. package/src/components/indicators/handler/question-answer-concept-search.component.tsx +336 -0
  312. package/src/components/indicators/indicator-run-preview-modal.component.tsx +391 -0
  313. package/src/components/indicators/indicator-search-select.component.tsx +297 -0
  314. package/src/components/indicators/indicator-status-tag.component.tsx +9 -0
  315. package/src/components/indicators/indicators-page.component.tsx +673 -0
  316. package/src/components/indicators/indicators-page.scss +121 -0
  317. package/src/components/indicators/indicators-table.component.tsx +188 -0
  318. package/src/components/indicators/preview-table.component.tsx +31 -0
  319. package/src/components/indicators/sections/composite-indicator-basics.section.tsx +36 -0
  320. package/src/components/indicators/sections/composite-indicator-picker.section.tsx +116 -0
  321. package/src/components/indicators/sections/composite-indicator-sql-preview.section.tsx +31 -0
  322. package/src/components/indicators/sections/custom-indicator-basics.section.tsx +65 -0
  323. package/src/components/indicators/sections/custom-indicator-disaggregation.section.tsx +93 -0
  324. package/src/components/indicators/sections/custom-indicator-filters.section.tsx +203 -0
  325. package/src/components/indicators/sections/custom-indicator-population.section.tsx +107 -0
  326. package/src/components/indicators/sections/custom-indicator-sql-preview.section.tsx +108 -0
  327. package/src/components/indicators/sections/final-indicator-basics.section.tsx +46 -0
  328. package/src/components/indicators/sections/final-indicator-disaggregation.section.tsx +47 -0
  329. package/src/components/indicators/sections/final-indicator-picker.section.tsx +60 -0
  330. package/src/components/indicators/sections/final-indicator-preview.section.tsx +20 -0
  331. package/src/components/indicators/sections/final-indicator-results-preview.section.tsx +65 -0
  332. package/src/components/indicators/sections/indicator-basics.section.tsx +40 -0
  333. package/src/components/indicators/sections/indicator-conditions.section.tsx +279 -0
  334. package/src/components/indicators/sections/indicator-sql-preview.section.tsx +63 -0
  335. package/src/components/indicators/sections/indicator-theme.section.tsx +48 -0
  336. package/src/components/indicators/sql-preview.component.tsx +19 -0
  337. package/src/components/indicators/tag-input.component.tsx +177 -0
  338. package/src/components/indicators/types/base-indicator-form.types.ts +17 -0
  339. package/src/components/indicators/types/base-indicator-theme.constants.ts +8 -0
  340. package/src/components/indicators/types/composite-indicator.types.ts +27 -0
  341. package/src/components/indicators/types/condition-ui.types.ts +11 -0
  342. package/src/components/indicators/types/custom-indicator.types.ts +161 -0
  343. package/src/components/indicators/types/data-theme-config.types.ts +88 -0
  344. package/src/components/indicators/types/indicator-types.ts +57 -0
  345. package/src/components/indicators/types/sql-builders.ts +43 -0
  346. package/src/components/indicators/utils/composite-indicator-sql.utils.test.ts +143 -0
  347. package/src/components/indicators/utils/composite-indicator-sql.utils.ts +426 -0
  348. package/src/components/indicators/utils/concept-preload.utils.ts +21 -0
  349. package/src/components/indicators/utils/custom-indicator-interpreter.test.ts +493 -0
  350. package/src/components/indicators/utils/custom-indicator-interpreter.ts +702 -0
  351. package/src/components/indicators/utils/final-indicator-sql.utils.ts +190 -0
  352. package/src/components/indicators/utils/indicator-conditions-hydration.utils.ts +254 -0
  353. package/src/components/indicators/utils/indicator-sql-resolution.utils.ts +204 -0
  354. package/src/components/indicators/utils/indicator-sql.utils.ts +721 -0
  355. package/src/components/indicators/utils/population-sql.compiler.test.ts +985 -0
  356. package/src/components/indicators/utils/population-sql.compiler.ts +858 -0
  357. package/src/components/landing/landing-action-item.component.tsx +50 -0
  358. package/src/components/landing/landing-action-list.component.tsx +12 -0
  359. package/src/components/landing/landing-activity-list.component.tsx +47 -0
  360. package/src/components/landing/landing-footer-grid.component.tsx +45 -0
  361. package/src/components/landing/landing-hero.component.tsx +18 -0
  362. package/src/components/landing/landing-section-card.component.tsx +33 -0
  363. package/src/components/landing/report-builder-landing-page.component.tsx +186 -0
  364. package/src/components/landing/report-builder-landing-page.scss +131 -0
  365. package/src/components/legacy-reports/legacy-report-detail-page.component.tsx +300 -0
  366. package/src/components/legacy-reports/legacy-report-editor-page.component.tsx +324 -0
  367. package/src/components/legacy-reports/legacy-report-upload-modal.component.tsx +307 -0
  368. package/src/components/legacy-reports/legacy-reports-page.component.tsx +206 -0
  369. package/src/components/legacy-reports/legacy-reports-table.component.tsx +154 -0
  370. package/src/components/legacy-reports/tabs/legacy-report-datasets-tab.component.tsx +344 -0
  371. package/src/components/legacy-reports/tabs/legacy-report-dimensions-tab.component.tsx +590 -0
  372. package/src/components/legacy-reports/tabs/legacy-report-indicators-tab.component.tsx +490 -0
  373. package/src/components/legacy-reports/tabs/legacy-report-json-preview-tab.component.tsx +272 -0
  374. package/src/components/legacy-reports/tabs/legacy-report-overview-tab.component.tsx +218 -0
  375. package/src/components/legacy-reports/tabs/legacy-report-parameters-tab.component.tsx +279 -0
  376. package/src/components/linelist/definition/indicator-to-sql.utils.ts +281 -0
  377. package/src/components/linelist/definition/linelist-definition-editor.component.tsx +1676 -0
  378. package/src/components/linelist/definition/linelist-definition-editor.scss +461 -0
  379. package/src/components/linelist/definition/linelist-definition.types.ts +108 -0
  380. package/src/components/linelist/definition/panels/column-properties-panel.component.tsx +328 -0
  381. package/src/components/linelist/definition/panels/column-selector-panel.component.tsx +1082 -0
  382. package/src/components/linelist/definition/panels/column-selector-panel.scss +100 -0
  383. package/src/components/linelist/definition/panels/custom-sql-column-modal.component.tsx +248 -0
  384. package/src/components/linelist/definition/panels/encounter-diagnosis-column-modal.component.tsx +300 -0
  385. package/src/components/linelist/definition/panels/encounter-diagnosis-column-modal.scss +21 -0
  386. package/src/components/linelist/definition/panels/multi-datasource-selector.component.tsx +332 -0
  387. package/src/components/linelist/definition/panels/multi-datasource-selector.scss +161 -0
  388. package/src/components/linelist/definition/panels/observation-column-modal.component.tsx +450 -0
  389. package/src/components/linelist/definition/panels/observation-column-modal.scss +29 -0
  390. package/src/components/linelist/definition/panels/parameter-panel.component.tsx +659 -0
  391. package/src/components/linelist/definition/panels/parameter-panel.scss +64 -0
  392. package/src/components/linelist/definition/panels/population-source-selector.component.tsx +407 -0
  393. package/src/components/linelist/definition/panels/population-source-selector.scss +187 -0
  394. package/src/components/linelist/design/panels/column-category-selector.component.tsx +433 -0
  395. package/src/components/linelist/design/panels/column-category-selector.scss +324 -0
  396. package/src/components/linelist/design/panels/column-debug-panel.component.tsx +197 -0
  397. package/src/components/linelist/design/panels/column-debug-panel.scss +141 -0
  398. package/src/components/linelist/design/panels/data-catalogue.component.tsx +1062 -0
  399. package/src/components/linelist/design/panels/data-catalogue.scss +263 -0
  400. package/src/components/linelist/design/panels/display-settings-panel.component.tsx +405 -0
  401. package/src/components/linelist/design/panels/display-settings-panel.scss +78 -0
  402. package/src/components/linelist/design/panels/filtermap-editor.component.tsx +434 -0
  403. package/src/components/linelist/design/panels/filtermap-editor.scss +176 -0
  404. package/src/components/linelist/design/panels/json-preview.component.tsx +114 -0
  405. package/src/components/linelist/design/panels/json-preview.scss +85 -0
  406. package/src/components/linelist/design/panels/query-config-panel.component.tsx +1137 -0
  407. package/src/components/linelist/design/panels/query-config-panel.scss +341 -0
  408. package/src/components/linelist/design/panels/sort-config-panel.component.tsx +330 -0
  409. package/src/components/linelist/design/panels/sort-config-panel.scss +77 -0
  410. package/src/components/linelist/design/panels/sql-builder-panel.component.tsx +475 -0
  411. package/src/components/linelist/design/panels/sql-builder-panel.scss +226 -0
  412. package/src/components/linelist/design/panels/transformation-panel.component.tsx +687 -0
  413. package/src/components/linelist/design/panels/transformation-panel.scss +81 -0
  414. package/src/components/linelist/design/panels/visual-filter-panel.component.tsx +595 -0
  415. package/src/components/linelist/design/panels/visual-filter-panel.scss +76 -0
  416. package/src/components/linelist/linelist-dashboard.page.component.tsx +756 -0
  417. package/src/components/linelist/linelist-dashboard.page.scss +240 -0
  418. package/src/components/linelist/linelist-editor.page.component.tsx +134 -0
  419. package/src/components/linelist/linelist-editor.page.scss +28 -0
  420. package/src/components/linelist/linelist-run-report.page.component.tsx +715 -0
  421. package/src/components/linelist/linelist-run-report.page.scss +136 -0
  422. package/src/components/linelist/modals/linelist-report-builder-modal.component.tsx +1454 -0
  423. package/src/components/linelist/modals/linelist-report-builder-modal.scss +164 -0
  424. package/src/components/linelist/modals/preview-parameter-modal.component.tsx +361 -0
  425. package/src/components/report/dashboard/reports-table.component.tsx +186 -0
  426. package/src/components/report/definition/panels/properties-panel.component.tsx +38 -0
  427. package/src/components/report/definition/panels/report-structure-panel.component.tsx +61 -0
  428. package/src/components/report/definition/panels/selection-panel.component.tsx +58 -0
  429. package/src/components/report/definition/report-definition-editor.component.tsx +99 -0
  430. package/src/components/report/definition/report-definition.types.ts +66 -0
  431. package/src/components/report/design/panels/IndicatorPropertiesPanel.scss +33 -0
  432. package/src/components/report/design/panels/IndicatorPropertiesPanel.tsx +389 -0
  433. package/src/components/report/design/panels/JsonPreviewPanel.scss +32 -0
  434. package/src/components/report/design/panels/JsonPreviewPanel.tsx +104 -0
  435. package/src/components/report/design/panels/mapping-preview-panel.component.tsx +82 -0
  436. package/src/components/report/design/panels/mapping-preview-panel.scss +55 -0
  437. package/src/components/report/design/panels/template-structure-panel.component.tsx +296 -0
  438. package/src/components/report/design/panels/template-structure-panel.scss +81 -0
  439. package/src/components/report/design/report-design-editor.component.tsx +1170 -0
  440. package/src/components/report/design/report-design.types.ts +48 -0
  441. package/src/components/report/design/report-design.utils.ts +86 -0
  442. package/src/components/report/panels/report-detail.component.tsx +71 -0
  443. package/src/components/report/panels/report-panel-shell.component.tsx +60 -0
  444. package/src/components/report/report-dashboard.page.component.tsx +554 -0
  445. package/src/components/report/report-editor.page.component.tsx +590 -0
  446. package/src/components/report/report.routes.tsx +32 -0
  447. package/src/components/report-sections/create-report-section-modal.component.tsx +388 -0
  448. package/src/components/report-sections/hooks/useAgeCategories.ts +25 -0
  449. package/src/components/report-sections/hooks/useSectionEditorState.ts +449 -0
  450. package/src/components/report-sections/panels/Dhis2MappingPanel.tsx +157 -0
  451. package/src/components/report-sections/panels/DisaggregationPanel.tsx +97 -0
  452. package/src/components/report-sections/panels/IndicatorPickerPanel.tsx +201 -0
  453. package/src/components/report-sections/panels/SectionBasicsPanel.tsx +27 -0
  454. package/src/components/report-sections/report-section-preview-modal.component.tsx +548 -0
  455. package/src/components/report-sections/report-sections-page.component.tsx +325 -0
  456. package/src/components/report-sections/section-disaggregation.utils.ts +637 -0
  457. package/src/components/report-sections/section-types.ts +55 -0
  458. package/src/components/report-sections/section-utils.ts +50 -0
  459. package/src/components/report-sections/sections-page.scss +79 -0
  460. package/src/components/run-reports/run-reports-page.component.tsx +8 -0
  461. package/src/components/security/access-denied-page.component.tsx +64 -0
  462. package/src/components/security/access-denied-page.scss +39 -0
  463. package/src/components/security/privilege-route.component.test.tsx +76 -0
  464. package/src/components/security/privilege-route.component.tsx +39 -0
  465. package/src/components/shared/compile-setup-modal.component.tsx +182 -0
  466. package/src/components/shared/concept-selector.component.tsx +245 -0
  467. package/src/components/shared/concept-selector.scss +121 -0
  468. package/src/components/shared/header/builder-header-actions.component.tsx +38 -0
  469. package/src/components/shared/header/header.component.tsx +85 -0
  470. package/src/components/shared/header/header.scss +151 -0
  471. package/src/components/shared/header/illustration.component.tsx +34 -0
  472. package/src/components/shared/indicator-properties-panel/IndicatorPropertiesPanel.scss +33 -0
  473. package/src/components/shared/indicator-properties-panel/IndicatorPropertiesPanel.tsx +389 -0
  474. package/src/components/shared/json-preview-panel/JsonPreviewPanel.scss +32 -0
  475. package/src/components/shared/json-preview-panel/JsonPreviewPanel.tsx +104 -0
  476. package/src/components/shared/mapping-preview-panel/mapping-preview-panel.component.tsx +82 -0
  477. package/src/components/shared/mapping-preview-panel/mapping-preview-panel.scss +55 -0
  478. package/src/components/shared/preview/query-results-preview.component.tsx +204 -0
  479. package/src/components/shared/template-structure-panel/template-structure-panel.component.tsx +296 -0
  480. package/src/components/shared/template-structure-panel/template-structure-panel.scss +81 -0
  481. package/src/config-schema.ts +43 -0
  482. package/src/constants/privileges.test.ts +54 -0
  483. package/src/constants/privileges.ts +118 -0
  484. package/src/features/dashboards/DashboardRendererPage.tsx +174 -0
  485. package/src/features/dashboards/DashboardsPage.tsx +164 -0
  486. package/src/features/dashboards/EtlDashboardPage.tsx +32 -0
  487. package/src/features/dashboards/components/DashboardEmptyState.tsx +41 -0
  488. package/src/features/dashboards/components/DashboardGrid.tsx +48 -0
  489. package/src/features/dashboards/components/DashboardHeader.tsx +58 -0
  490. package/src/features/dashboards/components/DashboardSection.tsx +46 -0
  491. package/src/features/dashboards/components/ReportLaunchCard.tsx +51 -0
  492. package/src/features/dashboards/components/WidgetSlotDispatcher.tsx +61 -0
  493. package/src/features/dashboards/components/WidgetUnavailableCard.tsx +36 -0
  494. package/src/features/dashboards/dashboards.scss +196 -0
  495. package/src/features/dashboards/hooks/useDashboard.ts +61 -0
  496. package/src/features/dashboards/hooks/useDashboardWidgets.ts +74 -0
  497. package/src/features/dashboards/hooks/useDashboards.ts +56 -0
  498. package/src/features/dashboards/hooks/useMonitorDataMap.ts +84 -0
  499. package/src/features/dashboards/index.ts +11 -0
  500. package/src/features/dashboards/utils/dashboard-config.util.test.ts +286 -0
  501. package/src/features/dashboards/utils/dashboard-config.util.ts +382 -0
  502. package/src/features/report-visualizer/ReportVisualizerPage.tsx +448 -0
  503. package/src/features/report-visualizer/components/Export/ExportMenu.tsx +141 -0
  504. package/src/features/report-visualizer/components/Export/index.ts +2 -0
  505. package/src/features/report-visualizer/components/ReportExplorer/QuickFilters.tsx +152 -0
  506. package/src/features/report-visualizer/components/ReportExplorer/ReportCategoryFilter.tsx +54 -0
  507. package/src/features/report-visualizer/components/ReportExplorer/ReportExplorerPanel.tsx +201 -0
  508. package/src/features/report-visualizer/components/ReportExplorer/ReportExplorerRail.tsx +202 -0
  509. package/src/features/report-visualizer/components/ReportExplorer/ReportList.tsx +287 -0
  510. package/src/features/report-visualizer/components/ReportExplorer/ReportSearch.tsx +151 -0
  511. package/src/features/report-visualizer/components/ReportExplorer/ReportTagFilter.tsx +100 -0
  512. package/src/features/report-visualizer/components/ReportExplorer/RunReportButton.tsx +42 -0
  513. package/src/features/report-visualizer/components/ReportExplorer/RuntimeParameterForm.tsx +259 -0
  514. package/src/features/report-visualizer/components/ReportExplorer/index.ts +8 -0
  515. package/src/features/report-visualizer/components/ReportWorkspace/ReportLayer.tsx +33 -0
  516. package/src/features/report-visualizer/components/ReportWorkspace/ReportSummary.tsx +88 -0
  517. package/src/features/report-visualizer/components/ReportWorkspace/ReportViewTabs.tsx +72 -0
  518. package/src/features/report-visualizer/components/ReportWorkspace/ReportWorkspaceHeader.tsx +92 -0
  519. package/src/features/report-visualizer/components/ReportWorkspace/ReportWorkspacePanel.tsx +242 -0
  520. package/src/features/report-visualizer/components/ReportWorkspace/index.ts +5 -0
  521. package/src/features/report-visualizer/components/TableView/ColumnVisibilityMenu.tsx +206 -0
  522. package/src/features/report-visualizer/components/TableView/ReportTable.tsx +253 -0
  523. package/src/features/report-visualizer/components/TableView/index.ts +2 -0
  524. package/src/features/report-visualizer/hooks/index.ts +4 -0
  525. package/src/features/report-visualizer/hooks/useExplorerPreferences.ts +103 -0
  526. package/src/features/report-visualizer/hooks/useReportCapabilities.ts +112 -0
  527. package/src/features/report-visualizer/hooks/useReportParameters.ts +152 -0
  528. package/src/features/report-visualizer/hooks/useReports.ts +135 -0
  529. package/src/features/report-visualizer/index.ts +6 -0
  530. package/src/features/report-visualizer/report-visualizer.scss +593 -0
  531. package/src/features/report-visualizer/types/index.ts +1 -0
  532. package/src/features/report-visualizer/types/report-visualizer.types.ts +104 -0
  533. package/src/features/report-visualizer/utils/status-colors.ts +117 -0
  534. package/src/globals.d.ts +9 -0
  535. package/src/hooks/address-template.ts +86 -0
  536. package/src/hooks/concept.ts +112 -0
  537. package/src/hooks/indicator/index.ts +1 -0
  538. package/src/hooks/indicator/useIndicatorsByTheme.ts +41 -0
  539. package/src/hooks/openmrs-reference-data.ts +432 -0
  540. package/src/hooks/theme/index.ts +4 -0
  541. package/src/hooks/theme/useDataTheme.ts +61 -0
  542. package/src/hooks/theme/useDataThemes.ts +28 -0
  543. package/src/hooks/theme/useMambaTableMeta.ts +34 -0
  544. package/src/hooks/theme/useMambaTables.ts +95 -0
  545. package/src/hooks/use-report-builder-privileges.test.tsx +92 -0
  546. package/src/hooks/use-report-builder-privileges.ts +58 -0
  547. package/src/index.ts +29 -0
  548. package/src/resources/address-template/address-template.api.ts +180 -0
  549. package/src/resources/agegroup/agegroups.api.ts +58 -0
  550. package/src/resources/concept/concept.api.ts +116 -0
  551. package/src/resources/concepts/concept-mapper.ts +21 -0
  552. package/src/resources/concepts/concept-types.ts +31 -0
  553. package/src/resources/concepts/concepts.resource.ts +44 -0
  554. package/src/resources/concepts/useConceptSearch.ts +41 -0
  555. package/src/resources/dashboard/dashboard.api.ts +107 -0
  556. package/src/resources/etl-monitor/etl-monitor-test.api.ts +409 -0
  557. package/src/resources/etl-monitor/etl-monitor.api.ts +381 -0
  558. package/src/resources/etl-source/etl-source.api.ts +65 -0
  559. package/src/resources/etl-task/etl-task.api.ts +96 -0
  560. package/src/resources/etl-task/etl-task.types.ts +31 -0
  561. package/src/resources/indicator/indicators.api.ts +125 -0
  562. package/src/resources/legacy-reports/legacy-reports.api.ts +144 -0
  563. package/src/resources/linelist/linelist-reports.api.ts +616 -0
  564. package/src/resources/location/location.api.ts +135 -0
  565. package/src/resources/openmrs-api.ts +40 -0
  566. package/src/resources/patient-identifier-type/patient-identifier-type.api.ts +65 -0
  567. package/src/resources/person-attribute-type/person-attribute-type.api.ts +71 -0
  568. package/src/resources/preview/sql-preview.api.ts +54 -0
  569. package/src/resources/report/reports.api.ts +140 -0
  570. package/src/resources/report-category/report-category.api.ts +41 -0
  571. package/src/resources/report-import-export/import-export-api.ts +164 -0
  572. package/src/resources/report-library/report-library.api.ts +63 -0
  573. package/src/resources/report-section/report-sections.api.ts +73 -0
  574. package/src/resources/report-section/section-preview.api.ts +25 -0
  575. package/src/resources/theme/data-theme.api.ts +88 -0
  576. package/src/resources/theme/etl-schema.api.ts +101 -0
  577. package/src/resources/theme/etl-table-meta.api.ts +45 -0
  578. package/src/root.component.tsx +20 -0
  579. package/src/routes/report-builder.routes.tsx +160 -0
  580. package/src/routes/report-builder.scss +56 -0
  581. package/src/routes.json +31 -0
  582. package/src/sample-template.ts +121 -0
  583. package/src/template-utils.ts +110 -0
  584. package/src/types/carbon-react-inert.d.ts +13 -0
  585. package/src/types/condition-operators.ts +63 -0
  586. package/src/types/dashboard/dashboard.types.ts +137 -0
  587. package/src/types/dashboard/index.ts +4 -0
  588. package/src/types/etl/etl-types.ts +238 -0
  589. package/src/types/etl-monitor/etl-monitor-builder.types.ts +555 -0
  590. package/src/types/etl-monitor/etl-monitor-v2.types.ts +397 -0
  591. package/src/types/etl-monitor/etl-monitor.types.ts +188 -0
  592. package/src/types/etl-monitor/index.ts +6 -0
  593. package/src/types/linelist/compile-config.ts +455 -0
  594. package/src/types/linelist-types.ts +2059 -0
  595. package/src/types/theme/data-theme.types.ts +88 -0
  596. package/src/utils/api-error.utils.test.ts +147 -0
  597. package/src/utils/api-error.utils.ts +131 -0
  598. package/src/utils/config-enhancer.ts +62 -0
  599. package/src/utils/etl-browser/etl-browser.util.test.ts +151 -0
  600. package/src/utils/etl-browser/export-csv.util.ts +43 -0
  601. package/src/utils/etl-browser/group-tables.util.ts +84 -0
  602. package/src/utils/etl-browser/index.ts +4 -0
  603. package/src/utils/etl-browser/summarize-columns.util.ts +27 -0
  604. package/src/utils/etl-browser/table-sql.util.ts +20 -0
  605. package/src/utils/etl-monitor/config-v2-adapter.util.ts +460 -0
  606. package/src/utils/etl-monitor/endpoint-config-normalizer.util.ts +383 -0
  607. package/src/utils/etl-monitor/index.ts +10 -0
  608. package/src/utils/etl-monitor/jsonpath-resolver.util.ts +118 -0
  609. package/src/utils/etl-monitor/normalization-examples.ts +0 -0
  610. package/src/utils/etl-monitor/schema-inspector.util.ts +76 -0
  611. package/src/utils/etl-monitor/semantic-type-detector.util.ts +76 -0
  612. package/src/utils/etl-monitor/status-mapper.util.ts +105 -0
  613. package/src/utils/etl-monitor/value-formatters.util.ts +167 -0
  614. package/src/utils/etl-task/etl-task-card.util.test.ts +240 -0
  615. package/src/utils/etl-task/etl-task-card.util.ts +276 -0
  616. package/src/utils/etl-task/index.ts +1 -0
  617. package/src/utils/html-entities.utils.ts +34 -0
  618. package/src/utils/parameter-resolution.ts +218 -0
  619. package/src/views/etl-monitor-builder/add-monitor-modal.component.scss +0 -0
  620. package/src/views/etl-monitor-builder/add-monitor-modal.component.tsx +210 -0
  621. package/src/views/etl-monitor-builder/etl-monitor-builder.component.scss +157 -0
  622. package/src/views/etl-monitor-builder/etl-monitor-builder.component.tsx +252 -0
  623. package/src/views/etl-monitor-builder/etl-monitor-builder.store.ts +126 -0
  624. package/tools/i18next-parser.config.js +0 -0
  625. package/tools/setup-tests.ts +1 -0
  626. package/tools/update-openmrs-deps.mjs +42 -0
  627. package/translations/am.json +65 -0
  628. package/translations/ar.json +65 -0
  629. package/translations/ar_SY.json +65 -0
  630. package/translations/bn.json +65 -0
  631. package/translations/cs.json +65 -0
  632. package/translations/de.json +65 -0
  633. package/translations/en.json +65 -0
  634. package/translations/en_US.json +65 -0
  635. package/translations/es.json +65 -0
  636. package/translations/es_MX.json +65 -0
  637. package/translations/fr.json +65 -0
  638. package/translations/he.json +65 -0
  639. package/translations/hi.json +65 -0
  640. package/translations/hi_IN.json +65 -0
  641. package/translations/id.json +65 -0
  642. package/translations/it.json +65 -0
  643. package/translations/ka.json +65 -0
  644. package/translations/km.json +65 -0
  645. package/translations/ku.json +65 -0
  646. package/translations/ky.json +65 -0
  647. package/translations/lg.json +65 -0
  648. package/translations/ne.json +65 -0
  649. package/translations/pl.json +65 -0
  650. package/translations/pt.json +65 -0
  651. package/translations/pt_BR.json +65 -0
  652. package/translations/qu.json +65 -0
  653. package/translations/ro_RO.json +65 -0
  654. package/translations/ru_RU.json +65 -0
  655. package/translations/si.json +65 -0
  656. package/translations/sq.json +65 -0
  657. package/translations/sw.json +65 -0
  658. package/translations/sw_KE.json +65 -0
  659. package/translations/tr.json +65 -0
  660. package/translations/tr_TR.json +65 -0
  661. package/translations/uk.json +65 -0
  662. package/translations/uz.json +65 -0
  663. package/translations/uz@Latn.json +65 -0
  664. package/translations/uz_UZ.json +65 -0
  665. package/translations/vi.json +65 -0
  666. package/translations/zh.json +65 -0
  667. package/translations/zh_CN.json +65 -0
  668. package/translations/zh_TW.json +65 -0
  669. package/tsconfig.json +24 -0
  670. package/vitest.config.mts +42 -0
package/dist/128.js ADDED
@@ -0,0 +1,338 @@
1
+ "use strict";(globalThis.webpackChunk_openmrs_esm_report_builder=globalThis.webpackChunk_openmrs_esm_report_builder||[]).push([["128"],{8159(e,t,r){r.d(t,{Kk:()=>d,Km:()=>o,X0:()=>s,fz:()=>m,lp:()=>c,stateToSavePayload:()=>u,yn:()=>p,zK:()=>i});var a=r(3155),n=r(6149);let l=["TABLE","DATA_TABLE","ERROR_LOG","LOG","TIME_SERIES"];function i(e){let t=[];return e.name&&""!==e.name.trim()||t.push("Name is required"),e.code&&""!==e.code.trim()?/^[a-z0-9-]+$/.test(e.code)||t.push("Code must contain only lowercase letters, numbers, and hyphens"):t.push("Code is required"),(e.refreshInterval<5||e.refreshInterval>3600)&&t.push("Refresh interval must be between 5 and 3600 seconds"),(e.timeout<1||e.timeout>300)&&t.push("Timeout must be between 1 and 300 seconds"),{valid:0===t.length,errors:t}}function o(e,t,r=!1){let a=[];return e.url&&""!==e.url.trim()?e.url.startsWith("/")||a.push("URL must be a relative path starting with /"):a.push("API URL is required"),t?t.success||a.push("Endpoint test failed: "+(t.error||"Unknown error")):r||a.push("Endpoint must be tested before proceeding"),{valid:0===a.length,errors:a}}function s(e){let t=[];return e||t.push("Please select a component type"),{valid:0===t.length,errors:t}}function d(e,t,r,a){let i=[];if(!e||0===e.length)return i.push("At least one field must be configured"),{valid:!1,errors:i};for(let r of("STATUS_CARD"===t&&(e.some(e=>e.primary)||i.push("Status Card requires a primary field"),e.some(e=>"STATUS"===e.type)||i.push("Status Card requires at least one STATUS field")),"PROGRESS"===t&&(e.some(e=>"PERCENTAGE"===e.type)||i.push("Progress component requires a PERCENTAGE field")),e))r.path&&""!==r.path.trim()||i.push(`Field "${r.label}" is missing a path`);let o=[];if(null!=r){let i=l.includes(t);for(let t of e)t.path&&""!==t.path.trim()&&((0,n.G2)(t.path,r,a,i)||o.push(`Field "${t.label}" path "${t.path}" doesn't match the tested response`+(i?" — use a row-relative path like $.fieldName":"")))}return{valid:0===i.length,errors:i,warnings:o.length>0?o:void 0}}function c(e){let t=[];try{let r=m(e);r.schemaVersion&&2===r.schemaVersion||t.push("Invalid schema version"),r.component||t.push("Component type is missing"),r.fields&&0!==r.fields.length||t.push("No fields configured")}catch(e){t.push("Failed to generate configuration: "+(e instanceof Error?e.message:"Unknown error"))}return{valid:0===t.length,errors:t}}function m(e){let t={schemaVersion:2,component:e.componentType||"SUMMARY_CARD",data:{rootPath:"$"},fields:e.fields.map(e=>({key:e.key,label:e.label,path:e.path,type:e.type,primary:e.primary,description:e.description,defaultValue:e.defaultValue,statusMap:e.statusMappings?.reduce((e,t)=>(e[t.rawValue]={label:t.label,tone:t.tone},e),{}),format:e.format,hidden:e.hidden,order:e.order}))};return e.layout?t.layout={...e.layout,section:e.layout.section}:t.layout=(0,a.kK)(e.componentType||"SUMMARY_CARD"),e.emptyState?t.emptyState=e.emptyState:t.emptyState=(0,a.Qc)(e.componentType||"SUMMARY_CARD"),t.presentation={...t.presentation,title:t.presentation?.title||e.general.name||void 0,description:t.presentation?.description||e.general.description||void 0,density:e.density||"compact"},e.componentConfig&&(t.componentConfig={},e.componentConfig.statusFieldKey&&(t.componentConfig.statusFieldKey=e.componentConfig.statusFieldKey),e.componentConfig.icon&&(t.componentConfig.icon=e.componentConfig.icon),void 0!==e.componentConfig.progressMin&&(t.componentConfig.progressMin=e.componentConfig.progressMin),void 0!==e.componentConfig.progressMax&&(t.componentConfig.progressMax=e.componentConfig.progressMax),void 0!==e.componentConfig.labelsAbove&&(t.componentConfig.labelsAbove=e.componentConfig.labelsAbove),void 0!==e.componentConfig.selectable&&(t.componentConfig.selectable=e.componentConfig.selectable),void 0!==e.componentConfig.maxRows&&(t.componentConfig.maxRows=e.componentConfig.maxRows),e.componentConfig.groups&&(t.componentConfig.groups=e.componentConfig.groups)),e.detectedSchema?.arrayPath&&(t.data.arrayPath=e.detectedSchema.arrayPath),t}function u(e){let t=m(e);return{name:e.general.name.trim(),code:e.general.code.trim()||void 0,description:e.general.description.trim()||void 0,monitorType:e.componentType,category:e.general.category.trim()||void 0,refreshInterval:e.general.refreshInterval,timeout:e.general.timeout,active:e.general.active,configJson:JSON.stringify({apiEndpoint:{url:e.endpoint.url,method:e.endpoint.method,auth:{type:e.endpoint.auth.type,useSession:e.endpoint.auth.useSession,username:e.endpoint.auth.username,password:e.endpoint.auth.password,headerName:e.endpoint.auth.headerName,apiKey:e.endpoint.auth.apiKey,token:e.endpoint.auth.token}}}),displayConfigJson:JSON.stringify(t)}}function p(e){let t=[];return t.push(...i(e.general).errors),t.push(...o(e.endpoint,e.testResult,"edit"===e.mode).errors),t.push(...s(e.componentType).errors),t.push(...d(e.fields,e.componentType).errors),t}},6434(e,t,r){r.d(t,{MonitorRenderer:()=>I});var a=r(4587),n=r.n(a),l=r(3270),i=r(5576),o=r(9249);let s={"monitor-status-card":"-esm-report-builder__monitor-renderers__monitor-status-card___53ZgD","monitor-summary-card":"-esm-report-builder__monitor-renderers__monitor-summary-card___bYr-T","monitor-progress":"-esm-report-builder__monitor-renderers__monitor-progress___ojKib","monitor-table":"-esm-report-builder__monitor-renderers__monitor-table___uVBoJ","monitor-metrics-grid":"-esm-report-builder__monitor-renderers__monitor-metrics-grid___ixITI","monitor-error-log":"-esm-report-builder__monitor-renderers__monitor-error-log___Hi5A2","monitor-details":"-esm-report-builder__monitor-renderers__monitor-details___+T7FM","monitor-status-card__header":"-esm-report-builder__monitor-renderers__monitor-status-card__header___MOp22","monitor-summary-card__header":"-esm-report-builder__monitor-renderers__monitor-summary-card__header___7XHBW","monitor-progress__header":"-esm-report-builder__monitor-renderers__monitor-progress__header___TvakY","monitor-table__header":"-esm-report-builder__monitor-renderers__monitor-table__header___qrnoy","monitor-metrics-grid__header":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__header___NWyjG","monitor-error-log__header":"-esm-report-builder__monitor-renderers__monitor-error-log__header___Xcrqx","monitor-details__header":"-esm-report-builder__monitor-renderers__monitor-details__header___x77eQ","monitor-status-card__title":"-esm-report-builder__monitor-renderers__monitor-status-card__title___tIMTA","monitor-summary-card__title":"-esm-report-builder__monitor-renderers__monitor-summary-card__title___SCQaa","monitor-progress__title":"-esm-report-builder__monitor-renderers__monitor-progress__title___RJpJi","monitor-table__title":"-esm-report-builder__monitor-renderers__monitor-table__title___reI88","monitor-metrics-grid__title":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__title___baUv3","monitor-error-log__title":"-esm-report-builder__monitor-renderers__monitor-error-log__title___vLloc","monitor-details__title":"-esm-report-builder__monitor-renderers__monitor-details__title___sDrpT","monitor-status-card__subtitle":"-esm-report-builder__monitor-renderers__monitor-status-card__subtitle___DWp5P","monitor-status-card__body":"-esm-report-builder__monitor-renderers__monitor-status-card__body___GjQgq","monitor-summary-card__body":"-esm-report-builder__monitor-renderers__monitor-summary-card__body___TQK1e","monitor-progress__body":"-esm-report-builder__monitor-renderers__monitor-progress__body___RbfN5","monitor-table__body":"-esm-report-builder__monitor-renderers__monitor-table__body___G-kPJ","monitor-metrics-grid__body":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__body___VCTsK","monitor-error-log__body":"-esm-report-builder__monitor-renderers__monitor-error-log__body___6Q0jW","monitor-details__body":"-esm-report-builder__monitor-renderers__monitor-details__body___bzGMB","monitor-status":"-esm-report-builder__monitor-renderers__monitor-status___R2IHW","monitor-status__indicator":"-esm-report-builder__monitor-renderers__monitor-status__indicator___M1vlf","monitor-status__dot":"-esm-report-builder__monitor-renderers__monitor-status__dot___G4fNJ","monitor-status__icon":"-esm-report-builder__monitor-renderers__monitor-status__icon___byuOm","monitor-status__content":"-esm-report-builder__monitor-renderers__monitor-status__content___Iod5T","monitor-status__label":"-esm-report-builder__monitor-renderers__monitor-status__label___2O9f2","monitor-status__description":"-esm-report-builder__monitor-renderers__monitor-status__description___SV-3T","monitor-status--success":"-esm-report-builder__monitor-renderers__monitor-status--success___g-g5a","monitor-status--critical":"-esm-report-builder__monitor-renderers__monitor-status--critical___F7yMK","monitor-status--warning":"-esm-report-builder__monitor-renderers__monitor-status--warning___eNvwA","monitor-status--info":"-esm-report-builder__monitor-renderers__monitor-status--info___Wg054","monitor-status--neutral":"-esm-report-builder__monitor-renderers__monitor-status--neutral___DF38z","monitor-status-card__fields":"-esm-report-builder__monitor-renderers__monitor-status-card__fields___iSCds","monitor-status-card__field":"-esm-report-builder__monitor-renderers__monitor-status-card__field___IyAp6","monitor-status-card__field-label":"-esm-report-builder__monitor-renderers__monitor-status-card__field-label___oA49U","monitor-status-card__field-value":"-esm-report-builder__monitor-renderers__monitor-status-card__field-value___gy1N3","monitor-status-card__timestamp":"-esm-report-builder__monitor-renderers__monitor-status-card__timestamp___F82l1","monitor-summary-card__metrics":"-esm-report-builder__monitor-renderers__monitor-summary-card__metrics___EoUz-","monitor-summary-card__metric":"-esm-report-builder__monitor-renderers__monitor-summary-card__metric___fNXNo","monitor-summary-card__metric-label":"-esm-report-builder__monitor-renderers__monitor-summary-card__metric-label___K9CaT","monitor-summary-card__metric-value":"-esm-report-builder__monitor-renderers__monitor-summary-card__metric-value___feOSl","monitor-progress__bar-container":"-esm-report-builder__monitor-renderers__monitor-progress__bar-container___83GH6","monitor-progress__bar":"-esm-report-builder__monitor-renderers__monitor-progress__bar___r0FNi","monitor-progress__info":"-esm-report-builder__monitor-renderers__monitor-progress__info___pIX5c","monitor-progress__percentage":"-esm-report-builder__monitor-renderers__monitor-progress__percentage___lDASu","monitor-progress__stage":"-esm-report-builder__monitor-renderers__monitor-progress__stage___Z7k-s","monitor-progress__idle":"-esm-report-builder__monitor-renderers__monitor-progress__idle___VFeyJ","monitor-progress__idle-text":"-esm-report-builder__monitor-renderers__monitor-progress__idle-text___CaF+R","monitor-progress__fields":"-esm-report-builder__monitor-renderers__monitor-progress__fields___vdqQa","monitor-progress__field":"-esm-report-builder__monitor-renderers__monitor-progress__field___VJPIc","monitor-progress__field-label":"-esm-report-builder__monitor-renderers__monitor-progress__field-label___CGY7g","monitor-progress__field-value":"-esm-report-builder__monitor-renderers__monitor-progress__field-value___yAXtg","monitor-table__empty":"-esm-report-builder__monitor-renderers__monitor-table__empty___ZZ62i","monitor-table__element":"-esm-report-builder__monitor-renderers__monitor-table__element___UI+IE","monitor-table__th--sorted":"-esm-report-builder__monitor-renderers__monitor-table__th--sorted___KDlF3","monitor-table__th-content":"-esm-report-builder__monitor-renderers__monitor-table__th-content___ApR-b","monitor-table__sort-icon":"-esm-report-builder__monitor-renderers__monitor-table__sort-icon___QfgMN","monitor-metrics-grid__items":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__items___4dh+y","monitor-metrics-grid__item":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__item___PzZAI","monitor-metrics-grid__item-label":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__item-label___6lRZq","monitor-metrics-grid__item-value":"-esm-report-builder__monitor-renderers__monitor-metrics-grid__item-value___xnlpI","monitor-error-log__count":"-esm-report-builder__monitor-renderers__monitor-error-log__count___+q3KJ","monitor-error-log__empty":"-esm-report-builder__monitor-renderers__monitor-error-log__empty___atadP","monitor-error-log__items":"-esm-report-builder__monitor-renderers__monitor-error-log__items___v+Rdo","monitor-error-log__item":"-esm-report-builder__monitor-renderers__monitor-error-log__item___Y3lkH","monitor-error-log__item-indicator":"-esm-report-builder__monitor-renderers__monitor-error-log__item-indicator___rWMbY","monitor-error-log__item--critical":"-esm-report-builder__monitor-renderers__monitor-error-log__item--critical___KauTB","monitor-error-log__item--warning":"-esm-report-builder__monitor-renderers__monitor-error-log__item--warning___VRV7K","monitor-error-log__item--info":"-esm-report-builder__monitor-renderers__monitor-error-log__item--info___fXGXR","monitor-error-log__item--neutral":"-esm-report-builder__monitor-renderers__monitor-error-log__item--neutral___PyH9F","monitor-error-log__item-content":"-esm-report-builder__monitor-renderers__monitor-error-log__item-content___Gju1C","monitor-error-log__item-field":"-esm-report-builder__monitor-renderers__monitor-error-log__item-field___v58uY","monitor-error-log__item-field-label":"-esm-report-builder__monitor-renderers__monitor-error-log__item-field-label___mLp+c","monitor-error-log__item-field-value":"-esm-report-builder__monitor-renderers__monitor-error-log__item-field-value___20O6O","monitor-details__group":"-esm-report-builder__monitor-renderers__monitor-details__group___uamQH","monitor-details__group-title":"-esm-report-builder__monitor-renderers__monitor-details__group-title___qqEmA","monitor-details__items":"-esm-report-builder__monitor-renderers__monitor-details__items___xcRHN","monitor-details__item":"-esm-report-builder__monitor-renderers__monitor-details__item___5Jmo5","monitor-details__item-label":"-esm-report-builder__monitor-renderers__monitor-details__item-label___e4lbH","monitor-details__item-value":"-esm-report-builder__monitor-renderers__monitor-details__item-value___YMqEn","monitor-empty-state":"-esm-report-builder__monitor-renderers__monitor-empty-state___VffXz","monitor-loading-state":"-esm-report-builder__monitor-renderers__monitor-loading-state___-hfT6","monitor-error-state":"-esm-report-builder__monitor-renderers__monitor-error-state___ng3ms","monitor-empty-state__icon":"-esm-report-builder__monitor-renderers__monitor-empty-state__icon___z6Bbi","monitor-error-state__icon":"-esm-report-builder__monitor-renderers__monitor-error-state__icon___d9CkF","monitor-empty-state__title":"-esm-report-builder__monitor-renderers__monitor-empty-state__title___FV3qO","monitor-error-state__title":"-esm-report-builder__monitor-renderers__monitor-error-state__title___5C4uJ","monitor-empty-state__description":"-esm-report-builder__monitor-renderers__monitor-empty-state__description___cCfhh","monitor-error-state__description":"-esm-report-builder__monitor-renderers__monitor-error-state__description___fjWAs","monitor-loading-state__text":"-esm-report-builder__monitor-renderers__monitor-loading-state__text___63Cvg","monitor-loading-state__spinner":"-esm-report-builder__monitor-renderers__monitor-loading-state__spinner___o0u93",spin:"-esm-report-builder__monitor-renderers__spin___6V+Kf","monitor-fallback":"-esm-report-builder__monitor-renderers__monitor-fallback___N+WVD","monitor-fallback__header":"-esm-report-builder__monitor-renderers__monitor-fallback__header___60h+Q","monitor-fallback__content":"-esm-report-builder__monitor-renderers__monitor-fallback__content___BKRtZ","monitor-fallback__note":"-esm-report-builder__monitor-renderers__monitor-fallback__note___ST95l","monitor-fallback__data":"-esm-report-builder__monitor-renderers__monitor-fallback__data___xNiCH","monitor-preview-wrapper":"-esm-report-builder__monitor-renderers__monitor-preview-wrapper___7AVP6","status-card-premium":"-esm-report-builder__monitor-renderers__status-card-premium___+ptx1","status-card-premium--success":"-esm-report-builder__monitor-renderers__status-card-premium--success___BvfgP","status-card-premium--critical":"-esm-report-builder__monitor-renderers__status-card-premium--critical___uEnLK","status-card-premium--warning":"-esm-report-builder__monitor-renderers__status-card-premium--warning___nYQj0","status-card-premium--info":"-esm-report-builder__monitor-renderers__status-card-premium--info___XfCK9","status-card-premium--neutral":"-esm-report-builder__monitor-renderers__status-card-premium--neutral___qGUtm","status-card-premium__header":"-esm-report-builder__monitor-renderers__status-card-premium__header___qYNYk","status-card-premium__icon-tile":"-esm-report-builder__monitor-renderers__status-card-premium__icon-tile___0vJ4u","status-card-premium__title":"-esm-report-builder__monitor-renderers__status-card-premium__title___hh4ls","status-card-premium__body":"-esm-report-builder__monitor-renderers__status-card-premium__body___+z+m0","status-card-premium__status-row":"-esm-report-builder__monitor-renderers__status-card-premium__status-row___kv1Rq","status-card-premium__status-value":"-esm-report-builder__monitor-renderers__status-card-premium__status-value___3N3NC","status-card-premium__dot":"-esm-report-builder__monitor-renderers__status-card-premium__dot___n0Kb6","status-card-premium__description":"-esm-report-builder__monitor-renderers__status-card-premium__description___B1i4M","status-card-premium__footer":"-esm-report-builder__monitor-renderers__status-card-premium__footer___M4oPf","status-card-premium__meta":"-esm-report-builder__monitor-renderers__status-card-premium__meta___8pUhF","status-card-premium__meta-label":"-esm-report-builder__monitor-renderers__status-card-premium__meta-label___R8ByV","status-card-premium__meta-value":"-esm-report-builder__monitor-renderers__status-card-premium__meta-value___15CB2","monitor-empty-state__icon--success":"-esm-report-builder__monitor-renderers__monitor-empty-state__icon--success___5KcuA","monitor-empty-state__icon--critical":"-esm-report-builder__monitor-renderers__monitor-empty-state__icon--critical___OSlbC","monitor-empty-state__icon--warning":"-esm-report-builder__monitor-renderers__monitor-empty-state__icon--warning___1xwS-","monitor-empty-state__icon--info":"-esm-report-builder__monitor-renderers__monitor-empty-state__icon--info___ENXZ2","metrics-grid-renderer__head":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__head___ijGOW","metrics-grid-renderer__head-icon":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__head-icon___ngXof","metrics-grid-renderer__head-text":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__head-text___b7d8q","metrics-grid-renderer__head-title":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__head-title___MBb55","metrics-grid-renderer__head-sub":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__head-sub___bKUtC","metrics-grid-renderer__grid":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__grid___DHca-","metrics-grid-renderer__grid--hero":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__grid--hero___CFIpK","metrics-grid-renderer__tile":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__tile___X8ljG","metrics-grid-renderer__tile-icon":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__tile-icon___473n7","metrics-grid-renderer__tile-body":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__tile-body___ApVH-","metrics-grid-renderer__tile-label":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__tile-label___Osxif","metrics-grid-renderer__tile-value":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__tile-value___Zcbri","metrics-grid-renderer__tile-sub":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__tile-sub___--zbj","metrics-grid-renderer__footer":"-esm-report-builder__monitor-renderers__metrics-grid-renderer__footer___ONGp2","table-renderer__progress":"-esm-report-builder__monitor-renderers__table-renderer__progress___+nuJF","table-renderer__progress-label":"-esm-report-builder__monitor-renderers__table-renderer__progress-label___xpDxM","table-renderer__progress-track":"-esm-report-builder__monitor-renderers__table-renderer__progress-track___hQLHC","table-renderer__progress-fill":"-esm-report-builder__monitor-renderers__table-renderer__progress-fill___Ld3cq","table-renderer__footer":"-esm-report-builder__monitor-renderers__table-renderer__footer___cIaIO","table-renderer__footer-count":"-esm-report-builder__monitor-renderers__table-renderer__footer-count___tLj0p","table-renderer__footer-link":"-esm-report-builder__monitor-renderers__table-renderer__footer-link___T94G1","details-renderer__timestamp":"-esm-report-builder__monitor-renderers__details-renderer__timestamp___9TuXm","details-renderer__timestamp-sub":"-esm-report-builder__monitor-renderers__details-renderer__timestamp-sub___J+v0-","cds--tag":"-esm-report-builder__monitor-renderers__cds--tag___KV49d","log-renderer__title":"-esm-report-builder__monitor-renderers__log-renderer__title___XuaX8","log-renderer__empty":"-esm-report-builder__monitor-renderers__log-renderer__empty___QMzSW","log-renderer__timeline":"-esm-report-builder__monitor-renderers__log-renderer__timeline___nXwUr","log-renderer__entry":"-esm-report-builder__monitor-renderers__log-renderer__entry___8q9DO","log-renderer__time":"-esm-report-builder__monitor-renderers__log-renderer__time___1hgMZ","log-renderer__message":"-esm-report-builder__monitor-renderers__log-renderer__message___goTWm","status-card-premium__pill":"-esm-report-builder__monitor-renderers__status-card-premium__pill___PJaRc","time-series-renderer":"-esm-report-builder__monitor-renderers__time-series-renderer___1mNjT","time-series-renderer__head":"-esm-report-builder__monitor-renderers__time-series-renderer__head___w-ZlI","time-series-renderer__icon":"-esm-report-builder__monitor-renderers__time-series-renderer__icon___SYplh","time-series-renderer__head-text":"-esm-report-builder__monitor-renderers__time-series-renderer__head-text___FlaUH","time-series-renderer__label":"-esm-report-builder__monitor-renderers__time-series-renderer__label___NYBSD","time-series-renderer__value":"-esm-report-builder__monitor-renderers__time-series-renderer__value___AkDwZ","time-series-renderer__head-delta":"-esm-report-builder__monitor-renderers__time-series-renderer__head-delta___CN98m","time-series-renderer__delta":"-esm-report-builder__monitor-renderers__time-series-renderer__delta___-wpZ3","time-series-renderer__delta--up":"-esm-report-builder__monitor-renderers__time-series-renderer__delta--up___HdvZS","time-series-renderer__delta--down":"-esm-report-builder__monitor-renderers__time-series-renderer__delta--down___5xRFY","time-series-renderer__delta-note":"-esm-report-builder__monitor-renderers__time-series-renderer__delta-note___y720Z","time-series-renderer__empty":"-esm-report-builder__monitor-renderers__time-series-renderer__empty___4tsWC","time-series-renderer__chart":"-esm-report-builder__monitor-renderers__time-series-renderer__chart___7CzDl","time-series-renderer__grid":"-esm-report-builder__monitor-renderers__time-series-renderer__grid___xMtm4","time-series-renderer__tick":"-esm-report-builder__monitor-renderers__time-series-renderer__tick___-wlje","time-series-renderer__crosshair":"-esm-report-builder__monitor-renderers__time-series-renderer__crosshair___v2OW6","time-series-renderer__line":"-esm-report-builder__monitor-renderers__time-series-renderer__line___VsT-C","time-series-renderer__area":"-esm-report-builder__monitor-renderers__time-series-renderer__area___2vVNP","time-series-renderer__dot":"-esm-report-builder__monitor-renderers__time-series-renderer__dot___Ro0nu","time-series-renderer__tooltip":"-esm-report-builder__monitor-renderers__time-series-renderer__tooltip___KrQID","time-series-renderer__tooltip-value":"-esm-report-builder__monitor-renderers__time-series-renderer__tooltip-value___HoQXF","time-series-renderer__tooltip-time":"-esm-report-builder__monitor-renderers__time-series-renderer__tooltip-time___d8YtO"};var d=r(4676);function c(e){if(!e)return"neutral";let t=String(e).toUpperCase();return"UP"===t||"ACTIVE"===t||"SUCCESS"===t||"OK"===t||"HEALTHY"===t?"success":"DOWN"===t||"ERROR"===t||"FAILED"===t||"CRITICAL"===t||"UNHEALTHY"===t?"critical":"WARNING"===t||"DEGRADED"===t?"warning":"INFO"===t||"PENDING"===t?"info":"neutral"}function m(e,t){if(null==e)return"-";if("STATUS"===t.type&&t.statusMap&&null!=e){let r=String(e),a=t.statusMap[r]||t.statusMap[r.toLowerCase()];return a?.label||e}return"TIMESTAMP"===t.type&&e?(0,d.fw)(e,{pastOnly:!0}):"boolean"===t.type?e?"Yes":"No":e}var u=r(8574),p=r(9610),_=r(6149);let g=function({config:e,fields:t,arrayData:r}){let a=r||[],l=(t||[]).filter(e=>!e.hidden),i=e.componentConfig?.maxRows||50,o=a.slice(0,i);return n().createElement("div",{className:s["table-renderer"]},n().createElement("div",{className:s["table-renderer__header"]},e.presentation?.title&&n().createElement("h4",{className:s["table-renderer__title"]},e.presentation.title)),0===o.length?n().createElement("div",{className:s["table-renderer__empty"]},"No data to display"):n().createElement("div",{className:s["table-renderer__table-wrapper"]},n().createElement(u.XIK,{size:"sm"},n().createElement(u.ndF,null,n().createElement(u.Hjg,null,l.map(e=>n().createElement(u.A0N,{key:e.key},e.label)))),n().createElement(u.BFY,null,o.map((t,r)=>n().createElement(u.Hjg,{key:t._id||r},l.map(r=>{let a,l=void 0===(a=(0,_.Qj)(t,r,e.data?.arrayPath))?"-":a;return n().createElement(u.nA6,{key:r.key},((e,t)=>{if(null==e)return"-";if("STATUS"===t.type){let r=t.statusMap?.[String(e)];if(r){let t={success:"green",critical:"red",warning:"purple",info:"blue",neutral:"gray"}[r.tone]||"gray";return n().createElement(u.vwO,{type:t},r.label||e)}let a=String(e).toLowerCase();return a.includes("up")||a.includes("success")||a.includes("ok")?n().createElement(u.vwO,{type:"green"},e):a.includes("down")||a.includes("error")||a.includes("fail")?n().createElement(u.vwO,{type:"red"},e):n().createElement(u.vwO,{type:"gray"},e)}if("PERCENTAGE"===t.type){let r="number"==typeof e?Math.max(0,Math.min(100,e)):parseFloat(String(e).replace("%",""))||0;return n().createElement("span",{className:s["table-renderer__progress"]},n().createElement("span",{className:s["table-renderer__progress-label"]},(0,_.nM)(e,t)),n().createElement("span",{className:s["table-renderer__progress-track"]},n().createElement("span",{className:s["table-renderer__progress-fill"],style:{width:`${r}%`}})))}return(0,_.nM)(e,t)})(l,r))})))))),a.length>i&&n().createElement("div",{className:s["table-renderer__footer"]},n().createElement("span",{className:s["table-renderer__footer-count"]},"Showing ",i," of ",a.length," rows"),e.componentConfig?.viewAllUrl&&n().createElement("a",{href:e.componentConfig.viewAllUrl,className:s["table-renderer__footer-link"]},e.componentConfig.viewAllLabel||"View all"," ",n().createElement(p.Qp,{size:12}))))};var E=r(771),f=r(3335);let b={document:E.yo,timer:i.M4,trend:f.BS,clock:i.gX,grid:o.xA,chart:f._C,badge:p.Ex,calendar:f.Vv};function y(e){return e?b[e]:void 0}let h="#8a3ffc";function v(e,t){let r=new Date(e);return isNaN(r.getTime())?String(e):"DATE"===t?r.toLocaleDateString():r.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit"})}let S={STATUS_CARD:function({config:e,fields:t,rawData:r,data:a}){let d=r||a,u=t||(d?function(e,t){if(!e||"object"!=typeof e)return[];let r=[];if(t.fields&&Array.isArray(t.fields))for(let a of t.fields){let t=function(e,t){if(!e||!t)return;let r=t;r.startsWith("$.")&&(r=r.slice(2));let a=r.split("."),n=e;for(let e of a)if(!n||"object"!=typeof n||!(e in n))return;else n=n[e];return n}(e,a.key),n="neutral";if("STATUS"===a.type&&a.statusMap&&null!=t){let e=String(t),r=a.statusMap[e]||a.statusMap[e.toLowerCase()];n=r?.tone||c(t)}r.push({key:a.key,label:a.label||a.key,value:t,formattedValue:m(t,a),type:a.type||"string",primary:a.primary||!1,hidden:a.hidden||!1,statusTone:n,statusMap:a.statusMap})}else Object.keys(e).forEach((t,a)=>{let n=e[t];r.push({key:t,label:t,value:n,formattedValue:m(n,{type:typeof n}),type:typeof n,primary:0===a,hidden:!1,statusTone:c(n)})});return r}(d,e):[])||[],p=u.find(e=>e.primary),_=u.find(e=>"STATUS"===e.type)||p,g=_?.formattedValue,E=_?.statusTone||c(g),f=e.presentation?.title||"Status Monitor",b=e.presentation?.description,y=u.filter(e=>!e.hidden&&e.key!==_?.key).slice(0,3);return n().createElement("div",{className:[s["status-card-premium"],s[`status-card-premium--${E}`]].join(" ")},n().createElement("div",{className:s["status-card-premium__header"]},n().createElement("span",{className:s["status-card-premium__icon-tile"]},n().createElement(l.Zn,{size:22})),n().createElement("h3",{className:s["status-card-premium__title"]},f),_&&n().createElement("span",{className:[s["status-card-premium__pill"],s[`status-card-premium__pill--${E}`]].join(" ")},g||"Unknown")),n().createElement("div",{className:s["status-card-premium__body"]},n().createElement("div",{className:s["status-card-premium__status-row"]},n().createElement("span",{className:s["status-card-premium__status-value"]},g||"Unknown"),n().createElement("span",{className:s["status-card-premium__dot"]})),b&&n().createElement("p",{className:s["status-card-premium__description"]},b)),y.length>0&&n().createElement("div",{className:s["status-card-premium__footer"]},y.map(e=>n().createElement("div",{key:e.key,className:s["status-card-premium__meta"]},n().createElement("span",{className:s["status-card-premium__meta-label"]},"TIMESTAMP"===e.type?n().createElement(i.gX,{size:12}):n().createElement(o.xA,{size:12}),e.label),n().createElement("span",{className:s["status-card-premium__meta-value"]},e.formattedValue??"—")))))},SUMMARY_CARD:function({config:e,fields:t,data:r}){let a=(t||(r?function(e,t){if(!e||"object"!=typeof e)return[];let r=[];if(t.fields&&Array.isArray(t.fields))for(let a of t.fields){let t=function(e,t){if(!e||!t)return;let r=t.split("."),a=e;for(let e of r)if(!a||"object"!=typeof a||!(e in a))return;else a=a[e];return a}(e,a.key);r.push({key:a.key,label:a.label||a.key,value:t,formattedValue:function(e,t){if(null==e)return"-";if("date"===t.type&&e)try{return new Date(e).toLocaleDateString()}catch{return e}return"boolean"===t.type?e?"Yes":"No":e}(t,a),type:a.type||"string",primary:a.primary||!1,hidden:a.hidden||!1,order:a.order,statusTone:"STATUS"===a.type&&null!=t?function(e,t){let r=String(e),a=t.statusMap?.[r]??t.statusMap?.[r.toLowerCase()];return a?.tone}(t,a):void 0})}else Object.keys(e).forEach((t,a)=>{let n=e[t];r.push({key:t,label:t,value:n,formattedValue:n,type:typeof n,primary:0===a,hidden:!1,order:a})});return r}(r,e):[])).filter(e=>!e.hidden);return n().createElement("div",{className:s["monitor-summary-card"]},n().createElement("div",{className:s["monitor-summary-card__header"]},e.presentation?.title&&n().createElement("h4",{className:s["monitor-summary-card__title"]},e.presentation.title)),n().createElement("div",{className:s["monitor-summary-card__body"]},n().createElement("div",{className:s["monitor-summary-card__metrics"]},a.map(e=>n().createElement("div",{key:e.key,className:s["monitor-summary-card__metric"]},n().createElement("div",{className:s["monitor-summary-card__metric-label"]},e.label),n().createElement("div",{className:s["monitor-summary-card__metric-value"]},e.formattedValue))))))},PROGRESS:function({config:e,fields:t,data:r}){let a=t||(r?function(e,t){if(!e||"object"!=typeof e)return[];let r=[];if(t.fields&&Array.isArray(t.fields))for(let a of t.fields){let t=function(e,t){if(!e||!t)return;let r=t.split("."),a=e;for(let e of r)if(!a||"object"!=typeof a||!(e in a))return;else a=a[e];return a}(e,a.key);r.push({key:a.key,label:a.label||a.key,value:t,formattedValue:function(e,t){if(null==e)return"-";if("percentage"===t.type&&"number"==typeof e)return`${Math.round(e)}%`;if("date"===t.type&&e)try{return new Date(e).toLocaleDateString()}catch{return e}return"boolean"===t.type?e?"Yes":"No":e}(t,a),type:a.type||"string",primary:a.primary||!1,hidden:a.hidden||!1,order:a.order})}else Object.keys(e).forEach((t,a)=>{let n=e[t];r.push({key:t,label:t,value:n,formattedValue:n,type:typeof n,primary:0===a,hidden:!1,order:a})});return r}(r,e):[])||[],l=a.find(e=>"PERCENTAGE"===e.type)||a.find(e=>e.primary)||a[0],i=a.find(t=>t.key===e.componentConfig?.stageFieldKey)||a.find(e=>"TEXT"===e.type),o=0,d=l?.value;if("number"==typeof d)o=Math.min(100,Math.max(0,d));else if(l?.formattedValue!=null){let e=parseFloat(String(l.formattedValue).replace("%",""));isNaN(e)||(o=Math.min(100,Math.max(0,e)))}let c=i?.formattedValue;return n().createElement("div",{className:s["monitor-progress"]},n().createElement("div",{className:s["monitor-progress__header"]},e.presentation?.title&&n().createElement("h4",{className:s["monitor-progress__title"]},e.presentation.title)),n().createElement("div",{className:s["monitor-progress__body"]},n().createElement("div",{className:s["monitor-progress__info"]},n().createElement("div",{className:s["monitor-progress__percentage"]},o,"%"),n().createElement("div",{className:s["monitor-progress__stage"]},c||"In Progress")),n().createElement("div",{className:s["monitor-progress__bar-container"]},n().createElement("div",{className:s["monitor-progress__bar"],style:{width:`${o}%`}})),a.length>2&&n().createElement("div",{className:s["monitor-progress__fields"]},a.filter(e=>e.key!==l?.key&&e.key!==i?.key&&!e.hidden).slice(0,3).map(e=>n().createElement("div",{key:e.key,className:s["monitor-progress__field"]},n().createElement("span",{className:s["monitor-progress__field-label"]},e.label,":"),n().createElement("span",{className:s["monitor-progress__field-value"]},e.formattedValue))))))},DATA_TABLE:g,TABLE:g,METRICS_GRID:function({config:e,fields:t}){let r=(t||[]).filter(e=>!e.hidden),a=e.componentConfig||{},l=a.icons||{},o=a.iconColors||{},d=a.valueColors||{},c=r.find(e=>"TIMESTAMP"===e.type),m=r.filter(e=>e!==c),u=1===m.length,p=y(a.icon||"chart");return n().createElement("div",{className:s["metrics-grid-renderer"]},!u&&n().createElement("div",{className:s["metrics-grid-renderer__head"]},p&&n().createElement("span",{className:s["metrics-grid-renderer__head-icon"],style:{backgroundColor:`${h}1A`,color:h}},n().createElement(p,{size:24})),n().createElement("div",{className:s["metrics-grid-renderer__head-text"]},e.presentation?.title&&n().createElement("h4",{className:s["metrics-grid-renderer__head-title"]},e.presentation.title),e.presentation?.description&&n().createElement("p",{className:s["metrics-grid-renderer__head-sub"]},e.presentation.description))),n().createElement("div",{className:[s["metrics-grid-renderer__grid"],u&&s["metrics-grid-renderer__grid--hero"]].filter(Boolean).join(" ")},m.map(e=>{let t=y(l[e.key]),r=o[e.key],a=d[e.key],i=e.formattedValue??"—";return n().createElement("div",{key:e.key,className:s["metrics-grid-renderer__tile"]},t&&n().createElement("span",{className:s["metrics-grid-renderer__tile-icon"],style:r?{backgroundColor:`${r}1A`,color:r}:void 0},n().createElement(t,{size:24})),n().createElement("div",{className:s["metrics-grid-renderer__tile-body"]},n().createElement("span",{className:s["metrics-grid-renderer__tile-label"]},e.label),n().createElement("span",{className:s["metrics-grid-renderer__tile-value"],style:a?{color:a}:void 0},i),e.description&&n().createElement("span",{className:s["metrics-grid-renderer__tile-sub"]},e.description)))})),c?.formattedValue!=null&&n().createElement("div",{className:s["metrics-grid-renderer__footer"]},n().createElement(i.gX,{size:14}),n().createElement("span",null,"Updated ",c.formattedValue)))},ERROR_LOG:function({config:e,arrayData:t,rawData:r}){let a=(t&&t.length>0?t:Array.isArray(r)?r:r&&"object"==typeof r?[r]:[]).map((t,r)=>{let a={...t,id:String(t?.id??t?._id??r)};return e.fields?.forEach(e=>{e.type&&"TEXT"!==e.type&&null!=a[e.key]&&(a[e.key]=(0,_.nM)(a[e.key],e))}),a});if(!a||0===a.length)return n().createElement("div",{className:s["error-log-empty"]},n().createElement("p",null,"No error logs available"));let l=(e.fields?.length?e.fields.map(e=>({key:e.key,header:e.label||e.key})):[{key:"timestamp",header:"Timestamp"},{key:"level",header:"Level"},{key:"message",header:"Message"}]).map(e=>({key:e.key,header:e.header}));return n().createElement("div",{className:s["error-log-renderer"]},e.presentation?.title&&n().createElement("h4",{className:s["error-log-renderer__title"]},e.presentation.title),n().createElement(u.bQt,{rows:a,headers:l},({rows:e,headers:t,getHeaderProps:r,getTableProps:a})=>n().createElement(u.K3K,null,n().createElement(u.XIK,a(),n().createElement(u.ndF,null,n().createElement(u.Hjg,null,t.map(e=>n().createElement(u.A0N,{...r({header:e}),key:e.key},e.header||e.key)))),n().createElement(u.BFY,null,e.map(e=>n().createElement(u.Hjg,{key:e.id},e.cells.map(e=>n().createElement(u.nA6,{key:e.id},e.value)))))))))},DETAILS:function({config:e,fields:t,data:r}){let a=(t||(r?function(e,t){if(!e||"object"!=typeof e)return[];let r=[];if(t.fields&&Array.isArray(t.fields))for(let a of t.fields){let t=function(e,t){if(!e||!t)return;let r=t.split("."),a=e;for(let e of r)if(!a||"object"!=typeof a||!(e in a))return;else a=a[e];return a}(e,a.key),n="neutral";if("STATUS"===a.type&&a.statusMap&&null!=t){let e=String(t),r=a.statusMap[e];n=r?.tone||"neutral"}r.push({key:a.key,label:a.label||a.key,value:t,formattedValue:function(e,t){if(null==e)return"-";if("date"===t.type&&e)try{return new Date(e).toLocaleDateString()}catch{return e}return"boolean"===t.type?e?"Yes":"No":e}(t,a),type:a.type||"string",primary:a.primary||!1,hidden:a.hidden||!1,statusTone:n,statusMap:a.statusMap,order:a.order})}else Object.keys(e).forEach((t,a)=>{let n=e[t];r.push({key:t,label:t,value:n,formattedValue:n,type:typeof n,primary:0===a,hidden:!1,order:a})});return r}(r,e):[])||[]).filter(e=>!e.hidden),l="ERROR_LOG"===e.component;return n().createElement("div",{className:s["details-renderer"]},n().createElement("div",{className:s["details-renderer__header"]},e.presentation?.title&&n().createElement("h4",{className:s["details-renderer__title"]},e.presentation.title)),0===a.length?n().createElement("div",{className:s["details-renderer__empty"]},"No details to display"):n().createElement(u.r9c,null,n().createElement(u.GRJ,null,a.map(e=>n().createElement(u.Cvq,{key:e.key},n().createElement(u.Um2,{style:{width:"40%"}},n().createElement("strong",null,e.label)),n().createElement(u.Um2,null,l&&"STATUS"===e.type?n().createElement(u.vwO,{type:"ERROR"===e.value?"red":"gray"},e.formattedValue):"STATUS"===e.type&&e.statusTone?n().createElement(u.vwO,{type:"success"===e.statusTone?"green":"critical"===e.statusTone?"red":"warning"===e.statusTone?"purple":"gray"},e.formattedValue):"TIMESTAMP"===e.type&&e.format?.timestamp?.display?n().createElement("span",{className:s["details-renderer__timestamp"]},n().createElement("span",{className:s["details-renderer__value"]},e.formattedValue),n().createElement("span",{className:s["details-renderer__timestamp-sub"]},(0,d.fw)(e.value))):n().createElement("span",{className:s["details-renderer__value"]},e.formattedValue)))))))},LOG:function({config:e,fields:t,arrayData:r,rawData:a}){let l=r&&r.length>0?r:Array.isArray(a)?a:a&&"object"==typeof a?[a]:[],i=t||[],o=i.find(e=>"TIMESTAMP"===e.type),d=i.find(e=>"TIMESTAMP"!==e.type),c=e.componentConfig?.maxRows||10;return n().createElement("div",{className:s["log-renderer"]},e.presentation?.title&&n().createElement("h4",{className:s["log-renderer__title"]},e.presentation.title),0===l.length?n().createElement("div",{className:s["log-renderer__empty"]},"No events recorded"):n().createElement("ul",{className:s["log-renderer__timeline"]},l.slice(0,c).map((t,r)=>{var a,l;let i=o?(a=e.data?.arrayPath,(0,_.Qj)(t,o,a)):void 0,c=null!=i?String((0,_.nM)(i,o)):"—",m=d?(l=e.data?.arrayPath,(0,_.Qj)(t,d,l)):void 0,u=null!=m&&""!==m?String(m):"—";return n().createElement("li",{key:t?.id??r,className:s["log-renderer__entry"]},n().createElement("span",{className:s["log-renderer__marker"]}),n().createElement("span",{className:s["log-renderer__time"]},c),n().createElement("span",{className:s["log-renderer__message"]},u))})))},TIME_SERIES:function({config:e,fields:t,arrayData:r,rawData:l}){let i=(0,a.useRef)(null),o=(0,a.useRef)(null),[d,c]=(0,a.useState)(280),[m,u]=(0,a.useState)(null),p=t||[],g=p.find(e=>"TIMESTAMP"===e.type),E=p.find(e=>e.primary)||p.find(e=>["PERCENTAGE","NUMBER","INTEGER","DECIMAL","DURATION"].includes(e.type))||p.find(e=>"TIMESTAMP"!==e.type),f=y(Object.values(e.componentConfig?.icons||{})[0]),b=(0,a.useMemo)(()=>{let t=r&&r.length>0?r:Array.isArray(l)?l:[],a=(t,r)=>(0,_.Qj)(t,r,e.data?.arrayPath);return g&&E?t.map(e=>({x:a(e,g),y:a(e,E)})).filter(e=>null!=e.x&&null!=e.y&&"number"==typeof e.y).sort((e,t)=>e.x-t.x):[]},[r,l,g,E,e]);n().useEffect(()=>{let e=o.current;if(!e||"u"<typeof ResizeObserver)return;let t=new ResizeObserver(e=>{let t=e[0]?.contentRect?.width;t&&t>40&&c(Math.floor(t))});return t.observe(e),()=>t.disconnect()},[]);let h=Math.max(40,d-38-12),S=b.length?b[0].x:0,T=b.length?b[b.length-1].x:1,C=b.map(e=>e.y),w=Math.min(0,...C),N=b.length?Math.max(...C):1,I=e=>38+(e-S)/(T-S||1)*h,k=e=>8+(1-(e-w)/(N-w||1))*94,A=b.map((e,t)=>`${0===t?"M":"L"}${I(e.x).toFixed(1)},${k(e.y).toFixed(1)}`).join(" "),R=k(w),O=b.length?`${A} L${I(b[b.length-1].x).toFixed(1)},${R.toFixed(1)} L${I(b[0].x).toFixed(1)},${R.toFixed(1)} Z`:"",D=(0,a.useMemo)(()=>{if(b.length<2)return null;let e=b[0].y,t=b[b.length-1].y;if(!e)return null;let r=(t-e)/Math.abs(e)*100;return isFinite(r)?r:null},[b]),x=b.length?b[b.length-1].y:null,L=null!=x?(0,_.nM)(x,E||{}):"—",M=e.componentConfig?.deltaLabel||"vs previous period",$=[w,w+(N-w)/2,N],P=null!=m?b[m]:null;return n().createElement("div",{className:s["time-series-renderer"]},n().createElement("div",{className:s["time-series-renderer__head"]},f?n().createElement("span",{className:s["time-series-renderer__icon"]},n().createElement(f,{size:20})):null,n().createElement("div",{className:s["time-series-renderer__head-text"]},n().createElement("span",{className:s["time-series-renderer__label"]},E?.label||e.presentation?.title||"Trend"),n().createElement("span",{className:s["time-series-renderer__value"]},L)),null!=D&&n().createElement("span",{className:s["time-series-renderer__head-delta"]},n().createElement("span",{className:`${s["time-series-renderer__delta"]} ${D>=0?s["time-series-renderer__delta--up"]:s["time-series-renderer__delta--down"]}`},D>=0?"↑":"↓"," ",Math.abs(D).toFixed(1),"%"),n().createElement("span",{className:s["time-series-renderer__delta-note"]},M))),0===b.length?n().createElement("div",{className:s["time-series-renderer__empty"]},"No time series data"):n().createElement("div",{className:s["time-series-renderer__chart"],ref:o},n().createElement("svg",{ref:i,width:d,height:120,role:"img","aria-label":`${E?.label||"Trend"} over time`,tabIndex:0,onMouseMove:e=>{if(!b.length||!i.current)return;let t=i.current.getBoundingClientRect(),r=(e.clientX-t.left)/t.width*d,a=0,n=1/0;b.forEach((e,t)=>{let l=Math.abs(I(e.x)-r);l<n&&(n=l,a=t)}),u(a)},onMouseLeave:()=>u(null),onKeyDown:e=>{if(b.length)if("ArrowLeft"===e.key||"ArrowRight"===e.key){e.preventDefault();let t="ArrowLeft"===e.key?-1:1;u(e=>{let r=e??b.length-1;return Math.max(0,Math.min(b.length-1,r+t))})}else"Escape"===e.key&&u(null)},onBlur:()=>u(null)},$.map((e,t)=>n().createElement("g",{key:t},n().createElement("line",{x1:38,x2:d-12,y1:k(e),y2:k(e),className:s["time-series-renderer__grid"]}),n().createElement("text",{x:32,y:k(e),textAnchor:"end",dominantBaseline:"middle",className:s["time-series-renderer__tick"]},function(e,t){if("DURATION"===t){let t=Math.floor(e/1e3);if(t<60)return`${t}s`;let r=Math.floor(t/60);return r<60?`${r}m`:`${Math.floor(r/60)}h`}return Math.abs(e)>=1e3?new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e):String(Math.round(e))}(e,E?.type)))),P&&n().createElement("line",{x1:I(P.x),x2:I(P.x),y1:8,y2:102,className:s["time-series-renderer__crosshair"]}),n().createElement("path",{d:O,className:s["time-series-renderer__area"]}),n().createElement("path",{d:A,className:s["time-series-renderer__line"]}),P&&n().createElement("circle",{cx:I(P.x),cy:k(P.y),r:4.5,className:s["time-series-renderer__dot"]}),b.length>0&&n().createElement("circle",{cx:I(b[b.length-1].x),cy:k(b[b.length-1].y),r:4.5,className:s["time-series-renderer__dot"]}),[0,Math.floor((b.length-1)/2),b.length-1].map((e,t)=>e<0||!b[e]?null:n().createElement("text",{key:t,x:I(b[e].x),y:116,textAnchor:0===t?"start":2===t?"end":"middle",className:s["time-series-renderer__tick"]},v(b[e].x,g?.format?.timestamp?.display==="date"?"DATE":void 0)))),P&&n().createElement("div",{className:s["time-series-renderer__tooltip"],style:{left:`${I(P.x)/d*100}%`,top:0}},n().createElement("span",{className:s["time-series-renderer__tooltip-value"]},(0,_.nM)(P.y,E||{})),n().createElement("span",{className:s["time-series-renderer__tooltip-time"]},v(P.x)))))}};function T({config:e}){let t=e.emptyState,r=t?.tone||"neutral";return n().createElement("div",{className:s["monitor-empty-state"]},n().createElement("div",{className:[s["monitor-empty-state__icon"],s[`monitor-empty-state__icon--${r}`]].join(" ")},n().createElement("svg",{width:"48",height:"48",viewBox:"0 0 48 48",fill:"none"},n().createElement("circle",{cx:"24",cy:"24",r:"20",stroke:"currentColor",strokeWidth:"2.5",fill:"none"}),n().createElement("path",{d:"M16 24L22 30L32 18",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"}))),n().createElement("h4",{className:s["monitor-empty-state__title"]},t?.title||"No Data"),n().createElement("p",{className:s["monitor-empty-state__description"]},t?.description||"No data available at this time."))}function C(){return n().createElement("div",{className:s["monitor-loading-state"]},n().createElement("div",{className:s["monitor-loading-state__spinner"]}),n().createElement("p",{className:s["monitor-loading-state__text"]},"Loading monitor data..."))}function w({error:e}){return n().createElement("div",{className:s["monitor-error-state"]},n().createElement("div",{className:s["monitor-error-state__icon"]},n().createElement("svg",{width:"32",height:"32",viewBox:"0 0 32 32",fill:"none"},n().createElement("circle",{cx:"16",cy:"16",r:"14",stroke:"#da1e28",strokeWidth:"2",fill:"none"}),n().createElement("path",{d:"M16 10V16M16 20V22",stroke:"#da1e28",strokeWidth:"2",strokeLinecap:"round"}))),n().createElement("h4",{className:s["monitor-error-state__title"]},"Unable to Load Monitor"),n().createElement("p",{className:s["monitor-error-state__description"]},e))}function N({config:e,data:t}){return n().createElement("div",{className:s["monitor-fallback"]},n().createElement("div",{className:s["monitor-fallback__header"]},n().createElement("h5",null,e.presentation?.title||"Monitor")),n().createElement("div",{className:s["monitor-fallback__content"]},n().createElement("p",{className:s["monitor-fallback__note"]},"Component type ",n().createElement("code",null,e.component)," is not yet supported."),t&&n().createElement("pre",{className:s["monitor-fallback__data"]},JSON.stringify(t,null,2))))}function I({config:e,data:t,loading:r,error:a}){let l=S[e.component];if(r)return n().createElement(C,null);if(a)return n().createElement(w,{error:a});if((0,_.ez)(t,e))return n().createElement(T,{config:e});if(!l)return n().createElement(N,{config:e,data:t});let i=(0,_.Nx)(t,e);if(["STATUS_CARD","SUMMARY_CARD","PROGRESS"].includes(e.component))return n().createElement(l,{config:e,fields:i,data:t});let o=["TABLE","DATA_TABLE","ERROR_LOG","LOG","TIME_SERIES"].includes(e.component)?(0,_.Mj)(t,e):null;return n().createElement(l,{config:e,fields:i,arrayData:o,rawData:t})}},6149(e,t,r){r.d(t,{G2:()=>m,Mj:()=>o,Nx:()=>i,Qj:()=>c,ez:()=>n,nM:()=>p});var a=r(4676);function n(e,t){if(null==e||""===e)return!0;switch(t.component){case"TABLE":case"DATA_TABLE":case"ERROR_LOG":case"LOG":return 0===l(e,t).length;case"STATUS_CARD":case"SUMMARY_CARD":case"PROGRESS":return!1;default:if(Array.isArray(e))return 0===e.length;if("object"==typeof e)return 0===Object.keys(e).length;return!1}}function l(e,t){if(Array.isArray(e))return e;if(!e||"object"!=typeof e)return[];let r=t.data?.arrayPath;if(r&&"$"!==r){let t=r.replace(/^\$\.?/,"");if(t){let r=t.split(".").reduce((e,t)=>null==e?void 0:e[t],e);if(Array.isArray(r))return r}}return Array.isArray(e.data)?e.data:Array.isArray(e.items)?e.items:Array.isArray(e.results)?e.results:[e]}function i(e,t){if(!e||"object"!=typeof e)return[];let r=e,a=t.data?.rootPath;if(a&&"$"!==a){let t=d(e,a);null!=t&&"object"==typeof t&&(r=t)}return Array.isArray(t.fields)&&t.fields.length>0?t.fields.map(e=>{let t=d(r,e.path||e.key);return{key:e.key,label:e.label||e.key,value:t,formattedValue:u(t,e),type:e.type||"TEXT",primary:!!e.primary,hidden:!!e.hidden,order:e.order,path:e.path,description:e.description,statusMap:e.statusMap,statusTone:"STATUS"===e.type?function(e,t){let r;if(null==e||!t)return;let a=String(e),n=t[a]??t[a.toLowerCase()]??t[a.toUpperCase()];return n?.tone||(["UP","ACTIVE","SUCCESS","OK","HEALTHY","COMPLETED"].includes(r=String(e).toUpperCase())?"success":["DOWN","ERROR","FAILED","CRITICAL","UNHEALTHY"].includes(r)?"critical":["WARNING","DEGRADED","PENDING"].includes(r)?"warning":"neutral")}(t,e.statusMap):void 0}}):Object.keys(r).map((e,t)=>{var a;let n="boolean"==typeof(a=r[e])?"BOOLEAN":"number"==typeof a?"NUMBER":a instanceof Date?"TIMESTAMP":"TEXT",l={key:e,label:e,path:`$.${e}`,type:n};return{key:e,label:e,value:r[e],formattedValue:u(r[e],l),type:n,primary:0===t,hidden:!1,order:t,path:`$.${e}`}})}function o(e,t){return l(e,t).map((e,t)=>null!==e&&"object"==typeof e?{...e}:{value:e,_rowIndex:t})}function s(e){return e.split(".").flatMap(e=>{let t=e.match(/^(\w+)\[(\*|\d+)\]$/);if(t)return"*"===t[2]?[t[1],0]:[t[1],parseInt(t[2],10)];let r=e.match(/^\[(\*|\d+)\]$/);return r?"*"===r[1]?[0]:[parseInt(r[1],10)]:[e]})}function d(e,t){if(!e||!t)return;let r=t;if("$"===r||"$."===r)return e;(r=r.replace(/^\$\[\*?\d*\]\.?/,"$.")).startsWith("$.")?r=r.slice(2):r.startsWith("$")&&(r=r.slice(1));let a=e;for(let e of s(r)){if(null==a)return;a=a[e]}return a}function c(e,t,r){if(!e||"object"!=typeof e||!t)return;let a=t.path||(t.key?`$.${t.key}`:"");if(!a)return;if(a=a.replace(/^\$\[\*?\d*\]\.?/,"$."),r&&"$"!==r){let t=r.replace(/\[\*?\]$/,"");if(a===t)return e;a.startsWith(`${t}.`)?a=`$.${a.slice(t.length+1)}`:a.startsWith(`${t}[*].`)&&(a=`$.${a.slice(t.length+4)}`)}if(!a.startsWith("$."))return t.key&&t.key in e?e[t.key]:void 0;let n=e;for(let e of s(a.slice(2))){if(null==n)return;n=n[e]}return n}function m(e,t,r,a){if(!e||null==t)return!0;if(a){let a=l(t,{data:{arrayPath:r}});return 0===a.length||void 0!==c(a[0],{path:e},r)}return void 0!==d(t,e)}function u(e,t){if(null==e||""===e)return t.defaultValue??"—";switch(t.type){case"STATUS":if(t.statusMap){let r=String(e),a=t.statusMap[r]??t.statusMap[r.toLowerCase()]??t.statusMap[r.toUpperCase()];if(a?.label)return a.label}return String(e);case"PERCENTAGE":return"number"==typeof e?`${Math.round(e)}%`:String(e);case"TIMESTAMP":{let r=t.format?.timestamp?.display;if("datetime"===r||"date"===r||"time"===r){let t=new Date(e);if(!isNaN(t.getTime())){if("date"===r)return t.toLocaleDateString();if("time"===r)return t.toLocaleTimeString();return t.toLocaleString()}}return(0,a.fw)(e)}case"DURATION":{if("number"!=typeof e)return String(e);let r=Math.floor(e*(t.format?.duration?.inputUnit==="seconds"?1e3:t.format?.duration?.inputUnit==="minutes"?6e4:1)/1e3);if(r<60)return`${r}s`;let a=Math.floor(r/60);if(a<60)return`${a}m ${r%60}s`;let n=Math.floor(a/60);return`${n}h ${a%60}m`}case"BOOLEAN":return e?"Yes":"No";case"NUMBER":case"INTEGER":case"DECIMAL":if("number"==typeof e&&t.format?.number?.decimals!==void 0)return e.toFixed(t.format.number.decimals);return e;default:return"object"==typeof e?JSON.stringify(e):e}}function p(e,t){return u(e,t)}},5022(e,t,r){r.d(t,{RB:()=>l,Ue:()=>a,XT:()=>i,bO:()=>o});let a="Task: reportbuilder.",n=e=>`${a}${e}`,l={REPORT_VIEW:n("report.view"),REPORT_ADD:n("report.add"),REPORT_EDIT:n("report.edit"),REPORT_PURGE:n("report.purge"),REPORT_COMPILE:n("report.compile"),REPORT_RUN:n("report.run"),INDICATOR_VIEW:n("indicator.view"),INDICATOR_ADD:n("indicator.add"),INDICATOR_EDIT:n("indicator.edit"),INDICATOR_PURGE:n("indicator.purge"),SECTION_VIEW:n("section.view"),SECTION_ADD:n("section.add"),SECTION_EDIT:n("section.edit"),SECTION_PURGE:n("section.purge"),THEME_VIEW:n("theme.view"),THEME_ADD:n("theme.add"),THEME_EDIT:n("theme.edit"),THEME_PURGE:n("theme.purge"),DASHBOARD_VIEW:n("dashboard.view"),DASHBOARD_ADD:n("dashboard.add"),DASHBOARD_EDIT:n("dashboard.edit"),DASHBOARD_PURGE:n("dashboard.purge"),CATEGORY_VIEW:n("category.view"),CATEGORY_ADD:n("category.add"),CATEGORY_EDIT:n("category.edit"),CATEGORY_PURGE:n("category.purge"),AGEGROUP_VIEW:n("agegroup.view"),AGEGROUP_ADD:n("agegroup.add"),AGEGROUP_EDIT:n("agegroup.edit"),AGEGROUP_PURGE:n("agegroup.purge"),LIBRARY_VIEW:n("library.view"),LIBRARY_ADD:n("library.add"),LIBRARY_EDIT:n("library.edit"),LIBRARY_PURGE:n("library.purge"),ETLSOURCE_VIEW:n("etlsource.view"),ETLSOURCE_ADD:n("etlsource.add"),ETLSOURCE_EDIT:n("etlsource.edit"),ETLSOURCE_PURGE:n("etlsource.purge"),ETLMONITOR_VIEW:n("etlmonitor.view"),ETLMONITOR_ADD:n("etlmonitor.add"),ETLMONITOR_EDIT:n("etlmonitor.edit"),ETLMONITOR_PURGE:n("etlmonitor.purge"),SCHEMA_VIEW:n("schema.view"),SQL_EXECUTE:n("sql.execute"),PACKAGE_IMPORT:n("package.import"),PACKAGE_EXPORT:n("package.export")},i=e=>e.replace(a,""),o={"/":[l.REPORT_VIEW],"/reports":[l.REPORT_VIEW],"/new":[l.REPORT_ADD],"/edit/:reportId":[l.REPORT_EDIT],"/run":[l.REPORT_RUN],"/run-reports":[l.REPORT_RUN],"/indicators":[l.INDICATOR_VIEW],"/sections":[l.SECTION_VIEW],"/dashboards":[l.DASHBOARD_VIEW],"/dashboards/:code":[l.DASHBOARD_VIEW],"/etl-dashboard":[l.DASHBOARD_VIEW],"/linelist":[l.REPORT_VIEW],"/linelist/new":[l.REPORT_ADD],"/linelist/edit/:reportId":[l.REPORT_EDIT],"/linelist/run/:reportId":[l.REPORT_RUN],"/admin":[l.REPORT_VIEW],"/admin/report-categories":[l.CATEGORY_VIEW],"/admin/age-categories":[l.AGEGROUP_VIEW],"/admin/age-groups":[l.AGEGROUP_VIEW],"/admin/report-library":[l.LIBRARY_VIEW],"/admin/themes":[l.THEME_VIEW],"/admin/etl-sources":[l.ETLSOURCE_VIEW],"/admin/etl-tasks":[l.PACKAGE_IMPORT],"/admin/etl-browser":[l.ETLSOURCE_VIEW],"/admin/etl-monitors":[l.ETLMONITOR_VIEW],"/admin/etl-monitors/builder":[l.ETLMONITOR_VIEW],"/admin/dashboards":[l.DASHBOARD_VIEW],"/import-export":[l.PACKAGE_IMPORT,l.PACKAGE_EXPORT]}},2075(e,t,r){r.d(t,{rp:()=>u,CB:()=>c,ah:()=>f,cz:()=>p,jg:()=>y,getLinelistReport:()=>m,U:()=>E,Nj:()=>b,m:()=>s,sY:()=>d,oq:()=>_});var a=r(9669),n=r(300);function l(e){return{type:"SQL",name:e.name,config:{sql:e.config.sql.replace(/':(\w+)'/g,":$1").replace(/":(\w+)"/g,":$1"),...e.config.filterMap&&{filterMap:e.config.filterMap}}}}let i="/reportbuilder/report";function o(e){return{...e,configJson:e.configJson?(0,n.j)(e.configJson):e.configJson,metaJson:e.metaJson?(0,n.j)(e.metaJson):e.metaJson}}function s(e){if(!e.configJson)return null;try{let t=JSON.parse(e.configJson);if(t&&"object"==typeof t&&"LINE_LIST"===t.type)return t}catch(e){console.error("Failed to parse linelist config:",e)}return null}function d(e){if(e.metaJson)try{let t=JSON.parse(e.metaJson);if(t?.parameters&&Array.isArray(t.parameters)&&t.parameters.length>0)return t.parameters}catch(e){console.warn("Failed to parse metaJson parameters:",e)}let t=s(e);return t?.parameters||[]}async function c(e,t){var r;let n=e?.q?.trim(),l=e?.includeRetired===!0,d=e?.v??"default",c=new URLSearchParams;return c.set("v",d),n&&c.set("q",n),l&&c.set("includeRetired","true"),(!(r=await (0,a.wO)(`${i}?${c.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid).map(o).filter(e=>"LINE_LIST"===e.reportType||s(e)?.type==="LINE_LIST")}async function m(e,t,r="full"){return o(await (0,a.wO)(`${i}/${encodeURIComponent(e)}?v=${r}`,t))}async function u(e,t){return o(await (0,a.oV)(i,e,t))}async function p(e,t,r){return o(await (0,a.oV)(`${i}/${encodeURIComponent(e)}`,t,r))}async function _(e,t="Retired from Report Builder",r){let a=new URLSearchParams;return a.set("reason",t),g(`${i}/${encodeURIComponent(e)}?${a.toString()}`,r)}async function g(e,t){let r=await fetch(e,{method:"DELETE",signal:t});if(!r.ok)throw Error(await r.text()||"Failed to delete resource")}async function E(e,t){let r=e.reportDefinitionUuid||e.reportLibraryUuid;if(!r)return{success:!1,error:"Either reportDefinitionUuid or reportLibraryUuid is required"};let a=new URLSearchParams;a.set("uuid",r),a.set("renderType","list"),e.parameters?Object.entries(e.parameters).forEach(([e,t])=>{null!=t&&""!==t&&a.set(e,String(t))}):(e.startDate&&a.set("startDate",e.startDate),e.endDate&&a.set("endDate",e.endDate)),e.maxRows&&a.set("maxRows",String(e.maxRows));let n=await fetch(`/openmrs/ws/rest/v1/reportbuilder/reportingDefinition?${a.toString()}`,{method:"GET",signal:t,headers:{"Content-Type":"application/json"}});return n.ok?{success:!0,data:await n.json()}:{success:!1,error:await n.text()||"Failed to evaluate linelist report"}}async function f(e,t,r){let n={reportUuid:e,category:t};return console.log("compileLinelistReport sending:",n),(0,a.oV)("/reportbuilder/reportcompile",n,r)}function b(e,t,r){var a;let n,i,o={...(n={},(e.dataSources||[]).forEach(e=>{e.columns&&Object.entries(e.columns).forEach(([e,t])=>{n[e]={name:t.name,type:t.type,sourceTable:t.sourceTable}})}),i=(e.dataSetDefinitions||[]).map(t=>{let r=l(e.baseCohortDefinition);return{name:t.name,type:"PATIENT_DATA_SET",rowFilter:r,columns:(t.columns||[]).map(e=>{let t=function(e,t){let r=e.dataDefinition||{},a=r.type,n=r.config||{},l=n.sql||"",i=e._metadata||e._meta||null,o=/^\s*SELECT\s/i.test(l)||/:patientId\b/i.test(l),s=l.match(/`?(\w+)`?\.\s*`?(\w+)`?/);if(o)return{name:e.name,dataDefinition:{type:"SQL",config:{sql:l}},...e.repeatResolution?{repeatResolution:e.repeatResolution}:{},...i?{_metadata:i}:{}};if("CALCULATION"===a){let t,r=n.onDate;return t=!0===r||void 0===r||""===r?":startDate":"string"==typeof r?r.startsWith(":")?r:r.replace("${startDate}",":startDate").replace(/\$\{endDate\}/g,":endDate"):":startDate",{name:e.name,dataDefinition:{type:"CALCULATION",config:{...n,onDate:t}},...i?{_metadata:i}:{}}}if("IDENTIFIER"===a)return{name:e.name,dataDefinition:{type:"IDENTIFIER",config:{...n,preferred:!0}},...e.repeatResolution?{repeatResolution:e.repeatResolution}:{},...i?{_metadata:i}:{}};if("PERSON_ATTRIBUTE"===a||"PERSON_NAME"===a)return{name:e.name,dataDefinition:{type:a,config:n},...e.repeatResolution?{repeatResolution:e.repeatResolution}:{},...i?{_metadata:i}:{}};if("SQL"===a&&s){let[,r,a]=s,n=function(e,t,r,a){let n=r.toLowerCase();if("person"===t){if(n.includes("name")||n.includes("full_name"))return{name:e,dataDefinition:{type:"PERSON_NAME",config:{type:"FULL_NAME",preferred:!0}}};if("gender"===n||"sex"===n)return{name:e,dataDefinition:{type:"PERSON_ATTRIBUTE",config:{type:"GENDER"}}};if(n.includes("birthdate")||n.includes("birth_date"))return{name:e,dataDefinition:{type:"PERSON_ATTRIBUTE",config:{type:"BIRTHDATE"}},converter:{type:"BIRTHDATE_AGE",config:{format:"MMM dd,yyyy"}}};if(n.includes("death"))return{name:e,dataDefinition:{type:"PERSON_ATTRIBUTE",config:{type:"DEATH_DATE"}}}}if("person_address"===t)return{name:e,dataDefinition:{type:"PERSON_ADDRESS",config:{type:"ADDRESS_FIELD",field:({address1:"address1",address2:"address2",address3:"address3",address4:"address4",address5:"address5",city_village:"address5",state_province:"stateProvince",country:"country",postal_code:"postalCode",county_district:"countyDistrict",latitude:"latitude",longitude:"longitude"})[n]||r}}};if(t.startsWith("mamba_")||t.startsWith("etl_")){let l=a?.[e],i=l?.type==="DATE"||n.includes("date"),o=`SELECT e.${r} FROM ${t} e WHERE e.patient_id = :patientId`;if(/encounter|obs|visit|appointment/i.test(t)&&(o+=" AND e.voided = 0"),i){let e=n.includes("return_visit")?"return_visit_date":r;o+=` AND e.${e} BETWEEN :startDate AND :endDate ORDER BY e.${e} DESC LIMIT 1`}else o+=" LIMIT 1";return{name:e,dataDefinition:{type:"SQL",config:{sql:o}}}}return{name:e,dataDefinition:{type:"SQL",config:{sql:`\`${t}\`.\`${r}\``}}}}(e.name,r,a,t);if(n)return{...n,...e.repeatResolution?{repeatResolution:e.repeatResolution}:{},...i?{_metadata:i}:{}}}return{name:e.name,dataDefinition:{type:a||"SQL",config:n},...e.repeatResolution?{repeatResolution:e.repeatResolution}:{},...i?{_metadata:i}:{}}}(e,n);return{...t,key:t.key||t.name.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")}})}}),{name:t.name,description:t.description,parameters:(a=e.parameters)&&0!==a.length?a.map(e=>({name:e.name,label:e.label,type:e.type,required:e.required??!1})):[{name:"startDate",label:"Start Date",type:"DATE",required:!0},{name:"endDate",label:"End Date",type:"DATE",required:!0}],baseCohortDefinition:l(e.baseCohortDefinition),dataSetDefinitions:i,category:t.categoryUuid||"FACILITY_REPORTS",reportType:"LINELIST",...e.limit?{limit:e.limit}:{}}),_builder:{dataSources:e.dataSources,populationSources:r?.populationSources,rowGrain:e.rowGrain,templateId:e.templateId,buildMethod:r?.buildMethod||e.buildMethod,indicatorRules:r?.indicatorRules||e.indicatorRules,categoryUuid:e.categoryUuid,visualFilter:r?.visualFilter,filterMap:r?.filterMap}};return{name:t.name,description:t.description,code:t.code,reportType:"LINE_LIST",configJson:JSON.stringify(o),metaJson:r?JSON.stringify(r):void 0}}async function y(e,t){let{reportUuid:r,config:a,parameters:n={},maxRows:l=100,cachedReportDefinitionUuid:i}=e;try{let e,o=i;if(!o){let e=await f(r,a.categoryUuid,t);if(!e.compiled||!e.reportDefinitionUuid)return{success:!1,error:"Failed to compile report for preview"};o=e.reportDefinitionUuid}let s=a.parameters||[],d={};for(let e of s)e.defaultValue&&(d[e.name]=e.defaultValue),n&&void 0!==n[e.name]&&(d[e.name]=n[e.name]);0===s.length&&(d.startDate=n.startDate||((e=new Date).setDate(e.getDate()-30),e.toISOString().split("T")[0]),d.endDate=n.endDate||new Date().toISOString().split("T")[0]);let c={reportDefinitionUuid:o,parameters:d,maxRows:l},m=await E(c,t);if(!m.success)return{success:!1,error:m.error||"Failed to evaluate report for preview"};let u=m.data,p=u?Object.values(u)[0]:null,_=u?._html?u._html[0]?.html:null;if(!p||!Array.isArray(p)||0===p.length)return{success:!0,data:{columns:[],rows:[],rowCount:0,html:_}};let g=Object.keys(p[0]);return{success:!0,data:{columns:g,rows:p,rowCount:p.length,html:_}}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Preview failed"}}}},9669(e,t,r){r.d(t,{hI:()=>s,oV:()=>o,wO:()=>i});var a=r(3633),n=r(1672);async function l(e){try{return await e()}catch(e){throw(0,n._R)(e)}}async function i(e,t){return l(async()=>{let r=`${a.restBaseUrl}${e.startsWith("/")?e:`/${e}`}`;return(await (0,a.openmrsFetch)(r,{signal:t})).data})}async function o(e,t,r){return l(async()=>{let n=`${a.restBaseUrl}${e.startsWith("/")?e:`/${e}`}`;return(await (0,a.openmrsFetch)(n,{method:"POST",headers:{"Content-Type":"application/json"},body:t,signal:r})).data})}async function s(e,t){return l(async()=>{let r=`${a.restBaseUrl}${e.startsWith("/")?e:`/${e}`}`;return(await (0,a.openmrsFetch)(r,{method:"DELETE",signal:t})).data})}},8803(e,t,r){r.r(t),r.d(t,{default:()=>dy});var a=r(4587),n=r.n(a),l=r(4976),i=r(7767),o=r(8574),s=r(9249),d=r(9564),c=r(1397),m=r(1660),u=r(4499),p=r(4535),_=r(3335),g=r(3270),E=r(9610),f=r(3989),b=r(2137),y=r(5022),h=r(3633);function v(){let e=(0,h.useSession)(),t=e?.user,r=(0,a.useMemo)(()=>{let e=new Set;for(let r of t?.privileges??[])e.add(r.name),e.add(r.display);return e},[t]),n=(0,a.useMemo)(()=>!!t?.roles?.some(e=>"System Developer"===e.display),[t]),l=(0,a.useCallback)((...e)=>0===e.length||n||e.some(e=>r.has(e)),[r,n]);return{has:l,hasAll:(0,a.useCallback)((...e)=>0===e.length||n||e.every(e=>r.has(e)),[r,n]),isSuperUser:n,isAuthenticated:!!e?.authenticated,canAuthor:l(y.RB.REPORT_ADD,y.RB.REPORT_EDIT),canRun:l(y.RB.REPORT_RUN),canPublish:l(y.RB.PACKAGE_IMPORT,y.RB.PACKAGE_EXPORT),canManageEtl:l(y.RB.ETLSOURCE_ADD,y.RB.ETLSOURCE_EDIT,y.RB.ETLMONITOR_ADD,y.RB.ETLMONITOR_EDIT)}}let S="-esm-report-builder__report-builder-shell__shell___e5zQZ",T="-esm-report-builder__report-builder-shell__leftNav___Q9bGN",C="-esm-report-builder__report-builder-shell__main___p4fac",w=[{items:[{label:"Home",path:"/",icon:s.ww,required:[y.RB.REPORT_VIEW]},{label:"Run Reports",path:"/run",icon:d.jG,required:[y.RB.REPORT_RUN]},{label:"Dashboards",path:"/dashboards",icon:c.xh,required:[y.RB.DASHBOARD_VIEW]}]},{title:"Report Design",icon:m.vd,items:[{label:"Aggregate Reports",path:"/reports",icon:u.pl,required:[y.RB.REPORT_VIEW],activePaths:["/new","/edit"]},{label:"Linelist Reports",path:"/linelist",icon:p.B8,required:[y.RB.REPORT_VIEW]},{label:"Indicators",path:"/indicators",icon:_.n5,required:[y.RB.INDICATOR_VIEW]},{label:"Sections",path:"/sections",icon:p.zg,required:[y.RB.SECTION_VIEW]}]},{title:"Admin",icon:g.wB,activePaths:["/admin"],items:[{label:"Import / Export",path:"/import-export",icon:E.Qp,required:[y.RB.PACKAGE_IMPORT,y.RB.PACKAGE_EXPORT]},{label:"Dashboards",path:"/admin/dashboards",required:[y.RB.DASHBOARD_VIEW]},{label:"Report Categories",path:"/admin/report-categories",required:[y.RB.CATEGORY_VIEW]},{label:"Report Library",path:"/admin/report-library",required:[y.RB.LIBRARY_VIEW]},{label:"Data Themes",path:"/admin/themes",required:[y.RB.THEME_VIEW]},{label:"Age Categories",path:"/admin/age-categories",required:[y.RB.AGEGROUP_VIEW]},{label:"Age Groups",path:"/admin/age-groups",required:[y.RB.AGEGROUP_VIEW]}]},{title:"ETL",icon:c.EN,items:[{label:"Sources",path:"/admin/etl-sources",icon:c.EN,required:[y.RB.ETLSOURCE_VIEW]},{label:"Tasks",path:"/admin/etl-tasks",icon:f.YZ,required:[y.RB.PACKAGE_IMPORT]},{label:"Data Browser",path:"/admin/etl-browser",icon:f.vx,required:[y.RB.ETLSOURCE_VIEW]},{label:"Monitoring",path:"/admin/etl-monitors",icon:b.Il,required:[y.RB.ETLMONITOR_VIEW]}]}],N=()=>n().createElement("div",{className:S},n().createElement("aside",{className:T}),n().createElement("main",{className:C},n().createElement(o.OuH,{description:"Loading…"}))),I=()=>{let e=(0,i.Zp)(),t=(0,i.zy)(),{has:r}=v(),a=(e,r)=>t.pathname===e||t.pathname.startsWith(`${e}/`)||(r??[]).some(e=>t.pathname===e||t.pathname.startsWith(`${e}/`)),l=n().useMemo(()=>w.map(e=>({...e,items:e.items.filter(e=>r(...e.required))})).filter(e=>e.items.length>0),[r]);return n().createElement("div",{className:S},n().createElement("aside",{className:T},n().createElement(o.f8J,{expanded:!0,isPersistent:!1,"aria-label":"Report Builder navigation"},n().createElement(o.BC4,null,0===l.length&&n().createElement(o.ldn,null,"No accessible sections — contact your administrator"),l.map(t=>t.title?n().createElement(o.whj,{key:t.title,renderIcon:t.icon,title:t.title,isActive:t.items.some(e=>a(e.path,e.activePaths))||(t.activePaths??[]).some(e=>a(e)),defaultExpanded:!1},t.items.map(t=>n().createElement(o.ldn,{key:t.path,renderIcon:t.icon,isActive:a(t.path,t.activePaths),onClick:()=>e(t.path)},t.label))):t.items.map(t=>n().createElement(o.VxE,{key:t.path,renderIcon:t.icon,isActive:a(t.path,t.activePaths),onClick:()=>e(t.path)},t.label)))))),n().createElement("main",{className:C},n().createElement(i.sv,null)))},k=()=>n().createElement(a.Suspense,{fallback:n().createElement(N,null)},n().createElement(I,null));var A=r(587);let R="-esm-report-builder__report-builder-landing-page__card___pW8QE",O="-esm-report-builder__report-builder-landing-page__cardIllustration___uvcVt",D="-esm-report-builder__report-builder-landing-page__illCircle___e6GFs",x="-esm-report-builder__report-builder-landing-page__cardTitle___PNSRg",L="-esm-report-builder__report-builder-landing-page__cardBody___+Lg5s",M="-esm-report-builder__report-builder-landing-page__cardActions___PGmJw",$="-esm-report-builder__report-builder-landing-page__cardButton___2JTf-";var P=r(2383),U=r(9184);let B=()=>n().createElement("svg",{height:"64",width:"64",viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg",xmlSpace:"preserve",fillRule:"evenodd",clipRule:"evenodd",strokeLinejoin:"round",strokeMiterlimit:"2"},n().createElement("path",{d:"M27 31.36H8a.36.36 0 0 1-.36-.36v-1.64H6a.36.36 0 0 1-.36-.36v-1.64H5a.36.36 0 0 1-.36-.36V3A.36.36 0 0 1 5 2.64h4.64V2a.36.36 0 0 1 .36-.36h1.64V1A.36.36 0 0 1 12 .64h4a.36.36 0 0 1 .36.36v.64H18a.36.36 0 0 1 .36.36v.64H23a.36.36 0 0 1 .36.36v1.64H25a.36.36 0 0 1 .36.36v1.64H27a.36.36 0 0 1 .36.36v24a.36.36 0 0 1-.36.36Z",fill:"#d2e5e5"}),n().createElement("path",{d:"M8.36 30.64h18.28V7.36h-1.28V29a.36.36 0 0 1-.36.36H8.36v1.28Z",fill:"#8abab8"}),n().createElement("path",{d:"M5.36 26.64h17.28V3.36h-4.28V4a.36.36 0 0 1-.36.36h-8A.36.36 0 0 1 9.64 4v-.64H5.36v23.28Z",fill:"#8abab8"}),n().createElement("path",{fill:"#fff",d:"M7.5 12.64h13v.72h-13zM7.5 8.64h13v.72h-13zM7.5 20.64h13v.72h-13zM7.5 16.64h13v.72h-13z"}),n().createElement("path",{d:"M10.36 3.64h7.28V2.36H16a.36.36 0 0 1-.36-.36v-.64h-3.28V2a.36.36 0 0 1-.36.36h-1.64v1.28ZM6.36 28.64h18.28V5.36h-1.28V27a.36.36 0 0 1-.36.36H6.36v1.28Z",fill:"#8abab8"})),F="-esm-report-builder__header__metaItem___NGbY6",z="-esm-report-builder__header__metaDot___l+Lag",q="-esm-report-builder__header__value___h5VzH";async function j(e,t,r=!0){return await new Promise(e=>setTimeout(e,500)),{title:"AI Assist (Preview)",body:`Coming soon ✅
2
+
3
+ Prompt:
4
+ ${e}
5
+
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){let t=[...e],r=[];for(let e=0;e<t.length;e++){let a=t[e],n=a.indent??0;for(;r.length>0&&r[r.length-1].indent>=n;)r.pop();r.length>0?(a.parentId=r[r.length-1].rowId,a.position=r.filter(e=>e.rowId===a.parentId).length):(a.parentId=void 0,a.position=0),("group-label"===a.type||"section-label"===a.type||"indicator"===a.type&&n<10)&&r.push({rowId:a.id,indent:n})}let a=new Map;for(let e of t)e.parentId&&(a.has(e.parentId)||a.set(e.parentId,[]),a.get(e.parentId).push(e.id));for(let e of t)e.children=a.get(e.id)||[];return t}function tT(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 tC=({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})},[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:tS(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=l+r;if(i<0||i>=n.length)return;let o=n[l];n[l]=n[i],n[i]=o;let s=tS(n);N(C.map(t=>t.id===e?{...t,rows:s}: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=tS(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=tT(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 tT(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=[];for(let t of e){let e=r.get(t.sectionUuid);if(e){let r=[],a=new Map;e.rows.forEach(e=>{a.set(e.id,e)});let n=new Set(t.indicators.map(e=>e.id)),i=`${t.sectionUuid}__section_label`,o=a.get(i);for(let e of(o?r.push({...o}):r.push({id:i,type:"section-label",label:t.title,indent:0,span:"all",emphasis:"section",showTotal:!1,showDisaggregation:!1}),t.indicators)){let t=a.get(e.id);t?r.push({...t}):r.push({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"})}for(let[e,t]of a)e===i||n.has(e)||"section-label"===t.type||"indicator"===t.type||r.push({...t});let s=tS(r);l.push({...e,title:t.title,rows:s})}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)=>{if(!_||_.fromGroupId!==e||_.rowId===t)return;let r=C.find(t=>t.id===e);if(!r)return;let a=r.rows.slice(),n=a.findIndex(e=>e.id===_.rowId),l=a.findIndex(e=>e.id===t);if(n<0||l<0)return;let i=a[n];a.splice(n,1),a.splice(l,0,i);let o=tS(a);N(C.map(t=>t.id===e?{...t,rows:o}:t)),g(null),y(null)},[_,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]);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=r.id===f,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=>{e.preventDefault(),y(r.id)},onDrop:e=>{e.preventDefault(),$(t.id,r.id)},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)":i?"2px dashed var(--cds-border-interactive, #0f62fe)":"1px solid transparent",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"}},JSON.stringify(S,null,2)))),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 tw=r(7136);let tN=({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(tw.$$,{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 tI(){return{uuid:crypto.randomUUID(),name:"",description:"",code:"",sections:[],design:ty(),categoryUuid:"",themeUuid:""}}function tk(e){return(e||"").trim().toUpperCase().replace(/[^A-Z0-9]+/g,"_").replace(/^_+|_+$/g,"")}function tA(){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(()=>tI()),[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(tI()),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.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(e=>({id:String(e.indicatorUuid??e.id??e.code??crypto.randomUUID()),code:String(e.code??""),name:String(e.name??e.code??""),type:String(e.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:tk(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||tk(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(tI()),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);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(tC,{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"}},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))),n().createElement(tN,{open:P,currentCategoryUuid:d.categoryUuid,onConfirm:Y,onClose:X,reportType:"aggregate"}))}function tR({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 tO="/reportbuilder/datatheme";async function tD(e,t){var r;let a=e?.trim(),n=a?`${tO}?q=${encodeURIComponent(a)}&v=full`:`${tO}?v=full`;return(r=await (0,W.wO)(n,t))?Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]:[]}async function tx(e,t){return(0,W.wO)(`${tO}/${encodeURIComponent(e)}?v=full`,t)}async function tL(e,t){return(0,W.oV)(tO,e,t)}async function tM(e,t,r){return(0,W.oV)(`${tO}/${encodeURIComponent(e)}`,t,r)}async function t$(e,t=!1,r="Retired via UI",a){let n=t?"purge=true":`purge=false&reason=${encodeURIComponent(r)}`;await (0,W.hI)(`${tO}/${encodeURIComponent(e)}?${n}`,a)}async function tP(e,t){var r;let a=e?.trim(),n=a?`${tO}?q=${encodeURIComponent(a)}&v=full`:`${tO}?v=full`;return Array.isArray(r=await (0,W.wO)(n,t))?r:r?.results??[]}async function tU(e,t){return(0,W.wO)(`${tO}/${e}?v=full`,t)}function tB({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 tF({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 tz="/concept",tq="custom:(id,uuid,display,datatype:(uuid,name),conceptClass:(uuid,name),answers:(id,uuid,display),mappings:(display,uuid,conceptMapType:(display)))";async function tj(e,t){let r=await (0,W.wO)(`${tz}/?q=${encodeURIComponent(e)}&v=${tq}`,t);return r?.results??[]}async function tH(e,t){let r=String(e??"").trim();if(!r)throw Error("Concept uuid is required");return(0,W.wO)(`${tz}/${encodeURIComponent(r)}?v=${tq}`,t)}async function tJ(e,t){let r=await (0,W.wO)(`${tz}/${e}?v=${tq}`,t);return r?.answers??[]}function tG(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 tj(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 tV(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 tW(e){let t,r;for(let a of e.mappings??[]){let e=a?.display??"";if(t||(t=tV(e,"ICD-10-WHO")),r||(r=tV(e,"ICD-11-WHO")),t&&r)break}return{icd10Code:t,icd11Code:r}}function tK(e){let{icd10Code:t,icd11Code:r}=tW(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 tQ(e){if(!e)return"";let{icd10Code:t,icd11Code:r}=tW(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 tY({id:e,labelText:t,helperText:r,value:a,onChange:l}){let[i,s]=n().useState(""),{loading:d,results:c,error:m}=tG(i),u=n().useCallback(e=>{if(!e)return;let t=tK(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:tQ,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 tX(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 tZ(e){let t,r;for(let a of e.mappings??[]){let e=a?.display??"";if(t||(t=tX(e,"ICD-10-WHO")),r||(r=tX(e,"ICD-11-WHO")),t&&r)break}return{icd10Code:t,icd11Code:r}}function t0(e){let{icd10Code:t,icd11Code:r}=tZ(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 t1(e){if(!e)return"";let{icd10Code:t,icd11Code:r}=tZ(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 t2(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 t5({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}=tG(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 tJ(e,t)??[]).map(t0).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:t1,placeholder:"Type to search question…",onInputChange:e=>c(String(e??"")),onChange:e=>{var t;(t=e?.selectedItem??null)&&(s({questions:N([...C??[],t0(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:t2(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=>t2(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:t2(e)},e.display,e.icd10Code?` • ICD-10:${e.icd10Code}`:"",e.icd11Code?` • ICD-11:${e.icd11Code}`:""))):null))}function t6({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 t4(e){return"IN"===e||"NOT IN"===e}function t8(e){return"IS NULL"===e||"IS NOT NULL"===e}function t7(e){return e.map(e=>Number(e)).filter(e=>Number.isFinite(e)&&e>0)}function t9(e){return e.map(e=>String(e)).filter(Boolean)}function re({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(t5,{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?t9((t.questions??[]).map(e=>e.uuid)):t7((t.questions??[]).map(e=>e.id)),a="conceptUuid"===e.valueType?t9((t.answers??[]).map(e=>e.uuid)):t7((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(tY,{id:`cond-${e.key}`,labelText:e.label||"Select concepts",value:t,onChange:t=>{m(e.key,t),"conceptUuid"===e.valueType?d(e,{value:t9(t.map(e=>e.uuid))}):d(e,{value:t7(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(t8(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(t4(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(t6,{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 rt({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 rr=[{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 ra({conditions:e,onChange:t}){let[r,a]=n().useState({column:"",operator:"=",value:"",wildcardMode:"contains"}),l=rr.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})},rr.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=rr.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 rn(e){return`'${String(e).replace(/'/g,"''")}'`}function rl(e){let t=String(e??"").trim();return!t||t.includes(".")||t.includes("(")||t.includes(" ")||t.includes("`")?t:`a.${t}`}function ri(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 ro(e){return(Array.isArray(e)?e:[e]).map(e=>String(e)).filter(e=>e.trim().length>0)}function rs(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 rd(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 rc({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([]),tP(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=rs(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=rs(r);if(e?.themeUuid===I&&e?.themeConfig?.sourceTable===A.sourceTable)return}let t=new AbortController;return D(null),tU(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:rd(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=rl(e.column),r=t3(e.operator),a=e.value;if(t8(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:rn(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:rn(String(e)),o=n?r:rn(String(r));i(`${t} BETWEEN ${l} AND ${o}`)}continue}let l=String(a);if(""===l)continue;if(t4(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:rn(e)).join(",");i("NOT IN"===r?`${t} NOT IN (${n})`:`${t} IN (${n})`);continue}let o=/^[0-9]+$/.test(l)?l:rn(l);if(t4(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=rn(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=ro(t);if(r.length){let t="conceptId"===e.valueType||r.every(e=>/^[0-9]+$/.test(e)),a=r.map(e=>t?e:rn(e)).join(","),n=rl(l);o(1===r.length?`${n} = ${a}`:`${n} IN (${a})`)}}if(i&&Array.isArray(r)&&r.length){let t=ro(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=>ri(String(e))):t,a="conceptId"===e.valueType||r.every(e=>/^[0-9]+$/.test(e)),l=r.map(e=>a?e:rn(e)).join(","),s=rl(i);o("NOT IN"===n?`${s} NOT IN (${l})`:`${s} IN (${l})`)}}continue}if(Array.isArray(a)){let t=ro(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=>ri(String(e))):t,l="conceptId"===e.valueType||r.every(e=>/^[0-9]+$/.test(e)),i=r.map(e=>l?e:rn(e)).join(","),s=rl(e.column);if("BETWEEN"===n){if(2===t.length){let[e,t]=r.map(e=>l?e:rn(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:rn(String(t)),i=n?r:rn(String(r)),s=rl(e.column);o(`${s} BETWEEN ${l} AND ${i}`)}continue}if("object"==typeof a)continue;let l=rl(e.column);if(t8(n)){o(`${l} ${n}`);continue}let i=String(a);if(""===i)continue;let d="conceptId"===e.valueType||/^[0-9]+$/.test(i)?i:rn(i);if(t4(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:rd(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(tB,{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(tF,{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(re,{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(ra,{conditions:M,onChange:e=>{$(e),W(!0)}}))):null,"sql"===p?n().createElement(rt,{sql:J,onChange:e=>{G(e),Q(!0)},onReset:()=>{Q(!1),W(!0)}}):null))))}let rm="/reportbuilder/indicator";function ru(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 rp(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)(`${rm}?${o.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid).map(ru)}async function r_(e,t,r="full"){return ru(await (0,W.wO)(`${rm}/${encodeURIComponent(e)}?v=${r}`,t))}async function rg(e,t){return(0,W.oV)(rm,e,t)}async function rE(e,t,r){return(0,W.oV)(`${rm}/${encodeURIComponent(e)}`,t,r)}async function rf(e,t=!1,r="Retired via UI",a){let n=t?"purge=true":`purge=false&reason=${encodeURIComponent(r)}`;await (0,W.hI)(`${rm}/${encodeURIComponent(e)}?${n}`,a)}function rb({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 ry(e){let t=[],r=(e?.sqlTemplate??"").trim();if(r)return{sql:rS(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 rh(e,t,"configJson is null or invalid JSON");let n=(e,r)=>{t.push(e);let n=(r(a)??"").trim();return n?{sql:rS(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"),rh(e,t,"No SQL found in any known config location"))}function rh(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 rv(e){return!1===e.success}function rS(e){return e?e.replace(/\\n/g,"\n"):e}function rT(e,t){return t||("Encounters"===e?"encounter_id":"patient_id")}function rC(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 rw(e){let t=ry(e);return rv(t)?{sql:"",source:!1===t.success?"none(parse-error)":"none"}:{sql:t.sql,source:t.source}}function rN(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 rI(e,t,r){var a;let n=t||rT(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 rk(`SELECT DISTINCT ${e} AS ${n} ${r}`.trim(),n);let a=rN(r)||"a";return rk(`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 rk(`SELECT DISTINCT ${e} AS ${n} ${t}`.trim(),n);let r=rN(t)||"a";return rk(`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 rk(`
8
+ ${e}
9
+ SELECT DISTINCT pop.${n}
10
+ FROM (
11
+ ${t}
12
+ ) pop
13
+ `.trim(),n)}let m=rN(i)||"a",u=i.replace(/SELECT\s+([\s\S]*?)COUNT\s*\(\s*\*\s*\)\s+AS\s+total\s*/i,`SELECT DISTINCT ${m}.${t} AS ${n}
14
+ `);return u===i&&(u=i.replace(/COUNT\s*\(\s*\*\s*\)\s+AS\s+total/gi,`DISTINCT ${m}.${t} AS ${n}`)),rk(u,n)}function rk(e,t){let r=e.trim();return r.startsWith("SELECT DISTINCT")||console.warn("[countSqlToPopulationSql] Output does not start with SELECT DISTINCT. Output:",r.substring(0,100)),RegExp(`(?:SELECT\\s+DISTINCT\\s+(?:[\\w]+\\.)?${t}\\b|(?:AS\\s+${t}\\b))`,"i").test(r)||console.warn(`[countSqlToPopulationSql] Output may not expose '${t}' column. Output:`,r.substring(0,100)),r}function rA(e,t){let r=e.trim(),a=r.match(/^\s*WITH\s+/i);if(!a)return{ctes:"",mainQuery:r};let n=0,l=-1,i=!1;for(let e=0;e<r.length;e++){let t=r[e];if(!i&&e>=a[0].length&&(i=!0),"("===t?n++:")"===t&&n--,i&&0===n&&"SELECT"===r.substring(e,e+6).toUpperCase()){l=e;break}}if(-1===l)return{ctes:"",mainQuery:r};let o=r.substring(a[0].length,l),s=r.substring(l),d=[],c="",m=0;for(let e=0;e<o.length;e++){let r=o[e];if("("===r?m++:")"===r&&m--,c+=r,0===m&&c.trim()){let r=e+1;for(;r<o.length&&/[\s]/.test(o[r]);)r++;if(r>=o.length||","===o[r]){let a=c.trim().replace(/,$/,"");if(a){let e=a.match(/^([A-Za-z_][A-Za-z0-9_]*)\s+AS\s*\((.*)\)\s*$/);if(e){let r=e[1],a=e[2].trim(),n=t+r;if(a.match(/^\s*WITH\s+/i)){let e=rA(a,t);e.ctes&&d.push(e.ctes),a=e.mainQuery}let l=a.replace(/\b([A-D])\.(\w+)/g,`${t}$1.$2`);l=l.replace(/(?<![_A-Za-z0-9])([A-D])\b(?!\.)/g,`${t}$1`),d.push(`${n} AS (
15
+ ${l}
16
+ )`)}}c="",r<o.length&&","===o[r]&&(e=r)}}}let u=s.replace(/\b([A-D])\.(\w+)/g,`${t}$1.$2`);return u=u.replace(/(?<![_A-Za-z0-9])([A-D])\b(?!\.)/g,`${t}$1`),{ctes:d.join(",\n"),mainQuery:u}}function rR({id:e,titleText:t,selectedId:r,disabled:l=!1,invalid:i=!1,invalidText:s="",onChange:d,placeholder:c="",kinds:m}){let[u,p]=(0,a.useState)([]),[_,g]=(0,a.useState)(!1),[E,f]=(0,a.useState)(null),[b,y]=(0,a.useState)(null),h=(0,a.useRef)(null),v=(0,a.useRef)(null),S=(0,a.useRef)(!0),T=(0,a.useRef)(""),C=(0,a.useRef)("");(0,a.useEffect)(()=>(S.current=!0,()=>{S.current=!1,v.current&&v.current.abort(),h.current&&clearTimeout(h.current)}),[]),(0,a.useEffect)(()=>{r?(async()=>{try{let e=new AbortController;v.current=e;let t=(await rp({q:"",kind:void 0,v:"full",includeRetired:!1},e.signal)).find(e=>e.uuid===r);if(t&&S.current){let e={id:t.uuid,label:`${t.name}${t.code?` (${t.code})`:""}`,kind:t.kind||"BASE",unit:"Patients",code:t.code};y(e)}}catch(e){}})():y(null)},[r]);let w=(0,a.useCallback)(async e=>{try{let t=new AbortController;v.current=t;let r=await rp({q:e,kind:void 0,v:"full",includeRetired:!1},t.signal);if(T.current===e&&S.current){let t=(m?r.filter(e=>m.includes(e.kind)):r).map(e=>({id:e.uuid,label:`${e.name}${e.code?` (${e.code})`:""}`,kind:e.kind||"BASE",unit:"Patients",code:e.code}));p(t),f(null),C.current=e}}catch(e){S.current&&"AbortError"!==e.name&&f(e?.message||"Failed to search indicators")}finally{S.current&&T.current===e&&g(!1)}},[m]),N=(0,a.useCallback)(e=>{(h.current&&clearTimeout(h.current),T.current=e,e.length<4)?g(!1):(g(!0),f(null),h.current=setTimeout(()=>{v.current&&v.current.abort(),w(e)},600))},[w]),I=(0,a.useCallback)(e=>{e&&e!==c?e!==T.current&&e!==C.current&&N(e):g(!1)},[N,c]),k=(0,a.useCallback)(e=>{if(!e||e.isPlaceholder)return void d("",null);let t={id:e.id,code:e.code||"",name:e.label.replace(/ \([^)]*\)$/,"").split(" (")[0],kind:e.kind,unit:e.unit||"Patients"};d(e.id,t)},[d]),A=n().useMemo(()=>{let e=[{id:"",label:c,kind:"BASE",isPlaceholder:!0}];return b&&!e.find(e=>e.id===b.id)&&e.push(b),u.forEach(t=>{e.find(e=>e.id===t.id)||e.push(t)}),e},[u,b,c]),R=n().useMemo(()=>A.find(e=>e.id===r)||null,[A,r]);return n().createElement("div",{style:{position:"relative"}},n().createElement(o.a32,{id:e,titleText:t,items:A,itemToString:e=>e?e.label:"",selectedItem:R,placeholder:c,disabled:l,invalid:i,invalidText:s,onInputChange:I,onChange:({selectedItem:e})=>k(e)}),_&&!E&&n().createElement("div",{style:{position:"absolute",right:"3rem",top:"2.25rem",zIndex:1,pointerEvents:"none"}},n().createElement(o.OuH,{description:"Searching…"})),E&&n().createElement("div",{style:{fontSize:"0.75rem",color:"var(--cds-text-error, #da1e28)",marginTop:"0.25rem"}},E))}function rO({indicatorAId:e,indicatorBId:t,operator:r,inferredUnit:a,samePick:l,onChangeA:i,onChangeB:s,onChangeOperator:d}){return n().createElement(n().Fragment,null,n().createElement("div",{style:{fontWeight:600}},"Select indicators"),n().createElement("div",{style:{fontSize:"0.875rem",opacity:.7,marginBottom:"0.75rem"}},"Search for base or composite indicators by name or code"),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr auto 1fr",gap:"0.75rem",alignItems:"end"}},n().createElement(rR,{id:"indicator-a",titleText:"Indicator A (search by name or code)",selectedId:e,kinds:["BASE","COMPOSITE"],invalid:!!l&&!!e&&!!t,invalidText:"Indicator A and B cannot be the same.",placeholder:"",onChange:e=>i(e)}),n().createElement("div",{style:{paddingBottom:"0.35rem"}},n().createElement("div",{style:{fontSize:"0.875rem",opacity:.75,marginBottom:"0.25rem",textAlign:"center"}},"Logic"),n().createElement("div",{style:{minWidth:"6rem",textAlign:"center",padding:"0.55rem 0.75rem",borderRadius:"0.25rem",background:"var(--cds-layer, #ffffff)",border:"1px solid var(--cds-border-subtle, #e0e0e0)",fontWeight:600},"aria-label":"Selected operator"},"A_AND_NOT_B"===r?"A AND NOT B":r)),n().createElement(rR,{id:"indicator-b",titleText:"Indicator B (search by name or code)",selectedId:t,kinds:["BASE","COMPOSITE"],invalid:!!l&&!!e&&!!t,invalidText:"Indicator A and B cannot be the same.",placeholder:"",onChange:e=>s(e)})),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"auto 1fr",gap:"0.75rem",alignItems:"center",padding:"0.75rem",borderRadius:"0.25rem",background:"var(--cds-layer-accent, #f4f4f4)",marginTop:"0.75rem"}},n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",fontWeight:600}},"Operator ",n().createElement(tw.$$,{size:16})),n().createElement(o.zWQ,{legendText:"",name:"composite-operator",valueSelected:r,onChange:e=>d(e),orientation:"horizontal"},n().createElement(o.aaP,{id:"op-and",labelText:"AND",value:"AND"}),n().createElement(o.aaP,{id:"op-or",labelText:"OR",value:"OR"}),n().createElement(o.aaP,{id:"op-a-not-b",labelText:"A AND NOT B",value:"A_AND_NOT_B"})),n().createElement("div",{style:{gridColumn:"1 / -1",fontSize:"0.875rem",opacity:.8}},"Composite preview is built by converting each indicator into a population set (",rT(a),") and applying set logic.")))}function rD({loading:e,errA:t,errB:r,compositeSql:a,show:l}){return n().createElement(n().Fragment,null,e?n().createElement(o.OuH,{description:"Loading selected indicators…"}):null,t?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Indicator A",subtitle:t}):null,r?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Indicator B",subtitle:r}):null,!l||t||r?null:n().createElement(o.fs1,{id:"composite-sql-preview",labelText:"Composite SQL Preview",value:a||"—",readOnly:!0,rows:14}))}let rx=({open:e,mode:t="create",initial:r,onClose:a,onCreate:l,onUpdate:i,onSaved:s})=>{let[d,c]=n().useState(""),[m,u]=n().useState(""),[p,_]=n().useState(""),[g,E]=n().useState(""),[f,b]=n().useState(""),[y,h]=n().useState("AND"),[v,S]=n().useState(!1),[T,C]=n().useState(!1),[w,N]=n().useState(null),[I,k]=n().useState(null),[A,R]=n().useState(null),[O,D]=n().useState(null);n().useEffect(()=>{if(e){if(("edit"===t||"duplicate"===t)&&r?.uuid){let e=function(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}(r.configJson)??{};c(r.name??""),u(r.code??""),_(r.description??""),E(String(e.indicatorAId??e.indicatorAUuid??"")),b(String(e.indicatorBId??e.indicatorBUuid??"")),h(String(e.operator??"AND").toUpperCase()??"AND"),N(null),k(null),R(null),D(null);return}c(""),u(""),_(""),E(""),b(""),h("AND"),N(null),k(null),R(null),D(null)}},[e,t,r?.uuid]);let x=!!(g&&f&&g===f),L=n().useMemo(()=>"Patients",[]);n().useEffect(()=>{if(!e)return;if(!g)return void R(null);let t=new AbortController;return S(!0),N(null),r_(g,t.signal,"full").then(e=>R(e)).catch(e=>N(e?.message??"Failed to load indicator A")).finally(()=>S(!1)),()=>t.abort()},[e,g]),n().useEffect(()=>{if(!e)return;if(!f)return void D(null);let t=new AbortController;return C(!0),k(null),r_(f,t.signal,"full").then(e=>D(e)).catch(e=>k(e?.message??"Failed to load indicator B")).finally(()=>C(!1)),()=>t.abort()},[e,f]);let M=n().useMemo(()=>{if(!A)return"";let{sql:e}=rw(A),t=rC(A);return e?rI(e,t,L):""},[A,L]),$=n().useMemo(()=>{if(!O)return"";let{sql:e}=rw(O),t=rC(O);return e?rI(e,t,L):""},[O,L]),P=n().useMemo(()=>M&&$?function(e){let t=rT(e.unit),r=e.populationSqlA.trim().replace(/;+\s*$/,""),a=e.populationSqlB.trim().replace(/;+\s*$/,"");if(!r||!a)return"";let n=rA(r,"base_"),l=rA(a,"filter_"),i=[];n.ctes&&i.push(n.ctes),l.ctes&&i.push(l.ctes),i.push(`A AS (
17
+ ${n.mainQuery}
18
+ )`),i.push(`B AS (
19
+ ${l.mainQuery}
20
+ )`);let o="";return o="AND"===e.operator?`SELECT A.${t}
21
+ FROM A
22
+ INNER JOIN B ON B.${t} = A.${t}`:"OR"===e.operator?`SELECT ${t} FROM A
23
+ UNION
24
+ SELECT ${t} FROM B`:`SELECT A.${t}
25
+ FROM A
26
+ LEFT JOIN B ON B.${t} = A.${t}
27
+ WHERE B.${t} IS NULL`,`
28
+ WITH
29
+ ${i.join(",\n")}
30
+ SELECT COUNT(*) AS total
31
+ FROM (
32
+ ${o}
33
+ ) X;
34
+ `.trim()}({unit:L,operator:y,populationSqlA:M,populationSqlB:$}):"",[M,$,L,y]),U=!!d.trim()&&!!g&&!!f&&!x&&!!P.trim(),B=async()=>{if(!U)return;let e=m.trim()?m.trim().toUpperCase():d.toUpperCase().replace(/[^A-Z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,50),a={version:1,unit:L,operator:y,indicatorAId:g,indicatorBId:f,indicatorACode:A?.code,indicatorBCode:O?.code,sqlPreview:P},n={name:d.trim(),code:e,description:p.trim()||void 0,kind:"COMPOSITE",defaultValueType:"NUMBER",themeUuid:null,configJson:JSON.stringify(a,null,2),sqlTemplate:P};if("edit"===t&&r?.uuid){if(!i)throw Error("onUpdate handler is required for edit mode");await i(r.uuid,n)}else await l(n);s()};return n().createElement(o.aFV,{open:e,onRequestClose:a,modalHeading:"edit"===t?"Edit Composite Indicator":"duplicate"===t?"Duplicate Composite Indicator":"Create Composite Indicator",primaryButtonText:"edit"===t?"Update Indicator":"duplicate"===t?"Create Duplicate":"Save Indicator",secondaryButtonText:"Cancel",onRequestSubmit:B,primaryButtonDisabled:!U,size:"lg"},n().createElement(o.BJc,{gap:5},n().createElement("div",{style:{opacity:.8}},"Select two base indicators, pick an operator, and we generate a composite SQL preview."),x?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Pick two different indicators",subtitle:"Indicator A and Indicator B cannot be the same."}):null,n().createElement(rb,{value:{name:d,code:m,description:p},onChange:e=>{c(e.name),u(e.code),_(e.description)}}),n().createElement("hr",{style:{border:0,borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)"}}),n().createElement(rO,{indicatorAId:g,indicatorBId:f,operator:y,inferredUnit:L,samePick:x,onChangeA:E,onChangeB:b,onChangeOperator:h}),n().createElement(rD,{loading:v||T,errA:w,errB:I,compositeSql:P,show:!!(A&&O)})))};async function rL(e){let t=await (0,W.wO)("/reportbuilder/agecategory?v=full",e);return(Array.isArray(t?.results)?t.results:[]).filter(e=>!e.retired).map(e=>({uuid:e.uuid,code:e.code,name:e.name??e.display??e.code,description:e.description,label:`${e.name??e.display??e.code} (${e.code})`,ageGroups:Array.isArray(e.ageGroups)?e.ageGroups.slice().sort((e,t)=>(e.sortOrder??0)-(t.sortOrder??0)):[]})).sort((e,t)=>e.label.localeCompare(t.label))}function rM({value:e,onChange:t}){return n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(o.ksK,{id:"final-name",labelText:"Final indicator name",value:e.name,onChange:r=>t({...e,name:r.target.value}),placeholder:"e.g., OPD Confirmed Malaria by age/gender"}),n().createElement(o.ksK,{id:"final-code",labelText:"Code (optional)",value:e.code,onChange:r=>t({...e,code:r.target.value}),placeholder:"AUTO_GENERATED"}),n().createElement("div",{style:{gridColumn:"1 / -1"}},n().createElement(o.fs1,{id:"final-desc",labelText:"Description (optional)",value:e.description,rows:3,onChange:r=>t({...e,description:r.target.value}),placeholder:"Short description of what this final indicator represents."})))}function r$({ageCategories:e,selectedBaseId:t,selectedAgeCategoryCode:r,onChangeBaseId:a,onChangeAgeCategoryCode:l}){let i=n().useMemo(()=>[{code:"",label:"Select an age category…",uuid:"",name:"",description:"",ageGroups:[]}].concat(e),[e]),s=n().useMemo(()=>i.find(e=>e.code===r)??i[0],[i,r]);return n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(rR,{id:"base-indicator",titleText:"Base Indicator (search by name or code)",selectedId:t,kinds:["BASE","COMPOSITE"],placeholder:"",onChange:e=>a(e)}),n().createElement(o.a32,{id:"age-category",titleText:"Age Category",items:i,itemToString:e=>e?e.label:"",selectedItem:s,placeholder:"Select an age category…",onChange:({selectedItem:e})=>{l(e?.code||"")}}))}function rP({genders:e,onChange:t}){let r=e.includes("F"),a=e.includes("M");return n().createElement("div",{style:{padding:"0.75rem",borderRadius:"0.25rem",background:"var(--cds-layer-accent, #f4f4f4)"}},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Gender breakdown"),n().createElement("div",{style:{display:"flex",gap:"1rem"}},n().createElement(o.Sc0,{id:"final-gender-f",labelText:"Female",checked:r,onChange:(r,{checked:a})=>{let n=new Set(e);a?n.add("F"):n.delete("F"),t(Array.from(n))}}),n().createElement(o.Sc0,{id:"final-gender-m",labelText:"Male",checked:a,onChange:(r,{checked:a})=>{let n=new Set(e);a?n.add("M"):n.delete("M"),t(Array.from(n))}})),n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8,marginTop:"0.5rem"}},"Leave unchecked to get totals without gender filtering (later we can add “Total” row)."))}async function rU(e,t){let r,a=`${(r=window.openmrsBaseUrl??"/openmrs/",`${r}ws/rest/v1`)}/reportbuilder/sqlpreview`,n=await fetch(a,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({sql:e.sql,params:e.params??{},maxRows:e.maxRows??200}),signal:t});if(!n.ok){let e=await n.text().catch(()=>"");throw Error(`SQL preview failed (${n.status}). ${e}`)}return await n.json()}function rB({title:e="Results preview",sql:t,params:r,maxRows:a=200,canRun:l=!0,autoRun:i=!1}){let[s,c]=n().useState(!1),[m,u]=n().useState(null),[p,_]=n().useState(null),g=n().useCallback(async()=>{if(!l||!t?.trim())return;let e=new AbortController;c(!0),u(null);try{let n=await rU({sql:t,params:r,maxRows:a},e.signal);_(n)}catch(e){u(e?.message??"Failed to preview query"),_(null)}finally{c(!1)}return()=>e.abort()},[t,r,a,l]);n().useEffect(()=>{i&&l&&t?.trim()&&g()},[i,l,t,JSON.stringify(r??{}),a]);let E=n().useMemo(()=>p?.columns??[],[p?.columns]),f=n().useMemo(()=>p?.rows??[],[p?.rows]),b=n().useMemo(()=>E.map(e=>({key:e,header:e})),[E]),y=n().useMemo(()=>f.map((e,t)=>{let r={id:String(t)};return E.forEach((t,a)=>{r[t]=e[a]}),r}),[f,E]),h=!!t?.trim(),v=!!(l&&h&&!s);return n().createElement("div",{style:{display:"grid",gap:"0.75rem",padding:"1rem",borderRadius:"0.5rem",background:"var(--cds-layer, #ffffff)",border:"1px solid var(--cds-border-subtle, #e0e0e0)"}},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",gap:"1rem"}},n().createElement("div",{style:{display:"grid",gap:"0.25rem"}},n().createElement("div",{style:{fontWeight:600}},e),n().createElement("div",{style:{fontSize:"0.875rem",opacity:.75}},l?"Ready to preview results.":"Select required parameters to enable preview.")),n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:d.jG,disabled:!v,onClick:()=>g()},"Run preview")),n().createElement(o.nD3,{align:"start"},n().createElement(o.AsP,{title:"SQL (click to expand)"},n().createElement(o.z7k,{type:"multi",wrapText:!0},h?t:"-- No SQL to preview yet"))),n().createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"1rem"}},n().createElement("div",null,s?n().createElement(o.OuH,{description:"Running preview…"}):null,!s&&m?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Preview error",subtitle:m}):null),!p||s||m?null:n().createElement("div",{style:{display:"flex",gap:"0.5rem",alignItems:"center",flexWrap:"wrap"}},n().createElement(o.vwO,{type:"cool-gray",size:"sm"},"Rows: ",p.rowCount),p.truncated?n().createElement(o.vwO,{type:"red",size:"sm"},"Truncated to ",a):n().createElement(o.vwO,{type:"green",size:"sm"},"Not truncated"))),!p||s||m?null:n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:"0.25rem",overflow:"hidden",background:"var(--cds-layer, #ffffff)"}},n().createElement("div",{style:{maxHeight:"320px",overflow:"auto"}},n().createElement(o.bQt,{rows:y,headers:b,size:"sm"},({rows:e,headers:t,getHeaderProps:r,getRowProps:a})=>n().createElement(o.K3K,null,n().createElement(o.XIK,{size:"sm",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},String(e.value??""))))))))))))}function rF({sql:e,maxRows:t=200,startDate:r,endDate:a,onChangeStartDate:l,onChangeEndDate:i}){let s=!!e?.trim()&&!!r&&!!a;return n().createElement("div",{style:{display:"grid",gap:"0.75rem"}},n().createElement("div",{style:{display:"grid",gridTemplateColumns:"320px 1fr",gap:"1rem",alignItems:"start"}},n().createElement("div",{style:{display:"grid",gap:"1rem"}},n().createElement(o.ksK,{id:"final-preview-start",labelText:"Start date",type:"date",value:r,onChange:e=>l(e.target.value)}),n().createElement(o.ksK,{id:"final-preview-end",labelText:"End date",type:"date",value:a,onChange:e=>i(e.target.value)})),n().createElement(rB,{title:"Query results preview",sql:e,params:{startDate:r,endDate:a},maxRows:t,canRun:s})))}let rz="ID_NOT_EXPOSED";class rq extends Error{chain;constructor(e){super(`Circular indicator dependency detected: ${e.join(" → ")}`),this.chain=e,this.name="CircularDependencyError"}}class rj extends Error{parentIndicator;missingRef;refType;constructor(e,t,r){super(`Missing ${r} in indicator ${e}: ${t}`),this.parentIndicator=e,this.missingRef=t,this.refType=r,this.name="MissingReferenceError"}}class rH extends Error{indicator;operator;constructor(e,t){super(`Unsupported operator '${t}' in indicator ${e}`),this.indicator=e,this.operator=t,this.name="UnsupportedOperatorError"}}class rJ extends Error{code;indicator;constructor(e,t,r){super(t),this.code=e,this.indicator=r,this.name="PopulationSqlError"}}class rG extends Error{indicator;reason;constructor(e,t){super(`Cannot compile atomic indicator ${e}: ${t}`),this.indicator=e,this.reason=t,this.name="AtomicIndicatorError"}}function rV(e,t){let r=e.trim();if(!r)return{valid:!1,error:{code:"EMPTY_SQL",message:"Population SQL is empty"}};let a=r.toUpperCase();if(!a.startsWith("WITH")&&!a.startsWith("SELECT"))return{valid:!1,error:{code:"COMPILATION_FAILED",message:"Population SQL must be a SELECT statement"}};let n=r;if(a.startsWith("WITH")){let e=r.match(/\)\s*SELECT\s+/i);if(e){let t=r.indexOf(e[0])+e[0].length;n=r.substring(t).trim()}}if(/^SELECT\s+(?:COUNT|SUM|AVG|MAX|MIN)\s*\(/i.test(n))return{valid:!1,error:{code:"AGGREGATE_SQL",message:"Population SQL cannot use aggregate functions (COUNT, SUM, AVG) in final projection. Use SELECT DISTINCT instead."}};let l=RegExp(`SELECT\\s+DISTINCT\\s+[\\w\\.]+\\s+AS\\s+${t}\\b|SELECT\\s+DISTINCT\\s+(?:[\\w]+\\.)?${t}\\b`,"i");if(a.startsWith("WITH")){if(!RegExp(`\\bSELECT\\s+DISTINCT\\s+(?:[\\w]+\\.)?${t}\\b`,"i").test(r)&&!l.test(r))return{valid:!1,error:{code:rz,message:`Population SQL must expose '${t}' column in the main SELECT (e.g., SELECT DISTINCT a.${t} AS ${t})`}}}else if(!l.test(r))return{valid:!1,error:{code:rz,message:`Population SQL must expose '${t}' column (e.g., SELECT DISTINCT a.${t} AS ${t})`}};return{valid:!0}}function rW(e){let t=0;for(let r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r),t&=t;return Math.abs(t).toString(36)}let rK=new Map;function rQ(){rK.clear()}async function rY(e,t,r=new Set,a={}){let n,l,i,{allowRetired:o=!1,maxDepth:s=10}=a,d=(n=rW(e.sqlTemplate||""),l=rW(e.configJson||""),i=a.allowRetired?"allowRetired":"",`${e.uuid}|${n}|${l}|${i}`);if(rK.has(d))return rK.get(d);if(r.size>=s)throw Error(`Maximum compilation depth ${s} exceeded. Possible circular dependency.`);if(r.has(e.uuid))throw new rq([...r,e.uuid]);let c=new Set(r);if(c.add(e.uuid),e.retired&&!o)throw Error(`Cannot use retired indicator ${e.code||e.uuid} as operand`);let m=[];e.retired&&m.push(`Using retired indicator: ${e.code||e.name}`);let u=null;try{u=e.configJson?JSON.parse(e.configJson):null}catch(e){m.push(`Failed to parse config_json: ${e}`)}if("COMPOSITE"===e.kind&&u){let r=await rX(e,u,t,c,a);return r.warnings=[...m,...r.warnings||[]],rK.set(d,r),r}if("BASE"===e.kind){let t=rZ(e,u);return t.warnings=m,rK.set(d,t),t}try{let t=rZ(e,u);return t.warnings=[...m,"FINAL indicator treated as BASE"],rK.set(d,t),t}catch(t){throw new rG(e.code||e.uuid,`Unsupported indicator kind: ${e.kind}`)}}async function rX(e,t,r,a,n){let l=[];if(!t.indicatorAId)throw new rj(e.code||e.uuid,"missing","indicatorAId");if(!t.indicatorBId)throw new rj(e.code||e.uuid,"missing","indicatorBId");if(!t.operator)throw new rH(e.code||e.uuid,"missing");let i=await r(t.indicatorAId),o=await r(t.indicatorBId);if(!i)throw new rj(e.code||e.uuid,t.indicatorAId,"indicatorAId");if(!o)throw new rj(e.code||e.uuid,t.indicatorBId,"indicatorBId");let s=await rY(i,r,a,n),d=await rY(o,r,a,n),c=function(e,t,r){let a="patient_id",n=t.trim().replace(/;+\s*$/,""),l=r.trim().replace(/;+\s*$/,""),i=/^\s*WITH\s+/i.test(n),o=/^\s*WITH\s+/i.test(l),s=i?"operand_a_base":"A",d=o?"operand_b_base":"B";if("AND"===e)return`
35
+ WITH ${s} AS (
36
+ ${r1(n,0)}
37
+ ),
38
+ ${d} AS (
39
+ ${r1(l,0)}
40
+ )
41
+ SELECT DISTINCT
42
+ ${s}.${a}
43
+ FROM ${s}
44
+ INNER JOIN ${d}
45
+ ON ${d}.${a} = ${s}.${a}
46
+ `.trim();if("OR"===e)return`
47
+ WITH ${s} AS (
48
+ ${r1(n,0)}
49
+ ),
50
+ ${d} AS (
51
+ ${r1(l,0)}
52
+ )
53
+ SELECT ${a} FROM ${s}
54
+ UNION
55
+ SELECT ${a} FROM ${d}
56
+ `.trim();if("A_AND_NOT_B"===e)return`
57
+ WITH ${s} AS (
58
+ ${r1(n,0)}
59
+ ),
60
+ ${d} AS (
61
+ ${r1(l,0)}
62
+ )
63
+ SELECT DISTINCT
64
+ ${s}.${a}
65
+ FROM ${s}
66
+ LEFT JOIN ${d}
67
+ ON ${d}.${a} = ${s}.${a}
68
+ WHERE ${d}.${a} IS NULL
69
+ `.trim();throw Error(`Unsupported operator: ${e}`)}(t.operator,s.sql,d.sql),m=rV(c,s.patientIdColumn);return m.valid?{sql:c,patientIdColumn:s.patientIdColumn,warnings:[...l,...s.warnings||[],...d.warnings||[]],retired:e.retired}:{sql:c,patientIdColumn:s.patientIdColumn,warnings:[...l,...s.warnings||[],...d.warnings||[]],retired:e.retired,error:new rJ(m.error.code,m.error.message,{uuid:e.uuid,name:e.name,code:e.code||e.uuid})}}function rZ(e,t){let r=e.sqlTemplate||"";if(!r&&t&&(r=t.sqlPreview||t.sqlTemplate||t.base?.sqlPreview||t.base?.sqlTemplate||""),!r)throw new rG(e.code||e.uuid,"No SQL template found");r=r0(r);let a=function(e){try{let t=e?.themeConfig||e?.base?.themeConfig||e?.authoring?.base?.themeConfig||e?.baseIndicator?.themeConfig||null,r=t?.patientIdColumn;return r?String(r):"patient_id"}catch{return"patient_id"}}(t),n=function(e,t="patient_id"){let r=e.trim(),a=(r=r.replace(/\\n/g,"\n")).replace(/;+\s*$/,"");if(RegExp(`SELECT\\s+DISTINCT\\s+(?:\\w+\\.)?(?:${t}|patient_id|patient_id|encounter_id)`,"i").test(a)){let e=r0(a);return RegExp("AS\\s+patient_id\\b","im").test(e)?e:e.replace(/SELECT\s+DISTINCT\s+(?:(\w+)\.)?(patient_id|patient_id|encounter_id)(?:\s+AS\s+\w+)?/i,(e,t,r)=>`SELECT DISTINCT ${t?`${t}.`:""}${r} AS patient_id`)}let n=a.match(/SELECT\s+COUNT\s*\(\s*DISTINCT\s+(\w+\.(?:patient_id|patient_id|encounter_id))\s*\)(?:\s+AS\s+\w+)?\s+FROM/i);if(n){let e=n[1],t=e.split(".").pop(),r=e.split(".")[0];return r0(a.replace(/SELECT\s+COUNT\s*\(\s*DISTINCT\s+\w+\.(?:patient_id|patient_id|encounter_id)\s*\)(?:\s+AS\s+\w+)?\s+FROM/i,`SELECT DISTINCT ${r}.${t} AS patient_id FROM`))}if(/SELECT\s+.*?COUNT\s*\(\s*\*\s*\)\s+AS\s+total/i.test(a)){let e=a.match(/FROM\s+(\S+)\s+(\S+)/i);if(e){let r=e[2];return r0(a.replace(/SELECT\s+.*?COUNT\s*\(\s*\*\s*\)\s+AS\s+total\s*/i,"").replace(/FROM\s+/i,`SELECT DISTINCT ${r}.${t} AS patient_id FROM `))}return r0(a.replace(/SELECT\s+.*?COUNT\s*\(\s*\*\s*\)\s+AS\s+total\s+FROM\s+/i,"SELECT DISTINCT patient_id FROM "))}return r0(a)}(r,a),l=rV(n,a);return l.valid?{sql:n,patientIdColumn:a,retired:e.retired}:{sql:n,patientIdColumn:a,retired:e.retired,error:new rJ(l.error.code,l.error.message,{uuid:e.uuid,name:e.name,code:e.code||e.uuid})}}function r0(e){let t=e;return(t=(t=t.replace(/\\n/g,"\n")).replace(/:stratDate\b/g,":startDate")).replace(/;+\s*$/,"")}function r1(e,t){let r=" ".repeat(t);return e.split("\n").map(e=>e.trim()?r+e:e).join("\n")}function r2(e){let{populationSql:t,ageCategoryCode:r,genders:a}=e,n=(a||[]).length?a:["F","M"];a&&0!==a.length||console.warn("[generateAgeSexDisaggregationSql] No genders specified, defaulting to both F and M. This default will be removed in a future version.");let l=t.trim().replace(/;+\s*$/,""),i="patient_id";return`
70
+ WITH base_pop AS (
71
+ ${r1(l,2)}
72
+ ),
73
+ ag AS (
74
+ SELECT
75
+ ag.age_group_id,
76
+ ag.label,
77
+ ag.min_age_days,
78
+ ag.max_age_days,
79
+ ag.sort_order
80
+ FROM report_builder_dim_age_group ag
81
+ JOIN report_builder_dim_age_category ac
82
+ ON ac.age_category_id = ag.age_category_id
83
+ WHERE ac.code = '${String(r).replace(/'/g,"''")}'
84
+ AND ag.is_active = 1
85
+ ),
86
+ genders AS (
87
+ SELECT 'F' AS gender
88
+ UNION ALL SELECT 'M' AS gender
89
+ ),
90
+ cnt AS (
91
+ SELECT
92
+ ag.age_group_id AS age_group_id,
93
+ mdp.gender AS gender,
94
+ COUNT(DISTINCT base_pop.${i}) AS value
95
+ FROM base_pop
96
+ JOIN mamba_fact_patients_latest_patient_demographics mdp
97
+ ON mdp.${i} = base_pop.${i}
98
+ JOIN ag
99
+ ON TIMESTAMPDIFF(DAY, mdp.birthdate, :endDate)
100
+ BETWEEN ag.min_age_days AND ag.max_age_days
101
+ WHERE mdp.birthdate IS NOT NULL
102
+ AND mdp.gender IS NOT NULL
103
+ AND mdp.gender IN (${n.map(e=>`'${e}'`).join(",")})
104
+ GROUP BY ag.age_group_id, mdp.gender
105
+ )
106
+ SELECT
107
+ ag.label AS age_group,
108
+ g.gender AS gender,
109
+ COALESCE(cnt.value, 0) AS value
110
+ FROM ag
111
+ CROSS JOIN genders g
112
+ LEFT JOIN cnt
113
+ ON cnt.age_group_id = ag.age_group_id
114
+ AND cnt.gender = g.gender
115
+ ORDER BY ag.sort_order, g.gender;
116
+ `.trim()}function r5({baseIndicator:e,ageCategoryCode:t,genders:r}){let{sql:a}=rw(e),n=rC(e),l=a?rI(a,n,"Patients"):"";if(!l.trim())return`-- Unable to build final indicator SQL: base indicator does not contain usable count SQL.
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
+ WITH base_pop AS (
119
+ ${r6(l.trim(),2)}
120
+ ),
121
+ ag AS (
122
+ SELECT
123
+ ag.age_group_id,
124
+ ag.label,
125
+ ag.min_age_days,
126
+ ag.max_age_days,
127
+ ag.sort_order
128
+ FROM report_builder_dim_age_group ag
129
+ JOIN report_builder_dim_age_category ac
130
+ ON ac.age_category_id = ag.age_category_id
131
+ WHERE ac.code = '${String(t).replace(/'/g,"''")}'
132
+ AND ag.is_active = 1
133
+ ),
134
+ genders AS (
135
+ ${r6(o,2)}
136
+ ),
137
+ cnt AS (
138
+ SELECT
139
+ ag.age_group_id AS age_group_id,
140
+ mdp.gender AS gender,
141
+ COUNT(DISTINCT base_pop.${n}) AS value
142
+ FROM base_pop
143
+ JOIN mamba_fact_patients_latest_patient_demographics mdp
144
+ ON mdp.patient_id = base_pop.${n}
145
+ JOIN ag
146
+ ON TIMESTAMPDIFF(DAY, mdp.birthdate, :endDate)
147
+ BETWEEN ag.min_age_days AND ag.max_age_days
148
+ WHERE mdp.birthdate IS NOT NULL
149
+ AND mdp.gender IS NOT NULL
150
+ AND mdp.gender IN (${i.map(e=>`'${e}'`).join(",")})
151
+ GROUP BY ag.age_group_id, mdp.gender
152
+ )
153
+ SELECT
154
+ ag.label AS age_group,
155
+ g.gender AS gender,
156
+ COALESCE(cnt.value, 0) AS value
157
+ FROM ag
158
+ CROSS JOIN genders g
159
+ LEFT JOIN cnt
160
+ ON cnt.age_group_id = ag.age_group_id
161
+ AND cnt.gender = g.gender
162
+ ORDER BY ag.sort_order, g.gender;
163
+ `.trim()}function r6(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(rQ(),"COMPOSITE"===e.kind){let l=await rY(e,a,new Set,n);if(l.error)return`-- Error: ${l.error.message}
164
+ -- Base indicator: ${e.name} (${e.code||e.uuid})
165
+ -- Error Code: ${l.error.code}`;let i=l.sql;return r2({populationSql:i,ageCategoryCode:t,genders:r})}return r5({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 r4(){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 r8({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(r4);n().useEffect(()=>{if(!e)return;let t=new AbortController;return u(!0),_(null),rL(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),r_(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 r_(e,void 0,"full")}catch{return null}},compilerOptions:{allowRetired:!0}})):R(r5({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(rM,{value:g,onChange:E}),n().createElement("hr",{style:{border:0,borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)"}}),n().createElement(r$,{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(rP,{genders:v,onChange:S}),n().createElement(rF,{sql:A,maxRows:200,startDate:O,endDate:x,onChangeStartDate:D,onChangeEndDate:L})))}let r7=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(/&amp;lt;/g,"<").replace(/&amp;gt;/g,">").replace(/&amp;amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/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
+ FROM (
168
+ ${this.indent(t,2)}
169
+ ) ${a}
170
+ ${l}`.trim();return r.sql=o,r.success=!0,r.warnings?.push("Extracted population SQL from TX-RTT disaggregated query"),console.log("\uD83D\uDCCA [Pattern 0] Generated population SQL, length:",o.length),r}}}let l=a.match(/SELECT\s+(?:'[^']+'(?:\s*,\s*)?)?COUNT\s*\(\s*DISTINCT\s+(\w+)\.(\w+)\s*\)\s*(?:AS\s+\w+)?\s*FROM\s*\(\s*/i);if(l){let e=l[1],t=l[2],n=l.index+l[0].length,i=this.matchBalancedParens(a,n);if(i){let n=i.text.trim(),l=i.endIndex,o=a.substring(l).match(/\s*(\w+)([\s\S]*)/i);if(o){let a=o[1],l=o[2]||"";console.log("\uD83D\uDD0D [Pattern 1] COUNT DISTINCT matched:",{tableAlias:e,columnName:t,outerAlias:a,hasInnerQuery:!!n,innerQueryLength:n.length,restLength:l.length}),r.patientIdColumn="patient_id"===t||"patient_id"===t||"person_id"===t?t:"patient_id";let i=l.replace(/GROUP\s+BY\s+[\s\S]*?;?\s*$/i,"").trim(),s=`SELECT DISTINCT ${a}.${t} AS patient_id
171
+ FROM (
172
+ ${this.indent(n,2)}
173
+ ) ${a}
174
+ ${i}`.trim();return r.sql=s,r.success=!0,r.warnings?.push("Extracted population SQL from COUNT DISTINCT query"),console.log("✅ [Pattern 1] Generated population SQL, length:",s.length),r}}}for(let e of[/SELECT\s+DISTINCT\s+(\w+\.\w+)\s+AS\s+(?:patient_id|patient_id)(?:\s+FROM\s+[\s\S]+)?/i,/SELECT\s+DISTINCT\s+(\w+\.\w+)\s+FROM\s+/i]){let t=a.match(e);if(t&&t[1]){console.log("✅ [Interpreter] Detected simple population query, using as-is");let e=t[1],n=e.includes(".")?e.split(".")[1]:e;return r.patientIdColumn="patient_id"===n||"patient_id"===n||"person_id"===n?n:"patient_id",/\s+AS\s+(?:patient_id|patient_id)\s*FROM/i.test(a)?r.sql=a:r.sql=a.replace(RegExp(`SELECT\\s+DISTINCT\\s+${e.replace(".","\\.")}\\s+FROM`,"i"),`SELECT DISTINCT ${e} AS ${r.patientIdColumn} FROM`),r.success=!0,r.warnings?.push("Using simple population query as-is"),r}}let i=a.match(/SELECT\s+[\s\S]*?AS\s+age_group[\s\S]*?AS\s+(?:sex|gender)[\s\S]*?COUNT\s*\([\s\S]*?\)\s*(?:AS\s+\w+)?\s+FROM\s*\(\s*/i);if(i){console.log("✅ [Interpreter] Detected already-disaggregated query, extracting population SQL");let e=i.index+i[0].length,t=this.matchBalancedParens(a,e);if(t){let e=t.text.trim(),n=t.endIndex,l=a.substring(n).match(/\s*(\w+)([\s\S]*?)GROUP\s+BY\s+(?:age_group|months|lost)[\s\S]*?,\s*(?:sex|gender)/i);if(l){let t=l[1],a=l[2]||"",n=e.match(/(?:FROM|JOIN)\s+(\w+)\.(?:\w+)?\s+(?:\w+)\s+ON|(?:\w+\.)?(patient_id|patient_id|person_id)/i),i=n?n[1]||n[2]:"patient_id";return r.patientIdColumn=i,r.sql=`SELECT DISTINCT ${t}.${i} AS patient_id
175
+ FROM (
176
+ ${this.indent(e,2)}
177
+ ) ${t}${a.trim()}`.replace(/GROUP\s+BY\s+[\s\S]*?;/i,";"),r.success=!0,r.warnings?.push("Extracted population SQL from already-disaggregated query"),r}}}let o=a.match(/WITH\s+\w+\s+AS\s*\(\s*SELECT\s+[\s\S]*?FROM\s*\(\s*/i);if(o){let e=o.index+o[0].length,t=this.matchBalancedParens(a,e);if(t){let e=t.text.trim();if(/GROUP\s+BY\s+(patient_id|patient_id|person_id)/i.test(e)){let t=e.match(/GROUP\s+BY\s+(patient_id|patient_id|person_id)/i);return t&&(r.patientIdColumn=t[1]),r.sql=e,r.success=!0,r.warnings?.push("Extracted population SQL from complex WITH clause"),r}}}return/SELECT\s+COUNT\s*\(/i.test(a)?(r.warnings?.push("CUSTOM_POPULATION_AGGREGATED: SQL returns COUNT(...) instead of patient-level rows"),r.warnings?.push("The indicator SQL is a metric query, not a population query."),r.warnings?.push("Expected: SELECT DISTINCT patient_id FROM ..."),r.warnings?.push("Got: SELECT COUNT(...) FROM ..."),r.warnings?.push("To fix: Add explicit populationSql to the indicator configuration, or modify the SQL to return patient-level rows.")):(r.warnings?.push("CUSTOM_SQL_EXTRACTION_FAILED: Unable to safely derive population SQL from CUSTOM indicator SQL"),r.warnings?.push("The SQL structure is not recognized as a valid population query."),r.warnings?.push("Expected patterns:"),r.warnings?.push(" - SELECT COUNT(DISTINCT table.column) FROM (...) alias ..."),r.warnings?.push(" - SELECT DISTINCT table.column AS patient_id FROM ..."),r.warnings?.push(" - Already-disaggregated query with age_group/sex"),r.warnings?.push(""),r.warnings?.push("To fix this issue:"),r.warnings?.push(" 1. Add explicit populationSql to the indicator configJson:"),r.warnings?.push(' {"populationSql": "SELECT DISTINCT a.patient_id AS patient_id FROM ..."}'),r.warnings?.push(" 2. Ensure the SQL follows one of the recognized patterns above"),r.warnings?.push(" 3. Contact administrator if the SQL structure is correct but not recognized"),console.error("❌ [Interpreter] No matching pattern for SQL extraction")),r}applyDisaggregation(e,t,r){if(!e||!e.trim())return`-- Error: CUSTOM_POPULATION_EMPTY
178
+ -- Empty population SQL provided for disaggregation.
179
+ -- Ensure the indicator has a valid population query.`;if(/SELECT\s+COUNT\s*\(/i.test(e)&&!/SELECT\s+DISTINCT/i.test(e))return`-- Error: CUSTOM_POPULATION_AGGREGATED
180
+ -- The provided SQL is a metric query (COUNT), not a population query.
181
+ -- Section disaggregation requires patient-level rows.
182
+ -- Expected: SELECT DISTINCT patient_id FROM ...
183
+ -- Got: ${e.substring(0,100)}...`;if(/SELECT\s+.*?AS\s+age_group.*?FROM/i.test(e))return`-- Error: CUSTOM_ALREADY_DISAGGREGATED
184
+ -- Population SQL contains age_group disaggregation.
185
+ -- Section disaggregation requires raw patient-level population without age/gender.
186
+ -- Remove age_group, sex, or gender columns from the population query projection.`;if(!(/patient_id\s*(?:AS|FROM|$)/i.test(e)||/(?:patient_id|person_id)\s+AS\s+patient_id/i.test(e)))return`-- Error: CUSTOM_PATIENT_ID_MISSING
187
+ -- Population SQL does not expose the required patient_id column.
188
+ -- Expected: SELECT DISTINCT ... AS patient_id FROM ...
189
+ -- Got: ${e.substring(0,100)}...`;let a=e.trim().replace(/;+\s*$/,""),n=r?.patientIdColumn||"patient_id",l=(t.genders.length?t.genders:["F","M"]).map(e=>`'${e}'`).join(",");return`
190
+ WITH base_pop AS (
191
+ ${this.indent(a,2)}
192
+ ),
193
+ ag AS (
194
+ SELECT
195
+ ag.age_group_id,
196
+ ag.label,
197
+ ag.min_age_days,
198
+ ag.max_age_days,
199
+ ag.sort_order
200
+ FROM report_builder_dim_age_group ag
201
+ JOIN report_builder_dim_age_category ac
202
+ ON ac.age_category_id = ag.age_category_id
203
+ WHERE ac.code = '${t.ageCategoryCode}'
204
+ AND ag.is_active = 1
205
+ ),
206
+ genders AS (
207
+ SELECT 'F' AS gender
208
+ UNION ALL SELECT 'M' AS gender
209
+ ),
210
+ cnt AS (
211
+ SELECT
212
+ ag.age_group_id AS age_group_id,
213
+ mdp.gender AS gender,
214
+ COUNT(DISTINCT base_pop.${n}) AS value
215
+ FROM base_pop
216
+ JOIN mamba_fact_patients_latest_patient_demographics mdp
217
+ ON mdp.${n} = base_pop.${n}
218
+ JOIN ag
219
+ ON TIMESTAMPDIFF(DAY, mdp.birthdate, :endDate)
220
+ BETWEEN ag.min_age_days AND ag.max_age_days
221
+ WHERE mdp.birthdate IS NOT NULL
222
+ AND mdp.gender IS NOT NULL
223
+ AND mdp.gender IN (${l})
224
+ GROUP BY ag.age_group_id, mdp.gender
225
+ )
226
+ SELECT
227
+ ag.label AS age_group,
228
+ g.gender AS gender,
229
+ COALESCE(cnt.value, 0) AS value
230
+ FROM ag
231
+ CROSS JOIN genders g
232
+ LEFT JOIN cnt
233
+ ON cnt.age_group_id = ag.age_group_id
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 r9({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 ae=[{id:"patient_id",label:"patient_id"},{id:"patient_id",label:"patient_id"},{id:"person_id",label:"person_id"}],at=[{id:"sqlTemplate",label:"SQL Template (direct)"},{id:"configJson",label:"Config JSON Path"},{id:"auto",label:"Auto-detect"},{id:"custom",label:"Custom Extractor"}];function ar({patientIdColumn:e,extractionMethod:t,configPath:r,customExtractor:a,onChangePatientIdColumn:l,onChangeExtractionMethod:i,onChangeConfigPath:s,onChangeCustomExtractor:d}){let c=n().useMemo(()=>ae.find(t=>t.id===e)||ae[0],[e]),m=n().useMemo(()=>at.find(e=>e.id===t)||at[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:ae,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:at,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 aa=[{id:"population-extraction",label:"Population Extraction"},{id:"query-rewriting",label:"Query Rewriting"},{id:"custom",label:"Custom Logic"},{id:"none",label:"Not Supported"}];function an({supportsRedisaggregation:e,redisaggregationStrategy:t,themeIndependent:r,onChangeSupportsRedisaggregation:a,onChangeRedisaggregationStrategy:l,onChangeThemeIndependent:i}){let s=n().useMemo(()=>aa.find(e=>e.id===t)||aa[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:aa,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 al({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 ai=({value:e})=>n().createElement(o.fs1,{id:"sql-preview",labelText:"Generated SQL (base indicator)",value:e,readOnly:!0}),ao=["obs","person","patient","patient_identifier","encounter","programs","visit","provider"];function as({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(ai,{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: ",ao.join(", "))))}function ad({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=r7.analyze(h,e),r=r7.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=r7.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(r9,{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(ar,{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(an,{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(al,{preserveFilters:L,onChange:M}),n().createElement("hr",{style:{border:0,borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)"}}),n().createElement(as,{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 ac(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}let am=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 au({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),rL(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([r_(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(am(r)),_(am(a));let n=ac(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=ac(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=ac(d.configJson),r=t?.baseIndicatorId;if(r){let t=async e=>{let t=new AbortController;try{return await r_(e,t.signal,"full")}finally{t.abort()}},a=await r_(r,void 0,"full");a?"COMPOSITE"===a.kind?(rQ(),e=await r3({baseIndicator:a,ageCategoryCode:v,genders:T,getIndicator:t,compilerOptions:{allowRetired:!0}})):e=r5({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){rQ();let t=await rY(d,async e=>{let t=new AbortController;try{return await r_(e,t.signal,"full")}finally{t.abort()}},new Set,{});e=r2({populationSql:t.sql,ageCategoryCode:v,genders:T})}else{let t=await rY(d,async e=>{let t=new AbortController;try{return await r_(e,t.signal,"full")}finally{t.abort()}},new Set,{});e=r2({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(rB,{title:"Query Results",sql:w,params:{startDate:m,endDate:p},maxRows:500,canRun:A})):null)}async function ap(e,t){let r=String(e??"").trim();if(!r)return null;try{let e=await tH(r,t);if(!e?.uuid)return null;return e}catch{return null}}async function a_(e,t){let r=await ap(e,t);return r?tK(r):null}async function ag(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 a_(e,t);r&&n.push(r)}catch{}}return n}async function aE(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 ag(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 ag(o,n,i.dedupe):[],c=s.length?await ag(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 af(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 ab(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 ay(){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 rp({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 tU(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 r_(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=ab(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 tU(i,r.signal);o=af(e?.configJson)}s=[]}let{conceptUi:d,qaUi:c}=await aE(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 rf(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 r_(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=ab(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 tU(p,r.signal);_=af(e?.configJson)}E=[]}let{conceptUi:b,qaUi:y}=await aE(_?.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(tR,{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(tR,{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(tR,{rows:H,onEdit:V,onRun:K,onDelete:W,onDuplicate:Q,canEdit:a,canRun:l,canDelete:i})))),n().createElement(rc,{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 rg(e)},onUpdate:async(e,t)=>{await rE(e,t)}}),n().createElement(rx,{open:T,mode:L,initial:$,onClose:()=>{C(!1),P(null),M("create")},onCreate:async e=>{await rg(e)},onUpdate:async(e,t)=>{await rE(e,t)},onSaved:async()=>{C(!1),P(null),M("create");let e=new AbortController;await j(e.signal)}}),n().createElement(r8,{open:w,mode:"create",initial:null,onClose:()=>N(!1),onCreate:async e=>{await rg(e)},onSaved:async()=>{N(!1);let e=new AbortController;await j(e.signal)}}),n().createElement(au,{open:R,indicatorUuid:D,onClose:()=>{O(!1),x(null)}}),n().createElement(ad,{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 rg(e)},onUpdate:async(e,t)=>{await rE(e,t)}}))}async function ah({indicator:e,ageCategoryCode:t,genders:r,getIndicator:a,compilerOptions:n={}}){try{if("CUSTOM"===e.kind){let a=ry(e);if(rv(a))return console.error("❌ [CUSTOM] SQL resolution failed:",a.error),{sql:`-- Error: ${a.error}
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)}r7.analyze(n||"",l||void 0);let i=r7.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=r7.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
+ -- ${i.warnings?.join(", ")||"Unknown error"}`,warnings:i.warnings||["Failed to extract population SQL"]}}rQ();let l=await rY(e,a,new Set,n);if(l.error)return{sql:`-- Error: ${l.error.message}
238
+ -- Indicator: ${e.name} (${e.code||e.uuid})
239
+ -- Error Code: ${l.error.code}`,warnings:l.warnings||[l.error.message]};return{sql:r2({populationSql:l.sql,ageCategoryCode:t,genders:r}),warnings:l.warnings}}catch(r){if(r instanceof Error&&"PopulationSqlError"===r.name)throw r;let t=r instanceof Error?r.message:String(r);return{sql:`-- Error building disaggregation SQL: ${t}
240
+ -- Indicator: ${e.name} (${e.code||e.uuid})`,warnings:[`Compilation error: ${t}`]}}}function av(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}}function aS(e,t){let r=" ".repeat(t);return e.split("\n").map(e=>e.trim()?r+e:e).join("\n")}function aT(e){let t=(e??"").toString().trim();return t.length?t:""}function aC(e){if(!e)return e;let t=e.replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'");return(t=t.replace(/\\n/g,"\n")).replace(/':startDate'/g,":startDate").replace(/':endDate'/g,":endDate")}function aw(e){return n().createElement(n().Fragment,null,n().createElement(o.ksK,{id:"section-name",labelText:"Section Name",value:e.name,onChange:t=>e.setName(t.target.value)}),n().createElement(o.fs1,{id:"section-desc",labelText:"(Optional) Description",value:e.description,onChange:t=>e.setDescription(t.target.value)}))}function aN(e,t){return"boolean"==typeof e?e:"boolean"==typeof t?.checked?t.checked:!!e?.target?.checked}function aI(e){let t=`${e.idPrefix}-age-category`,r=`${e.idPrefix}-gender-f`,a=`${e.idPrefix}-gender-m`,l=`${e.idPrefix}-disagg-toggle`;return n().createElement(n().Fragment,null,n().createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"1rem"}},n().createElement("div",{style:{fontWeight:600}},"Disaggregation"),n().createElement(o.lMk,{id:l,labelText:"",toggled:e.disaggEnabled,onToggle:t=>e.setDisaggEnabled(!!t)})),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.75rem"}},n().createElement(o.a32,{id:t,titleText:"Age Category",placeholder:"Select age category",items:e.ageCategories,itemToString:e=>e?e.label:"",selectedItem:e.selectedAgeCategory,onChange:({selectedItem:t})=>e.setSelectedAgeCategory(t??null),disabled:!e.disaggEnabled}),n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:6,padding:"0.75rem"}},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Genders"),n().createElement("div",{style:{display:"flex",gap:"1rem"}},n().createElement(o.Sc0,{id:r,labelText:"F",checked:e.genderF,disabled:!e.disaggEnabled,onChange:(t,r)=>e.setGenderF(aN(t,r))}),n().createElement(o.Sc0,{id:a,labelText:"M",checked:e.genderM,disabled:!e.disaggEnabled,onChange:(t,r)=>e.setGenderM(aN(t,r))})),e.disaggEnabled&&0===e.pickedGenders.length?n().createElement("div",{style:{marginTop:"0.25rem",fontSize:"0.75rem",color:"var(--cds-text-error, #da1e28)"}},"Pick at least one gender"):null)),e.disaggMissing?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Missing disaggregation",subtitle:"BASE/COMPOSITE indicators require section disaggregation (age category + gender)."}):null)}function ak(e){return n().createElement(n().Fragment,null,n().createElement("div",{style:{marginTop:"0.75rem"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search indicators",value:e.q,onChange:t=>e.setQ(t.target.value)})),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.75rem",marginTop:"0.75rem"}},n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:6,padding:"0.75rem"}},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Add Indicators"),e.dbSearching&&n().createElement("div",{style:{marginBottom:"0.5rem"}},n().createElement(o.OuH,{description:"Searching database for matching indicators…",status:"active"})),e.dbSearchError&&!e.dbSearching&&n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Database search failed",subtitle:e.dbSearchError,hideCloseButton:!0,style:{marginBottom:"0.5rem"}}),!e.dbSearching&&0===e.available.length&&e.q&&n().createElement("div",{style:{padding:"0.75rem",background:"var(--cds-background-inverse, #161616)",borderRadius:"4px",marginBottom:"0.5rem",display:"flex",alignItems:"center",gap:"0.5rem",fontSize:"0.875rem"}},n().createElement(tw.$$,{size:16}),n().createElement("span",null,'No indicators found matching "',e.q,'"')),!e.dbSearching&&e.q&&e.available.length>0&&n().createElement("div",{style:{padding:"0.5rem",background:"var(--cds-informational-01, #0f62fe)",color:"white",borderRadius:"4px",marginBottom:"0.5rem",fontSize:"0.75rem",display:"flex",alignItems:"center",gap:"0.5rem"}},n().createElement(tw.$$,{size:14}),n().createElement("span",null,e.available.length," indicator(s) found from database search")),n().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"}},e.available.map(t=>{let r=`${e.idPrefix}-add-${t.id}`;return n().createElement("div",{key:t.id,style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"0.75rem"}},n().createElement(o.Sc0,{id:r,labelText:t.name,checked:e.isSelected(t.id),onChange:(r,a)=>e.toggleIndicator(t,"boolean"==typeof r?r:"boolean"==typeof a?.checked?a.checked:!!r?.target?.checked)}),n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"}},n().createElement(o.vwO,{size:"sm",type:"blue"},t.type),n().createElement(U.c_,{size:16})))}),n().createElement(o.$nd,{size:"sm",kind:"ghost",renderIcon:b.OM},"Select Indicator"))),n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:6,padding:"0.75rem"}},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Selected Indicators"),n().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"}},0===e.selectedFull.length?n().createElement("div",{style:{opacity:.75}},"No indicators selected yet."):e.selectedFull.slice().sort((t,r)=>(e.selected.find(e=>e.id===t.id)?.sortOrder??0)-(e.selected.find(e=>e.id===r.id)?.sortOrder??0)).map((t,r)=>n().createElement("div",{key:t.id,style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"0.75rem"}},n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",minWidth:0}},n().createElement(o.vwO,{size:"sm",type:"blue"},t.type),n().createElement("span",{style:{fontWeight:600,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},t.name),n().createElement(o.vwO,{size:"sm",type:"gray"},t.code)),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===r,onClick:()=>e.moveSelected(t.id,-1)}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Move down",renderIcon:E.yd,disabled:r===e.selectedFull.length-1,onClick:()=>e.moveSelected(t.id,1)}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Remove",renderIcon:P.zH,onClick:()=>e.toggleIndicator(t,!1)}))))))))}function aA(e){return n().createElement(n().Fragment,null,n().createElement("hr",{style:{border:0,borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)"}}),n().createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"1rem"}},n().createElement("div",{style:{fontWeight:600}},"DHIS2 Mapping"),n().createElement(o.lMk,{id:"dhis2-toggle",labelText:"",toggled:e.dhis2Enabled,onToggle:t=>e.setDhis2Enabled(!!t)})),n().createElement("div",{style:{opacity:.8}},"Map section indicators to DHIS2 data elements and category option combos (Age \xd7 Gender)."),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:"0.75rem"}},n().createElement(o.ksK,{id:"dhis2-dataset",labelText:"Dataset UID (optional)",value:e.dhis2DatasetId,disabled:!e.dhis2Enabled,onChange:t=>e.setDhis2DatasetId(t.target.value)}),n().createElement(o.ksK,{id:"dhis2-period",labelText:"Period type",value:e.dhis2PeriodType,disabled:!e.dhis2Enabled,onChange:t=>e.setDhis2PeriodType(t.target.value)}),n().createElement(o.ksK,{id:"dhis2-orgunit",labelText:"OrgUnit strategy",value:e.dhis2OrgUnitStrategy,disabled:!e.dhis2Enabled,onChange:t=>e.setDhis2OrgUnitStrategy(t.target.value||"location")})),e.dhis2Enabled?e.disaggEnabled&&e.selectedAgeCategory&&e.pickedGenders.length?n().createElement("div",{style:{border:"1px solid var(--cds-border-subtle, #e0e0e0)",borderRadius:6,padding:"0.75rem"}},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Indicator mappings"),0===e.selectedFull.length?n().createElement("div",{style:{opacity:.75}},"Select indicators first to map them."):n().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"}},e.selectedFull.slice().sort((t,r)=>(e.selected.find(e=>e.id===t.id)?.sortOrder??0)-(e.selected.find(e=>e.id===r.id)?.sortOrder??0)).map(t=>{let r=e.dhis2IndicatorMap[t.id]??{dataElementId:"",cocByDisagg:{}};return n().createElement("div",{key:`dhis2-${t.id}`,style:{borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)",paddingTop:"0.75rem"}},n().createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"0.75rem"}},n().createElement("div",{style:{minWidth:0}},n().createElement("div",{style:{fontWeight:600,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},t.name," ",n().createElement("span",{style:{opacity:.7}},"(",t.code,")")),n().createElement("div",{style:{fontSize:"0.85rem",opacity:.75}},"Type: ",t.type)),n().createElement("div",{style:{width:"40%"}},n().createElement(o.ksK,{id:`dhis2-de-${t.id}`,labelText:"Data Element UID",value:r.dataElementId,onChange:r=>e.updateDhis2DataElement(t.id,r.target.value)}))),n().createElement("div",{style:{marginTop:"0.75rem",overflowX:"auto"}},n().createElement("table",{style:{width:"100%",borderCollapse:"collapse"}},n().createElement("thead",null,n().createElement("tr",null,n().createElement("th",{style:{textAlign:"left",padding:"0.5rem",borderBottom:"1px solid var(--cds-border-subtle, #e0e0e0)"}},"Disaggregation bucket"),n().createElement("th",{style:{textAlign:"left",padding:"0.5rem",borderBottom:"1px solid var(--cds-border-subtle, #e0e0e0)"}},"Category Option Combo UID"))),n().createElement("tbody",null,e.disaggKeys.map(a=>n().createElement("tr",{key:`${t.id}-${a.key}`},n().createElement("td",{style:{padding:"0.5rem",borderBottom:"1px solid var(--cds-border-subtle, #e0e0e0)"}},a.ageGroup," ",a.gender),n().createElement("td",{style:{padding:"0.5rem",borderBottom:"1px solid var(--cds-border-subtle, #e0e0e0)"}},n().createElement(o.ksK,{id:`dhis2-coc-${t.id}-${a.key}`,labelText:"",hideLabel:!0,value:r.cocByDisagg[a.key]??"",onChange:r=>e.updateDhis2Coc(t.id,a.key,r.target.value)}))))))))}))):n().createElement(o.jeF,{kind:"warning",lowContrast:!0,title:"DHIS2 mapping requires disaggregation",subtitle:"Enable disaggregation and select Age Category + genders before mapping to DHIS2 category option combos."}):null)}function aR(e){let{open:t,onClose:r,onSubmit:a,indicators:l,mode:i="create",initialSection:s}=e,{ageCategories:d,ageCatsLoading:c,ageCatsError:m}=function(e){let[t,r]=n().useState([]),[a,l]=n().useState(!1),[i,o]=n().useState(null);return n().useEffect(()=>{if(!e)return;let t=new AbortController;return l(!0),o(null),rL(t.signal).then(e=>r(e)).catch(e=>o(e?.message??"Failed to load age categories")).finally(()=>l(!1)),()=>t.abort()},[e]),{ageCategories:t,ageCatsLoading:a,ageCatsError:i}}(t),u=function(e){let{open:t,mode:r,initialSection:a,indicators:l,ageCategories:i}=e,o="edit"===r;n().useEffect(()=>{t||x([])},[t]);let[s,d]=n().useState(""),[c,m]=n().useState(""),[u,p]=n().useState(!1),[_,g]=n().useState(null),[E,f]=n().useState(!0),[b,y]=n().useState(!0),[h,v]=n().useState(""),[S,T]=n().useState([]),[C,w]=n().useState([]),[N,I]=n().useState(!1),[k,A]=n().useState(null),[R,O]=n().useState([]),[D,x]=n().useState([]),[L,M]=n().useState(!1),[$,P]=n().useState(""),[U,B]=n().useState("Monthly"),[F,z]=n().useState("location"),[q,j]=n().useState({}),[H,J]=n().useState(null),G=n().useRef(!1);n().useEffect(()=>{t||(G.current=!1)},[t]),n().useEffect(()=>{t&&(o||(d(""),m(""),p(!1),g(null),J(null),f(!0),y(!0),v(""),T([]),M(!1),P(""),B("Monthly"),z("location"),j({})))},[t,o]),n().useEffect(()=>{if(!t||!o||!a||G.current)return;G.current=!0,v(""),d(a.name??""),m(a.description??"");let e=function(e){try{return e?JSON.parse(e):null}catch{return null}}(a.configJson),r=e?.disaggregation,n=!!(r&&!0!==r.none);if(p(n),n){J(r?.ageCategoryUuid??null);let e=Array.isArray(r?.genders)?r.genders:[];f(e.includes("F")),y(e.includes("M"))}else J(null),g(null),f(!0),y(!0);let i=(Array.isArray(e?.indicators)?e.indicators:[]).slice().sort((e,t)=>Number(e.sortOrder??0)-Number(t.sortOrder??0)).map((e,t)=>({id:String(e.indicatorUuid),type:e.kind??"BASE",sortOrder:Number(e.sortOrder??t+1)}));T(i),(async()=>{let e=i.map(e=>e.id).filter(e=>!l.some(t=>t.id===e));if(0===e.length)return x([]);try{let t=(await Promise.all(e.map(e=>r_(e,void 0,"default").catch(t=>(console.warn(`Failed to fetch indicator ${e}:`,t),null))))).filter(Boolean).map(e=>({id:e.uuid,name:e.name,code:e.code??"",type:e.kind}));x(t)}catch(e){console.error("Failed to fetch selected indicator details:",e),x([])}})();let s=e?.exchangeMappings?.dhis2,c=s&&"object"==typeof s?s:null;if(c?.enabled){M(!0),P(c.datasetId??""),B(c.periodType??"Monthly"),z(c.orgUnitStrategy??"location");let e={};for(let t of i)e[t.id]={dataElementId:"",cocByDisagg:{}};for(let t of c.indicatorMappings??[])e[String(t.indicatorUuid)]={dataElementId:t.dataElementId??"",cocByDisagg:t.categoryOptionComboByDisagg??{}};j(e)}else{M(!1),P(""),B("Monthly"),z("location");let e={};for(let t of i)e[t.id]={dataElementId:"",cocByDisagg:{}};j(e)}},[t,o,a,l]),n().useEffect(()=>{if(!H||!i.length)return;let e=i.find(e=>e.uuid===H)??null;e&&g(e)},[H,i]),n().useEffect(()=>{let e=h.trim().toLowerCase();if(!e||l.filter(t=>t.name.toLowerCase().includes(e)||t.code.toLowerCase().includes(e)).length>0){w([]),A(null);return}let t=setTimeout(async()=>{I(!0),A(null);try{let t=new AbortController,r=(await rp({q:e,v:"default",includeRetired:!1},t.signal)).map(e=>({id:e.uuid,name:e.name,code:e.code??"",type:e.kind}));w(r)}catch(e){A(e?.message??"Failed to search database"),w([])}finally{I(!1)}},500);return()=>clearTimeout(t)},[h,l]);let V=n().useMemo(()=>{let e=[];return E&&e.push("F"),b&&e.push("M"),e},[E,b]),W=n().useMemo(()=>S.some(e=>"BASE"===e.type||"COMPOSITE"===e.type),[S])&&(!u||!_?.code||0===V.length),K=n().useMemo(()=>{let e=h.trim().toLowerCase(),t=l.filter(t=>!e||t.name.toLowerCase().includes(e)||t.code.toLowerCase().includes(e));if(!e||t.length>0)return t;let r=new Set(t.map(e=>e.id));return[...t,...C.filter(e=>!r.has(e.id))]},[l,h,C]),Q=n().useMemo(()=>{let e=new Set(S.map(e=>e.id)),t=l.filter(t=>e.has(t.id)),r=R.filter(t=>e.has(t.id)),a=D.filter(t=>e.has(t.id)),n=new Set,i=[];for(let e of[...t,...r,...a])n.has(e.id)||(n.add(e.id),i.push(e));return i},[S,l,R,D]),Y=n().useMemo(()=>{if(!u||!_||0===V.length)return[];let e=(_.ageGroups??[]).map(e=>e.label),t=[];for(let r of e)for(let e of V)t.push({key:`${r}__${e}`,ageGroup:r,gender:e});return t},[u,_,V]),X=n().useCallback((e,t)=>{T(r=>{let a;if(t)if(r.some(t=>t.id===e.id))a=r;else{let t=r.length+1;a=[...r,{id:e.id,type:e.type,sortOrder:t}]}else a=r.filter(t=>t.id!==e.id).map((e,t)=>({...e,sortOrder:t+1}));return a});let r=C.some(t=>t.id===e.id),a=!l.some(t=>t.id===e.id);t&&r&&a?O(t=>t.some(t=>t.id===e.id)?t:[...t,e]):t||O(t=>t.filter(t=>t.id!==e.id))},[C,l]),Z=n().useCallback((e,t)=>{T(r=>{let a=r.slice().sort((e,t)=>e.sortOrder-t.sortOrder),n=a.findIndex(t=>t.id===e);if(n<0)return r;let l=n+t;if(l<0||l>=a.length)return r;let i=a[n];return a[n]=a[l],a[l]=i,a.map((e,t)=>({...e,sortOrder:t+1}))})},[]),ee=n().useCallback((e,t)=>{j(r=>({...r,[e]:{...r[e]??{dataElementId:"",cocByDisagg:{}},dataElementId:t}}))},[]),et=n().useCallback((e,t,r)=>{j(a=>({...a,[e]:{...a[e]??{dataElementId:"",cocByDisagg:{}},cocByDisagg:{...a[e]?.cocByDisagg??{},[t]:r}}}))},[]);return{isEdit:o,name:s,setName:d,description:c,setDescription:m,disaggEnabled:u,setDisaggEnabled:p,selectedAgeCategory:_,setSelectedAgeCategory:g,genderF:E,setGenderF:f,genderM:b,setGenderM:y,q:h,setQ:v,selected:S,setSelected:T,available:K,selectedFull:Q,isSelected:e=>S.some(t=>t.id===e),toggleIndicator:X,moveSelected:Z,pickedGenders:V,disaggMissing:W,disaggKeys:Y,dhis2Enabled:L,setDhis2Enabled:M,dhis2DatasetId:$,setDhis2DatasetId:P,dhis2PeriodType:U,setDhis2PeriodType:B,dhis2OrgUnitStrategy:F,setDhis2OrgUnitStrategy:z,dhis2IndicatorMap:q,setDhis2IndicatorMap:j,updateDhis2DataElement:ee,updateDhis2Coc:et,dbSearching:N,dbSearchError:k}}({open:t,mode:i,initialSection:s,indicators:l,ageCategories:d}),[p,_]=n().useState(!1),[g,E]=n().useState(null),f=!!u.name.trim()&&u.selected.length>0&&!u.disaggMissing&&!p,b=async()=>{if(f){_(!0),E(null);try{let e=await Promise.all(u.selected.slice().sort((e,t)=>e.sortOrder-t.sortOrder).map(e=>r_(e.id,void 0,"full")));console.log("\uD83D\uDCE6 [Section] Loaded indicators:",e.map(e=>({uuid:e.uuid,name:e.name,code:e.code,kind:e.kind,hasSqlTemplate:!!e.sqlTemplate,sqlTemplateLength:e.sqlTemplate?.length||0,hasConfigJson:!!e.configJson,configJsonLength:e.configJson?.length||0})));let t=new Map(e.map(e=>[e.uuid,e])),r=async e=>{let r=t.get(e);if(r)return r;try{let r=await r_(e,void 0,"full");if(r)return t.set(e,r),r}catch(e){}return null},n=u.disaggEnabled&&u.selectedAgeCategory?{version:1,ageCategoryUuid:u.selectedAgeCategory.uuid,ageCategoryCode:u.selectedAgeCategory.code,genders:u.pickedGenders}:{version:1,none:!0},l=await Promise.all(u.selected.slice().sort((e,t)=>e.sortOrder-t.sortOrder).map(async e=>{let a,n=t.get(e.id),l=n?.kind??e.type;if(!n)return{indicatorUuid:e.id,kind:l,sortOrder:e.sortOrder,sql:{compiled:"-- indicator not found",strategy:"MISSING"}};if("FINAL"===l){let t=function(e){try{if(!e?.configJson)return null;let t=JSON.parse(e.configJson);if(t&&1===t.version&&(t.ageCategoryCode||t.ageGroupSetCode))return t;return null}catch{return null}}(n),r=aC(n.sqlTemplate??"");return{indicatorUuid:n.uuid,kind:"FINAL",code:n.code,name:n.name,sortOrder:e.sortOrder,disaggregation:t?{ageCategoryCode:t.ageCategoryCode??t.ageGroupSetCode,genders:t.genders}:void 0,sql:{compiled:r,strategy:"FINAL_TEMPLATE",inputs:t?{baseIndicatorId:t.baseIndicatorId,ageCategoryCode:t.ageCategoryCode??t.ageGroupSetCode,genders:t.genders}:void 0}}}let i=u.selectedAgeCategory?.code??"",o=[];if("COMPOSITE"===l){let e=await ah({indicator:n,ageCategoryCode:i,genders:u.pickedGenders,getIndicator:r,compilerOptions:{allowRetired:!0}});a=e.sql,o=e.warnings||[]}else if("CUSTOM"===l){let e=await ah({indicator:n,ageCategoryCode:i,genders:u.pickedGenders,getIndicator:r,compilerOptions:{allowRetired:!0}});a=e.sql,o=e.warnings||[]}else a=function(e){var t;let{indicator:r,ageCategoryCode:a,genders:n}=e;if("CUSTOM"===r.kind){let e=null;if(r.configJson)try{let t=JSON.parse(r.configJson);t&&1===t.version&&t.patientIdColumn&&(e=t)}catch(e){}r7.analyze(r.sqlTemplate||"",e||void 0);let t=r7.extractPopulationSql(r.sqlTemplate||"",e||void 0);return t.success&&t.sql?r7.applyDisaggregation(t.sql,{ageCategoryCode:a,genders:n??[]},e||void 0):`-- Error: Could not process CUSTOM indicator ${r.name||r.uuid}.
241
+ -- ${t.warnings?.join(", ")||"Unknown error"}
242
+ -- Ensure the indicator has a clear population query structure.`}if("COMPOSITE"===r.kind)return console.warn(`[buildSectionDisaggregationSql] DEPRECATED: Cannot use sync version for COMPOSITE indicator '${r.code||r.uuid}'. Use buildSectionDisaggregationSqlAsync instead.`),`-- Error: Cannot use sync version for COMPOSITE indicator ${r.code||r.uuid}.
243
+ -- Use buildSectionDisaggregationSqlAsync for composite indicators.
244
+ -- This synchronous version cannot recursively compile composite indicators.`;let l=n??[],i=(t=a,String(t).replace(/'/g,"''")),o=l.length>0?l.join(","):null,s=l.length>0?l.map(e=>`'${e}'`).join(","):null,d=rC(r),c=function(e){let t=e.sqlTemplate||"";if(!t&&e.configJson)try{let r=JSON.parse(e.configJson);t=r?.sqlPreview||r?.sqlTemplate||r?.base?.sqlPreview||r?.base?.sqlTemplate||r?.authoring?.base?.sqlPreview||r?.authoring?.base?.sqlTemplate||r?.baseIndicator?.sqlPreview||r?.baseIndicator?.sqlTemplate||""}catch(e){}let r=t.trim();if(!r)return null;if(r&&((r.match(/GROUP BY/gi)||[]).length>1||/age_group.*AS.*aggregat|gender.*AS.*sex|disaggregat/i.test(r)||(r.match(/WITH.*AS\s*\(/gi)||[]).length>1&&/GROUP BY/i.test(r))){let t=function(e){if(!e)return null;let t=e.match(/SELECT\s+COUNT\s*\(\s*DISTINCT\s+\w+\.?\w*\s*\)\s*FROM\s*\(\s*SELECT/i);if(t){let r=av(e,t.index+t[0].length);if(r){let t=`SELECT${r.text}`.trim(),a=r.endIndex,n=e.substring(a).match(/\s*(\w+)\s*([\s\S]*)/);if(n){let e=n[1],r=n[2]||"";if(/GROUP\s+BY\s+(patient_id|patient_id|person_id)/i.test(t)){let a=`SELECT DISTINCT ${e}.patient_id AS patient_id
245
+ FROM (
246
+ ${aS(t,2)}
247
+ ) ${e}
248
+ ${r.trim()}`;return a=a.replace(RegExp(`${e}\\.patient_id`,"g"),"patient_id")}}}}let r=e.match(/FROM\s*\(\s*SELECT/i);if(r){let t=av(e,r.index+r[0].length);if(t){let r=`SELECT${t.text}`.trim(),a=t.endIndex;if(e.substring(a).match(/\s*(\w+)\s*(?:WHERE|GROUP BY|ORDER BY|HAVING|$)/i)&&/GROUP\s+BY\s+(patient_id|patient_id|person_id)/i.test(r))return r}}let a=e.match(/WITH\s+\w+\s+AS\s*\(\s*SELECT[\s\S]*?FROM\s*\(\s*SELECT/i);if(a){let t=av(e,a.index+a[0].length);if(t){let e=`SELECT${t.text}`.trim();if(/GROUP\s+BY\s+(patient_id|patient_id|person_id)/i.test(e))return e}}let n=e.match(/SELECT\s+(patient_id|patient_id|person_id)[\s\S]*?FROM\s+[\w_]+[\s\S]*?GROUP\s+BY\s+(patient_id|patient_id|person_id)/i);return n?n[0]:null}(r);return t||`-- Error: Could not extract population SQL from this complex indicator.
249
+ -- Indicator: ${e.name} (${e.code})
250
+ -- Complex indicators with multiple GROUP BY clauses or age_group/gender aggregation need to have a clear population query structure.
251
+ -- Ensure the indicator has a subquery with: SELECT patient_id FROM ... GROUP BY patient_id`}let a=r.replace(/;+\s*$/,"").replace(/\\n/g,"\n");if(a=a.replace(/:stratDate\b/g,":startDate"),/SELECT\s+DISTINCT\s+(?:\w+\.?patient_id|patient_id)/i.test(a))return a;let n=rC(e);try{let e=rI(a,n,"Patients");if(e)return e}catch(e){}return/^SELECT\s+.*?\s+FROM\s+/i.test(a)?a:null}(r);return c?`
252
+ WITH base_pop AS (
253
+ ${aS(c,2)}
254
+ ),
255
+ ag AS (
256
+ SELECT
257
+ ag.age_group_id,
258
+ ag.label,
259
+ ag.min_age_days,
260
+ ag.max_age_days,
261
+ ag.sort_order
262
+ FROM report_builder_dim_age_group ag
263
+ JOIN report_builder_dim_age_category ac
264
+ ON ac.age_category_id = ag.age_category_id
265
+ WHERE ac.code = '${i}'
266
+ AND ag.is_active = 1
267
+ ),
268
+ genders AS (
269
+ ${o?o.split(",").map((e,t)=>`${0===t?`SELECT '${e}' AS gender`:`UNION ALL
270
+ SELECT '${e}' AS gender`}`).join("\n "):`SELECT DISTINCT gender
271
+ FROM mamba_fact_patients_latest_patient_demographics
272
+ WHERE gender IS NOT NULL`}
273
+ ),
274
+ cnt AS (
275
+ SELECT
276
+ ag.age_group_id AS age_group_id,
277
+ mdp.gender AS gender,
278
+ COUNT(DISTINCT base_pop.${d}) AS value
279
+ FROM base_pop
280
+ JOIN mamba_fact_patients_latest_patient_demographics mdp
281
+ ON mdp.${d} = base_pop.${d}
282
+ JOIN ag
283
+ ON TIMESTAMPDIFF(DAY, mdp.birthdate, :endDate)
284
+ BETWEEN ag.min_age_days AND ag.max_age_days
285
+ WHERE mdp.birthdate IS NOT NULL
286
+ AND mdp.gender IS NOT NULL
287
+ ${s?`AND mdp.gender IN (${s})`:""}
288
+ GROUP BY ag.age_group_id, mdp.gender
289
+ )
290
+ SELECT
291
+ ag.label AS age_group,
292
+ g.gender AS gender,
293
+ COALESCE(cnt.value, 0) AS value
294
+ FROM ag
295
+ CROSS JOIN genders g
296
+ LEFT JOIN cnt
297
+ ON cnt.age_group_id = ag.age_group_id
298
+ AND cnt.gender = g.gender
299
+ ORDER BY ag.sort_order, g.gender;
300
+ `.trim():`-- Unable to build section disaggregation SQL: indicator does not contain usable population SQL.
301
+ -- Ensure the indicator has a valid sqlTemplate or configJson.
302
+ -- Indicator: ${r.name} (${r.code})
303
+ -- Note: For nested composite indicators, use buildSectionDisaggregationSqlAsync.`}({indicator:n,ageCategoryCode:i,genders:u.pickedGenders});return o.length>0&&console.warn(`⚠️ [Section] Compilation warnings for ${n.code}:`,o),a=aC(a),{indicatorUuid:n.uuid,kind:l,code:n.code,name:n.name,sortOrder:e.sortOrder,sql:{compiled:a,strategy:"COMPOSITE"===l?"COMPOSITE+SECTION_DISAGG":"CUSTOM"===l?"CUSTOM+SECTION_DISAGG":"BASE+SECTION_DISAGG",inputs:{sectionAgeCategoryCode:i,sectionGenders:u.pickedGenders}}}})),i=l.filter(e=>e.sql.compiled.trim().startsWith("-- Error:"));if(i.length>0){let e=i.map(e=>{let t=e.name||e.code||"Unknown",r=e.code||"???",a=e.sql.compiled.split("\n").filter(e=>e.trim().startsWith("--"));return`❌ ${t} (${r}):
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
+
306
+ ${e}`)}let o=l.filter(e=>!e.sql.compiled.trim()||"--"===e.sql.compiled.trim());if(o.length>0){let e=o.map(e=>`• ${e.name} (${e.code})`).join("\n");throw Error(`The following indicator(s) compiled to empty SQL:
307
+ ${e}`)}console.log("✅ [Section] All indicators compiled successfully",{total:l.length,withWarnings:l.filter(e=>e.sql.compiled.includes("--"))});let d={version:1,name:u.name.trim(),description:u.description.trim()||void 0,disaggregation:n,indicators:l,exchangeMappings:{dhis2:{version:1,enabled:u.dhis2Enabled,datasetId:aT(u.dhis2DatasetId)||void 0,periodType:aT(u.dhis2PeriodType)||void 0,orgUnitStrategy:u.dhis2OrgUnitStrategy,mappingMode:"dataElement-categoryOptionCombo",indicatorMappings:u.selected.slice().sort((e,t)=>e.sortOrder-t.sortOrder).map(e=>({indicatorUuid:e.id,dataElementId:aT(u.dhis2IndicatorMap[e.id]?.dataElementId)||void 0,categoryOptionComboByDisagg:u.disaggEnabled&&u.disaggKeys.length?u.dhis2IndicatorMap[e.id]?.cocByDisagg??{}:void 0}))}},compiledAt:new Date().toISOString()},c={id:u.isEdit?s?.uuid:void 0,name:u.name.trim(),description:u.description.trim()||void 0,disaggregationEnabled:u.disaggEnabled,ageCategoryUuid:u.disaggEnabled?u.selectedAgeCategory?.uuid??null:null,ageCategoryCode:u.disaggEnabled?u.selectedAgeCategory?.code??null:null,genders:u.pickedGenders,indicators:l.map(e=>({id:e.indicatorUuid,type:e.kind,sortOrder:e.sortOrder,finalDisagg:e.disaggregation})),configJson:JSON.stringify(d,null,2)};a(c)}catch(e){E(e?.message??"Failed to build section config")}finally{_(!1)}}};return n().createElement(o.aFV,{open:t,onRequestClose:r,modalHeading:u.isEdit?"Edit Section":"Create Section",primaryButtonText:u.isEdit?"Save changes":"Create Section",secondaryButtonText:"Cancel",onRequestSubmit:b,primaryButtonDisabled:!f,size:"lg"},n().createElement(o.BJc,{gap:5},n().createElement("div",{style:{opacity:.8}},"Sections are groups of indicators with shared disaggregation options."),c?n().createElement(o.OuH,{description:"Loading age categories…"}):null,m?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Age categories",subtitle:m}):null,g?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Section",subtitle:g}):null,n().createElement(aw,{name:u.name,setName:u.setName,description:u.description,setDescription:u.setDescription}),n().createElement("hr",{style:{border:0,borderTop:"1px solid var(--cds-border-subtle, #e0e0e0)"}}),n().createElement(aI,{disaggEnabled:u.disaggEnabled,setDisaggEnabled:u.setDisaggEnabled,ageCategories:d,selectedAgeCategory:u.selectedAgeCategory,setSelectedAgeCategory:u.setSelectedAgeCategory,genderF:u.genderF,setGenderF:u.setGenderF,genderM:u.genderM,setGenderM:u.setGenderM,pickedGenders:u.pickedGenders,disaggMissing:u.disaggMissing,idPrefix:u.isEdit?"edit":"create"}),n().createElement(ak,{q:u.q,setQ:u.setQ,available:u.available,selectedFull:u.selectedFull,selected:u.selected,isSelected:u.isSelected,toggleIndicator:u.toggleIndicator,moveSelected:u.moveSelected,idPrefix:u.isEdit?"edit":"create",dbSearching:u.dbSearching,dbSearchError:u.dbSearchError}),n().createElement(aA,{dhis2Enabled:u.dhis2Enabled,setDhis2Enabled:u.setDhis2Enabled,dhis2DatasetId:u.dhis2DatasetId,setDhis2DatasetId:u.setDhis2DatasetId,dhis2PeriodType:u.dhis2PeriodType,setDhis2PeriodType:u.setDhis2PeriodType,dhis2OrgUnitStrategy:u.dhis2OrgUnitStrategy,setDhis2OrgUnitStrategy:u.setDhis2OrgUnitStrategy,disaggEnabled:u.disaggEnabled,selectedAgeCategory:u.selectedAgeCategory,pickedGenders:u.pickedGenders,selectedFull:u.selectedFull,selected:u.selected,disaggKeys:u.disaggKeys,dhis2IndicatorMap:u.dhis2IndicatorMap,updateDhis2DataElement:u.updateDhis2DataElement,updateDhis2Coc:u.updateDhis2Coc}),p?n().createElement(o.OuH,{description:"Building section SQL…"}):null))}var aO=r(1672);async function aD(e,t){let{data:r}=await (0,aO.jX)((0,h.openmrsFetch)("/ws/rest/v1/reportbuilder/sectionpreview",{method:"POST",headers:{"Content-Type":"application/json"},body:e,signal:t}));return r}function ax(e){return String(e??"").trim().toLowerCase()}function aL(e){return e?e.replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'"):e}function aM(e){let t=(e.columns??[]).map(ax);return t.includes("age_group")&&t.includes("gender")&&t.includes("value")}function a$(e){let t=String(e??"").trim().toLowerCase().split("-")[0].replace("+","").trim(),r=t.match(/^(\d+)\s*(d|day|days|m|mo|mos|month|months|y|yr|yrs|year|years)?$/i);if(!r){let e=t.match(/\d+/);return e?365*Number(e[0]):1/0}let a=Number(r[1]),n=(r[2]??"y").toLowerCase();return"d"===n||"day"===n||"days"===n?a:"m"===n||"mo"===n||"mos"===n||"month"===n||"months"===n?30*a:365*a}function aP({open:e,onClose:t,section:r}){let[a,l]=n().useState(""),[i,s]=n().useState(""),[c,m]=n().useState(""),[u,p]=n().useState(200),[_,g]=n().useState(!1),[E,f]=n().useState(null),[b,y]=n().useState(null),[h,v]=n().useState({}),[S,T]=n().useState(!1),[C,w]=n().useState(0);n().useEffect(()=>{e&&(l(""),s(""),m(""),p(200),f(null),y(null),g(!1),v({}),w(0))},[e]),n().useEffect(()=>{1===C&&r&&b?.results&&b.results.forEach(e=>{e.indicatorUuid&&!h[e.indicatorUuid]&&I(e.indicatorUuid,r)})},[C,b,r]);let N=!!r?.uuid&&!_,I=(e,t)=>{if(!h[e]){T(!0);try{let r=((t.configJson?JSON.parse(t.configJson):{}).indicators||[]).find(t=>t.indicatorUuid===e);if(!r)return void v(t=>({...t,[e]:"-- Error: Indicator not found in section config"}));let a=r.sql?.compiled;if(!a)return void v(t=>({...t,[e]:"-- Error: No compiled SQL found for this indicator in section config"}));let n=a.replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/&gt;=/g,">=").replace(/&lt;=/g,"<=").replace(/&gte;/g,">=").replace(/&ge;/g,">=").replace(/&lte;/g,"<=").replace(/&le;/g,"<=");v(t=>({...t,[e]:n}))}catch(t){v(r=>({...r,[e]:`-- Error extracting SQL from config: ${t?.message||"Unknown error"}`}))}finally{T(!1)}}},k=async()=>{if(!r?.uuid)return;if(!a||!i)return void f("Start date and End date are required.");let e=new AbortController;g(!0),f(null),y(null);try{let t=await aD({sectionUuid:r.uuid,indicatorUuid:c.trim()||void 0,startDate:a,endDate:i,maxRows:u,params:{}},e.signal);y(t)}catch(e){f(e?.message??"Failed to preview section")}finally{g(!1)}},A=b?.results??[],R=function(e){let t=e.filter(e=>!e.error&&aM(e)),r=(e,t)=>(e.columns??[]).findIndex(e=>ax(e)===t),a=new Set,n=new Set;for(let e of t){let t=r(e,"age_group"),l=r(e,"gender");if(!(t<0)&&!(l<0))for(let r of e.rows??[]){let e=r?.[t],i=r?.[l];null!=e&&a.add(String(e)),null!=i&&n.add(String(i))}}let l=Array.from(n);l.sort((e,t)=>{let r=e.toUpperCase(),a=t.toUpperCase(),n=e=>"F"===e?0:"M"===e?1:2,l=n(r),i=n(a);return l!==i?l-i:r.localeCompare(a)});let i=Array.from(a);i.sort((e,t)=>{let r=a$(e),a=a$(t);return r!==a?r-a:e.localeCompare(t)});let o=[];for(let e of i)for(let t of l){let r=`${e}__${t}`;o.push({key:r,header:`${e} ${t}`,age:e,gender:t})}let s=e.map((e,t)=>{let a={id:e.indicatorUuid||String(t),indicator:aL(e.name||e.code||e.indicatorUuid),kind:e.kind??"",error:e.error??""};for(let e of o)a[e.key]=0;if(!e.error&&aM(e)){let t=r(e,"age_group"),n=r(e,"gender"),l=r(e,"value");for(let r of e.rows??[]){let e=String(r?.[t]??""),i=String(r?.[n]??""),o=r?.[l],s=`${e}__${i}`;s in a&&(a[s]=o??0)}}return a});return{headers:[{key:"indicator",header:"Indicator"},{key:"kind",header:"Type"},...o.map(e=>({key:e.key,header:e.header})),{key:"error",header:"Error"}],rows:s,hasAnyDisagg:o.length>0}}(A),O=A.filter(e=>e.error||!aM(e));return n().createElement(o.aFV,{open:e,onRequestClose:t,modalHeading:r?`Preview Section: ${r.name}`:"Preview Section",primaryButtonText:"Close",secondaryButtonText:"Cancel",onRequestSubmit:t,size:"lg"},n().createElement(o.BJc,{gap:5},r?null:n().createElement(o.jeF,{kind:"warning",lowContrast:!0,title:"No section",subtitle:"Select a section first."}),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.75rem"}},n().createElement(o.ksK,{id:"section-preview-startdate","data-testid":"section-preview-startdate",labelText:"Start date",type:"date",value:a,onChange:e=>l(e.target.value),disabled:!r}),n().createElement(o.ksK,{id:"section-preview-enddate","data-testid":"section-preview-enddate",labelText:"End date",type:"date",value:i,onChange:e=>s(e.target.value),disabled:!r})),n().createElement(o.ksK,{id:"section-preview-indicatoruuid","data-testid":"section-preview-indicatoruuid",labelText:"Indicator UUID (optional)",value:c,onChange:e=>m(e.target.value),disabled:!r}),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr auto",gap:"0.75rem",alignItems:"end"}},n().createElement(o.ksK,{id:"section-preview-maxrows","data-testid":"section-preview-maxrows",labelText:"Max rows",value:String(u),onChange:e=>{let t=Number(e.target.value);p(Number.isFinite(t)&&t>0?t:200)},disabled:!r}),n().createElement(o.$nd,{"data-testid":"section-preview-run",kind:"primary",renderIcon:d.jG,disabled:!N,onClick:k},"Preview Section")),_?n().createElement(o.OuH,{description:"Running section preview…"}):null,E?n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Preview",subtitle:E}):null,n().createElement(o.tUM,{selectedIndex:C,onChange:({selectedIndex:e})=>w(e),"aria-label":"Section preview tabs"},n().createElement(o.wbY,{"aria-label":"Section preview tab list"},n().createElement(o.ozo,null,"Results"),n().createElement(o.ozo,null,"SQL")),n().createElement(o.T2N,null,n().createElement(o.KpK,null,b?n().createElement(n().Fragment,null,R.hasAnyDisagg?n().createElement(o.K3K,{"data-testid":"section-preview-matrix",title:"Section preview matrix",description:"Indicators are rows; disaggregations are columns. Missing values show as 0."},n().createElement(o.bQt,{rows:R.rows,headers:R.headers,size:"md",useZebraStyles:!0},({rows:e,headers:t,getHeaderProps:r,getRowProps:a,getTableProps:l})=>n().createElement(o.XIK,l(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,t.map(e=>n().createElement(o.A0N,{key:e.key,...r({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id,...a({row:e})},e.cells.map(e=>n().createElement(o.nA6,{key:e.id},e.value)))))))):n().createElement(o.jeF,{kind:"info",lowContrast:!0,title:"No disaggregated results",subtitle:"No indicator returned (age_group, gender, value) rows for this preview."}),O.length?n().createElement(o.BJc,{gap:4},n().createElement("div",{style:{fontWeight:600,marginTop:"0.5rem"}},"Other results"),O.map((e,t)=>{var r,a;if(e.error)return n().createElement(o.jeF,{key:`${e.indicatorUuid}-${t}`,kind:"error",lowContrast:!0,title:`Indicator error: ${aL(e.name||e.code||e.indicatorUuid)}`,subtitle:e.error});let{headers:l,tableRows:i}=(r=e.columns??[],a=e.rows??[],{headers:r.map((e,t)=>({key:`${t}`,header:e})),tableRows:(a??[]).map((e,t)=>{let a={id:String(t)};return r.forEach((t,r)=>{a[`${r}`]=e?.[r]}),a})});return n().createElement(o.K3K,{key:`${e.indicatorUuid}-${t}`,title:aL(e.name||e.code||e.indicatorUuid),description:`Returned columns: ${(e.columns??[]).join(", ")}`},n().createElement(o.bQt,{rows:i,headers:l,size:"md",useZebraStyles:!0},({rows:e,headers:t,getHeaderProps:r,getRowProps:a,getTableProps:l})=>n().createElement(o.XIK,l(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,t.map(e=>n().createElement(o.A0N,{key:e.key,...r({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id,...a({row:e})},e.cells.map(e=>n().createElement(o.nA6,{key:e.id},e.value))))))))})):null):n().createElement("div",{style:{opacity:.6}},"Run the preview to see results.")),n().createElement(o.KpK,null,b&&0!==A.length?n().createElement("div",{style:{opacity:S?.6:1}},S&&n().createElement(o.OuH,{description:"Generating SQL preview…"}),n().createElement("div",{style:{fontSize:"0.875rem",color:"#666",marginBottom:"0.5rem"}},"Generated disaggregation SQL for each indicator in this section:"),A.map((e,t)=>{let r=h[e.indicatorUuid];return n().createElement("div",{key:e.indicatorUuid,style:{marginBottom:"1.5rem"}},n().createElement("div",{style:{fontWeight:600,marginBottom:"0.25rem"}},t+1,". ",aL(e.name||e.code||e.indicatorUuid),e.kind?n().createElement("span",{style:{fontWeight:400,color:"#666",marginLeft:"0.5rem"}},"(",e.kind,")"):null),n().createElement("pre",{style:{background:"#f4f4f4",padding:"1rem",borderRadius:"4px",fontSize:"0.875rem",overflow:"auto",maxHeight:"400px",border:"1px solid #e0e0e0"}},r||"Loading SQL…"))})):n().createElement("div",{style:{opacity:.6}},"Run the preview first to generate SQL."))))))}let aU=()=>{let{t:e}=(0,A.useTranslation)(),{has:t}=v(),r=t(y.RB.SECTION_ADD,y.RB.SECTION_EDIT),a=t(y.RB.SQL_EXECUTE),[l,s]=n().useState(""),[d,c]=n().useState(!1),[u,p]=n().useState([]),[,_]=n().useState(!1),[g,E]=n().useState(null),[f,h]=n().useState([]),[,S]=n().useState(!1),[T,C]=n().useState(null),[w,N]=n().useState(!1),[I,k]=n().useState(null),[R,O]=n().useState(!1),[D,x]=n().useState(null),L=n().useMemo(()=>{let e=l.trim().toLowerCase();return u.filter(e=>!e.retired).filter(t=>!e||(t.name??"").toLowerCase().includes(e)||(t.code??"").toLowerCase().includes(e))},[l,u]),M=n().useMemo(()=>[{key:"name",header:e("name","Name")},{key:"indicators",header:e("indicators","Indicators")},{key:"actions",header:e("actions","Actions")}],[e]),$=n().useMemo(()=>L.map(e=>({id:e.uuid,name:e.name,indicators:String(function(e){try{if(!e?.configJson)return 0;let t=JSON.parse(e.configJson);return(Array.isArray(t?.indicators)?t.indicators:[]).length}catch{return 0}}(e)),actions:""})),[L]),P=n().useCallback(async()=>{let e=new AbortController;_(!0),E(null);try{let t=await tp({v:"default"},e.signal);p(t)}catch(e){E(e?.message??"Failed to load sections")}finally{_(!1)}return()=>e.abort()},[]);n().useEffect(()=>{P()},[P]),n().useEffect(()=>{let e=new AbortController;return S(!0),C(null),rp({v:"default",includeRetired:!1},e.signal).then(e=>{h(e.map(e=>({id:e.uuid,type:e.kind,code:e.code??"",name:e.name})))}).catch(e=>C(e?.message??"Failed to load indicators")).finally(()=>S(!1)),()=>e.abort()},[]);let U=async e=>{try{e.id?(await tE(e.id,{name:e.name,description:e.description,configJson:e.configJson}),O(!1),x(null)):(await tg({name:e.name,description:e.description,code:e.name?.trim?.()?e.name.trim().toUpperCase().replace(/[^A-Z0-9]+/g,"_").slice(0,60):void 0,configJson:e.configJson}),c(!1)),await P()}catch(e){console.error("Failed to save section",e)}},B=async e=>{try{let t=await t_(e,void 0,"full");k(t),N(!0)}catch(e){console.error("Failed to load section",e)}},F=async e=>{try{let t=await t_(e,void 0,"full");x(t),O(!0)}catch(e){console.error("Failed to load section for edit",e)}},z=(0,i.zy)();return n().useEffect(()=>{"1"===new URLSearchParams(z.search).get("create")&&c(!0)},[z.search]),n().createElement("div",{className:"-esm-report-builder__sections-page__page___W8CFE"},n().createElement(G,{title:e("reportSection","Manage Report Sections"),subtitle:e("sectionsSubtitle","Draft • Define sections and reuse them in reports"),status:{label:e("draft","Draft"),kind:"warning"}}),n().createElement("div",{className:"-esm-report-builder__sections-page__sectionsPage___QgtJD"},n().createElement("div",{className:"-esm-report-builder__sections-page__headerRow___1UsSW"},n().createElement("h3",{className:"-esm-report-builder__sections-page__title___MUNjM"},e("sections","Sections")),r&&n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:b.OM,onClick:()=>c(!0)},e("createSection","Create Section"))),n().createElement("div",{className:"-esm-report-builder__sections-page__surface___OYYi4"},n().createElement("div",{className:"-esm-report-builder__sections-page__toolbarRow___Nc9lf"},n().createElement(o.vji,{size:"lg",labelText:e("search","Search"),placeholder:e("search","Search"),value:l,onChange:e=>s(e.target.value)})),g?n().createElement("div",{style:{padding:"0.75rem"}},g):null,T?n().createElement("div",{style:{padding:"0.75rem"}},T):null,n().createElement(o.bQt,{rows:$,headers:M,size:"lg",useZebraStyles:!0},({rows:e,headers:t,getHeaderProps:l,getRowProps:i,getTableProps:s})=>n().createElement(o.XIK,s(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,n().createElement(o.A0N,{key:"_hash",style:{width:"3rem"}}),t.map(e=>n().createElement(o.A0N,{key:e.key,...l({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id,"data-testid":`section-row-${String(L.find(t=>t.uuid===e.id)?.name??e.id).replace(/\s+/g,"-")}`,...i({row:e})},n().createElement(o.nA6,null,n().createElement(m.vd,{size:16})),e.cells.map(t=>"actions"===t.info.header?n().createElement(o.nA6,{key:t.id},n().createElement(o.obU,{"data-testid":`section-actions-${e.id}`,size:"sm",ariaLabel:"Actions",flipped:!0},a&&n().createElement(o.XSD,{itemText:"Preview",onClick:()=>B(e.id)}),r&&n().createElement(o.XSD,{itemText:"Edit",onClick:()=>F(e.id)}))):"name"===t.info.header?n().createElement(o.nA6,{key:t.id},n().createElement("div",{style:{fontWeight:600}},t.value)):"indicators"===t.info.header?n().createElement(o.nA6,{key:t.id},n().createElement(o.vwO,{type:"gray",size:"sm"},t.value)):n().createElement(o.nA6,{key:t.id},t.value))))))))),n().createElement(aR,{open:d,onClose:()=>c(!1),onSubmit:U,indicators:f,mode:"create",initialSection:null}),n().createElement(aR,{open:R,onClose:()=>{O(!1),x(null)},onSubmit:U,indicators:f,mode:"edit",initialSection:D}),n().createElement(aP,{open:w,onClose:()=>{N(!1),k(null)},section:I}))},aB="-esm-report-builder__report-visualizer__explorerPanel___w0VjU",aF="-esm-report-builder__report-visualizer__panelHeader___UvhIe",az="-esm-report-builder__report-visualizer__panelTitle___gfz5J",aq="-esm-report-builder__report-visualizer__panelContent___F09Qx",aj="-esm-report-builder__report-visualizer__emptyState___AQyxI";var aH=r(2272),aJ=r(4353),aG=r.n(aJ);let aV=e=>(0,aO.jX)((0,h.openmrsFetch)(e));async function aW(e,t){let r=new URLSearchParams({startDate:e.startDate,endDate:e.endDate,uuid:e.uuid}),a=e.renderType||e.reportCategory?.renderType;return a&&r.set("renderType",a),e.reportCategory?.category==="cqi"&&e.reportingCohort&&r.set("cohortList",e.reportingCohort),e.parameters&&Object.entries(e.parameters).forEach(([e,t])=>{null!=t&&""!==t&&r.set(e,String(t))}),(0,aO.jX)((0,h.openmrsFetch)(`${h.restBaseUrl}/reportbuilder/reportingDefinition?${r.toString()}`,{signal:t}))}async function aK(e,t){let r=`${h.restBaseUrl}/sendreport?uuid=${e}`,a=new AbortController;return(0,aO.jX)((0,h.openmrsFetch)(r,{method:"POST",signal:a.signal,headers:{"Content-Type":"application/json"},body:{...t}}))}let aQ=e=>aG()(e).format("YYYY-MM-DD");function aY(e){if(!e.metaJson)return[];try{let t=JSON.parse(e.metaJson);if(Array.isArray(t.tags))return t.tags;if("string"==typeof t.tags)return t.tags.split(",").map(e=>e.trim()).filter(Boolean);return[]}catch{return[]}}let aX="reportVisualizer.preferences",aZ={explorerExpanded:!0,explorerWidth:350,rowsPerPage:25,lastActiveView:void 0},a0=({value:e,onChange:t,disabled:r})=>{let[l,i]=(0,a.useState)(e),s=(0,a.useRef)(null),[d,c]=(0,a.useState)(!1),m=(0,a.useMemo)(()=>{let e=null;return r=>{e&&clearTimeout(e),e=setTimeout(()=>{t(r)},200)}},[t]);(0,a.useEffect)(()=>{i(e)},[e]),(0,a.useEffect)(()=>{let e=e=>{(e.ctrlKey||e.metaKey)&&"k"===e.key&&(e.preventDefault(),s.current?.focus())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[]);let u=l.length>0,p=e.length>0;return n().createElement("div",{style:{position:"relative"}},n().createElement(o.ksK,{ref:s,id:"report-search-input",labelText:"",placeholder:"Search... (⌘K)",value:l,onChange:e=>{let t=e.target.value;i(t),m(t)},disabled:r,size:"sm",onFocus:()=>c(!0),onBlur:()=>c(!1),style:{borderColor:p||d?"#0f62fe":void 0,backgroundColor:p?"#f4f8ff":void 0}}),n().createElement("div",{style:{position:"absolute",left:"0.75rem",top:"50%",transform:"translateY(-50%)",color:p?"#0f62fe":"#666",pointerEvents:"none",transition:"color 0.15s ease"}},n().createElement(g.vj,{size:16})),u&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.bm,iconDescription:"Clear search",onClick:()=>{i(""),t(""),s.current?.focus()},style:{position:"absolute",right:"0.25rem",top:"50%",transform:"translateY(-50%)",padding:"0.25rem",minWidth:"auto",width:"28px",height:"28px"}}),p&&n().createElement("div",{style:{position:"absolute",left:"0",top:"0",bottom:"0",width:"3px",backgroundColor:"#0f62fe",borderRadius:"4px 0 0 4px"}}))},a1=({categories:e,selectedCategory:t,onSelect:r,disabled:a})=>n().createElement(o.l6P,{id:"report-category-filter",labelText:"Category",value:t||"all",onChange:e=>{let t=e.target.value;r("all"===t?void 0:t)},disabled:a,size:"sm"},n().createElement(o.ebT,{value:"all",text:"All report categories"}),e.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.display||e.name}))),a2=({availableTags:e,selectedTags:t,onChange:r,disabled:l})=>{let[i,s]=(0,a.useState)(""),d=(0,a.useMemo)(()=>e.filter(e=>!t.includes(e)).map(e=>({id:e,label:e,value:e})),[e,t]);return n().createElement("div",null,t.length>0&&n().createElement("div",{style:{marginBottom:"0.5rem",display:"flex",flexWrap:"wrap",gap:"0.5rem"}},t.map(e=>n().createElement(o.vwO,{key:e,type:"blue",style:{display:"flex",alignItems:"center",gap:"0.25rem"}},e,n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.bm,iconDescription:`Remove ${e}`,onClick:()=>{r(t.filter(t=>t!==e))},style:{marginLeft:"0.25rem",padding:"0"}})))),n().createElement(o.a32,{id:"report-tag-filter",titleText:"Tags",placeholder:"Add tag filter",items:d,value:i,itemToString:e=>e?.label||"",onChange:({selectedItem:e})=>{e&&e&&!t.includes(e.value)&&(r([...t,e.value]),s(""))},onInputChange:e=>s(e.target.value||""),disabled:l,size:"sm"}))},a5=({reports:e,selectedReportUuid:t,onSelect:r,loading:l,searchQuery:i=""})=>{let[o,s]=(0,a.useState)(null),[d,c]=(0,a.useState)(-1),m=(0,a.useRef)(null),u=(0,a.useRef)([]),p=(0,a.useCallback)(t=>{if(0!==e.length)switch(t.key){case"ArrowDown":t.preventDefault(),c(t=>{let r=Math.min(t+1,e.length-1);return u.current[r]?.scrollIntoView({block:"nearest"}),r});break;case"ArrowUp":t.preventDefault(),c(e=>{let t=Math.max(e-1,0);return u.current[t]?.scrollIntoView({block:"nearest"}),t});break;case"Enter":t.preventDefault(),d>=0&&d<e.length&&r(e[d]);break;case"Escape":t.preventDefault(),c(-1)}},[e,d,r]);return((0,a.useEffect)(()=>{c(-1),s(null)},[e.length,i]),(0,a.useEffect)(()=>{if(t){let r=e.findIndex(e=>e.uuid===t);r>=0&&c(r)}},[t,e]),l)?n().createElement("div",{style:{padding:"1rem"}},[1,2,3].map(e=>n().createElement("div",{key:e,style:{padding:"0.75rem",marginBottom:"0.5rem",backgroundColor:"#f5f5f5",borderRadius:"4px",animation:"pulse 1.5s ease-in-out infinite"}},n().createElement("div",{style:{height:"14px",width:"70%",backgroundColor:"#e0e0e0",borderRadius:"2px",marginBottom:"0.5rem"}}),n().createElement("div",{style:{height:"12px",width:"40%",backgroundColor:"#e0e0e0",borderRadius:"2px"}})))):0===e.length?n().createElement("div",{style:{padding:"2rem 1rem",textAlign:"center",color:"#666"}},i?n().createElement(n().Fragment,null,n().createElement(g.vj,{size:32,style:{marginBottom:"0.75rem",opacity:.4,color:"#999"}}),n().createElement("p",{style:{fontSize:"0.875rem",marginBottom:"0.25rem"}},'No reports match "',i,'"'),n().createElement("p",{style:{fontSize:"0.75rem",color:"#999"}},"Try adjusting your search or filters")):n().createElement(n().Fragment,null,n().createElement(es.yo,{size:32,style:{marginBottom:"0.75rem",opacity:.4}}),n().createElement("p",{style:{fontSize:"0.875rem",marginBottom:"0.25rem"}},"No reports available"),n().createElement("p",{style:{fontSize:"0.75rem",color:"#999"}},"Select a category to see reports"))):n().createElement("div",{ref:m,role:"listbox","aria-label":"Reports",onKeyDown:p,tabIndex:-1,style:{display:"flex",flexDirection:"column",gap:"0.25rem"}},e.map((e,a)=>{let l=e.uuid===t,i=a===d,c=a===o;return n().createElement("div",{key:e.uuid,ref:e=>u.current[a]=e,onClick:()=>r(e),onMouseEnter:()=>s(a),onMouseLeave:()=>s(null),role:"option","aria-selected":l,tabIndex:i?0:-1,style:{padding:"0.75rem",backgroundColor:l?"#e0f2ff":i?"#f4f8ff":c?"#fafafa":"#ffffff",border:l?"2px solid #0f62fe":i?"2px solid #8ca3f7":"1px solid #e0e0e0",borderRadius:"6px",cursor:"pointer",display:"flex",alignItems:"flex-start",justifyContent:"space-between",transition:"all 0.15s ease",transform:i?"translateX(2px)":"translateX(0)",boxShadow:i?"0 2px 8px rgba(15, 98, 254, 0.15)":l?"0 1px 4px rgba(15, 98, 254, 0.1)":"none"}},n().createElement("div",{style:{flex:1,minWidth:0}},n().createElement("div",{style:{fontWeight:l||i?600:500,color:"#161616",marginBottom:"0.25rem",fontSize:"0.875rem"}},e.name),e.code&&n().createElement("div",{style:{fontSize:"0.75rem",color:"#666",display:"inline-block",padding:"2px 6px",backgroundColor:"#f0f0f0",borderRadius:"3px",marginBottom:"0.25rem"}},e.code),e.description&&n().createElement("div",{style:{fontSize:"0.75rem",color:"#666",marginTop:"0.25rem",lineHeight:"1.4"}},e.description)),l&&n().createElement("div",{style:{backgroundColor:"#0f62fe",borderRadius:"50%",padding:"4px",flexShrink:0,marginLeft:"0.5rem",marginTop:"2px"}},n().createElement(U.MG,{size:12,style:{color:"#ffffff"}})))}))},a6=[{value:"TODAY",label:"Today"},{value:"YESTERDAY",label:"Yesterday"},{value:"THIS_WEEK",label:"This Week"},{value:"LAST_WEEK",label:"Last Week"},{value:"THIS_MONTH",label:"This Month"},{value:"LAST_MONTH",label:"Last Month"},{value:"THIS_QUARTER",label:"This Quarter"},{value:"LAST_QUARTER",label:"Last Quarter"},{value:"THIS_YEAR",label:"This Year"},{value:"LAST_YEAR",label:"Last Year"},{value:"LAST_7_DAYS",label:"Last 7 Days"},{value:"LAST_30_DAYS",label:"Last 30 Days"},{value:"LAST_90_DAYS",label:"Last 90 Days"}];function a3(e){let t=new Date;switch(e){case"TODAY":return{start:t,end:t};case"YESTERDAY":{let e=new Date(t);return e.setDate(t.getDate()-1),{start:e,end:e}}case"THIS_WEEK":{let e=new Date(t);e.setDate(t.getDate()-t.getDay());let r=new Date(t);return r.setDate(t.getDate()+(6-t.getDay())),{start:e,end:r}}case"LAST_WEEK":{let e=new Date(t);e.setDate(t.getDate()-t.getDay()-7);let r=new Date(t);return r.setDate(t.getDate()-t.getDay()-1),{start:e,end:r}}case"THIS_MONTH":return{start:new Date(t.getFullYear(),t.getMonth(),1),end:new Date(t.getFullYear(),t.getMonth()+1,0)};case"LAST_MONTH":return{start:new Date(t.getFullYear(),t.getMonth()-1,1),end:new Date(t.getFullYear(),t.getMonth(),0)};case"THIS_QUARTER":{let e=Math.floor(t.getMonth()/3);return{start:new Date(t.getFullYear(),3*e,1),end:new Date(t.getFullYear(),(e+1)*3,0)}}case"LAST_QUARTER":{let e=Math.floor(t.getMonth()/3);if(0===e)return{start:new Date(t.getFullYear()-1,9,1),end:new Date(t.getFullYear()-1,12,0)};return{start:new Date(t.getFullYear(),(e-1)*3,1),end:new Date(t.getFullYear(),3*e,0)}}case"THIS_YEAR":return{start:new Date(t.getFullYear(),0,1),end:new Date(t.getFullYear(),12,0)};case"LAST_YEAR":return{start:new Date(t.getFullYear()-1,0,1),end:new Date(t.getFullYear()-1,12,0)};case"LAST_7_DAYS":{let e=new Date(t);return e.setDate(t.getDate()-7),{start:e,end:t}}case"LAST_30_DAYS":{let e=new Date(t);return e.setDate(t.getDate()-30),{start:e,end:t}}case"LAST_90_DAYS":{let e=new Date(t);return e.setDate(t.getDate()-90),{start:e,end:t}}default:throw Error(`Unknown relative period: ${e}`)}}function a4(e){return aG()(e).format("YYYY-MM-DD")}let a8=({parameter:e,value:t,error:r,onChange:l})=>{let i=e.config,[s,d]=(0,a.useState)(null),c=(0,a.useRef)(!1),m=(0,a.useMemo)(()=>{if(!t)return null;let e=t.split("-");if(3===e.length){let[t,r,a]=e.map(Number);if(t&&void 0!==r&&void 0!==a&&!isNaN(t)&&!isNaN(r)&&!isNaN(a)){let e=new Date(t,r-1,a);if(!isNaN(e.getTime()))return e}}return null},[t]);return(0,a.useEffect)(()=>{console.log("DateParameterInput useEffect - syncing from parent:",{parameterName:e.name,parsedDate:m,internalValue:s,isUpdatingFromRef:c.current,value:t}),c.current||d(m),c.current=!1},[m]),n().createElement(o.lrV,{dateFormat:"Y-m-d",datePickerType:"single",minDate:i?.minDate?new Date(i.minDate):void 0,maxDate:i?.maxDate?new Date(i.maxDate):void 0,value:s,onChange:r=>{if(console.log("DateParameterInput handleDateChange called:",{date:r,parameterName:e.name,currentValue:t,internalValue:s,isUpdatingFromRef:c.current}),!r){c.current=!0,d(null),l("");return}let a=Array.isArray(r)?r[0]:r;if(a&&!isNaN(a.getTime())){c.current=!0,d(a);let e=a.getFullYear(),t=String(a.getMonth()+1).padStart(2,"0"),r=String(a.getDate()).padStart(2,"0"),n=`${e}-${t}-${r}`;console.log("Calling onChange with:",n),l(n)}}},n().createElement(o.tKA,{id:`${e.name}-input`,labelText:e.label,placeholder:e.label,invalid:!!r,invalidText:r,size:"sm"}))},a7=({parameter:e,value:t,error:r,onChange:a})=>{let l=e.config;return n().createElement(o.Q7x,{id:`report-param-${e.name}`,label:e.label,value:t,onChange:e=>{a(e.target.value)},invalid:!!r,invalidText:r,min:l?.min,max:l?.max,step:l?.step,size:"sm"})},a9=({parameter:e,value:t,onChange:r})=>{let a=e.config;return n().createElement(o.lMk,{id:`report-param-${e.name}`,labelA:a?.falseLabel||"No",labelB:a?.trueLabel||"Yes",toggled:!0===t||"true"===t,onToggle:e=>{r(e)}})},ne=({parameter:e,value:t,error:r,onChange:a})=>{let l=e.config,i=l?.options||[];return i.length<=5?n().createElement(o.l6P,{id:`report-param-${e.name}`,labelText:e.label,value:t,onChange:e=>{a(e.target.value)},invalid:!!r,invalidText:r,size:"sm"},n().createElement(o.ebT,{value:"",text:`Select ${e.label}`}),i.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))):n().createElement("div",null,n().createElement("label",{htmlFor:`report-param-${e.name}`,className:"cds--label"},e.label),n().createElement(o.a32,{id:`report-param-${e.name}`,titleText:e.label,items:i,itemToString:e=>e?.label||"",initialSelectedItem:i.find(e=>e.value===t),onChange:({selectedItem:e})=>{e?a(e.value):a("")},invalid:!!r,invalidText:r,size:"sm"}))};async function nt(e=!1,t,r){var a;let n=new URLSearchParams;n.append("v","full"),e&&n.append("includeAll","true"),t&&n.append("tag",t);let l=n.toString();return(a=await (0,W.wO)(`location?${l}`,r))?Array.isArray(a)?a:Array.isArray(a.results)?a.results:[]:[]}async function nr(e,t){var r;return e?.trim()?(r=await (0,W.wO)(`concept?q=${encodeURIComponent(e)}&v=full`,t))?Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]:[]:[]}async function na(e=!1,t){var r;return(r=await (0,W.wO)(`patientidentifiertype${e?"?includeAll=true&v=default":"?v=default"}`,t))?Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]:[]}async function nn(e=!1,t){var r;return(r=await (0,W.wO)(`personattributetype${e?"?includeAll=true&v=default":"?v=default"}`,t))?Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]:[]}let nl=({parameter:e,value:t,error:r,onChange:l,onSearchQueryChange:i})=>{let s=e.config,{locations:d}=function(e){let[t,r]=(0,a.useState)([]),[n,l]=(0,a.useState)(!1),[i,o]=(0,a.useState)(null);return(0,a.useEffect)(()=>{let t=!1;return(async()=>{l(!0),o(null);try{let a=await nt(!1,e);t||r(a)}catch(e){t||o(e instanceof Error?e.message:"Failed to load locations")}finally{t||l(!1)}})(),()=>{t=!0}},[e]),{locations:t,loading:n,error:i}}(s?.tagUuid),c=d.map(e=>({uuid:e.uuid,label:e.display||e.name})),m=c.find(e=>e.uuid===t),u=(0,a.useCallback)(e=>{i?.(e)},[i]),p=(0,a.useCallback)(({selectedItem:e})=>{e?l(e.uuid||""):l("")},[l]);return n().createElement("div",null,n().createElement("label",{htmlFor:`report-param-${e.name}`,className:"cds--label"},e.label),n().createElement(o.a32,{id:`report-param-${e.name}`,titleText:e.label,items:c,itemToString:e=>e?.label||"",initialSelectedItem:m,onInputChange:u,onChange:p,invalid:!!r,invalidText:r,placeholder:e.label,size:"sm"}))},ni=({parameter:e,value:t,error:r,onChange:l,searchQuery:i="",onSearchQueryChange:s})=>{let d=e.config,{results:c}=function(e,t){let[r,n]=(0,a.useState)([]),[l,i]=(0,a.useState)(!1),[o,s]=(0,a.useState)(null),d=(0,a.useRef)();return(0,a.useEffect)(()=>{if(d.current&&clearTimeout(d.current),!e?.trim()){n([]),i(!1),s(null);return}return d.current=setTimeout(async()=>{i(!0),s(null);try{let r=await nr(e),a=r;t&&t.length>0&&(a=r.filter(e=>t.includes(e.conceptClass?.uuid))),n(a)}catch(e){s(e instanceof Error?e.message:"Failed to search concepts"),n([])}finally{i(!1)}},300),()=>{d.current&&clearTimeout(d.current)}},[e,t]),{results:r,loading:l,error:o}}(i,d?.conceptClassUuids),m=c.map(e=>({uuid:e.uuid,label:e.display||e.name?.name||e.uuid})),u=m.find(e=>e.uuid===t),p=(0,a.useCallback)(e=>{s?.(e)},[s]),_=(0,a.useCallback)(({selectedItem:e})=>{e?l(e.uuid||""):l("")},[l]);return n().createElement("div",null,n().createElement("label",{htmlFor:`report-param-${e.name}`,className:"cds--label"},e.label),n().createElement(o.a32,{id:`report-param-${e.name}`,titleText:e.label,items:m,itemToString:e=>e?.label||"",initialSelectedItem:u,onInputChange:p,onChange:_,invalid:!!r,invalidText:r,placeholder:e.label,size:"sm"}))},no=({parameter:e,value:t,error:r,onChange:l})=>{let{identifierTypes:i}=function(e=!1){let[t,r]=(0,a.useState)([]),[n,l]=(0,a.useState)(!1),[i,o]=(0,a.useState)(null);return(0,a.useEffect)(()=>{let t=!1;return(async()=>{l(!0),o(null);try{let a=await na(e);t||r(a)}catch(e){t||o(e instanceof Error?e.message:"Failed to load identifier types")}finally{t||l(!1)}})(),()=>{t=!0}},[e]),{identifierTypes:t,loading:n,error:i}}(!0),s=i.map(e=>({uuid:e.uuid,label:e.display||e.name||e.uuid})),d=s.find(e=>e.uuid===t),c=(0,a.useCallback)(({selectedItem:e})=>{e?l(e.uuid||""):l("")},[l]);return n().createElement("div",null,n().createElement("label",{htmlFor:`report-param-${e.name}`,className:"cds--label"},e.label),n().createElement(o.a32,{id:`report-param-${e.name}`,titleText:e.label,items:s,itemToString:e=>e?.label||"",initialSelectedItem:d,onChange:c,invalid:!!r,invalidText:r,placeholder:e.label,size:"sm"}))},ns=({parameter:e,value:t,error:r,onChange:l})=>{let i=e.config,{attributeTypes:s}=function(e=!1,t){let[r,n]=(0,a.useState)([]),[l,i]=(0,a.useState)(!1),[o,s]=(0,a.useState)(null);return(0,a.useEffect)(()=>{let r=!1;return(async()=>{i(!0),s(null);try{let a=await nn(e),l=a;t&&(l=a.filter(e=>e.format===t)),r||n(l)}catch(e){r||s(e instanceof Error?e.message:"Failed to load attribute types")}finally{r||i(!1)}})(),()=>{r=!0}},[e,t]),{attributeTypes:r,loading:l,error:o}}(!1,i?.format),d=s.map(e=>({uuid:e.uuid,label:e.display||e.name||e.uuid})),c=d.find(e=>e.uuid===t),m=(0,a.useCallback)(({selectedItem:e})=>{e?l(e.uuid||""):l("")},[l]);return n().createElement("div",null,n().createElement("label",{htmlFor:`report-param-${e.name}`,className:"cds--label"},e.label),n().createElement(o.a32,{id:`report-param-${e.name}`,titleText:e.label,items:d,itemToString:e=>e?.label||"",initialSelectedItem:c,onChange:m,invalid:!!r,invalidText:r,placeholder:e.label,size:"sm"}))},nd=({parameter:e,value:t,error:r,onChange:l,onError:i})=>{let s=e.config,d=(0,a.useCallback)(e=>{let t=e.target.value;s?.minLength&&t.length<s.minLength?i?.(`Minimum ${s.minLength} characters required`):s?.maxLength&&t.length>s.maxLength?i?.(`Maximum ${s.maxLength} characters allowed`):s?.pattern&&!new RegExp(s.pattern).test(t)?i?.("Invalid format"):(i?.(void 0),l(t))},[s,l,i]);return n().createElement(o.ksK,{id:`report-param-${e.name}`,labelText:e.label,value:t,onChange:d,invalid:!!r,invalidText:r,placeholder:e.label,size:"sm"})},nc=({parameters:e,values:t,errors:r,onChange:l,onReset:i,disabled:s})=>{let[d,c]=(0,a.useState)("FIXED"),[m,p]=(0,a.useState)(void 0),_=(0,a.useMemo)(()=>e.filter(e=>"DATE"===e.type||"DATETIME"===e.type),[e]),g=(0,a.useMemo)(()=>_.some(e=>"startdate"===e.name.toLowerCase()||"start_date"===e.name.toLowerCase())&&_.some(e=>"enddate"===e.name.toLowerCase()||"end_date"===e.name.toLowerCase()),[_]);return 0===e.length?n().createElement("div",{style:{padding:"1rem",textAlign:"center",color:"#999"}},n().createElement("p",null,"Select a report to see its parameters")):n().createElement("div",null,n().createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"0.75rem"}},n().createElement("h4",{style:{margin:0,fontSize:"0.875rem",fontWeight:600,color:"#161616"}},"Available filters"),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:u.wM,onClick:i,disabled:s,hasIconOnly:!0,iconDescription:"Reset filters"},"Reset")),_.length>0&&n().createElement("div",{style:{marginBottom:"0.75rem"}},n().createElement("label",{className:"cds--label",style:{fontSize:"0.75rem",fontWeight:400,color:"#525252"}},"Date Selection Mode"),n().createElement(o.zWQ,{legendText:"",name:"date-mode",valueSelected:d,onChange:e=>{c(e),"FIXED"===e&&p(void 0)}},n().createElement(o.aaP,{id:"date-mode-fixed",labelText:"Specific dates",value:"FIXED"}),n().createElement(o.aaP,{id:"date-mode-relative",labelText:"Relative period",value:"RELATIVE"}))),"RELATIVE"===d&&g&&n().createElement("div",{style:{marginBottom:"0.75rem"}},n().createElement(o.l6P,{id:"relative-period-select",labelText:"Select reporting period",value:m,onChange:e=>(e=>{if(p(e),e&&g){let{start:r,end:a}=a3(e),n={...t};_.forEach((e,t)=>{0===t?n[e.name]=a4(r):1===t&&(n[e.name]=a4(a))}),l(n)}})(e.target.value),size:"sm"},n().createElement(o.ebT,{value:"",text:"Select period"}),a6.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label})))),n().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"0.75rem"}},e.map(e=>{if("RELATIVE"===d&&g){let t="startdate"===e.name.toLowerCase()||"start_date"===e.name.toLowerCase(),r="enddate"===e.name.toLowerCase()||"end_date"===e.name.toLowerCase();if(("DATE"===e.type||"DATETIME"===e.type)&&(t||r))return null}return n().createElement("div",{key:e.name,style:{marginBottom:0}},(e=>{let a=t[e.name]||"",i=r[e.name],o={parameter:e,value:a,error:i,onChange:r=>{var a;return a=e.name,void l({...t,[a]:r})}};switch(e.type){case"DATE":case"DATETIME":return n().createElement(a8,{key:e.name,...o});case"NUMBER":return n().createElement(a7,{key:e.name,...o});case"BOOLEAN":return n().createElement(a9,{key:e.name,...o});case"LIST":return n().createElement(ne,{key:e.name,...o});case"LOCATION":return n().createElement(nl,{key:e.name,...o});case"CONCEPT":return n().createElement(ni,{key:e.name,...o});case"IDENTIFIER_TYPE":return n().createElement(no,{key:e.name,...o});case"PERSON_ATTRIBUTE":return n().createElement(ns,{key:e.name,...o});default:return n().createElement(nd,{key:e.name,...o})}})(e))})))},nm=({disabled:e,loading:t,onClick:r,reportSelected:a})=>n().createElement("div",{style:{padding:"1rem",borderTop:"1px solid #e0e0e0",marginTop:"auto"}},n().createElement(o.$nd,{kind:"primary",size:"lg",renderIcon:a?d.jG:E.Qp,onClick:r,disabled:e||t||!a,style:{width:"100%"}},t?"Running...":a?"Run report":"Select a report")),nu=({icon:e,label:t,badge:r,disabled:a,onClick:l,isPrimaryAction:i})=>{let s=n().createElement(o.$nd,{kind:i?"primary":"ghost",size:"sm",hasIconOnly:!0,renderIcon:e,iconDescription:t,onClick:l,disabled:a,style:{margin:"0.25rem 0"}}),d="number"==typeof r?r>0:r;return n().createElement("div",{style:{position:"relative",display:"inline-block"}},s,d&&n().createElement(o.vwO,{size:"sm",type:i?"green":"blue",style:{position:"absolute",top:"-2px",right:"-2px",padding:"0 4px",minHeight:"16px",fontSize:"0.625rem",fontWeight:600}},"number"==typeof r?r:""))},np=({onExpand:e,onRunReport:t,searchActive:r,categoryCount:a,selectedTagCount:l,matchingReportCount:i,hasDateParams:s,hasLocationParams:c,hasOtherParams:u,hasSelectedReport:E})=>n().createElement("aside",{className:`${aB} -esm-report-builder__report-visualizer__collapsed___huSDN`,style:{width:48,alignItems:"center",padding:"0.5rem 0"}},n().createElement("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"0.5rem",width:"100%"}},n().createElement(o.m_M,{align:"right",direction:"right",label:"Show report explorer"},n().createElement(nu,{icon:U.c_,label:"Show report explorer",onClick:e})),void 0!==r&&n().createElement(o.m_M,{align:"right",direction:"right",label:r?"Search active":"Search reports"},n().createElement(nu,{icon:g.vj,label:"Search",badge:r})),void 0!==a&&n().createElement(o.m_M,{align:"right",direction:"right",label:`Category${1===a?"":"ies"}: ${a}`},n().createElement(nu,{icon:m.vd,label:"Category filter",badge:a})),void 0!==l&&l>0&&n().createElement(o.m_M,{align:"right",direction:"right",label:`${l} tag${1===l?"":"s"} selected`},n().createElement(nu,{icon:f.vw,label:"Tag filter",badge:l})),void 0!==i&&n().createElement(o.m_M,{align:"right",direction:"right",label:`${i} report${1===i?"":"s"} found`},n().createElement(nu,{icon:es.yo,label:"Reports",badge:i})),s&&n().createElement(o.m_M,{align:"right",direction:"right",label:"Date parameters"},n().createElement(nu,{icon:_.Vv,label:"Date parameters",badge:!0})),c&&n().createElement(o.m_M,{align:"right",direction:"right",label:"Location parameters"},n().createElement(nu,{icon:p.aZ,label:"Location parameters",badge:!0})),u&&n().createElement(o.m_M,{align:"right",direction:"right",label:"Other parameters"},n().createElement(nu,{icon:m.dJ,label:"Parameters",badge:!0})),n().createElement("div",{style:{flex:1}}),t&&n().createElement(o.m_M,{align:"right",direction:"right",label:E?"Run report":"Select a report first"},n().createElement(nu,{icon:d.jG,label:E?"Run report":"Select a report",onClick:t,disabled:!E,isPrimaryAction:!0})))),n_=({collapsed:e,width:t,onCollapse:r,onExpand:a,categories:l,availableTags:i,reports:s,searchQuery:d,selectedCategory:c,selectedTags:m,selectedReportUuid:u,reportParameters:p,parameterValues:_,parameterErrors:g,onSearchChange:E,onCategoryChange:f,onTagsChange:b,onReportSelect:y,onParameterChange:h,onParametersReset:v,onRunReport:S,loading:T,runningReport:C})=>{let w=d.trim().length>0,N=l.length,I=m.length,k=s.length,A=p.some(e=>"DATE"===e.type||"DATETIME"===e.type),R=p.some(e=>"LOCATION"===e.type),O=p.some(e=>!["DATE","DATETIME","LOCATION"].includes(e.type)),D=!!u;return e?n().createElement(np,{onExpand:a,onRunReport:S,searchActive:w,categoryCount:N,selectedTagCount:I,matchingReportCount:k,hasDateParams:A,hasLocationParams:R,hasOtherParams:O,hasSelectedReport:D}):n().createElement("aside",{className:`${aB}`,style:{width:t}},n().createElement("div",{className:aF},n().createElement("h3",{className:az},"Report Explorer"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.JG,iconDescription:"Hide report explorer",onClick:r})),n().createElement("div",{className:aq},n().createElement("div",{className:"-esm-report-builder__report-visualizer__filterSection___ld3qg",style:{display:"flex",flexDirection:"column",gap:"0.5rem",paddingBottom:"0.75rem",borderBottom:"1px solid #e0e0e0"}},n().createElement(a0,{value:d,onChange:E,disabled:T}),n().createElement(a1,{categories:l,selectedCategory:c,onSelect:f,disabled:T}),i.length>0&&n().createElement(a2,{availableTags:i,selectedTags:m,onChange:b,disabled:T})),u&&p.length>0&&n().createElement("div",{className:"-esm-report-builder__report-visualizer__parameterSection___lIv-6",style:{padding:"0.75rem 0",borderBottom:"1px solid #e0e0e0"}},n().createElement(nc,{parameters:p,values:_,errors:g,onChange:h,onReset:v,disabled:C}),n().createElement("div",{style:{marginTop:"0.75rem"}},n().createElement(nm,{reportSelected:!!u,loading:C,onClick:S}))),n().createElement("div",{className:"-esm-report-builder__report-visualizer__reportsListWrapper___-v6ha",style:{flex:1,overflow:"auto",paddingTop:"0.75rem"}},n().createElement("h4",{style:{margin:"0 0 0.5rem 0",fontSize:"0.875rem",fontWeight:600,color:"#161616"}},"Reports ",s.length>0&&`(${s.length})`),n().createElement(a5,{reports:s,selectedReportUuid:u,onSelect:y,loading:T}))))},ng=({capabilities:e,activeView:t,onViewChange:r,disabled:a})=>{let l=[...e.reportLayout?[{label:"Report Layout",value:"REPORT_LAYOUT",icon:es.yo}]:[],...e.pivot?[{label:"Pivot",value:"PIVOT",icon:c.eB}]:[],...e.chart?[{label:"Chart",value:"CHART",icon:_._C}]:[],...e.table?[{label:"Table",value:"TABLE",icon:f.XI}]:[]];if(0===l.length)return null;let i=l.findIndex(e=>e.value===t);return n().createElement(o.Tps,{selectedIndex:i,onChange:e=>{let t=l.find(t=>t.value===e.name);t&&r(t.value)},size:"sm"},l.map(e=>n().createElement(o.dOG,{key:e.value,name:e.value,text:e.label,disabled:a})))},nE=({onExport:e,disabled:t,loading:r})=>{let[l,i]=(0,a.useState)(!1),s=(0,a.useRef)(null),d=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=e=>{s.current&&!s.current.contains(e.target)&&d.current&&!d.current.contains(e.target)&&i(!1)};return l&&document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[l]);let c=(t,r)=>{r.stopPropagation(),i(!1),e(t)};return n().createElement("div",{style:{position:"relative",display:"inline-block"}},n().createElement(o.$nd,{ref:d,kind:"ghost",size:"sm",renderIcon:es.f5,iconDescription:"Export",onClick:()=>i(!l),disabled:t||r},"Export"),l&&n().createElement(o.Wdr,null,n().createElement("div",{ref:s,style:{position:"absolute",top:"100%",right:0,marginTop:"4px",backgroundColor:"white",border:"1px solid #e0e0e0",borderRadius:"4px",boxShadow:"0 2px 8px rgba(0,0,0,0.15)",minWidth:"200px",zIndex:9999},onClick:e=>e.stopPropagation()},n().createElement("div",{style:{padding:"0.5rem",cursor:"pointer",transition:"background-color 0.1s"},onMouseEnter:e=>{e.currentTarget.style.backgroundColor="#f3f3f3"},onMouseLeave:e=>{e.currentTarget.style.backgroundColor="transparent"},onClick:e=>c("CSV",e)},"Export as CSV"),n().createElement("div",{style:{padding:"0.5rem",cursor:"pointer",transition:"background-color 0.1s"},onMouseEnter:e=>{e.currentTarget.style.backgroundColor="#f3f3f3"},onMouseLeave:e=>{e.currentTarget.style.backgroundColor="transparent"},onClick:e=>c("XLSX",e)},"Export as Excel (XLSX)"),n().createElement("div",{style:{padding:"0.5rem",cursor:"pointer",transition:"background-color 0.1s"},onMouseEnter:e=>{e.currentTarget.style.backgroundColor="#f3f3f3"},onMouseLeave:e=>{e.currentTarget.style.backgroundColor="transparent"},onClick:e=>c("PDF",e)},"Export as PDF"))))},nf=({reportName:e,reportDescription:t,capabilities:r,activeView:a,onViewChange:l,onExport:i,onSendToDhis2:s,loading:d,hasResults:c=!1})=>n().createElement("div",{style:{display:"flex",alignItems:"flex-end",justifyContent:"space-between",gap:"1rem"}},n().createElement("div",{style:{flex:1,minWidth:0}},n().createElement("h3",{style:{margin:0,fontSize:"1rem",fontWeight:600,color:"#161616"}},e),t&&n().createElement("p",{style:{margin:"0.25rem 0 0",fontSize:"0.875rem",color:"#666"}},t)),n().createElement("div",{style:{flex:"0 0 auto"}},n().createElement(ng,{capabilities:r,activeView:a,onViewChange:l,disabled:d})),c&&n().createElement(o.Te$,null,s&&r.sendToDhis2&&n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:g.o0,onClick:s,disabled:d},"DHIS2"),n().createElement(nE,{onExport:i,disabled:d,loading:d})));var nb=r(5576);let ny=({rowCount:e,generatedTime:t,parameters:r})=>n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"1rem",flexWrap:"wrap"}},n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"}},n().createElement("span",{style:{fontSize:"0.875rem",color:"#333"}},new Intl.NumberFormat().format(e)," ",1===e?"record":"records")),n().createElement("span",{style:{color:"#999"}},"•"),n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.25rem",fontSize:"0.875rem",color:"#666"}},n().createElement(nb.gX,{size:14}),n().createElement("span",null,"Generated ",(e=>{let t=new Date,r=e.toDateString()===t.toDateString(),a=e.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!1});if(r)return`today ${a}`;let n=new Date(t);return(n.setDate(n.getDate()-1),e.toDateString()===n.toDateString())?`yesterday ${a}`:`${e.toLocaleDateString()} ${a}`})(t))),r&&Object.keys(r).length>0&&n().createElement(n().Fragment,null,n().createElement("span",{style:{color:"#999"}},"•"),n().createElement("div",{style:{display:"flex",gap:"0.25rem",flexWrap:"wrap"}},Object.entries(r).slice(0,3).map(([e,t])=>n().createElement(o.vwO,{key:e,size:"sm",type:"cool-gray"},e,": ",String(t))),Object.keys(r).length>3&&n().createElement(o.vwO,{size:"sm",type:"cool-gray"},"+",Object.keys(r).length-3," more")))),nh=({htmlContent:e,reportName:t})=>{let r=(0,a.useMemo)(()=>e.replace(/<style[^>]*>[\s\S]*?<\/style>/gi,""),[e]);return n().createElement("div",{className:"-esm-report-builder__report-visualizer__reportLayer___Tz8-+"},n().createElement("div",{className:"-esm-report-builder__report-visualizer__reportLayerContent___IfCz3",dangerouslySetInnerHTML:{__html:r},"data-report-name":t}))},nv={completed:"green",complete:"green",done:"green",finished:"green",success:"green",active:"green",open:"green",admitted:"green",started:"green",scheduled:"blue",pending:"blue",missed:"red","missed appointment":"red",failed:"red",error:"red",cancelled:"gray",canceled:"gray",closed:"gray",inactive:"gray","lost to follow-up":"red",lftu:"red",dead:"gray",deceased:"gray",died:"gray",rescheduled:"warm-gray",deferred:"warm-gray","on hold":"warm-gray",warning:"red",unknown:"cool-gray"},nS=({columns:e,hiddenColumns:t,onToggleColumn:r,onShowAll:l,onHideAll:i,disabled:s})=>{let[d,c]=(0,a.useState)(!1),m=(0,a.useRef)(null),u=(0,a.useRef)(null),p=e.length-t.size;(0,a.useEffect)(()=>{let e=e=>{m.current&&!m.current.contains(e.target)&&u.current&&!u.current.contains(e.target)&&c(!1)};return d&&document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[d]);let _=(e,t)=>{t&&t.stopPropagation(),r(e)};return n().createElement("div",{style:{position:"relative",display:"inline-block"}},n().createElement(o.$nd,{ref:u,kind:"ghost",size:"sm",renderIcon:tb.Ss,hasIconOnly:!0,iconDescription:"Column visibility",onClick:()=>c(!d),disabled:s},"Columns"),p>0&&n().createElement("span",{style:{position:"absolute",top:"-4px",right:"-4px",backgroundColor:"#0f62fe",color:"white",fontSize:"10px",minWidth:"16px",height:"16px",borderRadius:"8px",display:"flex",alignItems:"center",justifyContent:"center",padding:"0 4px"}},p),d&&n().createElement(o.Wdr,null,n().createElement("div",{ref:m,style:{position:"absolute",top:"100%",right:0,marginTop:"4px",backgroundColor:"white",border:"1px solid #e0e0e0",borderRadius:"4px",boxShadow:"0 2px 8px rgba(0,0,0,0.15)",minWidth:"250px",maxHeight:"400px",overflowY:"auto",zIndex:9999},onClick:e=>e.stopPropagation()},n().createElement("div",{style:{padding:"0.5rem"}},n().createElement("div",{style:{fontWeight:"bold",marginBottom:"0.5rem",fontSize:"0.875rem"}},"Column Visibility (",p," of ",e.length," shown)"),e.length>1&&n().createElement("div",{style:{marginBottom:"0.5rem",borderBottom:"1px solid #e0e0e0",paddingBottom:"0.5rem"}},l&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:e=>{e.stopPropagation(),l&&l(),c(!1)},style:{width:"100%",justifyContent:"flex-start",marginBottom:"0.25rem"}},"Show all"),i&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:e=>{e.stopPropagation(),i&&i(),c(!1)},style:{width:"100%",justifyContent:"flex-start"}},"Hide all")),n().createElement("div",{style:{maxHeight:"300px",overflowY:"auto"}},e.map(e=>n().createElement("div",{key:e,style:{padding:"0.5rem",display:"flex",alignItems:"center",gap:"0.5rem",cursor:"pointer",borderRadius:"4px",transition:"background-color 0.1s"},onMouseEnter:e=>{e.currentTarget.style.backgroundColor="#f3f3f3"},onMouseLeave:e=>{e.currentTarget.style.backgroundColor="transparent"},onClick:t=>_(e,t)},n().createElement(o.Sc0,{id:`col-${e}`,checked:!t.has(e),onChange:()=>_(e),labelText:e,style:{margin:0}}))))))))},nT=({data:e,columns:t,loading:r,onRefresh:l,title:i,description:s})=>{let[d,c]=(0,a.useState)(1),[m,p]=(0,a.useState)(25),[_,g]=(0,a.useState)(new Set),{paginatedData:E,totalPages:f}=(0,a.useMemo)(()=>{let t=(d-1)*m,r=e.slice(t,t+m),a=Math.ceil(e.length/m);return{paginatedData:r.map((e,r)=>({...e,id:`row-${t+r}`})),totalPages:a}},[e,d,m]),b=(0,a.useMemo)(()=>t.filter(e=>!_.has(e)),[t,_]),y=e=>{g(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},h=()=>{g(new Set)},v=()=>{g(new Set(t))};return r?n().createElement(o.FAs,{style:{width:"100%",minHeight:"200px",display:"flex",alignItems:"center",justifyContent:"center"}},"Loading data..."):0===e.length?n().createElement(o.FAs,{style:{width:"100%",minHeight:"200px"}},n().createElement("h4",null,"No results"),n().createElement("p",null,"No data found for the current parameters."),l&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:u.wM,onClick:l,style:{marginTop:"1rem"}},"Refresh")):n().createElement("div",{style:{width:"100%"}},n().createElement(o.bQt,{rows:E,headers:b.map(e=>({key:e,header:e})),render:({rows:a,headers:g,getHeaderProps:E,getRowProps:b,getTableProps:S})=>n().createElement(o.K3K,{title:i,description:s},n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"1rem",flexWrap:"wrap",gap:"0.5rem"}},n().createElement("div",null,n().createElement("strong",null,e.length," total results")),n().createElement("div",{style:{display:"flex",gap:"0.5rem",alignItems:"center"}},t.length>1&&n().createElement(nS,{columns:t,hiddenColumns:_,onToggleColumn:y,onShowAll:h,onHideAll:v,disabled:r}),l&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:u.wM,iconDescription:"Refresh data",onClick:l,disabled:r},"Refresh"))),n().createElement(o.XIK,S(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,g.map(e=>n().createElement(o.A0N,E({header:e}),e.header)))),n().createElement(o.BFY,null,a.map(e=>n().createElement(o.Hjg,b({row:e}),e.cells.map(e=>{let t=e.info.header;return n().createElement(o.nA6,{key:e.id},((e,t)=>{let r;if(null==t)return"—";if(r=e.toLowerCase(),["status","state","result","outcome","condition","appointment","visit"].some(e=>r.includes(e))){let e={type:function(e){if(!e)return"cool-gray";let t=e.toLowerCase().trim();return nv[t]?nv[t]:t.includes("complet")||t.includes("success")?"green":t.includes("miss")||t.includes("fail")?"red":t.includes("resched")||t.includes("defer")?"warm-gray":t.includes("cancel")||t.includes("close")?"gray":t.includes("pend")||t.includes("sched")?"blue":"cool-gray"}(t)};return n().createElement(o.vwO,e,String(t))}if(t instanceof Date)return t.toLocaleDateString();if("object"==typeof t&&null!==t&&!Array.isArray(t)){let{year:e,month:r,day:a,date:n}=t;if("number"==typeof e&&"number"==typeof r){let t=new Date(e,r-1,a||n||1);if(!isNaN(t.getTime()))return t.toLocaleDateString()}}if(Array.isArray(t)&&t.length>=3){let[e,r,a]=t;if("number"==typeof e&&"number"==typeof r&&"number"==typeof a){let t=new Date(e,r-1,a);if(e>1e3&&!isNaN(t.getTime()))return t.toLocaleDateString()}}return String(t)})(t,e.value))}))))),f>1&&n().createElement(o.dKS,{page:d,pageSize:m,pageSizes:[10,25,50,100],totalItems:e.length,onChange:({page:e,pageSize:t})=>{c(e),t&&p(t)}}))}))},nC=({selectedReport:e,reportResults:t,runningReport:r,htmlContent:a,activeView:l="REPORT_LAYOUT",onViewChange:i,capabilities:s={table:!0,pivot:!1,chart:!1,reportLayout:!1,export:!0,sendToDhis2:!1},onExport:d,onSendToDhis2:c,parameterValues:m})=>{n().useEffect(()=>{console.log("ReportWorkspacePanel props:",{hasSelectedReport:!!e,hasReportResults:!!t,hasHtmlContent:!!a,runningReport:r,activeView:l,reportResultsDataLength:t?.data?.length,reportResultsColumnsLength:t?.columns?.length})},[e,t,a,r,l]);let u=()=>{console.log("Refreshing report")};return n().createElement("main",{className:"-esm-report-builder__report-visualizer__workspacePanel___DgBwB"},n().createElement("div",{className:aF},e?n().createElement(nf,{reportName:e.name,reportDescription:e.description,capabilities:s,activeView:l,onViewChange:e=>{i&&i(e)},onExport:e=>{d&&d(e)},onSendToDhis2:s.sendToDhis2?()=>{c&&c()}:void 0,loading:r,hasResults:!r&&(t||a)}):n().createElement("h3",{className:az},"Report Workspace")),n().createElement("div",{className:aq},r&&n().createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%"}},n().createElement(o.OuH,{style:{width:"auto"},description:"Running report..."})),!r&&!e&&n().createElement("div",{className:aj},n().createElement(es.yo,{size:48}),n().createElement("p",null,"Select a report to begin"),n().createElement("p",{style:{fontSize:"0.75rem",marginTop:"0.5rem"}},"Search and select a report from the explorer panel")),!r&&e&&!t&&!a&&n().createElement("div",{className:aj},n().createElement(o.OOb,{size:"lg"}),n().createElement("p",{style:{marginTop:"1rem"}},'Click "Run report" to generate results')),!r&&e&&(t||a)&&n().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"}},t?.rowCount!==void 0&&t?.generatedTime&&n().createElement(ny,{rowCount:t.rowCount,generatedTime:new Date(t.generatedTime),parameters:m}),"TABLE"===l&&t?.data&&t.data.length>0&&n().createElement(n().Fragment,null,!1,n().createElement(nT,{data:t.data,columns:t.columns||[],onRefresh:u,title:e.name})),"TABLE"===l&&t&&(!t.data||0===t.data.length)&&n().createElement("div",{style:{padding:"2rem",textAlign:"center",backgroundColor:"#f5f5f5",borderRadius:"4px"}},n().createElement("p",null,"No tabular data available for this report"),!1),"PIVOT"===l&&t?.data&&n().createElement("div",{style:{width:"100%"}},n().createElement("div",{style:{padding:"1rem",backgroundColor:"#f0f0f0",borderRadius:"4px",textAlign:"center"}},n().createElement("p",{style:{margin:0}},"Pivot View"),n().createElement("p",{style:{fontSize:"0.875rem",color:"#666",marginTop:"0.5rem"}},"Pivot table view will be implemented with react-pivottable integration")),n().createElement(nT,{data:t.data,columns:t.columns||[],onRefresh:u,title:e.name})),"CHART"===l&&t?.data&&n().createElement("div",{style:{width:"100%"}},n().createElement("div",{style:{padding:"1rem",backgroundColor:"#f0f0f0",borderRadius:"4px",textAlign:"center"}},n().createElement("p",{style:{margin:0}},"Chart View"),n().createElement("p",{style:{fontSize:"0.875rem",color:"#666",marginTop:"0.5rem"}},"Chart view will be implemented with react-plotly.js integration")),n().createElement(nT,{data:t.data,columns:t.columns||[],onRefresh:u,title:e.name})),"REPORT_LAYOUT"===l&&a&&n().createElement(nh,{htmlContent:a,reportName:e.name}),"REPORT_LAYOUT"===l&&!a&&t?.data&&n().createElement(nT,{data:t.data,columns:t.columns||[],onRefresh:u,title:e.name}))))},nw=()=>{let e,{preferences:t,setExplorerExpanded:r,setLastActiveView:l,isLoaded:i}=function(){let[e,t]=(0,a.useState)(aZ),[r,n]=(0,a.useState)(!1);(0,a.useEffect)(()=>{try{let e=localStorage.getItem(aX);if(e){let r=JSON.parse(e);t({...aZ,...r})}}catch(e){console.error("Failed to load preferences:",e)}finally{n(!0)}},[]),(0,a.useEffect)(()=>{if(r)try{localStorage.setItem(aX,JSON.stringify(e))}catch(e){console.error("Failed to save preferences:",e)}},[e,r]);let l=(0,a.useCallback)(e=>{t(t=>({...t,...e}))},[]),i=(0,a.useCallback)(()=>{t(aZ)},[]),o=(0,a.useCallback)(e=>{l({explorerExpanded:e})},[l]),s=(0,a.useCallback)(e=>{l({explorerWidth:e})},[l]),d=(0,a.useCallback)(e=>{l({rowsPerPage:e})},[l]),c=(0,a.useCallback)(e=>{l({lastActiveView:e})},[l]);return{preferences:e,updatePreferences:l,resetPreferences:i,setExplorerExpanded:o,setExplorerWidth:s,setRowsPerPage:d,setLastActiveView:c,isLoaded:r}}(),[o,s]=(0,a.useState)(!t.explorerExpanded),[d,c]=(0,a.useState)(t.explorerWidth),[m,u]=(0,a.useState)(!1),[p,_]=(0,a.useState)(""),[g,E]=(0,a.useState)(),[f,b]=(0,a.useState)([]),[y,v]=(0,a.useState)(),[S,T]=(0,a.useState)("REPORT_LAYOUT"),[C,w]=(0,a.useState)(!1),[N,I]=(0,a.useState)(null),[k,A]=(0,a.useState)({}),[R,O]=(0,a.useState)(""),{filteredReports:D,loading:x,getReportByUuid:L,availableTags:M}=function(e){let{searchQuery:t,selectedCategory:r,selectedTags:n}=e,{reportLibrary:l,isLoadingReportLibrary:i,isError:o,mutate:s}=function(){let e=`${h.restBaseUrl}/reportbuilder/reportlibrary?v=full`,{data:t,error:r,isLoading:a,mutate:n}=(0,aH.u)(e,aV);return{reportLibrary:t?.data?.results??[],isError:r,isLoadingReportLibrary:a,mutate:n}}(),d=(0,a.useMemo)(()=>{let e=l??[];if(t.trim()){let r=t.toLowerCase();e=e.filter(e=>{let t=e.name?.toLowerCase()||"",a=e.code?.toLowerCase()||"",n=e.description?.toLowerCase()||"";return t.includes(r)||a.includes(r)||n.includes(r)})}return r&&(e=e.filter(e=>e.category?.uuid===r)),n.length>0&&(e=e.filter(e=>{let t=aY(e);return n.every(e=>t.includes(e))})),e},[l,t,r,n]),c=(0,a.useMemo)(()=>{var e;let t;return e=l??[],t=new Set,e.forEach(e=>{aY(e).forEach(e=>t.add(e))}),Array.from(t).sort()},[l]),m=(0,a.useCallback)(e=>l?.find(t=>t.uuid===e),[l]);return{reports:l??[],filteredReports:d,availableTags:c,loading:i,error:o||null,refresh:()=>s(),getReportByUuid:m}}({searchQuery:p,selectedCategory:g,selectedTags:f}),{reportCategories:$,isLoadingReportCategories:P}=function(){let e=`${h.restBaseUrl}/reportbuilder/reportcategory?v=full`,{data:t,error:r,isLoading:a,mutate:n}=(0,aH.u)(e,aV);return{reportCategories:t?.data?.results??[],isError:r,isLoadingReportCategories:a,mutate:n}}(),U=y&&L(y)||null,{parameters:B,values:F,errors:z,setValues:q,validate:j,reset:H}=function(e){let{report:t}=e,r=(0,a.useMemo)(()=>{if(!t?.metaJson)return[];try{let e=JSON.parse(t.metaJson);if(e?.parameters&&Array.isArray(e.parameters))return e.parameters}catch(e){console.error("Failed to parse metaJson:",e)}return[]},[t?.metaJson]),n=(0,a.useMemo)(()=>r.filter(e=>e.required).length,[r]),l=r.length>0,i=(0,a.useMemo)(()=>{let e={},t=new Date().toISOString().split("T")[0];return r.forEach(r=>{void 0!==r.defaultValue?e[r.name]=r.defaultValue:("DATE"===r.type||"DATETIME"===r.type)&&("startDate"===r.name||"endDate"===r.name||r.name.toLowerCase().includes("date"))&&(e[r.name]=t)}),e},[r]),[o,s]=(0,a.useState)(i),[d,c]=(0,a.useState)({}),[m,u]=(0,a.useState)(null);(0,a.useMemo)(()=>{t?.uuid!==m&&(s(i),c({}),u(t?.uuid||null))},[t?.uuid,i,m]);let p=(0,a.useCallback)(e=>{s(e)},[]),_=(0,a.useCallback)(()=>{let e={};return r.forEach(t=>{let r=o[t.name];t.required&&(!r||""===r.toString().trim())&&(e[t.name]=`${t.label} is required`),r&&"NUMBER"===t.type&&isNaN(Number(r))&&(e[t.name]=`${t.label} must be a number`)}),c(e),0===Object.keys(e).length},[r,o]);return{parameters:r,values:o,errors:d,loading:!1,setValues:p,validate:_,reset:(0,a.useCallback)(()=>{s(i),c({})},[i]),clear:(0,a.useCallback)(()=>{s({}),c({})},[]),hasParameters:l,requiredParamsCount:n}}({report:U}),{capabilities:J}={capabilities:e=(0,a.useMemo)(()=>{if(!U)return{table:!1,pivot:!1,chart:!1,reportLayout:!1,export:!1,sendToDhis2:!1};let e={table:!0,pivot:!1,chart:!1,reportLayout:!1,export:!0,sendToDhis2:!1},t=U.reportType?.toLowerCase(),r=U.category?.name?.toLowerCase()||U.category?.display?.toLowerCase()||"";if("linelist"===t||"line_list"===t?(e.pivot=!0,e.chart=!0,e.reportLayout=!0):"aggregate"===t?(e.reportLayout=!0,e.chart=!0,e.sendToDhis2=!0):"indicator"===t&&(e.chart=!0),(r.includes("national")||r.includes("mer")||r.includes("donor")||r.includes("indicator report"))&&(e.sendToDhis2=!0,e.reportLayout=!0),U.metaJson)try{let t=JSON.parse(U.metaJson);t.capabilities&&(void 0!==t.capabilities.pivot&&(e.pivot=t.capabilities.pivot),void 0!==t.capabilities.chart&&(e.chart=t.capabilities.chart),void 0!==t.capabilities.reportLayout&&(e.reportLayout=t.capabilities.reportLayout),void 0!==t.capabilities.export&&(e.export=t.capabilities.export),void 0!==t.capabilities.sendToDhis2&&(e.sendToDhis2=t.capabilities.sendToDhis2)),(t.dhis2||t.dhis2Config)&&(e.sendToDhis2=!0)}catch(e){console.error("Failed to parse metaJson for capabilities:",e)}return e},[U]),canTable:e.table,canPivot:e.pivot,canChart:e.chart,canReportLayout:e.reportLayout,canExport:e.export,canSendToDhis2:e.sendToDhis2};(0,a.useEffect)(()=>{let e=e=>{if(m){let t=Math.max(280,Math.min(700,e.clientX));c(t),c(t)}},t=()=>{u(!1),document.body.style.cursor="default",document.body.style.userSelect=""};if(m)return document.addEventListener("mousemove",e),document.addEventListener("mouseup",t),document.body.style.cursor="col-resize",document.body.style.userSelect="none",()=>{document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",t),document.body.style.cursor="default",document.body.style.userSelect=""}},[m]);let G=(0,a.useCallback)(e=>{e.preventDefault(),u(!0)},[]),V=(0,a.useCallback)(()=>{s(!0),r(!1)},[r]),W=(0,a.useCallback)(()=>{s(!1),r(!0)},[r]),K=(0,a.useCallback)(e=>{_(e)},[]),Q=(0,a.useCallback)(e=>{E(e)},[]),Y=(0,a.useCallback)(e=>{b(e)},[]),X=(0,a.useCallback)(e=>{v(e.uuid),I(null),O(""),A({})},[]),Z=(0,a.useCallback)(e=>{q(e)},[q]),ee=(0,a.useCallback)(()=>{H()},[H]),et=(0,a.useCallback)(e=>{T(e),l(e)},[l]),er=(0,a.useCallback)(async()=>{if(console.log("handleRunReport called - user clicked Run Report button"),U){if(!j())return void(0,h.showNotification)({title:"Validation Error",kind:"error",critical:!1,description:"Please fill in all required parameters"});w(!0),I(null),O(""),A({});try{let e={uuid:U.reportDefinitionUuid||U.reportBuilderReportUuid||U.uuid,startDate:F.startDate||aQ(new Date),endDate:F.endDate||aQ(new Date),renderType:"html",parameters:F};console.log("Executing report:",U.name),console.log("Request params:",e);let t=await aW(e);if(200===t.status){let e=t.data;console.log("Report response data:",e),e._html&&e._html.length>0?O(e._html[0].html||""):e.html&&O(e.html||""),e.json&&A(e.json),I({rowCount:0,generatedTime:new Date().toISOString(),parameters:F}),console.log("Report HTML content set"),(0,h.showToast)({title:"Report executed successfully",kind:"success",critical:!1,description:""})}else throw Error(`Report execution failed with status ${t.status}`)}catch(e){console.error("Failed to run report:",e),(0,h.showNotification)({title:"Error executing report",kind:"error",critical:!0,description:e instanceof Error?e.message:"Unknown error"})}finally{w(!1)}}},[U,F,j]),ea=(0,a.useCallback)(async e=>{if(U)try{var t;let r,a,n=U.reportDefinitionUuid||U.uuid,l=await (t={uuid:n,startDate:F.startDate||aQ(new Date),endDate:F.endDate||aQ(new Date)},r=new AbortController,a=`${h.restBaseUrl}/reportbuilder/reportDownload?startDate=${t.startDate}&endDate=${t.endDate}&uuid=${t.uuid}`,"cqi"===t.reportCategory&&(a+=`&cohortList=${t.reportingCohort}`),(0,aO.jX)((0,h.openmrsFetch)(a,{signal:r.signal})));if(l.ok){let t=l.headers.get("Content-Disposition"),r=t?.match(/filename=(.+)/),a=r?r[1]:`${U.name}.${e.toLowerCase()}`,n=await l.blob(),i=window.URL.createObjectURL(n),o=document.createElement("a");o.href=i,o.download=a,o.click(),window.URL.revokeObjectURL(i),(0,h.showToast)({title:"Export successful",kind:"success",critical:!1,description:""})}else throw Error(`Export failed with status ${l.status}`)}catch(e){console.error("Failed to export report:",e),(0,h.showNotification)({title:"Error exporting report",kind:"error",critical:!0,description:e instanceof Error?e.message:"Unknown error"})}},[U,F]),en=(0,a.useCallback)(async()=>{if(!U)return;let e=(0,h.showModal)("confirm-modal",{close:()=>e(),submit:async()=>{try{let e=U.reportDefinitionUuid||U.uuid,t=await aK(e,k);if(200===t.status)(0,h.showToast)({title:"Report sent to DHIS2",kind:"success",critical:!0,description:`Report ${U.name} sent successfully`});else throw Error(`DHIS2 send failed with status ${t.status}`)}catch(e){console.error("Failed to send to DHIS2:",e),(0,h.showNotification)({title:"Error sending to DHIS2",kind:"error",critical:!0,description:e instanceof Error?e.message:"Unknown error"})}e()},report:U.name})},[U,k]);return n().createElement("div",{className:"-esm-report-builder__report-visualizer__page___umafn"},n().createElement("div",{className:"-esm-report-builder__report-visualizer__panels___fT5IU"},n().createElement(n_,{collapsed:o,width:d,onCollapse:V,onExpand:W,categories:$??[],availableTags:M,reports:D,searchQuery:p,selectedCategory:g,selectedTags:f,selectedReportUuid:y,reportParameters:B,parameterValues:F,parameterErrors:z,onSearchChange:K,onCategoryChange:Q,onTagsChange:Y,onReportSelect:X,onParameterChange:Z,onParametersReset:ee,onRunReport:er,loading:x||P||!i,runningReport:C}),!o&&n().createElement("div",{className:"-esm-report-builder__report-visualizer__resizeHandle___MHsWm",onMouseDown:G}),n().createElement(nC,{explorerCollapsed:o,selectedReport:U,reportResults:N,runningReport:C,htmlContent:R,activeView:S,onViewChange:et,capabilities:J,onExport:ea,onSendToDhis2:J.sendToDhis2?en:void 0,parameterValues:F})))},nN=[{key:"name",header:"Name"},{key:"code",header:"Code"},{key:"domain",header:"Domain"},{key:"description",header:"Description"},{key:"actions",header:""}];function nI({rows:e,onEdit:t,onDelete:r,canEdit:a=!0,canDelete:l=!0}){let i=n().useMemo(()=>(e??[]).map(e=>({id:e.uuid,name:e.name,code:e.code,domain:e.domain,description:e.description??"",actions:e.uuid})),[e]);return n().createElement(o.bQt,{rows:i,headers:nN},({rows:e,headers:i,getHeaderProps:s,getRowProps:d,getTableProps:c,getTableContainerProps:m})=>n().createElement(o.K3K,{title:"Data Themes",description:"Manage derived data themes used by the indicator builder.",...m()},n().createElement(o.e1U,null,n().createElement(o.VbH,null)),n().createElement(o.XIK,c(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,i.map(e=>n().createElement(o.A0N,{key:e.key,...s({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id,...d({row:e})},e.cells.map(i=>"actions"===i.info.header?n().createElement(o.nA6,{key:i.id},n().createElement(o.obU,{size:"sm",ariaLabel:"Theme actions"},a&&n().createElement(o.XSD,{itemText:"Edit",onClick:()=>t(e.id)}),l&&n().createElement(o.XSD,{hasDivider:!0,isDelete:!0,itemText:"Delete",onClick:()=>r(e.id)}))):n().createElement(o.nA6,{key:i.id},i.value))))))))}let nk=[{value:"DIAGNOSIS",text:"Diagnosis"},{value:"OBSERVATIONS",text:"Observations"},{value:"TEST_ORDERS",text:"Test Orders"},{value:"MEDICATION_ORDERS",text:"Medication Orders"},{value:"APPOINTMENTS",text:"Appointments"},{value:"MEDICATION_DISPENSE",text:"Medication Dispense"}];function nA({value:e,onChange:t}){return n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.75rem"}},"Basics"),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.75rem"}},n().createElement(o.ksK,{id:"theme-name",labelText:"Name",value:e.name,onChange:r=>t({...e,name:r.target.value})}),n().createElement(o.ksK,{id:"theme-code",labelText:"Code",helperText:"Short unique code (e.g. DX_OPD)",value:e.code,onChange:r=>t({...e,code:r.target.value})})),n().createElement("div",{style:{marginTop:"0.75rem"}},n().createElement(o.l6P,{id:"theme-domain",labelText:"Main domain",value:e.domain,onChange:r=>t({...e,domain:r.target.value})},nk.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.text})))),n().createElement("div",{style:{marginTop:"0.75rem"}},n().createElement(o.fs1,{id:"theme-desc",labelText:"Description",value:e.description??"",onChange:r=>t({...e,description:r.target.value})})))}function nR(e){return"string"==typeof e?{name:e}:{name:String(e?.name??e?.tableName??e?.table??""),type:e?.type,rows:"number"==typeof e?.rows?e.rows:"number"==typeof e?.tableRows?e.tableRows:null,updateTime:e?.updateTime??null,tableType:e?.tableType??e?.type??null}}async function nO(e){let t=[],r=new Set,a=null;for(let n=0;n<30;n++){if(e?.aborted)return[];let l=100*n,i=await (0,W.wO)(`/reportbuilder/schema?limit=100&startIndex=${l}&totalCount=true`,e),o=function(e){if(!e)return[];let t=[];return Array.isArray(e)?t=e:Array.isArray(e?.results)?t=e.results:Array.isArray(e?.tables)&&(t=e.tables),t.map(nR).filter(e=>!!e.name)}(i);for(let e of o)r.has(e.name)||(r.add(e.name),t.push(e));if(null===a&&(a="number"==typeof i?.totalCount?i.totalCount:null),o.length<100||null!==a&&t.length>=a)break}return t}function nD(e=[]){return e.map(e=>({name:e.name??e.columnName??"",type:e.type??e.dataType,nullable:e.nullable})).filter(e=>e.name.length>0)}async function nx(e,t){let r=await (0,W.wO)(`/etltablecolumn?table=${encodeURIComponent(e)}`,t);return Array.isArray(r)?nD(r):nD(r?.columns??r?.results??[])}function nL(e){return"string"==typeof e?String(e):e?.name??e?.table??e?.tableName??""}function nM({open:e,config:t,onChange:r}){let[a,l]=n().useState([]),[i,s]=n().useState(!1),[d,c]=n().useState(null),[m,u]=n().useState([]),[p,_]=n().useState(!1),[g,E]=n().useState(null);n().useEffect(()=>{if(!e){l([]),s(!1),c(null);return}let t=new AbortController;return s(!0),c(null),nO(t.signal).then(e=>l(e??[])).catch(e=>{e?.name!=="AbortError"&&c(e?.message??"Failed to load tables")}).finally(()=>s(!1)),()=>t.abort()},[e]),n().useEffect(()=>{if(!e){u([]),_(!1),E(null);return}let r=t?.sourceTable;if(!r){u([]),_(!1),E(null);return}let a=new AbortController;return _(!0),E(null),nx(r,a.signal).then(e=>u(e??[])).catch(e=>{e?.name!=="AbortError"&&E(e?.message??"Failed to load columns")}).finally(()=>_(!1)),()=>a.abort()},[e,t?.sourceTable]);let f=n().useMemo(()=>(m??[]).map(e=>e?.name).filter(Boolean),[m]),b=n().useMemo(()=>(a??[]).map(nL).filter(Boolean),[a]),y=e&&!i&&!d,h=e&&!!t.sourceTable&&!p&&!g;return n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.75rem"}},"Source"),n().createElement(o.a32,{id:"theme-source-table",titleText:"Source table/view",items:b,selectedItem:t.sourceTable||null,disabled:!y,placeholder:i?"Loading…":d?"Failed to load tables":"Type to search tables…",onChange:e=>{let a=e?.selectedItem??"";r({...t,sourceTable:a,patientIdColumn:"",dateColumn:"",locationColumn:"",fields:t.fields??[]})}}),n().createElement("div",{style:{marginTop:"0.5rem"}},i?n().createElement(o.OuH,{description:"Loading tables…"}):null,!i&&d?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},d):null),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:"0.75rem",marginTop:"0.75rem"}},n().createElement(o.l6P,{id:"theme-patient-id-col",labelText:"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 n$=["string","number","date","datetime","boolean","coded","json"];function nP({config:e,onChange:t}){let r=e.fields??[],a=(a,n)=>{let l=r.map((e,t)=>t===a?{...e,...n}:e);t({...e,fields:l})};return n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.75rem"}},"Fields"),n().createElement("div",{style:{marginBottom:"0.75rem",opacity:.85,fontSize:"0.875rem"}},"Define the fields exposed by this theme. ",n().createElement("b",null,"expr")," can be a column name or a SQL expression."),0===r.length?n().createElement("div",{style:{marginBottom:"0.75rem",opacity:.8}},"No fields yet. Add at least one field."):null,n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1.2fr 1.2fr 2fr 1fr auto",gap:"0.75rem"}},n().createElement("div",{style:{fontWeight:600}},"Key"),n().createElement("div",{style:{fontWeight:600}},"Label"),n().createElement("div",{style:{fontWeight:600}},"Expression"),n().createElement("div",{style:{fontWeight:600}},"Type"),n().createElement("div",null),r.map((l,i)=>n().createElement(n().Fragment,{key:i},n().createElement(o.ksK,{id:`theme-field-key-${i}`,labelText:"",hideLabel:!0,value:l.key,placeholder:"field_key",onChange:e=>a(i,{key:e.target.value})}),n().createElement(o.ksK,{id:`theme-field-label-${i}`,labelText:"",hideLabel:!0,value:l.label,placeholder:"Field label",onBlur:()=>{!l.key&&l.label&&a(i,{key:(l.label??"").toLowerCase().trim().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,40)})},onChange:e=>a(i,{label:e.target.value})}),n().createElement(o.ksK,{id:`theme-field-expr-${i}`,labelText:"",hideLabel:!0,value:l.expr,placeholder:"column_name or SQL expression",onChange:e=>a(i,{expr:e.target.value})}),n().createElement(o.l6P,{id:`theme-field-type-${i}`,labelText:"",hideLabel:!0,value:l.type,onChange:e=>a(i,{type:e.target.value})},n$.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,iconDescription:"Remove field",renderIcon:P.zH,onClick:()=>{let a;return a=r.filter((e,t)=>t!==i),void t({...e,fields:a})}})))),n().createElement("div",{style:{marginTop:"1rem"}},n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:b.OM,onClick:()=>{let a={key:`field_${r.length+1}`,label:"",expr:"",type:"string"};t({...e,fields:[...r,a]})}},"Add field")))}let nU=["CONCEPT_SEARCH","QUESTION_ANSWER_CONCEPT_SEARCH","TEXT","NUMBER","DATE_RANGE","BOOLEAN","LOCATION_PICKER","CODED_LIST"],nB=["EQUALS","IN","NOT_IN","LIKE","BETWEEN","GTE","LTE","IS_NULL","IS_NOT_NULL"],nF=["conceptUuid","conceptId","string","number","date","datetime","boolean"];function nz(){return`${Date.now()}_${Math.random().toString(16).slice(2)}`}function nq(e,t){let r=(e??"").trim(),a=(t??"").trim();return r&&a?`QA(${r},${a})`:""}function nj(e,t){return(e??[]).map(e=>{let r,a,n=(r=(e.column??"").trim(),(a=/^QA\(([^,]+),([^)]+)\)$/.exec(r))?{questionCol:a[1].trim(),answerCol:a[2].trim()}:null);if(n)return{...e,_id:nz(),_columnMode:"qa",_qaQuestionCol:n.questionCol,_qaAnswerCol:n.answerCol};if("QUESTION_ANSWER_CONCEPT_SEARCH"===e.handler)return{...e,_id:nz(),_columnMode:"qa",_qaQuestionCol:"",_qaAnswerCol:""};let l=t.includes(e.column);return{...e,_id:nz(),_columnMode:l?"pick":"custom"}})}function nH({open:e,config:t,onChange:r,columns:a,loadingCols:l}){let i=n().useMemo(()=>(a??[]).map(e=>e?.name).filter(Boolean),[a]),s=n().useMemo(()=>i.map(e=>({id:e,label:e})),[i]),d=n().useMemo(()=>[{id:"__CUSTOM__",label:"Custom expression…"},{id:"__QA__",label:"Question + Answer…"},...s],[s]),c=n().useMemo(()=>s,[s]),m=n().useRef(""),[u,p]=n().useState(()=>nj(t.conditions,i)),_=n().useCallback(e=>{p(e);let a=e.map(e=>{let t={...e};return delete t._id,delete t._columnMode,delete t._qaQuestionCol,delete t._qaAnswerCol,t});m.current=JSON.stringify(a??[]),r({...t,conditions:a})},[t,r]);n().useEffect(()=>{if(!e)return;let r=JSON.stringify(t.conditions??[]);r!==m.current&&(m.current=r,p(nj(t.conditions,i)))},[e,t.conditions,i]),n().useEffect(()=>{e&&p(e=>(e??[]).map(e=>{if("QUESTION_ANSWER_CONCEPT_SEARCH"===e.handler){let t=e._qaQuestionCol??"",r=e._qaAnswerCol??"";return{...e,_columnMode:"qa",column:nq(t,r)}}return"pick"===e._columnMode&&e.column&&!i.includes(e.column)?{...e,_columnMode:"custom"}:e}))},[e,i]);let g=(e,t)=>_((u??[]).map(r=>r._id===e?{...r,...t}:r)),E=e&&!l;return n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.75rem"}},"Conditions"),n().createElement("div",{style:{marginBottom:"0.75rem",opacity:.85,fontSize:"0.875rem"}},"Define filterable fields for this theme. ",n().createElement("b",null,"Column/Expr")," should be a real column where possible; use custom only when needed."),0===u.length?n().createElement("div",{style:{marginBottom:"0.75rem",opacity:.8}},"No conditions yet."):null,n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1.2fr 1.4fr 1.2fr 2fr 1fr 1.1fr auto",gap:"0.75rem"}},n().createElement("div",{style:{fontWeight:600}},"Key"),n().createElement("div",{style:{fontWeight:600}},"Label"),n().createElement("div",{style:{fontWeight:600}},"Handler"),n().createElement("div",{style:{fontWeight:600}},"Column/Expr"),n().createElement("div",{style:{fontWeight:600}},"Operator"),n().createElement("div",{style:{fontWeight:600}},"Value type"),n().createElement("div",null),u.map(t=>{let r="custom"===t._columnMode?d.find(e=>"__CUSTOM__"===e.id)??null:"qa"===t._columnMode?d.find(e=>"__QA__"===e.id)??null:d.find(e=>e.id===t.column)??null,a=c.find(e=>e.id===(t._qaQuestionCol??""))??null,l=c.find(e=>e.id===(t._qaAnswerCol??""))??null;return n().createElement(n().Fragment,{key:t._id},n().createElement(o.ksK,{id:`theme-cond-key-${t._id}`,labelText:"",hideLabel:!0,value:t.key,disabled:!e,placeholder:"concept_id",onChange:e=>g(t._id,{key:e.target.value})}),n().createElement(o.ksK,{id:`theme-cond-label-${t._id}`,labelText:"",hideLabel:!0,value:t.label,disabled:!e,placeholder:"Diagnosis",onChange:e=>g(t._id,{label:e.target.value})}),n().createElement(o.l6P,{id:`theme-cond-handler-${t._id}`,labelText:"",hideLabel:!0,value:t.handler,disabled:!E,onChange:e=>{let r=e.target.value;"QUESTION_ANSWER_CONCEPT_SEARCH"===r?g(t._id,{handler:r,_columnMode:"qa",column:nq(t._qaQuestionCol??"",t._qaAnswerCol??"")}):g(t._id,{handler:r,_columnMode:"qa"===t._columnMode?"pick":t._columnMode,column:"qa"===t._columnMode?"":t.column})}},nU.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement("div",null,n().createElement(o.a32,{id:`theme-cond-col-${t._id}`,titleText:"",items:d,itemToString:e=>e?e.label:"",selectedItem:r,disabled:!E||"QUESTION_ANSWER_CONCEPT_SEARCH"===t.handler,onChange:({selectedItem:e})=>{let r=e?.id;"__CUSTOM__"===r?g(t._id,{_columnMode:"custom",column:""}):"__QA__"===r?g(t._id,{_columnMode:"qa",column:nq(t._qaQuestionCol??"",t._qaAnswerCol??"")}):"string"==typeof r&&r&&g(t._id,{_columnMode:"pick",column:r})}}),"custom"===t._columnMode&&"QUESTION_ANSWER_CONCEPT_SEARCH"!==t.handler?n().createElement(o.ksK,{id:`theme-cond-col-custom-${t._id}`,labelText:"",hideLabel:!0,value:t.column,disabled:!E,placeholder:"a.some_column",onChange:e=>g(t._id,{column:e.target.value}),style:{marginTop:"0.5rem"}}):null,"qa"===t._columnMode||"QUESTION_ANSWER_CONCEPT_SEARCH"===t.handler?n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.5rem",marginTop:"0.5rem"}},n().createElement(o.a32,{id:`theme-cond-qa-q-${t._id}`,titleText:"",items:c,itemToString:e=>e?e.label:"",selectedItem:a,disabled:!E,placeholder:"Question column",onChange:({selectedItem:e})=>{let r=e?.id??"",a=t._qaAnswerCol??"";g(t._id,{_qaQuestionCol:r,_columnMode:"qa",column:nq(String(r),a)})}}),n().createElement(o.a32,{id:`theme-cond-qa-a-${t._id}`,titleText:"",items:c,itemToString:e=>e?e.label:"",selectedItem:l,disabled:!E,placeholder:"Answer column",onChange:({selectedItem:e})=>{let r=e?.id??"",a=t._qaQuestionCol??"";g(t._id,{_qaAnswerCol:r,_columnMode:"qa",column:nq(a,String(r))})}})):null),n().createElement(o.l6P,{id:`theme-cond-op-${t._id}`,labelText:"",hideLabel:!0,value:t.operator,disabled:!E,onChange:e=>g(t._id,{operator:e.target.value})},nB.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement(o.l6P,{id:`theme-cond-vt-${t._id}`,labelText:"",hideLabel:!0,value:t.valueType,disabled:!E,onChange:e=>g(t._id,{valueType:e.target.value})},nF.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:P.zH,iconDescription:"Remove condition",disabled:!E,onClick:()=>{let e;return e=t._id,_((u??[]).filter(t=>t._id!==e))}}))})),n().createElement(o.BJc,{orientation:"horizontal",gap:3,style:{marginTop:"0.75rem"}},n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:b.OM,disabled:!E,onClick:()=>{var e;return _([...u??[],(e=u.length,{_id:nz(),_columnMode:"pick",key:`cond_${e+1}`,label:"",handler:"CONCEPT_SEARCH",column:"",operator:"IN",valueType:"conceptUuid"})])}},"Add condition")))}var nJ=r(810);let nG=[{key:"Report",label:"Report",Icon:u.pl},{key:"ChartColumn",label:"Chart",Icon:_.n5},{key:"Medication",label:"Medication",Icon:nJ.gG},{key:"Calendar",label:"Appointments",Icon:_.Vv},{key:"Hospital",label:"Facility",Icon:s.vg},{key:"Document",label:"Document",Icon:es.yo},{key:"Search",label:"Search",Icon:g.vj},{key:"Information",label:"Info",Icon:tw.$$},{key:"Warning",label:"Warning",Icon:tb.N5},{key:"CheckmarkFilled",label:"Check",Icon:U._j},{key:"List",label:"List",Icon:p.B8},{key:"Tag",label:"Tag",Icon:f.vw}],nV=["BASE","FINAL"];function nW(e,t="#0f62fe"){let r=(e??"").trim();if(!r)return t;let a=r.startsWith("#")?r:`#${r}`;if(/^#[0-9a-fA-F]{6}$/.test(a))return a.toLowerCase();if(/^#[0-9a-fA-F]{3}$/.test(a)){let e=a[1],t=a[2],r=a[3];return`#${e}${e}${t}${t}${r}${r}`.toLowerCase()}return t}function nK({value:e,onChange:t,open:r}){var a;let l=nW(e.color),i=(a=e.icon,nG.find(e=>e.key===a)?.Icon);return n().createElement("div",null,n().createElement("div",{style:{fontWeight:600,marginBottom:"0.75rem"}},"Metadata"),n().createElement("div",{style:{marginBottom:"0.75rem",opacity:.85,fontSize:"0.875rem"}},"Controls how this theme appears in the UI (icon, color, category, ordering, etc.). Stored as ",n().createElement("b",null,"metaJson"),"."),n().createElement(o.BJc,{gap:5},n().createElement("div",null,n().createElement(o.a32,{id:"theme-meta-icon",titleText:"Icon",items:[...nG],disabled:!r,itemToString:e=>e?e.label:"",selectedItem:nG.find(t=>t.key===e.icon)??null,placeholder:"Type to search icons…",onChange:r=>{let a=r?.selectedItem;t({...e,icon:a?.key??""})}}),i?n().createElement("div",{style:{marginTop:"0.5rem",display:"flex",alignItems:"center",gap:"0.5rem",opacity:.9}},n().createElement(i,{size:20}),n().createElement("span",{style:{fontSize:"0.875rem"}},e.icon)):null),n().createElement("div",null,n().createElement("div",{style:{fontSize:"0.875rem",marginBottom:"0.25rem"}},"Color"),n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"}},n().createElement("input",{id:"theme-meta-color-picker",type:"color",value:l,disabled:!r,onChange:r=>t({...e,color:nW(r.target.value)}),style:{width:"3rem",height:"2.5rem",padding:0,border:"1px solid var(--cds-border-subtle)",borderRadius:"4px",background:"transparent",cursor:r?"pointer":"not-allowed"}}),n().createElement(o.ksK,{id:"theme-meta-color-hex",labelText:"",hideLabel:!0,value:l,disabled:!r,onChange:r=>t({...e,color:nW(r.target.value)})}))),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.75rem"}},n().createElement(o.ksK,{id:"theme-meta-category",labelText:"Category",value:e.category??"",disabled:!r,placeholder:"e.g. Clinical",onChange:r=>t({...e,category:r.target.value})}),n().createElement(o.Q7x,{id:"theme-meta-order",label:"Order",value:Number.isFinite(e.order)?e.order:0,disabled:!r,min:0,step:1,onChange:(r,a)=>{let n=Number(a?.value);t({...e,order:Number.isFinite(n)?n:0})}})),n().createElement(o.Sc0,{id:"theme-meta-beta",labelText:"Beta",checked:!!e.beta,disabled:!r,onChange:(r,{checked:a})=>t({...e,beta:!!a})}),n().createElement(o.fs1,{id:"theme-meta-description-short",labelText:"Short description",value:e.descriptionShort??"",disabled:!r,placeholder:"e.g. Diagnosis-based indicators",onChange:r=>t({...e,descriptionShort:r.target.value})}),n().createElement(o.KFt,{id:"theme-meta-kinds",titleText:"Allowed indicator kinds",items:nV,disabled:!r,itemToString:e=>e?String(e):"",initialSelectedItems:e.allowedIndicatorKinds??[],onChange:r=>{let a=r?.selectedItems??[];t({...e,allowedIndicatorKinds:a})},label:"Select kinds"})))}function nQ({config:e,metaJson:t,onConfigJson:r}){let a=n().useMemo(()=>JSON.stringify(e,null,2),[e]);n().useEffect(()=>{r(a)},[a,r]);let l=({title:e,subtitle:t,value:r,copyLabel:a,textAreaId:l})=>n().createElement("div",{style:{background:"var(--cds-layer-01)",border:"1px solid var(--cds-border-subtle)",borderRadius:8,padding:"1rem"}},n().createElement("div",{style:{display:"flex",alignItems:"start",justifyContent:"space-between",gap:"1rem"}},n().createElement("div",null,n().createElement("div",{style:{fontWeight:600}},e),t?n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8,marginTop:"0.25rem"}},t):null),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:c.QR,iconDescription:a,onClick:()=>{r&&navigator.clipboard?.writeText(r).catch(()=>{})}},"Copy")),n().createElement("div",{style:{marginTop:"0.75rem"}},n().createElement(o.fs1,{id:l,labelText:"",hideLabel:!0,value:r,readOnly:!0,style:{minHeight:420,fontFamily:'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace'}})));return n().createElement("div",null,n().createElement("div",{style:{marginBottom:"0.75rem"}},n().createElement("div",{style:{fontWeight:600}},"Preview"),n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8}},"These are the exact JSON payloads that will be saved.")),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem",alignItems:"start"}},n().createElement(l,{title:"configJson",subtitle:"Data source + fields + conditions.",value:a,copyLabel:"Copy configJson",textAreaId:"theme-config-preview"}),n().createElement(l,{title:"metaJson",subtitle:"UI metadata (icon, color, category, ordering).",value:t,copyLabel:"Copy metaJson",textAreaId:"theme-meta-preview"})))}let nY={sourceTable:"",patientIdColumn:"",dateColumn:"",locationColumn:"",fields:[],conditions:[]},nX={icon:"",color:"#0f62fe",category:"",order:0,beta:!1,descriptionShort:"",allowedIndicatorKinds:["BASE","FINAL"]};function nZ(e){return(e??"").toUpperCase().replace(/[^A-Z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,30)}function n0(e,t){try{if(!e)return t;return JSON.parse(e)??t}catch{return t}}function n1(e){return JSON.stringify({metaJson:e},null,2)}function n2({open:e,mode:t,initial:r,onClose:a,onSave:l}){let[i,s]=n().useState("basics"),[d,c]=n().useState(""),[m,u]=n().useState(""),[p,_]=n().useState("OBSERVATIONS"),[g,E]=n().useState(""),[f,b]=n().useState(nY),[y,h]=n().useState(JSON.stringify(nY,null,2)),[v,S]=n().useState(nX),[T,C]=n().useState(n1(nX)),[,w]=n().useState([]),[N,I]=n().useState(!1),[k,A]=n().useState(null),[R,O]=n().useState([]),[D,x]=n().useState(!1),[L,M]=n().useState(null);n().useEffect(()=>{if(e)if(s("basics"),r){let e;c(r.name??""),u(r.code??""),_(r.domain??"OBSERVATIONS"),E(r.description??"");let t=function(e){let t=n0(e,nY),r=t&&"object"==typeof t&&t.configJson&&"object"==typeof t.configJson?t.configJson:t,a={...nY,...r??{}};Array.isArray(a.fields)||(a.fields=[]),Array.isArray(a.conditions)||(a.conditions=[]);let n=a.conditionColumns&&"object"==typeof a.conditionColumns,l=!Array.isArray(a.conditions)||0===a.conditions.length;if(n&&l){let e=Object.entries(a.conditionColumns);a.conditions=e.map(([e,t])=>{let r=e.toLowerCase().includes("concept");return{key:e,label:e.replace(/_/g," "),handler:r?"CONCEPT_SEARCH":"TEXT",column:t,operator:r?"IN":"EQUALS",valueType:r?"conceptId":"string"}})}return Array.isArray(a.conditions)||(a.conditions=[]),Array.isArray(a.fields)||(a.fields=[]),a}(r.configJson);b(t),h(JSON.stringify(t,null,2));let a=(e=n0(r.metaJson,nX))&&"object"==typeof e&&e.metaJson&&"object"==typeof e.metaJson?{...nX,...e.metaJson}:{...nX,...e};S(a),C(n1(a))}else c(""),u(""),_("OBSERVATIONS"),E(""),b(nY),h(JSON.stringify(nY,null,2)),S(nX),C(n1(nX))},[e,r]),n().useEffect(()=>{if(!e)return;let t=new AbortController;return I(!0),A(null),w([]),nO(t.signal).then(e=>w(e??[])).catch(e=>{e?.name!=="AbortError"&&A(e?.message??"Failed to load schema tables")}).finally(()=>I(!1)),()=>t.abort()},[e]),n().useEffect(()=>{if(!e)return;let t=f?.sourceTable;if(!t){O([]),M(null),x(!1);return}let r=new AbortController;return x(!0),M(null),O([]),nx(t,r.signal).then(e=>O(e??[])).catch(e=>{e?.name!=="AbortError"&&M(e?.message??"Failed to load table columns")}).finally(()=>x(!1)),()=>r.abort()},[e,f?.sourceTable]),n().useEffect(()=>{h(JSON.stringify(f??nY,null,2))},[f]),n().useEffect(()=>{C(n1(v??nX))},[v]);let $=e&&!N&&!k,P=$&&!!d.trim()&&!!(m.trim()||nZ(d)).trim()&&!!p&&!!f?.sourceTable&&!!f?.patientIdColumn&&!!f?.dateColumn;if(!e)return null;let U=({id:e,label:t})=>n().createElement(o.VxE,{isActive:i===e,onClick:()=>s(e)},t);return n().createElement(o.aFV,{open:e,modalHeading:"create"===t?"Create Data Theme":"Edit Data Theme",primaryButtonText:"create"===t?"Create":"Save",secondaryButtonText:"Cancel",onRequestClose:a,onRequestSubmit:()=>{if(!P)return;let e={...r?.uuid?{uuid:r.uuid}:{},name:d.trim(),code:(m.trim()||nZ(d)).trim(),domain:p,description:g.trim(),configJson:y,metaJson:T};l(e)},primaryButtonDisabled:!P,size:"lg"},n().createElement(o.BJc,{gap:6},N?n().createElement(o.OuH,{description:"Loading schema tables…"}):null,!N&&k?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},"Failed to load schema tables: ",k):null,$?n().createElement("div",{style:{display:"grid",gridTemplateColumns:"240px 1fr",gap:"1rem"}},n().createElement("div",null,n().createElement(o.f8J,{expanded:!0,isPersistent:!1,"aria-label":"Theme editor sections"},n().createElement(o.BC4,null,n().createElement(U,{id:"basics",label:"Basics"}),n().createElement(U,{id:"source",label:"Source"}),n().createElement(U,{id:"fields",label:"Fields"}),n().createElement(U,{id:"conditions",label:"Conditions"}),n().createElement(U,{id:"metadata",label:"Metadata"}),n().createElement(U,{id:"preview",label:"Preview"})))),n().createElement(o.UCW,{style:{padding:0}},"basics"===i?n().createElement(nA,{value:{name:d,code:m,domain:p,description:g},onChange:e=>{c(e.name),u(e.code),_(e.domain),E(e.description??"")}}):null,"source"===i?n().createElement(n().Fragment,null,n().createElement(nM,{open:e,config:f,onChange:b}),D?n().createElement(o.OuH,{description:"Loading columns…"}):null,!D&&L?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)",marginTop:"0.5rem"}},"Failed to load table columns: ",L):null):null,"fields"===i?n().createElement(nP,{config:f,onChange:b,open:e}):null,"conditions"===i?n().createElement(nH,{open:e,config:f,onChange:b,columns:R,loadingCols:D}):null,"metadata"===i?n().createElement(nK,{value:v,onChange:S,open:e}):null,"preview"===i?n().createElement(nQ,{config:f,metaJson:T,onConfigJson:h}):null)):null))}function n5(){let{t:e}=(0,A.useTranslation)(),{has:t}=v(),r=t(y.RB.THEME_ADD,y.RB.THEME_EDIT),a=t(y.RB.THEME_PURGE),[l,i]=n().useState(""),[s,d]=n().useState([]),[c,m]=n().useState(!1),[u,p]=n().useState(null),[_,g]=n().useState(!1),[E,f]=n().useState("create"),[h,S]=n().useState(null),T=n().useCallback(e=>(m(!0),p(null),tD(l,e).then(e=>{d((e??[]).map(e=>({uuid:e.uuid??"",name:e.name??"",code:e.code??"",domain:e.domain,description:e.description,retired:e.retired})).filter(e=>!!e.uuid))}).catch(e=>p(e?.message??"Failed to load themes")).finally(()=>m(!1))),[l]);n().useEffect(()=>{let e=new AbortController;return T(e.signal),()=>e.abort()},[T]);let C=async e=>{try{f("edit"),p(null),m(!0);let t=await tx(e);S(t),g(!0)}catch(e){p(e?.message??"Failed to load theme for editing")}finally{m(!1)}},w=async e=>{await t$(e,!1);let t=new AbortController;await T(t.signal)},N=async e=>{if("create"===E)await tL(e);else{if(!e.uuid)throw Error("Missing uuid for update");await tM(e.uuid,e)}g(!1);let t=new AbortController;await T(t.signal)};return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:e("dataTheme","Data Themes"),subtitle:e("dataThemeSubTitle"," Define reusable data sources (mamba_* tables/views) for indicators and reporting.")}),n().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"end",gap:"1rem"}},n().createElement("div",null),r&&n().createElement(o.$nd,{size:"sm",kind:"primary",renderIcon:b.OM,onClick:()=>{f("create"),S(null),g(!0)}},"Create Theme")),n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search themes…",value:l,onChange:e=>i(e.target.value)}),c?n().createElement("div",null,"Loading…"):null,!c&&u?n().createElement("div",{style:{color:"var(--cds-text-error, #da1e28)"}},u):null,n().createElement(nI,{rows:s,onEdit:C,onDelete:w,canEdit:r,canDelete:a}),n().createElement(n2,{open:_,mode:E,initial:h,onClose:()=>g(!1),onSave:N}))}let n6={minHeight:"10rem"};function n3(){let e=(0,i.Zp)(),{has:t}=v(),r=[{path:"/admin/report-library",title:"Report Library",body:"Catalog completed and legacy reports before full migration into the builder.",required:[y.RB.LIBRARY_VIEW]},{path:"/admin/themes",title:"Data Themes",body:"Manage reusable source configurations and table mappings.",required:[y.RB.THEME_VIEW]},{path:"/admin/etl-tasks",title:"ETL Tasks",body:"Configure and run scheduled ETL processes for data extraction and transformation.",required:[y.RB.PACKAGE_IMPORT]},{path:"/admin/etl-browser",title:"ETL Data Browser",body:"Explore ETL schemas, tables, columns, and sample records.",required:[y.RB.ETLSOURCE_VIEW]},{path:"/admin/dashboards",title:"Dashboards",body:"Configure dashboards composed of sections and widgets (ETL monitors, reports).",required:[y.RB.DASHBOARD_VIEW]}].filter(e=>t(...e.required));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Admin",subtitle:"Manage shared configuration, catalogues, and library references for the report builder."}),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(260px, 1fr))",gap:"1rem"}},r.map(t=>n().createElement(o.t3h,{key:t.path,style:n6,onClick:()=>e(t.path)},n().createElement("h4",null,t.title),n().createElement("p",null,t.body))),0===r.length&&n().createElement(o.jeF,{lowContrast:!0,kind:"info",title:"No access",subtitle:"You do not have access to any Report Builder administration features. Contact your administrator.",hideCloseButton:!0})))}let n4=[{key:"name",header:"Name"},{key:"description",header:"Description"},{key:"status",header:"Status"},{key:"actions",header:"Actions"}],n8={name:"",description:""},n7=()=>{let{has:e}=v(),t=e(y.RB.CATEGORY_ADD,y.RB.CATEGORY_EDIT),r=e(y.RB.CATEGORY_PURGE),[a,l]=n().useState(""),[i,s]=n().useState([]),[d,c]=n().useState(!1),[m,u]=n().useState(null),[p,_]=n().useState(!1),[g,E]=n().useState("create"),[f,h]=n().useState(null),[S,T]=n().useState(n8),[C,w]=n().useState(!1),N=n().useCallback(async e=>{c(!0),u(null);try{let t=await en(a,e);s(t)}catch(e){u(e?.message??"Failed to load report categories")}finally{c(!1)}},[a]);n().useEffect(()=>{let e=new AbortController;return N(e.signal),()=>e.abort()},[N]);let I=async()=>{if(S.name.trim()){w(!0),u(null);try{let e={name:S.name.trim(),description:S.description.trim()||void 0};"create"===g?await el(e):f?.uuid&&await ei(f.uuid,e),_(!1);let t=new AbortController;await N(t.signal)}catch(e){u(e?.message??"Failed to save report category")}finally{w(!1)}}},k=async e=>{if(e?.uuid&&window.confirm(`Retire report category "${e.name}"?`))try{await eo(e.uuid);let t=new AbortController;await N(t.signal)}catch(e){u(e?.message??"Failed to retire report category")}},A=i.map(e=>({id:e.uuid,name:e.name,description:e.description||"—",status:e.retired?"Retired":"Active",actions:""}));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Report Categories",subtitle:"Manage shared categories used to classify reports across the builder.",actions:t?n().createElement(o.$nd,{size:"sm",renderIcon:b.OM,onClick:()=>{E("create"),h(null),T(n8),_(!0)}},"New Category"):void 0}),n().createElement("div",{style:{padding:"0 1rem 1rem",display:"grid",gap:"1rem"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search report categories…",value:a,onChange:e=>l(e.target.value)}),m?n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:m}):null,d?n().createElement(o.OOb,{rowCount:5,columnCount:4,showHeader:!1,showToolbar:!1}):n().createElement(o.bQt,{rows:A,headers:n4},({rows:e,headers:a,getHeaderProps:l,getRowProps:s})=>n().createElement(o.K3K,null,n().createElement(o.XIK,{useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,a.map(e=>n().createElement(o.A0N,{key:e.key,...l({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>{let a=i.find(t=>t.uuid===e.id);return n().createElement(o.Hjg,{key:e.id,...s({row:e})},n().createElement(o.nA6,null,a?.name),n().createElement(o.nA6,null,a?.description||"—"),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:a?.retired?"gray":"green"},a?.retired?"Retired":"Active")),n().createElement(o.nA6,null,n().createElement("div",{style:{display:"flex",gap:"0.5rem"}},t&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:es.ff,iconDescription:"Edit",onClick:()=>a&&void(E("edit"),h(a),T({name:a.name??"",description:a.description??""}),_(!0))},"Edit"),r&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:P.zH,iconDescription:"Retire",onClick:()=>a&&k(a)},"Retire"))))})))))),n().createElement(o.aFV,{open:p,modalHeading:"create"===g?"Create Report Category":"Edit Report Category",primaryButtonText:C?"Saving…":"create"===g?"Create":"Save",secondaryButtonText:"Cancel",onRequestClose:()=>!C&&_(!1),onRequestSubmit:I,primaryButtonDisabled:C||!S.name.trim()},n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"report-category-name",labelText:"Name",value:S.name,onChange:e=>T(t=>({...t,name:e.target.value}))}),n().createElement(o.fs1,{id:"report-category-description",labelText:"Description",rows:4,value:S.description,onChange:e=>T(t=>({...t,description:e.target.value}))}))))},n9=()=>{let[e,t]=n().useState(""),[r,a]=n().useState([]),[l,i]=n().useState(!1),[s,d]=n().useState(null);n().useEffect(()=>{let e=new AbortController;return i(!0),d(null),rL(e.signal).then(a).catch(e=>d(e?.message??"Failed to load age categories")).finally(()=>i(!1)),()=>e.abort()},[]);let c=r.filter(t=>{let r=e.trim().toLowerCase();return!r||[t.name,t.code,t.description||"",t.label].join(" ").toLowerCase().includes(r)});return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Age Categories",subtitle:"Review reusable age disaggregation structures used by indicators and sections."}),n().createElement("div",{style:{padding:"0 1rem 1rem",display:"grid",gap:"1rem"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search age categories…",value:e,onChange:e=>t(e.target.value)}),s?n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:s}):null,l?n().createElement("div",null,"Loading…"):null,l||s?null:n().createElement(o.nD3,null,c.map(e=>n().createElement(o.AsP,{key:e.uuid,title:n().createElement("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",flexWrap:"wrap"}},n().createElement("span",{style:{fontWeight:600}},e.name),n().createElement(o.vwO,{type:"blue"},e.code),n().createElement(o.vwO,{type:"green"},e.ageGroups.length," age groups"))},n().createElement(o.FAs,null,n().createElement("div",{style:{display:"grid",gap:"0.75rem"}},n().createElement("div",null,n().createElement("strong",null,"Description:")," ",e.description||"—"),n().createElement("div",null,n().createElement("strong",null,"UUID:")," ",e.uuid),n().createElement("div",null,n().createElement("strong",null,"Groups:"),n().createElement("div",{style:{display:"grid",gap:"0.5rem",marginTop:"0.75rem"}},e.ageGroups.map(e=>n().createElement("div",{key:e.id,style:{display:"grid",gridTemplateColumns:"2fr 1fr 1fr 1fr",gap:"0.75rem",padding:"0.75rem",border:"1px solid var(--cds-border-subtle, #e0e0e0)"}},n().createElement("span",null,e.label),n().createElement("span",null,"Min days: ",e.minAgeDays),n().createElement("span",null,"Max days: ",e.maxAgeDays),n().createElement("span",null,"Sort: ",e.sortOrder))))))))))))},le=[{key:"label",header:"Label"},{key:"category",header:"Category"},{key:"range",header:"Range (days)"},{key:"sortOrder",header:"Sort Order"},{key:"status",header:"Status"}],lt=()=>{let[e,t]=n().useState(""),[r,a]=n().useState([]),[l,i]=n().useState(!1),[s,d]=n().useState(null);n().useEffect(()=>{let e=new AbortController;return i(!0),d(null),rL(e.signal).then(e=>{a(e.flatMap(e=>(e.ageGroups??[]).map(t=>({id:`${e.uuid}-${t.id}`,categoryName:e.name,categoryCode:e.code,label:t.label,minAgeDays:t.minAgeDays,maxAgeDays:t.maxAgeDays,sortOrder:t.sortOrder,active:t.active}))))}).catch(e=>d(e?.message??"Failed to load age groups")).finally(()=>i(!1)),()=>e.abort()},[]);let c=r.filter(t=>{let r=e.trim().toLowerCase();return!r||[t.label,t.categoryName,t.categoryCode].join(" ").toLowerCase().includes(r)}),m=c.map(e=>({id:e.id,label:e.label,category:`${e.categoryName} (${e.categoryCode})`,range:`${e.minAgeDays} - ${e.maxAgeDays}`,sortOrder:String(e.sortOrder),status:e.active?"Active":"Inactive"}));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Age Groups",subtitle:"Inspect age group ranges, ordering and category membership across the builder."}),n().createElement("div",{style:{padding:"0 1rem 1rem",display:"grid",gap:"1rem"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search age groups…",value:e,onChange:e=>t(e.target.value)}),s?n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:s}):null,l?n().createElement(o.OOb,{rowCount:8,columnCount:5,showHeader:!1,showToolbar:!1}):n().createElement(o.bQt,{rows:m,headers:le},({rows:e,headers:t,getHeaderProps:r,getRowProps:a})=>n().createElement(o.K3K,null,n().createElement(o.XIK,{useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,t.map(e=>n().createElement(o.A0N,{key:e.key,...r({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>{let t=c.find(t=>t.id===e.id);return n().createElement(o.Hjg,{key:e.id,...a({row:e})},n().createElement(o.nA6,null,t?.label),n().createElement(o.nA6,null,t?`${t.categoryName} (${t.categoryCode})`:"—"),n().createElement(o.nA6,null,t?`${t.minAgeDays} - ${t.maxAgeDays}`:"—"),n().createElement(o.nA6,null,t?.sortOrder),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:t?.active?"green":"gray"},t?.active?"Active":"Inactive")))})))))))},lr="/reportbuilder/reportlibrary";async function la(e,t){var r;let a=new URLSearchParams;return a.set("v","full"),e?.trim()&&a.set("q",e.trim()),(!(r=await (0,W.wO)(`${lr}?${a.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid)}async function ln(e,t){return(0,W.oV)(lr,e,t)}async function ll(e,t,r){return(0,W.oV)(`${lr}/${encodeURIComponent(e)}`,t,r)}async function li(e,t="Retired from report library",r){return(0,W.hI)(`${lr}/${encodeURIComponent(e)}?reason=${encodeURIComponent(t)}`,r)}let lo=[{key:"name",header:"Name"},{key:"sourceType",header:"Source"},{key:"reportType",header:"Type"},{key:"category",header:"Category"},{key:"migration",header:"Migration"},{key:"status",header:"Status"},{key:"actions",header:"Actions"}],ls={name:"",description:"",code:"",sourceType:"LEGACY",reportType:"AGGREGATE",reportDefinitionUuid:"",reportBuilderReportUuid:"",category:"",migrated:!1,metaJson:"{}"};function ld(e){return e?"string"==typeof e?e:e.uuid??"":""}function lc(e){return e?"string"==typeof e?e:e.name??e.uuid??"—":"—"}function lm(){let{has:e}=v(),t=e(y.RB.LIBRARY_ADD,y.RB.LIBRARY_EDIT),r=e(y.RB.LIBRARY_PURGE),[a,l]=n().useState(""),[i,s]=n().useState([]),[d,c]=n().useState([]),[m,u]=n().useState(!1),[p,_]=n().useState(null),[g,E]=n().useState(!1),[f,h]=n().useState("create"),[S,T]=n().useState(null),[C,w]=n().useState(ls),[N,I]=n().useState(!1),[k,A]=n().useState(""),[R,O]=n().useState(""),[D,x]=n().useState(""),[L,M]=n().useState(""),[$,U]=n().useState(""),B=n().useCallback(e=>(u(!0),_(null),Promise.all([la(void 0,e),en(void 0,e)]).then(([e,t])=>{s(e),c(t.filter(e=>!e.retired))}).catch(e=>_(e?.message??"Failed to load report library")).finally(()=>u(!1))),[]);n().useEffect(()=>{let e=new AbortController;return B(e.signal),()=>e.abort()},[B]);let F=async()=>{if(C.name.trim()){I(!0),_(null);try{let e={name:C.name.trim(),description:C.description.trim()||void 0,code:C.code.trim()||void 0,sourceType:C.sourceType,reportType:C.reportType,reportDefinitionUuid:C.reportDefinitionUuid.trim()||void 0,reportBuilderReportUuid:C.reportBuilderReportUuid.trim()||void 0,category:C.category||void 0,migrated:C.migrated,metaJson:C.metaJson.trim()||void 0};"create"===f?await ln(e):S?.uuid&&await ll(S.uuid,e),E(!1);let t=new AbortController;await B(t.signal)}catch(e){_(e?.message??"Failed to save report library entry")}finally{I(!1)}}},z=async e=>{if(e?.uuid&&window.confirm(`Retire report library entry "${e.name}"?`))try{await li(e.uuid);let t=new AbortController;await B(t.signal)}catch(e){_(e?.message??"Failed to retire report library entry")}},q=n().useMemo(()=>{let e=a.trim().toLowerCase();return i.filter(t=>{let r=!e||t.name?.toLowerCase().includes(e)||t.description?.toLowerCase().includes(e)||t.code?.toLowerCase().includes(e)||lc(t.category).toLowerCase().includes(e),a=!k||t.sourceType===k,n=!R||t.reportType===R,l=!D||ld(t.category)===D,i=!L||"ACTIVE"===L&&!t.retired||"RETIRED"===L&&!!t.retired,o=!$||"MIGRATED"===$&&!!t.migrated||"PENDING"===$&&!t.migrated;return r&&a&&n&&l&&i&&o})},[i,a,k,R,D,L,$]),j=q.map(e=>({id:e.uuid,name:e.name,sourceType:e.sourceType??"LEGACY",reportType:e.reportType??"AGGREGATE",category:lc(e.category),migration:e.migrated?"Migrated":"Pending",status:e.retired?"Retired":"Active",actions:""}));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"Report Library",subtitle:"Catalog legacy and completed reports before and during migration into the report builder."}),n().createElement("div",{style:{display:"grid",gap:"1rem"}},n().createElement("div",{style:{display:"grid",gridTemplateColumns:"minmax(18rem, 2fr) repeat(5, minmax(10rem, 1fr)) auto auto",gap:"1rem",alignItems:"end"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search report library…",value:a,onChange:e=>l(e.target.value)}),n().createElement(o.l6P,{id:"filter-source",labelText:"Source",value:k,onChange:e=>A(e.target.value)},n().createElement(o.ebT,{value:"",text:"All sources"}),n().createElement(o.ebT,{value:"LEGACY",text:"LEGACY"}),n().createElement(o.ebT,{value:"BUILDER",text:"BUILDER"})),n().createElement(o.l6P,{id:"filter-type",labelText:"Type",value:R,onChange:e=>O(e.target.value)},n().createElement(o.ebT,{value:"",text:"All types"}),n().createElement(o.ebT,{value:"AGGREGATE",text:"AGGREGATE"}),n().createElement(o.ebT,{value:"LINE_LIST",text:"LINE_LIST"})),n().createElement(o.l6P,{id:"filter-category",labelText:"Category",value:D,onChange:e=>x(e.target.value)},n().createElement(o.ebT,{value:"",text:"All categories"}),d.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.name}))),n().createElement(o.l6P,{id:"filter-status",labelText:"Status",value:L,onChange:e=>M(e.target.value)},n().createElement(o.ebT,{value:"",text:"All statuses"}),n().createElement(o.ebT,{value:"ACTIVE",text:"Active"}),n().createElement(o.ebT,{value:"RETIRED",text:"Retired"})),n().createElement(o.l6P,{id:"filter-migration",labelText:"Migration",value:$,onChange:e=>U(e.target.value)},n().createElement(o.ebT,{value:"",text:"All"}),n().createElement(o.ebT,{value:"MIGRATED",text:"Migrated"}),n().createElement(o.ebT,{value:"PENDING",text:"Pending"})),n().createElement(o.$nd,{kind:"tertiary",size:"md",onClick:()=>{l(""),A(""),O(""),x(""),M(""),U("")}},"Clear"),t&&n().createElement(o.$nd,{size:"md",renderIcon:b.OM,onClick:()=>{h("create"),T(null),w(ls),E(!0)}},"New Library Entry")),p?n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:p}):null,m?n().createElement(o.OOb,{rowCount:6,columnCount:7,showHeader:!1,showToolbar:!1}):n().createElement(o.bQt,{rows:j,headers:lo},({rows:e,headers:a,getHeaderProps:l,getRowProps:i})=>n().createElement(o.K3K,null,n().createElement(o.XIK,{useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,a.map(e=>n().createElement(o.A0N,{key:e.key,...l({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>{let a=q.find(t=>t.uuid===e.id);return n().createElement(o.Hjg,{key:e.id,...i({row:e})},n().createElement(o.nA6,null,a?.name),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:a?.sourceType==="BUILDER"?"blue":"purple"},a?.sourceType??"LEGACY")),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:a?.reportType==="LINE_LIST"?"teal":"cyan"},a?.reportType??"AGGREGATE")),n().createElement(o.nA6,null,lc(a?.category)),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:a?.migrated?"green":"warm-gray"},a?.migrated?"Migrated":"Pending")),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:a?.retired?"gray":"green"},a?.retired?"Retired":"Active")),n().createElement(o.nA6,null,n().createElement("div",{style:{display:"flex",gap:"0.5rem"}},t&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:es.ff,onClick:()=>a&&void(h("edit"),T(a),w({name:a.name??"",description:a.description??"",code:a.code??"",sourceType:a.sourceType??"LEGACY",reportType:a.reportType??"AGGREGATE",reportDefinitionUuid:a.reportDefinitionUuid??"",reportBuilderReportUuid:a.reportBuilderReportUuid??"",category:ld(a.category),migrated:!!a.migrated,metaJson:a.metaJson?.trim()||"{}"}),E(!0))},"Edit"),r&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:P.zH,onClick:()=>a&&z(a)},"Retire"))))})))))),n().createElement(o.aFV,{open:g,modalHeading:"create"===f?"New Report Library Entry":"Edit Report Library Entry",primaryButtonText:N?"Saving…":"create"===f?"Create":"Save",secondaryButtonText:"Cancel",primaryButtonDisabled:N||!C.name.trim(),onRequestSubmit:F,onRequestClose:()=>!N&&E(!1)},n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"rl-name",labelText:"Name",value:C.name,onChange:e=>w(t=>({...t,name:e.target.value}))}),n().createElement(o.ksK,{id:"rl-code",labelText:"Code",value:C.code,onChange:e=>w(t=>({...t,code:e.target.value}))}),n().createElement(o.fs1,{id:"rl-description",labelText:"Description",value:C.description,onChange:e=>w(t=>({...t,description:e.target.value}))}),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(o.l6P,{id:"rl-sourceType",labelText:"Source Type",value:C.sourceType,onChange:e=>w(t=>({...t,sourceType:e.target.value}))},n().createElement(o.ebT,{value:"LEGACY",text:"LEGACY"}),n().createElement(o.ebT,{value:"BUILDER",text:"BUILDER"})),n().createElement(o.l6P,{id:"rl-reportType",labelText:"Report Type",value:C.reportType,onChange:e=>w(t=>({...t,reportType:e.target.value}))},n().createElement(o.ebT,{value:"AGGREGATE",text:"AGGREGATE"}),n().createElement(o.ebT,{value:"LINE_LIST",text:"LINE_LIST"}))),n().createElement(o.l6P,{id:"rl-category",labelText:"Category",value:C.category,onChange:e=>w(t=>({...t,category:e.target.value}))},n().createElement(o.ebT,{value:"",text:"None"}),d.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.name}))),n().createElement(o.ksK,{id:"rl-rd",labelText:"Legacy Report Definition UUID",value:C.reportDefinitionUuid,onChange:e=>w(t=>({...t,reportDefinitionUuid:e.target.value}))}),n().createElement(o.ksK,{id:"rl-rbr",labelText:"Builder Report UUID",value:C.reportBuilderReportUuid,onChange:e=>w(t=>({...t,reportBuilderReportUuid:e.target.value}))}),n().createElement(o.Sc0,{id:"rl-migrated",labelText:"Migrated",checked:C.migrated,onChange:(e,{checked:t})=>w(e=>({...e,migrated:!!t}))}),n().createElement(o.fs1,{id:"rl-meta",labelText:"Meta JSON",value:C.metaJson,onChange:e=>w(t=>({...t,metaJson:e.target.value})),rows:6}))))}let lu="/reportbuilder/etlsource";async function lp(e,t){var r;let a=new URLSearchParams;return a.set("v","custom:(uuid,name,code,description,tablePatterns,schemaName,sourceType,active,retired)"),e?.trim()&&a.set("q",e.trim()),(!(r=await (0,W.wO)(`${lu}?${a.toString()}`,t))?[]:Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]).filter(e=>!!e?.uuid)}async function l_(e,t){return(0,W.oV)(lu,e,t)}async function lg(e,t,r){return(0,W.oV)(`${lu}/${encodeURIComponent(e)}`,t,r)}async function lE(e,t="Retired from Report Builder Admin",r){let a=new URLSearchParams;return a.set("reason",t),(0,W.hI)(`${lu}/${encodeURIComponent(e)}?${a.toString()}`,r)}let lf=[{key:"name",header:"Name"},{key:"code",header:"Code"},{key:"schemaName",header:"Schema"},{key:"sourceType",header:"Source Type"},{key:"status",header:"Status"},{key:"actions",header:"Actions"}],lb={name:"",code:"",description:"",tablePatterns:"",schemaName:"",sourceType:"",active:!0};function ly(){let{has:e}=v(),t=e(y.RB.ETLSOURCE_ADD,y.RB.ETLSOURCE_EDIT),r=e(y.RB.ETLSOURCE_PURGE),[a,l]=n().useState(""),[i,s]=n().useState([]),[d,c]=n().useState(!1),[m,u]=n().useState(null),[p,_]=n().useState(!1),[g,E]=n().useState("create"),[f,h]=n().useState(null),[S,T]=n().useState(lb),[C,w]=n().useState(!1),N=n().useCallback(async e=>{c(!0),u(null);try{let t=await lp(a,e);s(t)}catch(e){u(e?.message??"Failed to load ETL sources")}finally{c(!1)}},[a]);n().useEffect(()=>{let e=new AbortController;return N(e.signal),()=>e.abort()},[N]);let I=async()=>{if(S.name.trim()){w(!0),u(null);try{let e={name:S.name.trim(),code:S.code.trim()||void 0,description:S.description.trim()||void 0,tablePatterns:S.tablePatterns.trim()||void 0,schemaName:S.schemaName.trim()||void 0,sourceType:S.sourceType.trim()||void 0,active:S.active};"create"===g?await l_(e):f?.uuid&&await lg(f.uuid,e),_(!1);let t=new AbortController;await N(t.signal)}catch(e){u(e?.message??"Failed to save ETL source")}finally{w(!1)}}},k=async e=>{if(e?.uuid&&window.confirm(`Retire ETL source "${e.name}"?`))try{await lE(e.uuid);let t=new AbortController;await N(t.signal)}catch(e){u(e?.message??"Failed to retire ETL source")}},A=i.map(e=>({id:e.uuid,name:e.name,code:e.code||"—",schemaName:e.schemaName||"—",sourceType:e.sourceType||"—",status:!1===e.active||e.voided?"Inactive":"Active",actions:""}));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"ETL Sources",subtitle:"Manage ETL source definitions used by the report builder.",actions:t?n().createElement(o.$nd,{"data-testid":"etl-source-new",size:"sm",renderIcon:b.OM,onClick:()=>{E("create"),h(null),T(lb),_(!0)}},"New ETL Source"):void 0}),n().createElement("div",{style:{padding:"0 1rem 1rem",display:"grid",gap:"1rem"}},n().createElement(o.vji,{"data-testid":"etl-source-search",size:"lg",labelText:"Search",placeholder:"Search ETL sources…",value:a,onChange:e=>l(e.target.value)}),m?n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:m}):null,d?n().createElement(o.OOb,{rowCount:5,columnCount:6,showHeader:!1,showToolbar:!1}):n().createElement(o.bQt,{rows:A,headers:lf},({rows:e,headers:a,getHeaderProps:l,getRowProps:s})=>n().createElement(o.K3K,null,n().createElement(o.XIK,{useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,a.map(e=>n().createElement(o.A0N,{key:e.key,...l({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>{let a=i.find(t=>t.uuid===e.id);return n().createElement(o.Hjg,{key:e.id,...s({row:e})},n().createElement(o.nA6,null,e.cells[0].value),n().createElement(o.nA6,null,e.cells[1].value),n().createElement(o.nA6,null,e.cells[2].value),n().createElement(o.nA6,null,e.cells[3].value),n().createElement(o.nA6,null,a?.active===!1||a?.voided?n().createElement(o.vwO,{type:"gray"},"Inactive"):n().createElement(o.vwO,{type:"green"},"Active")),n().createElement(o.nA6,null,n().createElement("div",{style:{display:"flex",gap:"0.5rem"}},t&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:es.ff,iconDescription:"Edit",hasIconOnly:!0,onClick:()=>a&&void(E("edit"),h(a),T({name:a.name??"",code:a.code??"",description:a.description??"",tablePatterns:a.tablePatterns??"",schemaName:a.schemaName??"",sourceType:a.sourceType??"",active:a.active??!0}),_(!0))}),r&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:P.zH,iconDescription:"Retire",hasIconOnly:!0,onClick:()=>a&&k(a)}))))})))))),n().createElement(o.aFV,{open:p,modalHeading:"create"===g?"New ETL Source":"Edit ETL Source","data-testid":"etl-source-modal",primaryButtonText:C?"Saving…":"Save",secondaryButtonText:"Cancel",onRequestClose:()=>!C&&_(!1),onRequestSubmit:I,primaryButtonDisabled:C||!S.name.trim()},n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"etl-source-name","data-testid":"etl-source-name",labelText:"Name",value:S.name,onChange:e=>T(t=>({...t,name:e.target.value}))}),n().createElement(o.ksK,{id:"etl-source-code","data-testid":"etl-source-code",labelText:"Code",value:S.code,onChange:e=>T(t=>({...t,code:e.target.value}))}),n().createElement(o.ksK,{id:"etl-source-schema","data-testid":"etl-source-schema",labelText:"Schema Name",value:S.schemaName,onChange:e=>T(t=>({...t,schemaName:e.target.value}))}),n().createElement(o.ksK,{id:"etl-source-type","data-testid":"etl-source-type",labelText:"Source Type",value:S.sourceType,onChange:e=>T(t=>({...t,sourceType:e.target.value}))}),n().createElement(o.fs1,{id:"etl-source-description","data-testid":"etl-source-description",labelText:"Description",rows:3,value:S.description,onChange:e=>T(t=>({...t,description:e.target.value}))}),n().createElement(o.fs1,{id:"etl-source-table-patterns","data-testid":"etl-source-table-patterns",labelText:"Table Patterns",helperText:"Store table matching patterns as text.",rows:4,value:S.tablePatterns,onChange:e=>T(t=>({...t,tablePatterns:e.target.value}))}),n().createElement(o.lMk,{id:"etl-source-active",labelText:"Active",toggled:S.active,onToggle:e=>T(t=>({...t,active:e}))}))))}var lh=r(6942),lv=r.n(lh);async function lS(e){try{let t=await (0,aO.jX)((0,h.openmrsFetch)("/ws/rest/v1/taskdefinition?v=custom:(uuid,name,description,taskClass,started,lastExecutionTime,repeatInterval)",{signal:e}));return(await t.json()).results||[]}catch(e){throw console.error("Error fetching task definitions:",e),e}}async function lT(e,t){let r=e.map(e=>"string"==typeof e?e.trim():"").filter(e=>e);if(0===r.length)return{tasks:[],unknownNames:[]};let a=await lS(t),n=new Set,l=[];for(let e of a)r.includes(e.name)&&(l.push(e),n.add(e.name));return{tasks:l,unknownNames:r.filter(e=>!n.has(e))}}async function lC(e){try{let t=await (0,aO.jX)((0,h.openmrsFetch)("/ws/rest/v1/taskaction",{method:"POST",headers:{"Content-Type":"application/json"},body:{action:"runtask",tasks:[e]}}));if(201!==t.status)throw Error(`Task execution failed with status ${t.status}`);return{status:t.status,message:"Task executed successfully"}}catch(e){throw console.error("Error executing ETL task:",e),e}}let lw=["password","secret","token","authorization","cookie","session","sessionid","jsessionid","apikey","api_key","apikey","auth","credentials","private","key"];async function lN(e,t){let r=Date.now(),a=[];if(!e.endpoint?.url)return{success:!1,error:"URL is required",testedAt:new Date().toISOString()};let n=e.endpoint.url;n.startsWith("/")&&(n=`${h.restBaseUrl}${n}`);let l={"Content-Type":"application/json"},i=e.endpoint.auth;"BASIC"===i.type&&i.username&&i.password?l.Authorization=`Basic ${btoa(`${i.username}:${i.password}`)}`:"BEARER_TOKEN"===i.type&&i.token?l.Authorization=`Bearer ${i.token}`:"API_KEY"===i.type&&i.headerName&&i.apiKey&&(l[i.headerName]=i.apiKey);try{let i=await (0,h.openmrsFetch)(n,{method:e.endpoint.method||"GET",headers:l,body:e.requestBody?JSON.stringify(e.requestBody):void 0,signal:t}),o=Date.now()-r,s=i.data,d=function e(t,r=0){if(r>10||null==t)return t;if(Array.isArray(t))return t.map(t=>e(t,r+1));if("object"==typeof t){let a={};for(let[n,l]of Object.entries(t))!function(e){let t=e.toLowerCase();return lw.some(e=>t.includes(e))}(n)?"object"==typeof l&&null!==l?a[n]=e(l,r+1):"string"==typeof l&&l.length>1e3?a[n]=l.substring(0,1e3)+"...[TRUNCATED]":a[n]=l:a[n]="[REDACTED]";return a}return t}(function e(t,r=50,a=5){if(a<=0)return"[MAX_DEPTH_REACHED]";if(Array.isArray(t))return t.slice(0,100).map(t=>e(t,r,a-1));if("object"==typeof t&&null!==t){let n=Object.entries(t).slice(0,r),l={};for(let[t,i]of n)l[t]=e(i,r,a-1);return l}return t}(s));return o>5e3&&a.push("Response time is slow (>5s)"),{success:!0,httpStatus:i.status||200,durationMs:o,contentType:i.headers?.get("content-type")||void 0,contentLength:JSON.stringify(s).length,data:d,sanitizedData:d,testedAt:new Date().toISOString(),warnings:a}}catch(t){let e=Date.now()-r;if("AbortError"===t.name)return{success:!1,error:"Request was cancelled",errorCode:"ABORTED",durationMs:e,testedAt:new Date().toISOString()};return{success:!1,error:t.message||"Connection test failed",errorCode:t.code||"CONNECTION_ERROR",durationMs:e,testedAt:new Date().toISOString()}}}function lI(e){return e?Array.isArray(e)?e:Array.isArray(e.results)?e.results:[]:[]}let lk="/reportbuilder/etl-monitor";async function lA(e,t){let r=new URLSearchParams;return r.set("v","full"),e?.trim()&&r.set("q",e.trim()),lI(await (0,W.wO)(`${lk}?${r.toString()}`,t)).filter(e=>!!e?.uuid)}async function lR(e){let t=new URLSearchParams;return t.set("v","full"),t.set("activeOnly","true"),lI(await (0,W.wO)(`${lk}?${t.toString()}`,e)).filter(e=>!!e?.uuid)}async function lO(e,t){let r=new URLSearchParams;return r.set("v","full"),(0,W.wO)(`${lk}/${encodeURIComponent(e)}?${r.toString()}`,t)}async function lD(e,t){return(0,W.oV)(lk,e,t)}async function lx(e,t,r){return(0,W.oV)(`${lk}/${encodeURIComponent(e)}`,t,r)}async function lL(e,t="Retired from Report Builder Admin",r){let a=new URLSearchParams;return a.set("reason",t),(0,W.hI)(`${lk}/${encodeURIComponent(e)}?${a.toString()}`,r)}async function lM(e,t){let r=await lO(e,t);if(!r||!r.configJson)throw Error("Monitor configuration not found");let a=JSON.parse(r.configJson).apiEndpoint;if(!a||!a.url)throw Error("ETL endpoint URL not configured");let n=a.url;n.startsWith("/")&&(n=`${h.restBaseUrl}${n}`);let l={},i="POST"===a.method&&a.requestBody?JSON.stringify(a.requestBody):void 0;if(a.headers&&Object.entries(a.headers).forEach(([e,t])=>{l[e]=String(t)}),"BASIC"===a.authType&&a.authConfig){let e=btoa(`${a.authConfig.username}:${a.authConfig.password}`);l.Authorization=`Basic ${e}`}else if("BEARER_TOKEN"===a.authType&&a.authConfig?.token)l.Authorization=`Bearer ${a.authConfig.token}`;else if("API_KEY"===a.authType&&a.authConfig){let{headerName:e,apiKey:t}=a.authConfig;e&&t&&(l[e]=t)}let o=await (0,h.openmrsFetch)(n,{method:a.method||"GET",headers:l,body:i,signal:t}),s=function(e,t){if(!e)return[];if(!t)return Array.isArray(e)?e:Object.entries(e).map(([e,t])=>({key:e,header:e,value:t}));try{return(JSON.parse(t).columns||[]).map(t=>{var r,a;let n=function(e,t){if(!t||!e)return;let r=(t.startsWith("$.")?t.slice(2):t).split(".").flatMap(e=>{let t=e.match(/^(\w+)\[(\d+)\]$/);return t?[t[1],parseInt(t[2],10)]:[e]}),a=e;for(let e of r){if(null==a)return;a=a[e]}return a}(e,t.jsonPath);return{key:t.key,header:t.header,value:n??t.defaultValue,displayValue:t.format?(r=n,a=t.format,null==r?"":a.includes("%")?String(Math.round(Number(r)||0))+"%":a.includes("s")?String(r)+"s":"0.0"===a?String(Math.round(10*Number(r))/10):String(r)):void 0,rawValue:n}})}catch(e){return console.error("Failed to parse display config JSON",e),[]}}(o.data,r.displayConfigJson);return{uuid:r.uuid,code:r.code||"",timestamp:new Date().toISOString(),success:!0,data:s,rawResponse:o.data}}var l$=r(4676);let lP=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function lU(e){if(null==e||""===e)return null;if(e instanceof Date)return isNaN(e.getTime())?null:e;if("number"==typeof e)return isNaN(e)?null:new Date(e);if("string"!=typeof e)return null;let t=new Date(e.trim().replace(/([+-]\d{2})(\d{2})$/,"$1:$2"));return isNaN(t.getTime())?null:t}function lB(e,t=new Date){let r,a=String(e.getHours()).padStart(2,"0"),n=String(e.getMinutes()).padStart(2,"0"),l=`${a}:${n}`,i=Math.round(((r=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime())(e)-r(t))/864e5);return 0===i?`Today, ${l}`:-1===i?`Yesterday, ${l}`:`${e.getDate()} ${lP[e.getMonth()]}, ${l}`}function lF(e){let t=lU(e);return t?lB(t):null==e||""===e?"—":String(e)}function lz(e,t){let r=lU(e);return r&&"number"==typeof t&&isFinite(t)&&!(t<=0)?new Date(r.getTime()+1e3*t):null}function lq(e){return e?lB(e):"Not scheduled"}let lj=/duration|elapsed|runtime/i,lH=/sec/i,lJ=/milli|_ms\b|ms$/i;function lG(e,t){return lJ.test(t)?e:lH.test(t)||e<1e3?1e3*e:e}let lV=/^(status|state)$/i;function lW(e,t){let r;for(let a of e){let e=function(e,t){let r;if(null==e||"object"!=typeof e)return;let a=new WeakSet,n=(e,l)=>{if(!(null==e||l>3||"object"!=typeof e||a.has(e)))for(let[i,o]of(a.add(e),Array.isArray(e)?e.map(e=>["",e]):Object.entries(e)))"number"==typeof o&&isFinite(o)&&t.test(i)?r=(r??0)+o:lV.test(i)&&"string"==typeof o&&t.test(o)?r=(r??0)+1:"object"==typeof o&&null!==o&&n(o,l+1)};return n(e,0),r}(a,t);void 0!==e&&(r=(r??0)+e)}return r}let lK={TEXT:"TEXT",STRING:"STRING",NUMBER:"NUMBER",INTEGER:"INTEGER",DECIMAL:"DECIMAL",PERCENTAGE:"PERCENTAGE",PROGRESS_BAR:"PERCENTAGE",STATUS_BADGE:"STATUS",TIMESTAMP:"TIMESTAMP",DURATION:"DURATION",BOOLEAN:"BOOLEAN",ICON:"TEXT",LINK:"TEXT"},lQ={green:"success",success:"success",blue:"info",info:"info",yellow:"warning",warning:"warning",orange:"warning",red:"critical",error:"critical",critical:"critical",gray:"neutral",grey:"neutral",neutral:"neutral","cool-gray":"neutral",running:"info"},lY={STATUS_CARD:"STATUS_CARD",PROGRESS_BAR:"PROGRESS",DATA_TABLE:"TABLE",TIME_SERIES:"TABLE",ERROR_LOG:"TABLE",METRICS_GRID:"METRICS_GRID"};function lX(e,t){let r,a,n;if(!e)return null;if("string"==typeof e)try{r=JSON.parse(e)}catch{return console.error("Failed to parse legacy display config JSON"),null}else r=e;if(!r||"object"!=typeof r)return null;let l=t&&lY[t]||"SUMMARY_CARD",i={schemaVersion:2,component:l,fields:[]};if(i.layout=(a={STATUS_CARD:{section:"overview",span:{sm:4,md:4,lg:4},priority:1},SUMMARY_CARD:{section:"overview",span:{sm:4,md:4,lg:4},priority:2},METRICS_GRID:{section:"execution",span:{sm:4,md:8,lg:8},priority:1},PROGRESS:{section:"execution",span:{sm:4,md:8,lg:8},priority:2},TABLE:{section:"history",span:{sm:4,md:8,lg:16},priority:1},DATA_TABLE:{section:"history",span:{sm:4,md:8,lg:16},priority:1},DETAILS:{section:"configuration",span:{sm:4,md:4,lg:4},priority:1},ERROR_LOG:{section:"errors",span:{sm:4,md:8,lg:16},priority:1},LOG:{section:"history",span:{sm:4,md:8,lg:8},priority:2},TIME_SERIES:{section:"history",span:{sm:4,md:8,lg:12},priority:2}})[l]||a.SUMMARY_CARD,i.emptyState=(n={STATUS_CARD:{title:"No status data available",tone:"neutral"},SUMMARY_CARD:{title:"No data available",tone:"neutral"},METRICS_GRID:{title:"No metrics available",tone:"neutral"},PROGRESS:{title:"No active process",description:"No process is currently running",tone:"neutral"},TABLE:{title:"No data available",description:"There are no records to display",tone:"neutral"},DATA_TABLE:{title:"No data available",description:"There are no records to display",tone:"neutral"},DETAILS:{title:"No configuration available",tone:"neutral"},ERROR_LOG:{title:"No errors reported",description:"There are no errors to display",tone:"success"},LOG:{title:"No activity",description:"No events have been recorded yet",tone:"neutral"},TIME_SERIES:{title:"No data available",description:"There is no time series data to display",tone:"neutral"}})[l]||n.SUMMARY_CARD,r.columns&&Array.isArray(r.columns)){if(i.fields=r.columns.map((e,t)=>{var r,a,n;let l;return r=e,a=t,l={key:r.key||`field-${a}`,label:r.header||r.key||"Field",path:r.jsonPath||r.path||`$.${r.key}`,type:(n=r.columnType||r.type)&&lK[n.toUpperCase()]||"TEXT",primary:!1,order:a},void 0!==r.defaultValue&&(l.defaultValue=r.defaultValue),void 0!==r.sortable&&(l.sortable=r.sortable),void 0!==r.width&&(l.width=r.width),"STATUS"===l.type&&r.colorMap&&(l.statusMap=function(e){let t={};for(let[a,n]of Object.entries(e)){var r;let e=lQ[n.toLowerCase()]||"neutral";t[a]={label:({true:"Running",false:"Stopped",UP:"Healthy",DOWN:"Unavailable",ACTIVE:"Active",INACTIVE:"Inactive",RUNNING:"Running",STOPPED:"Stopped",SUCCESS:"Success",FAILURE:"Failed",COMPLETED:"Completed",FAILED:"Failed",PENDING:"Pending",IN_PROGRESS:"In Progress"})[(r=a).toUpperCase()]||r,tone:e}}return t}(r.colorMap)),r.format&&(l.format=function(e,t){if(e)switch(t){case"TIMESTAMP":return{timestamp:{display:e.includes("relative")?"relative":"datetime",relative:e.includes("relative")}};case"DURATION":return{duration:{display:e.includes("human")?"human":"seconds"}};case"PERCENTAGE":return{percentage:{decimals:e.includes(".0")||e.includes(".1")?1:0,suffix:"%"}};case"NUMBER":return{number:{decimals:e.includes(".0")?0:e.includes(".1")?1:e.includes(".2")?2:void 0}};default:return}}(r.format,l.type)),l}),"STATUS_CARD"===l&&i.fields.length>0){let e=i.fields.find(e=>"STATUS"===e.type);e?(e.primary=!0,i.componentConfig={statusFieldKey:e.key}):i.fields[0]&&(i.fields[0].primary=!0)}"METRICS_GRID"===l&&(i.componentConfig={labelsAbove:!1}),"PROGRESS"===l&&i.fields.find(e=>"PERCENTAGE"===e.type||"NUMBER"===e.type)&&(i.componentConfig={progressMin:0,progressMax:100}),"TABLE"===l&&(i.data={rootPath:"$"},i.componentConfig={selectable:!1,maxRows:50})}return i}function lZ(e){if(!e)return{version:"unknown",config:null};try{let t=JSON.parse(e);if(t&&"object"==typeof t&&2===t.schemaVersion)return{version:2,config:t};return t&&"object"==typeof t&&(t.columns&&Array.isArray(t.columns)&&!t.schemaVersion||t.schemaVersion),{version:1,config:t}}catch(e){return{version:"unknown",config:null,error:e instanceof Error?e.message:"Failed to parse JSON"}}}var l0=r(6434);function l1({children:e,loading:t=!1,onRefresh:r,actions:a}){return n().createElement("div",{className:"-esm-report-builder__monitor-widget-card__monitor-widget-card___fr5Gr"},n().createElement("div",{className:"-esm-report-builder__monitor-widget-card__monitor-widget-card__actions___Wd0dV"},r&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:u.wM,iconDescription:"Refresh",onClick:r,disabled:t}),a&&a.length>0&&n().createElement(o.obU,{flipped:!0,ariaLabel:"Monitor actions"},a.map(e=>n().createElement(o.XSD,{key:e.label,itemText:e.label,onClick:e.onClick})))),e)}let l2={"etl-monitor-card-shell":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell___Vk6Rm","etl-monitor-card-shell__header":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__header___GFyuz","etl-monitor-card-shell__status":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__status___kTliF","etl-monitor-card-shell__status-dot":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__status-dot___kDt5h","etl-monitor-card-shell__status-dot--active":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__status-dot--active___dcVa1","etl-monitor-card-shell__status-dot--inactive":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__status-dot--inactive___Qg3L-","etl-monitor-card-shell__status-dot--error":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__status-dot--error___99+Je","etl-monitor-card-shell__status-dot--warning":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__status-dot--warning___WTw+2","etl-monitor-card-shell__content":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__content___hfukv","etl-monitor-card-shell__footer":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__footer___Q5u07","etl-monitor-card-shell__actions":"-esm-report-builder__etl-monitor-card-shell__etl-monitor-card-shell__actions___4ykJv"};function l5({title:e,children:t,loading:r=!1,error:a,onRefresh:l,refreshDisabled:i=!1,extraActions:s,onEdit:d,size:c="md"}){let[m,p]=n().useState(!1),_=async()=>{if(l&&!m&&!i){p(!0);try{await l()}finally{p(!1)}}};return n().createElement(o.FAs,{className:`${l2["etl-monitor-card-shell"]} ${l2[`etl-monitor-card-shell--${c}`]}`},n().createElement("div",{className:l2["etl-monitor-card-shell__header"]},n().createElement("h4",{className:l2["etl-monitor-card-shell__title"]},e),n().createElement("div",{className:l2["etl-monitor-card-shell__actions"]},s,l&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:u.wM,iconDescription:"Refresh",hasIconOnly:!0,onClick:_,disabled:i||m||r}),d&&n().createElement(o.obU,{flipped:!0,ariaLabel:"Monitor actions",size:"sm"},n().createElement(o.XSD,{itemText:"Edit monitor",onClick:d})))),n().createElement("div",{className:l2["etl-monitor-card-shell__content"]},r&&n().createElement("div",{className:l2["etl-monitor-card-shell__loading"]},n().createElement(o.OuH,{description:"Loading..."})),!r&&a&&n().createElement("div",{className:l2["etl-monitor-card-shell__error"]},n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:a,hideCloseButton:!0}),l&&n().createElement(o.$nd,{size:"sm",kind:"secondary",renderIcon:u.wM,onClick:_,style:{marginTop:"1rem"}},"Retry")),!r&&!a&&t))}function l6({icon:e,message:t,description:r}){return n().createElement("div",{className:l2["etl-monitor-card-shell__empty"]},e||n().createElement(tb.BF,{size:32}),n().createElement("p",{className:l2["etl-monitor-card-shell__empty-message"]},t),r&&n().createElement("p",{className:l2["etl-monitor-card-shell__empty-description"]},r))}function l3({monitor:e,data:t,error:r,loading:a,onRefresh:l,position:o,title:s,editBaseUrl:d="/admin/etl-monitors/builder"}){let c=(0,i.Zp)(),m=`${"number"==typeof o?`${o}. `:""}${s??e.name}`,u=n().useMemo(()=>{let t=lZ(e.displayConfigJson),r=2===t.version?t.config:lX(e.displayConfigJson,e.monitorType);return r?{...r,presentation:{...r.presentation||{},title:m,description:e.description}}:null},[e.displayConfigJson,e.monitorType,e.description,m]);return u?n().createElement(l1,{loading:a,onRefresh:l,actions:[{label:"Edit monitor",onClick:()=>c(`${d}?mode=edit&monitor=${e.uuid}`)}]},n().createElement(l0.MonitorRenderer,{config:u,data:t?.rawResponse,loading:a,error:r??null})):n().createElement(l5,{title:m,loading:a,error:r,onRefresh:l,size:"lg"},n().createElement(l6,{message:"Invalid monitor configuration"}))}let l4={page:"-esm-report-builder__etl-tasks-page-component__page___Mt7Wf",kpiGrid:"-esm-report-builder__etl-tasks-page-component__kpiGrid___qW4n-",kpiCard:"-esm-report-builder__etl-tasks-page-component__kpiCard___AObBu",kpiIcon:"-esm-report-builder__etl-tasks-page-component__kpiIcon___QCqkF",kpiIconhealthy:"-esm-report-builder__etl-tasks-page-component__kpiIconhealthy___emXSD",kpiIconinfo:"-esm-report-builder__etl-tasks-page-component__kpiIconinfo___jVX2a",kpiIcondanger:"-esm-report-builder__etl-tasks-page-component__kpiIcondanger___5lv2-",kpiIconneutral:"-esm-report-builder__etl-tasks-page-component__kpiIconneutral___zQVWI",kpiText:"-esm-report-builder__etl-tasks-page-component__kpiText___IyEGI",kpiLabel:"-esm-report-builder__etl-tasks-page-component__kpiLabel___AfHvE",kpiValue:"-esm-report-builder__etl-tasks-page-component__kpiValue___aLYxV",kpiSubtext:"-esm-report-builder__etl-tasks-page-component__kpiSubtext___78GC8",toolbarControls:"-esm-report-builder__etl-tasks-page-component__toolbarControls___+e7Kv",searchBox:"-esm-report-builder__etl-tasks-page-component__searchBox___PZ7do",filterTabs:"-esm-report-builder__etl-tasks-page-component__filterTabs___G8QWn",filterTab:"-esm-report-builder__etl-tasks-page-component__filterTab___OEeyn",filterTabActive:"-esm-report-builder__etl-tasks-page-component__filterTabActive___8aeVs",countChip:"-esm-report-builder__etl-tasks-page-component__countChip___GXC6i",liveEmpty:"-esm-report-builder__etl-tasks-page-component__liveEmpty___32mxd",liveEmptyTitle:"-esm-report-builder__etl-tasks-page-component__liveEmptyTitle___mmicJ",liveEmptyHint:"-esm-report-builder__etl-tasks-page-component__liveEmptyHint___Pxmgr",sectionHeading:"-esm-report-builder__etl-tasks-page-component__sectionHeading___aEFpc",monitorsGrid:"-esm-report-builder__etl-tasks-page-component__monitorsGrid___UEM3s",monitorMissingCard:"-esm-report-builder__etl-tasks-page-component__monitorMissingCard___6DPX2",monitorMissingTitle:"-esm-report-builder__etl-tasks-page-component__monitorMissingTitle___JxNCB",monitorMissingHint:"-esm-report-builder__etl-tasks-page-component__monitorMissingHint___pizBc",toolbar:"-esm-report-builder__etl-tasks-page-component__toolbar___dLl7k",toolbarHeading:"-esm-report-builder__etl-tasks-page-component__toolbarHeading___JimFz",toolbarSubtext:"-esm-report-builder__etl-tasks-page-component__toolbarSubtext___VRe-A",tasksGrid:"-esm-report-builder__etl-tasks-page-component__tasksGrid___AHLKY",taskCard:"-esm-report-builder__etl-tasks-page-component__taskCard___94a2R",cardHead:"-esm-report-builder__etl-tasks-page-component__cardHead___ws1j6",cardIcon:"-esm-report-builder__etl-tasks-page-component__cardIcon___3uSJw",cardIconMuted:"-esm-report-builder__etl-tasks-page-component__cardIconMuted___6T82f",cardHeadText:"-esm-report-builder__etl-tasks-page-component__cardHeadText___UVEvu",cardTitle:"-esm-report-builder__etl-tasks-page-component__cardTitle___CerTU",cardDescription:"-esm-report-builder__etl-tasks-page-component__cardDescription___4lyXO",statusPill:"-esm-report-builder__etl-tasks-page-component__statusPill___rZDjR",statusPillActive:"-esm-report-builder__etl-tasks-page-component__statusPillActive___wzlTk",statusPillInactive:"-esm-report-builder__etl-tasks-page-component__statusPillInactive___V1wUN",statusPillUnknown:"-esm-report-builder__etl-tasks-page-component__statusPillUnknown___Lwq55",metaRow:"-esm-report-builder__etl-tasks-page-component__metaRow___tpiie",metaItem:"-esm-report-builder__etl-tasks-page-component__metaItem___6u4FS",metaLabel:"-esm-report-builder__etl-tasks-page-component__metaLabel___Z3qOo",metaValue:"-esm-report-builder__etl-tasks-page-component__metaValue___t7QLs",cardActions:"-esm-report-builder__etl-tasks-page-component__cardActions___GNIrw",monitorMissing:"-esm-report-builder__etl-tasks-page-component__monitorMissing___jOpIf",executingStatus:"-esm-report-builder__etl-tasks-page-component__executingStatus___k2gU5",emptyState:"-esm-report-builder__etl-tasks-page-component__emptyState___1YrRv",emptyStateIcon:"-esm-report-builder__etl-tasks-page-component__emptyStateIcon___3aFAn"},l8=/running|in.?progress|processing/i,l7=/fail|error/i,l9="All types";function ie(e){return e?.name==="AbortError"||/abort/i.test(String(e?.message))}function it(e){let t=(e??"").toLowerCase();return t.includes("upgrade")?"Upgrade":t.includes("sync")?"Sync":t.includes("download")?"Download":t.includes("initializ")?"Initialize":t.includes("update")?"Update":t.includes("report")?"Report":t.includes("etl")||t.includes("extract")||t.includes("flatten")||t.includes("mamba")?"ETL":"Task"}function ir({label:e,value:t}){return n().createElement("div",{className:l4.metaItem},n().createElement("span",{className:l4.metaLabel},e),n().createElement("span",{className:l4.metaValue,title:t},t))}function ia({icon:e,iconTone:t,label:r,value:a,subtext:l}){return n().createElement(o.FAs,{className:l4.kpiCard},n().createElement("span",{className:lv()(l4.kpiIcon,l4[`kpiIcon${t}`])},e),n().createElement("div",{className:l4.kpiText},n().createElement("span",{className:l4.kpiLabel},r),n().createElement("span",{className:l4.kpiValue},a),n().createElement("span",{className:l4.kpiSubtext},l)))}function il({tab:e,label:t,count:r,activeTab:a,onSelect:l}){return n().createElement("button",{type:"button",className:lv()(l4.filterTab,a===e&&l4.filterTabActive),onClick:()=>l(e)},t,n().createElement("span",{className:l4.countChip},r))}function ii(){let{t:e}=(0,A.useTranslation)(),t=(0,h.useConfig)(),r=(0,a.useMemo)(()=>(t.etlTasks?.tasks??[]).filter(e=>"string"==typeof e&&e.trim().length>0),[t.etlTasks?.tasks]),l=(0,a.useMemo)(()=>(t.etlTasks?.progressMonitors??[]).filter(e=>"string"==typeof e),[t.etlTasks?.progressMonitors]),[i,s]=(0,a.useState)([]),[m,p]=(0,a.useState)([]),[E,f]=(0,a.useState)([]),[b,y]=(0,a.useState)(null),[v,S]=(0,a.useState)(!0),[T,C]=(0,a.useState)(null),[w,N]=(0,a.useState)(null),[I,k]=(0,a.useState)({}),[R,O]=(0,a.useState)({}),[D,x]=(0,a.useState)({}),[L,M]=(0,a.useState)(""),[$,P]=(0,a.useState)("all"),[B,F]=(0,a.useState)(l9),z=(0,a.useRef)(null),q=(0,a.useCallback)(async e=>{S(!0),C(null),y(null);try{if(0===r.length&&0===l.length){s([]),p([]),f([]);return}let[t,a]=await Promise.all([r.length>0?lT(r,e):Promise.resolve({tasks:[],unknownNames:[]}),l.length>0?lA(void 0,e).catch(e=>(ie(e)||y(e?.message??"Failed to load ETL monitors"),[])):Promise.resolve([])]);if(e?.aborted)return;s(t.tasks),p(t.unknownNames),f(a)}catch(e){ie(e)||C(e?.message??"Failed to load ETL tasks")}finally{e?.aborted||S(!1)}},[r,l]);(0,a.useEffect)(()=>{let e=new AbortController;return q(e.signal),()=>e.abort()},[q]);let j=(0,a.useMemo)(()=>(function(e,t){if(!t||0===t.length)return[];let r=new Set,a=[];for(let n of t){if("string"!=typeof n||!n.trim())continue;let t=function(e,t){if(!e||0===e.length||"string"!=typeof t||!t.trim())return;let r=t.trim();return e.find(e=>e?.uuid===r)??e.find(e=>e?.uuid?.toLowerCase()===r.toLowerCase())??e.find(e=>e?.code?.toLowerCase()===r.toLowerCase())}(e,n);if(t){if(r.has(t.uuid))continue;r.add(t.uuid)}a.push({ref:n.trim(),monitor:t})}return a})(E,l),[E,l]),H=(0,a.useMemo)(()=>j.filter(e=>!!e.monitor),[j]),J=(0,a.useCallback)(async(e,t)=>{O(t=>({...t,[e]:!0}));try{let r=await lM(e,t);k(t=>({...t,[e]:r})),x(t=>{let r={...t};return delete r[e],r})}catch(t){ie(t)||x(r=>({...r,[e]:t?.message??"Failed to load monitor data"}))}finally{t?.aborted||O(t=>({...t,[e]:!1}))}},[]),V=(0,a.useRef)(()=>{}),W=H.map(e=>e.monitor.uuid).sort().join(",");(0,a.useEffect)(()=>{if(0===H.length)return;let e={current:new AbortController},t=()=>{e.current?.abort(),e.current=new AbortController,H.forEach(t=>J(t.monitor.uuid,e.current.signal))};V.current=t,t();let r=setInterval(t,1e3*Math.max(5,Math.min(...H.map(e=>e.monitor.refreshInterval&&e.monitor.refreshInterval>0?e.monitor.refreshInterval:30))));return()=>{clearInterval(r),e.current?.abort(),V.current=()=>{}}},[W,J]);let K=(0,a.useMemo)(()=>{let e=new Map(i.map(e=>[e.name,e]));return r.map(t=>{let r=e.get(t);return{name:t,definition:r,unknown:!r}})},[r,i]),Q=(0,a.useMemo)(()=>H.map(e=>e.monitor.uuid),[H]),Y=(0,a.useMemo)(()=>Q.map(e=>I[e]?.rawResponse),[Q,I]),X=(0,a.useMemo)(()=>Q.length>0?lW(Y,l8):void 0,[Q,Y]),Z=(0,a.useMemo)(()=>Q.length>0?lW(Y,l7):void 0,[Q,Y]),ee=(0,a.useMemo)(()=>i.filter(e=>!0===e.started).length,[i]),et=(0,a.useMemo)(()=>0===Q.length?"unknown":Q.some(e=>D[e])?"down":Q.some(e=>I[e])?"healthy":"unknown",[Q,D,I]),er=(0,a.useMemo)(()=>{let e=Q.map(e=>I[e]?.timestamp).filter(e=>!!e).sort();return e.length>0?e[e.length-1]:null},[Q,I]),ea=(0,a.useMemo)(()=>{let e=null;for(let t of i){let r=lz(t.lastExecutionTime,t.repeatInterval);r&&(!e||r<e.date)&&(e={name:t.name,date:r})}return e},[i]),en=(0,a.useMemo)(()=>Array.from(new Set(i.map(e=>it(e.taskClass)))).sort(),[i]),el=(0,a.useMemo)(()=>K.filter(e=>{if("all"!==$){if(e.unknown)return!1;let t=e.definition?.started===!0;if("active"===$&&!t||"inactive"===$&&t)return!1}if(B!==l9&&!e.unknown&&it(e.definition?.taskClass)!==B)return!1;let t=L.trim().toLowerCase();return(!t||!!`${e.name} ${e.definition?.description??""}`.toLowerCase().includes(t))&&!0}),[K,$,B,L]),ei=K.filter(e=>!e.unknown&&e.definition?.started===!0).length,eo=K.filter(e=>!e.unknown&&e.definition?.started!==!0).length,ed=(0,a.useCallback)(async()=>{await q(new AbortController().signal),(0,h.showToast)({title:e("refreshSuccess","Refresh Successful"),kind:"success",description:e("tasksRefreshed","ETL tasks have been refreshed")})},[q,e]),ec=(0,a.useCallback)(async t=>{N(t.name);try{await lC(t.name),(0,h.showToast)({critical:!0,title:e("taskExecutionSuccess","Execution Successful"),kind:"success",description:e("taskExecutedSuccessfully","Task {{name}} executed successfully",{name:t.name})}),q(new AbortController().signal),V.current()}catch(t){(0,h.showNotification)({title:e("taskExecutionFailed","Task Execution Failed"),kind:"error",critical:!0,description:t?.message??"Task execution failed"})}finally{N(null)}},[q,e]),em=(0,a.useCallback)(()=>{z.current?.scrollIntoView({behavior:"smooth",block:"start"})},[]),eu=0===r.length,ep=l.length>0,e_=1===H.length?H[0].monitor.uuid:void 0;return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:e("etlTasks","ETL Tasks"),subtitle:e("etlTasksSubtitle","Manage, run, and monitor ETL tasks for data extraction, transformation, and loading.")}),n().createElement("div",{className:l4.page},T&&n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:T}),b&&n().createElement(o.jeF,{lowContrast:!0,kind:"warning",title:e("monitorDataUnavailable","Monitor data unavailable"),subtitle:b}),n().createElement("div",{className:l4.kpiGrid},n().createElement(ia,{icon:n().createElement(U._j,{size:22}),iconTone:"down"===et?"danger":"healthy"===et?"healthy":"neutral",label:e("etlService","ETL Service"),value:"healthy"===et?e("serviceHealthy","Healthy"):"down"===et?e("serviceDown","Down"):e("serviceUnknown","Unknown"),subtext:er?e("lastChecked","Last checked: {{value}}",{value:lF(er)}):e("noMonitorsHint","No monitors configured")}),n().createElement(ia,{icon:n().createElement(d.jG,{size:22}),iconTone:"info",label:e("runningTasks","Running tasks"),value:void 0===X?e("dash","—"):String(X),subtext:void 0===X?e("noRunningData","No monitor data"):0===X?e("noTasksRunning","No tasks running"):e("tasksInProgress","Tasks in progress")}),n().createElement(ia,{icon:n().createElement(c.EN,{size:22}),iconTone:"info",label:e("activeTasks","Active tasks"),value:String(ee),subtext:e("outOfTotal","Out of {{count}}",{count:i.length})}),n().createElement(ia,{icon:n().createElement(es.x,{size:22}),iconTone:Z?"danger":"neutral",label:e("failedToday","Failed today"),value:void 0===Z?e("dash","—"):String(Z),subtext:void 0===Z?e("noFailureData","No failure data"):0===Z?e("noFailedRuns","No failed runs"):e("failedRuns","Failed runs")}),n().createElement(ia,{icon:n().createElement(nb.gX,{size:22}),iconTone:"info",label:e("nextScheduledRun","Next scheduled run"),value:ea?lq(ea.date):e("dash","—"),subtext:ea?.name??e("notScheduled","Not scheduled")})),n().createElement("section",null,n().createElement("div",{className:l4.toolbar},n().createElement("div",null,n().createElement("h4",{className:l4.toolbarHeading},e("configuredTasks","Configured Tasks")),n().createElement("p",{className:l4.toolbarSubtext},eu?e("noConfigHint","No ETL tasks configured. Configure via frontend config: etlTasks.tasks"):e("tasksConfiguredForExecution","{{count}} task(s) configured for ETL execution.",{count:K.length}))),n().createElement("div",{className:l4.toolbarControls},n().createElement(o.vji,{size:"sm",placeholder:e("searchTasks","Search tasks..."),labelText:e("searchTasksLabel","Search tasks"),value:L,onChange:e=>M(e.target.value),className:l4.searchBox}),n().createElement(o.msM,{id:"etl-task-type-filter",size:"sm",type:"inline",titleText:e("filter","Filter"),label:B,items:[l9,...en],selectedItem:B,onChange:({selectedItem:e})=>F(e??l9)}),n().createElement(o.$nd,{kind:"primary",size:"sm",renderIcon:u.wM,onClick:ed,disabled:v||null!==w},v?e("loading","Loading..."):e("refresh","Refresh")))),n().createElement("div",{className:l4.filterTabs},n().createElement(il,{tab:"all",label:e("all","All"),count:K.length,activeTab:$,onSelect:P}),n().createElement(il,{tab:"active",label:e("active","Active"),count:ei,activeTab:$,onSelect:P}),n().createElement(il,{tab:"inactive",label:e("inactive","Inactive"),count:eo,activeTab:$,onSelect:P})),v&&0===i.length&&0===m.length?n().createElement(o.OuH,{description:e("loadingETLTasks","Loading ETL tasks...")}):eu?n().createElement(o.FAs,{className:l4.emptyState},n().createElement(g.wB,{size:48,className:l4.emptyStateIcon}),n().createElement("h3",null,e("noConfig","No Configuration")),n().createElement("p",null,e("noConfigDesc",'No ETL tasks have been configured. Configure the frontend config option "etlTasks.tasks" with an array of task names.'))):0===K.length?n().createElement(o.FAs,{className:l4.emptyState},n().createElement(g.wB,{size:48,className:l4.emptyStateIcon}),n().createElement("h3",null,e("noTasksFound","No Tasks Found")),n().createElement("p",null,e("noTasksFoundDesc","No ETL tasks found for the configured task names. Verify the task names match existing OpenMRS task definitions."))):0===el.length?n().createElement(o.FAs,{className:l4.emptyState},n().createElement(g.wB,{size:48,className:l4.emptyStateIcon}),n().createElement("h3",null,e("noMatchingTasks","No Matching Tasks")),n().createElement("p",null,e("noMatchingTasksDesc","No tasks match the current search, status, or type filters."))):n().createElement("div",{className:l4.tasksGrid},el.map(t=>{var r;let a,l;if(t.unknown)return n().createElement(o.FAs,{key:t.name,className:l4.taskCard},n().createElement("div",{className:l4.cardHead},n().createElement("span",{className:lv()(l4.cardIcon,l4.cardIconMuted)},n().createElement(_._C,{size:20})),n().createElement("div",{className:l4.cardHeadText},n().createElement("h4",{className:l4.cardTitle},t.name),n().createElement("p",{className:l4.cardDescription},e("unknownTaskDescription","Configured in etlTasks.tasks but no matching OpenMRS task definition was found."))),n().createElement("span",{className:lv()(l4.statusPill,l4.statusPillUnknown)},e("unknown","Unknown"))),n().createElement("div",{className:l4.metaRow},n().createElement(ir,{label:e("lastRun","Last run"),value:"—"}),n().createElement(ir,{label:e("duration","Duration"),value:"—"}),n().createElement(ir,{label:e("nextRun","Next run"),value:e("notScheduled","Not scheduled")})),n().createElement("div",{className:l4.cardActions},n().createElement(o.$nd,{kind:"primary",size:"sm",renderIcon:d.jG,disabled:!0},e("runNow","Run Now"))));let i=t.definition?.started===!0,s=lz(t.definition?.lastExecutionTime,t.definition?.repeatInterval),c=e_?(r=I[e_]?.rawResponse,a=new WeakSet,(l=(e,t,r)=>{if(null==e||r>3)return null;if(lj.test(t)){let r=function(e,t){if(null==t||""===t)return null;if("number"==typeof t&&isFinite(t))return(0,l$.a3)(lG(t,e));if("string"==typeof t){let r=t.trim();if(!r)return null;let a=Number(r);return isNaN(a)||""===r?r:(0,l$.a3)(lG(a,e))}return null}(t,e);if(null!==r)return r}if("object"!=typeof e||a.has(e))return null;for(let[t,n]of(a.add(e),Array.isArray(e)?e.map((e,t)=>[String(t),e]):Object.entries(e))){let e=l(n,t,r+1);if(null!==e)return e}return null})(r,"",0)??e("dash","—")):e("dash","—"),m=w===t.name;return n().createElement(o.FAs,{key:t.name,className:l4.taskCard},n().createElement("div",{className:l4.cardHead},n().createElement("span",{className:l4.cardIcon},n().createElement(_._C,{size:20})),n().createElement("div",{className:l4.cardHeadText},n().createElement("h4",{className:l4.cardTitle,title:t.name},t.name),n().createElement("p",{className:l4.cardDescription,title:t.definition?.description||t.definition?.taskClass},t.definition?.description||t.definition?.taskClass)),n().createElement("span",{className:lv()(l4.statusPill,i?l4.statusPillActive:l4.statusPillInactive)},i?e("active","Active"):e("inactive","Inactive"))),n().createElement("div",{className:l4.metaRow},n().createElement(ir,{label:e("lastRun","Last run"),value:lF(t.definition?.lastExecutionTime)}),n().createElement(ir,{label:e("duration","Duration"),value:c}),n().createElement(ir,{label:e("nextRun","Next run"),value:lq(s)})),n().createElement("div",{className:l4.cardActions},n().createElement(o.$nd,{kind:"primary",size:"sm",renderIcon:m?u.wM:d.jG,onClick:()=>ec(t),disabled:null!==w},m?e("executing","Executing..."):null!==w?e("pleaseWait","Please Wait"):e("runNow","Run Now")),ep&&n().createElement(o.$nd,{kind:"tertiary",size:"sm",onClick:em},e("viewDetails","View details")),ep&&0===H.length&&n().createElement("span",{className:l4.monitorMissing},e("monitorNotFound","Monitor not found"))),m&&n().createElement("div",{className:l4.executingStatus},n().createElement(o.OuH,{description:e("executingTask","Executing task...")})))}))),n().createElement("section",{ref:z},n().createElement("div",{className:l4.sectionHeading},n().createElement("h4",{className:l4.toolbarHeading},e("liveExecution","Live Execution")),n().createElement("p",{className:l4.toolbarSubtext},e("liveExecutionHint","Monitor progress and status for currently running ETL tasks."))),ep?n().createElement("div",{className:l4.monitorsGrid},j.map(t=>t.monitor?n().createElement(l3,{key:t.monitor.uuid,monitor:t.monitor,data:I[t.monitor.uuid],error:D[t.monitor.uuid]??null,loading:!!R[t.monitor.uuid],onRefresh:()=>J(t.monitor.uuid),title:t.monitor.name}):n().createElement(o.FAs,{key:t.ref,className:l4.monitorMissingCard},n().createElement("p",{className:l4.monitorMissingTitle},t.ref),n().createElement("p",{className:l4.monitorMissingHint},e("monitorRefNotFound","No monitor matches this code or UUID. Check etlTasks.progressMonitors or create the monitor under Admin → ETL Monitors."))))):n().createElement("div",{className:l4.liveEmpty},n().createElement(g.wB,{size:40,className:l4.emptyStateIcon}),n().createElement("p",{className:l4.liveEmptyTitle},e("noTaskRunning","No ETL task currently running")),n().createElement("p",{className:l4.liveEmptyHint},ea?n().createElement(n().Fragment,null,e("nextScheduledIs","The next scheduled task is")," ",n().createElement("strong",null,ea.name," — ",lq(ea.date)),"."):e("liveExecutionConfigureHint","Configure etlTasks.progressMonitors to see live progress from your ETL monitors here."))))))}function io(e){let[t,r]=n().useState([]),[a,l]=n().useState(!1),[i,o]=n().useState(null);return n().useEffect(()=>{if(!e){r([]),l(!1),o(null);return}let t=new AbortController;return l(!0),o(null),nO(t.signal).then(e=>{let t=(e??[]).map(e=>e?.name??e?.table??e?.tableName??e?.view??e?.value??"").map(e=>e.trim()).filter(Boolean),a=[],n=new Set;for(let e of t)n.has(e)||(n.add(e),a.push(e));r(a)}).catch(e=>{e?.name!=="AbortError"&&o(e?.message??"Failed to load tables")}).finally(()=>l(!1)),()=>t.abort()},[e]),{tables:t,loading:a,error:i}}function is(e,t=!0){let[r,a]=n().useState([]),[l,i]=n().useState(!1),[o,s]=n().useState(null);return n().useEffect(()=>{if(!t||!e){a([]),i(!1),s(null);return}let r=new AbortController;return i(!0),s(null),nx(e,r.signal).then(e=>a(Array.isArray(e)?e:[])).catch(e=>{e?.name!=="AbortError"&&s(e?.message??"Failed to load columns")}).finally(()=>i(!1)),()=>r.abort()},[e,t]),{columns:r,loading:l,error:o}}var id=r(4213);function ic(e){if(null==e)return"";let t="object"==typeof e?JSON.stringify(e):String(e);return/^[=+@]/.test(t)&&(t=`'${t}`),/[",\n\r]/.test(t)&&(t=`"${t.replace(/"/g,'""')}"`),t}let im={browserGrid:"-esm-report-builder__etl-browser-component__browserGrid___m2X6e",paneWrap:"-esm-report-builder__etl-browser-component__paneWrap___RjVhg",pane:"-esm-report-builder__etl-browser-component__pane___jTPem",detailPane:"-esm-report-builder__etl-browser-component__detailPane___Z061T",resizeHandle:"-esm-report-builder__etl-browser-component__resizeHandle___5bVeh",paneHeader:"-esm-report-builder__etl-browser-component__paneHeader___gpmKg",paneTitle:"-esm-report-builder__etl-browser-component__paneTitle___UxNrg",paneActions:"-esm-report-builder__etl-browser-component__paneActions___P3xr9",paneSearch:"-esm-report-builder__etl-browser-component__paneSearch___O-hHb",paneBody:"-esm-report-builder__etl-browser-component__paneBody___DewaH",iconAction:"-esm-report-builder__etl-browser-component__iconAction___o4p0Q",sourceList:"-esm-report-builder__etl-browser-component__sourceList___FhFvp",tableList:"-esm-report-builder__etl-browser-component__tableList___LD6CT",sourceRow:"-esm-report-builder__etl-browser-component__sourceRow___2ygFc",sourceRowSelected:"-esm-report-builder__etl-browser-component__sourceRowSelected___haNZm",sourceRowIcon:"-esm-report-builder__etl-browser-component__sourceRowIcon___Svjp4",sourceRowName:"-esm-report-builder__etl-browser-component__sourceRowName___CpQKN",treeEmpty:"-esm-report-builder__etl-browser-component__treeEmpty___Ph4NL",tableRow:"-esm-report-builder__etl-browser-component__tableRow___MT3No",tableRowSelected:"-esm-report-builder__etl-browser-component__tableRowSelected___8hDhw",tableRowIcon:"-esm-report-builder__etl-browser-component__tableRowIcon___AC6oj",tableRowText:"-esm-report-builder__etl-browser-component__tableRowText___Gv4ib",tableName:"-esm-report-builder__etl-browser-component__tableName___I7qu0",tableMeta:"-esm-report-builder__etl-browser-component__tableMeta___hhHd0",detailHeader:"-esm-report-builder__etl-browser-component__detailHeader___Am4IY",detailIcon:"-esm-report-builder__etl-browser-component__detailIcon___iaD0D",detailHeaderText:"-esm-report-builder__etl-browser-component__detailHeaderText___OBt1N",detailTitle:"-esm-report-builder__etl-browser-component__detailTitle___eoG+P",detailMeta:"-esm-report-builder__etl-browser-component__detailMeta___aZTJ8",detailActions:"-esm-report-builder__etl-browser-component__detailActions___MOlLQ",detailBody:"-esm-report-builder__etl-browser-component__detailBody___0saoj",toolbar:"-esm-report-builder__etl-browser-component__toolbar___ljMnG",toolbarSpacer:"-esm-report-builder__etl-browser-component__toolbarSpacer___s8Trg",rowSearch:"-esm-report-builder__etl-browser-component__rowSearch___83Hx3",truncateNote:"-esm-report-builder__etl-browser-component__truncateNote___nXM+f",gridScroll:"-esm-report-builder__etl-browser-component__gridScroll___VI+L+",emptyState:"-esm-report-builder__etl-browser-component__emptyState___srSg0",metadataFacts:"-esm-report-builder__etl-browser-component__metadataFacts___9JAuY",metadataHeading:"-esm-report-builder__etl-browser-component__metadataHeading___AcxwJ",metadataTypes:"-esm-report-builder__etl-browser-component__metadataTypes___mqq-4",infoStrip:"-esm-report-builder__etl-browser-component__infoStrip___bwFMl",infoCell:"-esm-report-builder__etl-browser-component__infoCell___7xF6k",infoLabel:"-esm-report-builder__etl-browser-component__infoLabel___g4Yz0",infoValue:"-esm-report-builder__etl-browser-component__infoValue___J5r4+"};function iu({groups:e,other:t,selectedSourceId:r,searchValue:a,loading:l,error:i,collapsed:s=!1,onToggleCollapsed:d,onSearchChange:m,onSelectSource:u}){let p=a.trim().toLowerCase(),g=[...e,...t.tables.length>0?[t]:[]],E=p?g.filter(e=>e.name.toLowerCase().includes(p)):g;return n().createElement("div",{className:im.pane},n().createElement("div",{className:im.paneHeader},!s&&n().createElement(n().Fragment,null,n().createElement("span",{className:im.paneTitle},"Data Sources"),n().createElement("span",{className:im.paneActions},d&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:_.ZK,iconDescription:"Collapse panel",onClick:d}))),s&&d&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:_.K3,iconDescription:"Expand panel",onClick:d})),!s&&n().createElement(n().Fragment,null,n().createElement("div",{className:im.paneSearch},n().createElement(o.vji,{size:"sm",placeholder:"Search sources...",labelText:"Search sources",value:a,onChange:e=>m(e.target.value)})),n().createElement("div",{className:im.paneBody},l&&n().createElement(o.OuH,{description:"Loading sources..."}),i&&n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:i}),!l&&!i&&0===E.length&&n().createElement("p",{className:im.treeEmpty},"No sources match"),E.length>0&&n().createElement("ul",{className:im.sourceList},E.map(e=>n().createElement("li",{key:e.id},n().createElement("button",{type:"button",className:lv()(im.sourceRow,r===e.id&&im.sourceRowSelected),onClick:()=>u(e.id)},n().createElement("span",{className:im.sourceRowIcon},n().createElement(c.EN,{size:16})),n().createElement("span",{className:im.sourceRowName},e.name),n().createElement(o.vwO,{size:"sm",type:"gray"},e.tables.length))))))))}function ip({title:e,tables:t,selectedTable:r,searchValue:a,loading:l,error:i,collapsed:s=!1,onToggleCollapsed:d,onResetFilter:c,onSearchChange:m,onSelectTable:u}){let p=a.trim().toLowerCase(),g=p?t.filter(e=>e.name.toLowerCase().includes(p)):t;return n().createElement("div",{className:im.pane},n().createElement("div",{className:im.paneHeader},!s&&n().createElement(n().Fragment,null,n().createElement("span",{className:im.paneTitle},e),n().createElement("span",{className:im.paneActions},c&&n().createElement("button",{type:"button",className:im.iconAction,title:"Show all sources",onClick:c},"All sources"),n().createElement(o.vwO,{size:"sm",type:"cool-gray"},t.length),d&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:_.ZK,iconDescription:"Collapse panel",onClick:d}))),s&&d&&n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:_.K3,iconDescription:"Expand panel",onClick:d})),!s&&n().createElement(n().Fragment,null,n().createElement("div",{className:im.paneSearch},n().createElement(o.vji,{size:"sm",placeholder:"Search tables...",labelText:"Search tables",value:a,onChange:e=>m(e.target.value)})),n().createElement("div",{className:im.paneBody},l&&n().createElement(o.OuH,{description:"Loading tables..."}),i&&n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:i}),!l&&!i&&0===g.length&&n().createElement("p",{className:im.treeEmpty},"No tables match"),g.length>0&&n().createElement("ul",{className:im.tableList},g.map(e=>{let t,a;return n().createElement("li",{key:e.name},n().createElement("button",{type:"button",className:lv()(im.tableRow,r===e.name&&im.tableRowSelected),onClick:()=>u(e.name)},n().createElement("span",{className:im.tableRowIcon},n().createElement(f.vx,{size:18})),n().createElement("span",{className:im.tableRowText},n().createElement("span",{className:im.tableName},e.name),n().createElement("span",{className:im.tableMeta},(t="number"==typeof e.rows?`${e.rows.toLocaleString()} rows`:"rows unknown",a=e.updateTime?(0,l$.fw)(e.updateTime,{pastOnly:!0}):"—",`${t} • ${a}`)))))})))))}let i_=[{key:"name",header:"Column"},{key:"type",header:"Data type"}];function ig({columns:e,loading:t,error:r}){if(t)return n().createElement(o.OuH,{description:"Loading columns..."});if(r)return n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:r});if(0===e.length)return n().createElement(o.FAs,{className:im.emptyState},n().createElement("h5",null,"No columns returned"),n().createElement("p",null,"The backend returned no column metadata for this table."));let a=e.map(e=>({id:e.name,name:e.name,type:e.type??"—"}));return n().createElement("div",null,n().createElement("div",{className:im.toolbar},n().createElement(o.vwO,{size:"sm",type:"cool-gray"},e.length," columns")),n().createElement(o.bQt,{rows:a,headers:i_,size:"sm"},({rows:e,headers:t,getHeaderProps:r,getRowProps:a,getTableProps:l})=>n().createElement(o.K3K,{className:im.gridScroll},n().createElement(o.XIK,l(),n().createElement(o.ndF,null,n().createElement(o.Hjg,null,t.map(e=>n().createElement(o.A0N,{key:e.key,...r({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id,...a({row:e})},e.cells.map(e=>n().createElement(o.nA6,{key:e.id},e.value)))))))))}function iE({table:e,source:t,columns:r}){var a,l;let i=function(e){let t=new Map;for(let r of e??[]){let e=r?.type?.trim()||"unknown";t.set(e,(t.get(e)??0)+1)}let r=Array.from(t.entries()).map(([e,t])=>({type:e,count:t})).sort((e,t)=>t.count-e.count||e.type.localeCompare(t.type));return{total:e?.length??0,byType:r}}(r),s=[{label:"Source",value:t?.name??"—"},{label:"Schema",value:t?.schemaName??"—"},{label:"Type",value:"VIEW"===e.tableType?"View":"Table"},{label:"Rows",value:"number"==typeof(a=e.rows)?`${a.toLocaleString()} (approximate)`:"—"},{label:"Last refreshed",value:(l=e.updateTime)?(0,l$.fw)(l,{pastOnly:!0}):"—"},{label:"Columns",value:r.length?String(r.length):"—"}];return n().createElement("div",null,n().createElement("div",{className:im.metadataFacts},s.map(e=>n().createElement("div",{key:e.label,className:im.infoCell},n().createElement("span",{className:im.infoLabel},e.label),n().createElement("span",{className:im.infoValue},e.value)))),n().createElement("h6",{className:im.metadataHeading},"Column types"),0===i.byType.length?n().createElement("p",{className:im.truncateNote},"Column metadata not loaded yet."):n().createElement("div",{className:im.metadataTypes},i.byType.map(e=>n().createElement(o.vwO,{key:e.type,size:"sm",type:"cool-gray"},e.type,": ",e.count))))}let ib=[10,25,50,100];function iy({table:e,data:t,loading:r,error:l,onRefresh:i}){let[s,d]=(0,a.useState)(""),[c,m]=(0,a.useState)(1),[p,_]=(0,a.useState)(10);(0,a.useEffect)(()=>{d(""),m(1)},[e,t]);let g=(0,a.useMemo)(()=>{if(!t)return[];let e=s.trim().toLowerCase();return e?t.rows.filter(t=>t.some(t=>String(t??"").toLowerCase().includes(e))):t.rows},[t,s]),E=Math.min(c,Math.max(1,Math.ceil(g.length/p))),f=(E-1)*p,b=g.slice(f,f+p),y=!!(t&&(t.truncated||t.rows.length>=1e3)),h=(t?.columns??[]).map(e=>({key:e,header:e})),v=b.map((e,r)=>{let a={id:String(f+r)};return t?.columns.forEach((t,r)=>{let n=e[r];a[t]=null==n?"":String(n)}),a});return r?n().createElement(o.OuH,{description:`Loading preview of ${e}...`}):l?n().createElement("div",null,n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Preview failed",subtitle:l}),n().createElement("div",{className:im.toolbar},n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:u.wM,onClick:i},"Retry")),n().createElement("p",{className:im.truncateNote},'Preview needs the "sql.execute" privilege and a valid table name.')):t?n().createElement("div",null,n().createElement("div",{className:im.toolbar},n().createElement(o.vji,{size:"sm",className:im.rowSearch,placeholder:"Search rows...",labelText:"Search rows",value:s,onChange:e=>d(e.target.value)}),n().createElement(o.vwO,{size:"sm",type:"cool-gray"},t.rowCount.toLocaleString()," rows in preview"),n().createElement("span",{className:im.toolbarSpacer}),n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:u.wM,onClick:i},"Refresh"),n().createElement(o.$nd,{kind:"tertiary",size:"sm",onClick:()=>{var r;let a,n;return r=`${e}-preview`,a=new Blob([function(e,t){let r=[e.map(ic).join(",")];for(let e of t??[])r.push(e.map(ic).join(","));return r.join("\n")}(t.columns,t.rows)],{type:"text/csv;charset=utf-8"}),n=`${r}_${new Date().toISOString().replace(/:/g,"-")}.csv`,void(0,id.saveAs)(a,n)},disabled:0===t.rows.length},"Export CSV")),y&&n().createElement("p",{className:im.truncateNote},"Preview shows the first ",1e3.toLocaleString()," rows — use the search or export to work with more."),0===t.rows.length?n().createElement(o.FAs,{className:im.emptyState},n().createElement("h5",null,"This table has no rows"),n().createElement("p",null,"The table may be empty, or it is a view that currently returns no rows.")):n().createElement(n().Fragment,null,n().createElement(o.bQt,{rows:v,headers:h,size:"sm",isSortable:!0},({rows:e,headers:t,getHeaderProps:r,getRowProps:a,getTableProps:l})=>n().createElement(o.K3K,{className:im.gridScroll},n().createElement(o.XIK,{...l(),useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,t.map(e=>n().createElement(o.A0N,{key:e.key,...r({header:e})},e.header)))),n().createElement(o.BFY,null,e.map(e=>n().createElement(o.Hjg,{key:e.id,...a({row:e})},e.cells.map(e=>n().createElement(o.nA6,{key:e.id},e.value)))))))),n().createElement(o.dKS,{page:E,pageSize:p,pageSizes:ib,totalItems:g.length,onChange:({page:e,pageSize:t})=>{_(t),m(e)}}))):null}function ih(){return n().createElement("div",{className:im.emptyState},n().createElement(tw.$$,{size:28}),n().createElement("h5",null,"Relationships aren't available yet"),n().createElement("p",null,"The report builder API doesn't expose foreign-key metadata for ETL tables. Column-level hints (e.g. columns ending in ",n().createElement("code",null,"_id"),") may still be visible in the Columns tab."))}function iv({source:e,table:t}){if(!t)return null;let r=[{label:"Source",value:e?.name??"—"},{label:"Schema",value:e?.schemaName??"—"},{label:"Table",value:t.name},{label:"Type",value:"VIEW"===t.tableType?"View":"Table"},{label:"Rows",value:"number"==typeof t.rows?n().createElement("strong",null,t.rows.toLocaleString()):"—"},{label:"Last refreshed",value:t.updateTime?(0,l$.fw)(t.updateTime,{pastOnly:!0}):"—"}];return n().createElement("div",{className:im.infoStrip},r.map(e=>n().createElement("div",{key:e.label,className:im.infoCell},n().createElement("span",{className:im.infoLabel},e.label),n().createElement("span",{className:im.infoValue},e.value))))}let iS=["data","columns","metadata","relationships"];function iT({table:e,source:t,columns:r,columnsLoading:a,columnsError:l,activeTab:i,onTabChange:s}){let d=function(e){let[t,r]=n().useState({status:"idle"}),[a,l]=n().useState(0);return n().useEffect(()=>{if(!e)return void r({status:"idle"});r({status:"loading"});let t=new AbortController;return rU({sql:`SELECT * FROM ${function(e){let t=e?.trim();if(!t)throw Error("Table name is required");return"`"+t.replace(/`/g,"``")+"`"}(e)}`,maxRows:1e3},t.signal).then(e=>{t.signal.aborted||r({status:"ready",data:e})}).catch(e=>{e?.name!=="AbortError"&&r({status:"error",error:e?.message??"Failed to load preview"})}),()=>t.abort()},[e,a]),{...t,refresh:()=>l(e=>e+1)}}(e.name),c=[`Source: ${t?.name??"—"}`,`Schema: ${t?.schemaName??"—"}`,`Type: ${"VIEW"===e.tableType?"View":"Table"}`,`Rows: ${"number"==typeof e.rows?e.rows.toLocaleString():"—"}`,`Last refreshed: ${e.updateTime?(0,l$.fw)(e.updateTime,{pastOnly:!0}):"—"}`];return n().createElement("div",{className:`${im.pane} ${im.detailPane}`},n().createElement("div",{className:im.detailHeader},n().createElement("span",{className:im.detailIcon},n().createElement(f.vx,{size:22})),n().createElement("div",{className:im.detailHeaderText},n().createElement("h4",{className:im.detailTitle,title:e.name},"Table: ",e.name),n().createElement("p",{className:im.detailMeta},c.join(" "))),n().createElement("div",{className:im.detailActions},n().createElement(o.$nd,{kind:"secondary",size:"sm",renderIcon:u.wM,onClick:d.refresh},"Refresh"))),n().createElement("div",{className:im.detailBody},n().createElement(o.tUM,{selectedIndex:iS.indexOf(i),onChange:({selectedIndex:e})=>s(iS[e]??"data")},n().createElement(o.wbY,{"aria-label":"Table detail tabs"},n().createElement(o.ozo,null,"Data"),n().createElement(o.ozo,null,"Columns"),n().createElement(o.ozo,null,"Metadata"),n().createElement(o.ozo,null,"Relationships")),n().createElement(o.T2N,null,n().createElement(o.KpK,null,n().createElement(iy,{table:e.name,data:d.data,loading:"loading"===d.status,error:d.error,onRefresh:d.refresh})),n().createElement(o.KpK,null,n().createElement(ig,{columns:r,loading:a,error:l})),n().createElement(o.KpK,null,n().createElement(iE,{table:e,source:t,columns:r})),n().createElement(o.KpK,null,n().createElement(ih,null)))),n().createElement(iv,{source:t,table:e})))}function iC(){return n().createElement("div",{className:`${im.pane} ${im.detailPane}`},n().createElement(o.FAs,{className:im.emptyState},n().createElement(f.vx,{size:32}),n().createElement("h5",null,"No table selected"),n().createElement("p",null,"Select a table from the list to explore its columns and preview its data.")))}function iw(){let{t:e}=(0,A.useTranslation)(),[t,r]=(0,a.useState)([]),[i,s]=(0,a.useState)(!0),[d,c]=(0,a.useState)(null),{tables:m,loading:u,error:p}=function(e){let[t,r]=n().useState([]),[a,l]=n().useState(!1),[i,o]=n().useState(null);return n().useEffect(()=>{if(!e){r([]),l(!1),o(null);return}let t=new AbortController;return l(!0),o(null),nO(t.signal).then(e=>r(e??[])).catch(e=>{e?.name!=="AbortError"&&o(e?.message??"Failed to load tables")}).finally(()=>l(!1)),()=>t.abort()},[e]),{tables:t,loading:a,error:i}}(!0),[_,g]=(0,a.useState)(""),[E,f]=(0,a.useState)(""),[b,y]=(0,a.useState)("all"),[h,v]=(0,a.useState)(null),[S,T]=(0,a.useState)("data"),[C,w]=(0,l.ok)(),[N,I]=(0,a.useState)(!1),[k,R]=(0,a.useState)(260),[O,D]=(0,a.useState)(!1),[x,L]=(0,a.useState)(300),[M,$]=(0,a.useState)(!1),[P,U]=(0,a.useState)(!1);(0,a.useEffect)(()=>{let e=e=>{let t=document.querySelector(`.${im.browserGrid}`)?.getBoundingClientRect();if(t&&(M&&R(Math.max(200,Math.min(500,e.clientX-t.left))),P)){let r=(N?48:k)+t.left;L(Math.max(240,Math.min(600,e.clientX-r)))}},t=()=>{$(!1),U(!1),document.body.style.cursor="default",document.body.style.userSelect=""};if(M||P)return document.addEventListener("mousemove",e),document.addEventListener("mouseup",t),document.body.style.cursor="col-resize",document.body.style.userSelect="none",()=>{document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",t),document.body.style.cursor="default",document.body.style.userSelect=""}},[M,P,k,N]);let B=(0,a.useCallback)(e=>{e.preventDefault(),$(!0)},[]),F=(0,a.useCallback)(e=>{e.preventDefault(),U(!0)},[]);(0,a.useEffect)(()=>{let e=new AbortController;return s(!0),c(null),lp(void 0,e.signal).then(t=>{e.signal.aborted||r(t)}).catch(e=>{e?.name!=="AbortError"&&c(e?.message??"Failed to load ETL sources")}).finally(()=>{e.signal.aborted||s(!1)}),()=>e.abort()},[]);let{groups:z,other:q}=(0,a.useMemo)(()=>(function(e,t){let r=t.filter(e=>e?.active!==!1&&e?.voided!==!0),a=r.map(e=>({id:e.uuid,name:e.name,sourceUuid:e.uuid,schemaName:e.schemaName,tables:[]})),n={id:"other",name:"Other",tables:[]};for(let t of e){let e=a.find(e=>{let a=r.find(t=>t.uuid===e.id);return(a?.tablePatterns??"").split(",").map(e=>e.trim()).filter(Boolean).some(e=>(function(e,t){let r=t?.trim();if(!r||!e)return!1;let a=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/%/g,"[\\s\\S]*").replace(/_/g,".");return RegExp(`^${a}`,"i").test(e)})(t.name,e))});e?e.tables.push(t):n.tables.push(t)}return{groups:a,other:n}})(m,t),[m,t]),j=(0,a.useMemo)(()=>[...z,...q.tables.length>0?[q]:[]],[z,q]),H=(0,a.useMemo)(()=>new Map(m.map(e=>[e.name,e])),[m]),J=(0,a.useMemo)(()=>{let e=new Map;for(let t of j)for(let r of t.tables)e.set(r.name,t);return e},[j]);(0,a.useEffect)(()=>{if(u||0===m.length)return;let e=C.get("table");if(!e||!H.has(e))return;v(e);let t=J.get(e);t&&y(t.id);let r=C.get("source");r&&y(r)},[u,m]);let V=(0,a.useCallback)((e,t)=>{w(r=>{let a=new URLSearchParams(r);return e?a.set("table",e):a.delete("table"),t&&"all"!==t?a.set("source",t):a.delete("source"),a},{replace:!0})},[w]),W=(0,a.useCallback)(e=>{y(e),V(h,e)},[h,V]),K=(0,a.useCallback)(e=>{v(e),T("data");let t=J.get(e)?.id??b;y(t),V(e,t)},[J,b,V]),Q=(0,a.useCallback)(()=>{y("all"),V(h,"all")},[h,V]),Y=h?H.get(h):void 0,X=Y?J.get(Y.name):void 0,Z=z.find(e=>e.id===X?.id),ee=(0,a.useMemo)(()=>"all"===b?m:"other"===b?q.tables:z.find(e=>e.id===b)?.tables??m,[b,m,z,q]),et="all"===b?e("etlBrowserAllTables","All tables"):e("etlBrowserTablesIn","Tables in {{name}}",{name:j.find(e=>e.id===b)?.name??""}),er=is(h??void 0,!!h);return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:e("etlBrowser","ETL Data Browser"),subtitle:e("etlBrowserSubtitle","Explore ETL schemas, tables, columns, and sample records.")}),n().createElement("div",{className:im.browserGrid},n().createElement("aside",{className:im.paneWrap,style:{width:N?48:k}},n().createElement(iu,{groups:z,other:q,selectedSourceId:b,searchValue:_,loading:i,error:d,collapsed:N,onToggleCollapsed:()=>I(e=>!e),onSearchChange:g,onSelectSource:W})),n().createElement("div",{className:im.resizeHandle,role:"separator","aria-orientation":"vertical",onMouseDown:B}),n().createElement("aside",{className:im.paneWrap,style:{width:O?48:x}},n().createElement(ip,{title:et,tables:ee,selectedTable:h,searchValue:E,loading:u,error:p,collapsed:O,onToggleCollapsed:()=>D(e=>!e),onResetFilter:"all"!==b?Q:void 0,onSearchChange:f,onSelectTable:e=>K(e)})),n().createElement("div",{className:lv()(im.resizeHandle,im.resizeHandleBeforeDetail),role:"separator","aria-orientation":"vertical",onMouseDown:F}),Y?n().createElement(iT,{table:Y,source:Z,columns:er.columns,columnsLoading:er.loading,columnsError:er.error,activeTab:S,onTabChange:T}):n().createElement(iC,null)))}function iN(e="create"){return{mode:e,currentStep:"general",general:{name:"",code:"",description:"",category:"",refreshInterval:30,timeout:10,active:!0},endpoint:{url:"",method:"GET",auth:{type:"NONE"}},fields:[],componentConfig:{labelsAbove:!1,selectable:!1,maxRows:50},density:"compact",validation:{isValid:!1,errors:[],warnings:[],validatedSteps:new Set},stepValidation:{general:{},"data-source":{},design:{},fields:{},preview:{}},isDirty:!1,isSaving:!1}}let iI=["general","data-source","design","fields","preview"];function ik(e){let t=iI.indexOf(e);return -1===t||t===iI.length-1?null:iI[t+1]}function iA(e){let t=iI.indexOf(e);return t<=0?null:iI[t-1]}function iR(e,t){let{validation:r,stepValidation:a}=t;switch(e){case"general":return!0===a.general.nameValid&&!0===a.general.codeValid&&!1!==a.general.codeUnique&&!0===a.general.refreshIntervalValid&&!0===a.general.timeoutValid;case"data-source":return!0===a["data-source"].endpointTested&&!0===a["data-source"].endpointValid;case"design":return!0===a.design.componentSelected;case"fields":return t.fields.length>0&&!0===a.fields.requiredFieldsMapped&&!1!==a.fields.jsonPathsValid;case"preview":return!0===r.isValid;default:return!1}}var iO=r(8159);let iD=(0,a.createContext)(null);function ix(e,t){switch(t.type){case"SET_GENERAL_CONFIG":return{...e,general:{...e.general,...t.payload},isDirty:!0};case"SET_ENDPOINT_CONFIG":return{...e,endpoint:{...e.endpoint,...t.payload},isDirty:!0};case"SET_TEST_RESULT":return{...e,testResult:t.payload,isDirty:!0};case"SET_DETECTED_SCHEMA":return{...e,detectedSchema:t.payload,isDirty:!0};case"SET_COMPONENT_TYPE":return{...e,componentType:t.payload,isDirty:!0};case"SET_FIELDS":return{...e,fields:t.payload,isDirty:!0};case"ADD_FIELD":return{...e,fields:[...e.fields,t.payload],isDirty:!0};case"UPDATE_FIELD":return{...e,fields:e.fields.map(e=>e.key===t.payload.key?{...e,...t.payload.updates}:e),isDirty:!0};case"REMOVE_FIELD":return{...e,fields:e.fields.filter(e=>e.key!==t.payload),isDirty:!0};case"SET_COMPONENT_CONFIG":return{...e,componentConfig:{...e.componentConfig,...t.payload},isDirty:!0};case"SET_LAYOUT":return{...e,layout:t.payload,isDirty:!0};case"SET_DENSITY":return{...e,density:t.payload,isDirty:!0};case"SET_EMPTY_STATE":return{...e,emptyState:t.payload,isDirty:!0};case"SET_CURRENT_STEP":return{...e,currentStep:t.payload};case"VALIDATE_STEP":return function(e,t){let r=new Set(e.validation.validatedSteps);r.add(t);let a={...e.stepValidation};switch(t){case"general":{let t=(0,iO.zK)(e.general);a.general={nameValid:0===t.errors.filter(e=>e.includes("Name")).length,codeValid:0===t.errors.filter(e=>e.includes("Code")).length,codeUnique:!0,categoryValid:!0,refreshIntervalValid:0===t.errors.filter(e=>e.includes("Refresh")).length,timeoutValid:0===t.errors.filter(e=>e.includes("Timeout")).length};break}case"data-source":{let t=(0,iO.Km)(e.endpoint,e.testResult,"edit"===e.mode);a["data-source"]={endpointTested:!!e.testResult,endpointValid:t.valid,urlValid:0===t.errors.filter(e=>e.includes("URL")).length,authValid:!0};break}case"design":{let t=(0,iO.X0)(e.componentType);a.design={componentSelected:t.valid,componentValid:t.valid};break}case"fields":{let t=(0,iO.Kk)(e.fields,e.componentType,e.testResult?.data,e.detectedSchema?.arrayPath);a.fields={requiredFieldsMapped:0===t.errors.filter(e=>e.includes("required")).length,primaryFieldSet:e.fields.some(e=>e.primary),jsonPathsValid:0===t.errors.filter(e=>e.includes("path")).length};break}case"preview":{let t=(0,iO.lp)(e);a.preview={configValid:t.valid,previewRenderable:t.valid}}}return{...e,validation:{...e.validation,validatedSteps:r,isValid:5===r.size},stepValidation:a}}(e,t.payload);case"SET_SAVING":return{...e,isSaving:t.payload};case"RESET":return iN(e.mode);case"LOAD_MONITOR":return function(e){let t,r=iN("edit");r.initialMonitor=e;let a={},n={},l=!1;try{e.configJson&&(a=JSON.parse(e.configJson))}catch(e){console.error("Failed to parse monitor configJson:",e),l=!0,r.parseError="configJson"}try{e.displayConfigJson&&(n=JSON.parse(e.displayConfigJson))}catch(e){console.error("Failed to parse monitor displayConfigJson:",e),l=!0,r.parseError=r.parseError?`${r.parseError}, displayConfigJson`:"displayConfigJson"}l&&console.warn("Monitor configuration parsing failed, builder may not function correctly:",e.code);let i=a.apiEndpoint||{};if(i.auth&&"object"==typeof i.auth)t={type:i.auth.type||i.authType||"NONE",useSession:i.auth.useSession||!0===i.useSession,username:i.auth.username||"",password:i.auth.password||"",headerName:i.auth.headerName||"",apiKey:i.auth.apiKey||"",token:i.auth.token||""};else{let e=i.authType||i.auth?.type||"NONE",r=i.authConfig||i.authConfig||{};t={type:e,useSession:"OPENMRS"===e||"true"===r.useSession||!0===r.useSession,username:r.username||"",password:r.password||"",headerName:r.headerName||"X-API-Key",apiKey:r.apiKey||"",token:r.token||""}}return r.endpoint={url:i.url||"",method:i.method||"GET",auth:t},r.general={name:e.name||"",code:e.code||"",description:e.description||"",category:e.category||"",refreshInterval:e.refreshInterval||30,timeout:e.timeout||10,active:!1!==e.active},2===n.schemaVersion?(r.componentType=n.component,r.fields=n.fields?n.fields.map(e=>({...e,statusMappings:e.statusMap?Object.entries(e.statusMap).map(([e,t])=>({rawValue:e,label:t.label,tone:t.tone})):e.statusMappings||[]})):[],r.componentConfig=n.componentConfig?{...n.componentConfig}:{},r.layout=n.layout?{...n.layout}:void 0,r.emptyState=n.emptyState?{...n.emptyState}:void 0,r.density=n.presentation?.density||"compact"):(n.columns&&Array.isArray(n.columns)&&n.columns.length>0?(console.log("Converting V1 monitor format to V2 for editing:",e.code),r.componentType="TABLE",r.fields=n.columns.map(iL)):(console.warn("No valid display configuration found for monitor:",e.code),r.componentType="SUMMARY_CARD",r.fields=[]),r.componentConfig={}),r}(t.payload);default:return e}}function iL(e){let t={key:e.key,label:e.header||e.key,path:e.jsonPath||`$.${e.key}`,type:"TEXT",primary:!1,hidden:!1,order:0};switch(e.columnType){case"STATUS_BADGE":t.type="STATUS",e.colorMap&&"object"==typeof e.colorMap&&(t.statusMappings=Object.entries(e.colorMap).map(([e,t])=>{var r;return{rawValue:e,label:e,tone:(r=String(t),({green:"success",red:"critical",yellow:"warning",blue:"info",gray:"neutral",grey:"neutral",success:"success",error:"critical",warning:"warning",info:"info",neutral:"neutral"})[r?.toLowerCase()||""]||"neutral")}}));break;case"TIMESTAMP":t.type="TIMESTAMP";break;case"NUMBER":t.type="NUMBER";break;case"PERCENTAGE":t.type="PERCENTAGE";break;case"DURATION":t.type="DURATION";break;case"BOOLEAN":t.type="BOOLEAN";break;default:t.type="TEXT"}return void 0!==e.defaultValue&&(t.defaultValue=e.defaultValue),t}function iM({children:e,mode:t,monitorId:l}){let[i,o]=(0,a.useReducer)(ix,iN("create")),[s,d]=n().useState(null),[c,m]=n().useState(!1);n().useEffect(()=>{let e=!0,r=new AbortController;return"edit"===t&&l&&(m(!0),lO(l,r.signal).then(t=>{e&&(d(t),o({type:"LOAD_MONITOR",payload:t}),m(!1))}).catch(t=>{e&&"AbortError"!==t.name&&(console.error("Failed to load monitor:",t),m(!1))})),()=>{e=!1,r.abort()}},[t,l]);let u=(0,a.useCallback)(e=>{e.general&&o({type:"SET_GENERAL_CONFIG",payload:e.general}),e.endpoint&&o({type:"SET_ENDPOINT_CONFIG",payload:e.endpoint}),void 0!==e.testResult&&o({type:"SET_TEST_RESULT",payload:e.testResult}),void 0!==e.detectedSchema&&o({type:"SET_DETECTED_SCHEMA",payload:e.detectedSchema}),void 0!==e.componentType&&o({type:"SET_COMPONENT_TYPE",payload:e.componentType}),void 0!==e.fields&&o({type:"SET_FIELDS",payload:e.fields}),void 0!==e.componentConfig&&o({type:"SET_COMPONENT_CONFIG",payload:e.componentConfig}),void 0!==e.layout&&o({type:"SET_LAYOUT",payload:e.layout}),void 0!==e.density&&o({type:"SET_DENSITY",payload:e.density}),void 0!==e.emptyState&&o({type:"SET_EMPTY_STATE",payload:e.emptyState}),void 0!==e.currentStep&&o({type:"SET_CURRENT_STEP",payload:e.currentStep})},[]),p=(0,a.useCallback)(e=>iR(e,i),[i]),_=(0,a.useCallback)(e=>iR(e,i),[i]),g=(0,a.useCallback)(()=>(0,iO.fz)(i),[i]),E=(0,a.useCallback)(async()=>{o({type:"SET_SAVING",payload:!0});try{let e,{stateToSavePayload:a}=await Promise.resolve().then(r.bind(r,8159)),n=a(i);return e="edit"===t&&s?.uuid?await lx(s.uuid,n):await lD(n),o({type:"SET_SAVING",payload:!1}),e}catch(e){throw o({type:"SET_SAVING",payload:!1}),e}},[i,t,s]),f=(0,a.useCallback)(()=>{o({type:"RESET"})},[]),b=n().useMemo(()=>({state:i,dispatch:o,updateState:u,validateStep:p,canAdvance:_,generateConfig:g,saveMonitor:E,cancel:f}),[i,u,p,_,g,E,f]);return c?n().createElement(iD.Provider,{value:b},n().createElement("div",{style:{padding:"2rem",textAlign:"center"}},n().createElement("p",null,"Loading monitor configuration..."))):(i.parseError&&"edit"===t&&console.warn("Monitor configuration had parsing errors:",i.parseError),n().createElement(iD.Provider,{value:b},e))}function i$(){let e=(0,a.useContext)(iD);if(!e)throw Error("useBuilderContext must be used within BuilderProvider");return e}function iP(){let{updateState:e}=i$();return e}function iU(){let{state:e,dispatch:t,canAdvance:r}=i$(),l=(0,a.useCallback)(a=>{let n=iI.indexOf(e.currentStep),l=iI.indexOf(a);if(1>=Math.abs(l-n))t({type:"SET_CURRENT_STEP",payload:a});else{let e=!0;for(let t=Math.min(n,l);t<Math.max(n,l);t++)if(!r(iI[t])){e=!1;break}e&&t({type:"SET_CURRENT_STEP",payload:a})}},[e.currentStep,r,t]),i=(0,a.useCallback)(()=>{let t=ik(e.currentStep);t&&l(t)},[e.currentStep,l]),o=(0,a.useCallback)(()=>{let t=iA(e.currentStep);t&&l(t)},[e.currentStep,l]);return n().useMemo(()=>({currentStep:e.currentStep,goToStep:l,goToNextStep:i,goToPreviousStep:o,canGoNext:!!ik(e.currentStep),canGoPrevious:!!iA(e.currentStep)}),[e.currentStep,l,i,o])}let iB={"etl-monitor-builder-page":"-esm-report-builder__etl-monitor-builder-page__etl-monitor-builder-page___Kli-X","builder-header":"-esm-report-builder__etl-monitor-builder-page__builder-header___vPlRP","builder-header__breadcrumb":"-esm-report-builder__etl-monitor-builder-page__builder-header__breadcrumb___rs3vf","builder-header__category":"-esm-report-builder__etl-monitor-builder-page__builder-header__category___vFQO2","builder-header__separator":"-esm-report-builder__etl-monitor-builder-page__builder-header__separator___AgfXN","builder-header__name":"-esm-report-builder__etl-monitor-builder-page__builder-header__name___wV8Yi","builder-header__title":"-esm-report-builder__etl-monitor-builder-page__builder-header__title___RJ4yj","builder-header__actions":"-esm-report-builder__etl-monitor-builder-page__builder-header__actions___ZFC7A","builder-content":"-esm-report-builder__etl-monitor-builder-page__builder-content___qweI7","builder-grid":"-esm-report-builder__etl-monitor-builder-page__builder-grid___5vUmZ","builder-sidebar":"-esm-report-builder__etl-monitor-builder-page__builder-sidebar___rkuoX","builder-steps-nav":"-esm-report-builder__etl-monitor-builder-page__builder-steps-nav___b24Da","builder-steps-list":"-esm-report-builder__etl-monitor-builder-page__builder-steps-list___sBIY6","builder-step-item":"-esm-report-builder__etl-monitor-builder-page__builder-step-item___YcqOI","builder-step-item--completed":"-esm-report-builder__etl-monitor-builder-page__builder-step-item--completed___vMtDh","builder-step-button":"-esm-report-builder__etl-monitor-builder-page__builder-step-button___vJ1cm","builder-step-number":"-esm-report-builder__etl-monitor-builder-page__builder-step-number___y6htw","builder-step-item--current":"-esm-report-builder__etl-monitor-builder-page__builder-step-item--current___YYTAr","builder-step-label":"-esm-report-builder__etl-monitor-builder-page__builder-step-label___nhFir","builder-step-sublabel":"-esm-report-builder__etl-monitor-builder-page__builder-step-sublabel___ozQ7V","builder-step-item--upcoming":"-esm-report-builder__etl-monitor-builder-page__builder-step-item--upcoming___KQDmu","builder-step-content":"-esm-report-builder__etl-monitor-builder-page__builder-step-content___etYhB","builder-help-section":"-esm-report-builder__etl-monitor-builder-page__builder-help-section___knpIC","builder-help-icon":"-esm-report-builder__etl-monitor-builder-page__builder-help-icon___rThNo","builder-help-content":"-esm-report-builder__etl-monitor-builder-page__builder-help-content___lXEwK","builder-help-label":"-esm-report-builder__etl-monitor-builder-page__builder-help-label___TFWGe","builder-help-link":"-esm-report-builder__etl-monitor-builder-page__builder-help-link___mV22v","builder-main":"-esm-report-builder__etl-monitor-builder-page__builder-main___+i8dk","builder-preview":"-esm-report-builder__etl-monitor-builder-page__builder-preview___-q45n","builder-preview-panel":"-esm-report-builder__etl-monitor-builder-page__builder-preview-panel___tp8Mi","builder-preview-header":"-esm-report-builder__etl-monitor-builder-page__builder-preview-header___hgCeO","builder-preview-description":"-esm-report-builder__etl-monitor-builder-page__builder-preview-description___fr-qO","builder-preview-content":"-esm-report-builder__etl-monitor-builder-page__builder-preview-content___OnP3u","monitor-preview-wrapper":"-esm-report-builder__etl-monitor-builder-page__monitor-preview-wrapper___LsG7m","builder-preview-settings":"-esm-report-builder__etl-monitor-builder-page__builder-preview-settings___XVQOU","builder-preview-settings-header":"-esm-report-builder__etl-monitor-builder-page__builder-preview-settings-header___0cBXe","builder-preview-settings-content":"-esm-report-builder__etl-monitor-builder-page__builder-preview-settings-content___DwyPk","builder-preview-settings-setting":"-esm-report-builder__etl-monitor-builder-page__builder-preview-settings-setting___2xgqF","builder-preview-settings-note":"-esm-report-builder__etl-monitor-builder-page__builder-preview-settings-note___T1XA2","builder-preview-card":"-esm-report-builder__etl-monitor-builder-page__builder-preview-card___LaRZJ","builder-preview-card-header":"-esm-report-builder__etl-monitor-builder-page__builder-preview-card-header___u4MhD","builder-preview-card-body":"-esm-report-builder__etl-monitor-builder-page__builder-preview-card-body___xgHxd","builder-preview-status":"-esm-report-builder__etl-monitor-builder-page__builder-preview-status___nzToM","builder-preview-dot":"-esm-report-builder__etl-monitor-builder-page__builder-preview-dot___WNC3y",pulse:"-esm-report-builder__etl-monitor-builder-page__pulse___0vx4K","builder-preview-fields":"-esm-report-builder__etl-monitor-builder-page__builder-preview-fields___WBu3f","builder-preview-field":"-esm-report-builder__etl-monitor-builder-page__builder-preview-field___llrcr","builder-preview-field-label":"-esm-report-builder__etl-monitor-builder-page__builder-preview-field-label___TOdl0","builder-preview-field-value":"-esm-report-builder__etl-monitor-builder-page__builder-preview-field-value___Xnols","builder-preview-config":"-esm-report-builder__etl-monitor-builder-page__builder-preview-config___qyMz3","builder-preview-config-header":"-esm-report-builder__etl-monitor-builder-page__builder-preview-config-header___Wrso6","builder-preview-config-tabs":"-esm-report-builder__etl-monitor-builder-page__builder-preview-config-tabs___JdrA7",active:"-esm-report-builder__etl-monitor-builder-page__active___6EQYj","builder-preview-json":"-esm-report-builder__etl-monitor-builder-page__builder-preview-json___Co-2E","builder-preview-empty":"-esm-report-builder__etl-monitor-builder-page__builder-preview-empty___IOlVB","component-preview":"-esm-report-builder__etl-monitor-builder-page__component-preview___aoMN3",selected:"-esm-report-builder__etl-monitor-builder-page__selected___7mWjn","component-preview__header":"-esm-report-builder__etl-monitor-builder-page__component-preview__header___Rk3x+","component-preview__preview":"-esm-report-builder__etl-monitor-builder-page__component-preview__preview___1ldPz","component-preview__fields":"-esm-report-builder__etl-monitor-builder-page__component-preview__fields___9X6My","component-preview__field":"-esm-report-builder__etl-monitor-builder-page__component-preview__field___ye8+H","component-preview__field-label":"-esm-report-builder__etl-monitor-builder-page__component-preview__field-label___Mc8gF","component-preview__field-value":"-esm-report-builder__etl-monitor-builder-page__component-preview__field-value___JmIDs","component-preview__field-value--status":"-esm-report-builder__etl-monitor-builder-page__component-preview__field-value--status___TFqbk","component-preview__description":"-esm-report-builder__etl-monitor-builder-page__component-preview__description___eISPl","builder-form-section":"-esm-report-builder__etl-monitor-builder-page__builder-form-section___JZunw","builder-form-section__title":"-esm-report-builder__etl-monitor-builder-page__builder-form-section__title___nVsHC","builder-form-section__fields":"-esm-report-builder__etl-monitor-builder-page__builder-form-section__fields___jrhjH","builder-form-row":"-esm-report-builder__etl-monitor-builder-page__builder-form-row___01mZX","full-width":"-esm-report-builder__etl-monitor-builder-page__full-width___jjWxp","builder-form-group":"-esm-report-builder__etl-monitor-builder-page__builder-form-group___P5kNe","builder-form-group__label":"-esm-report-builder__etl-monitor-builder-page__builder-form-group__label___AaJH9","builder-form-group__description":"-esm-report-builder__etl-monitor-builder-page__builder-form-group__description___dwDLU","endpoint-test-result":"-esm-report-builder__etl-monitor-builder-page__endpoint-test-result___tdTKS","endpoint-test-result--success":"-esm-report-builder__etl-monitor-builder-page__endpoint-test-result--success___PuZsE","endpoint-test-result--error":"-esm-report-builder__etl-monitor-builder-page__endpoint-test-result--error___rpQCp","endpoint-test-result__header":"-esm-report-builder__etl-monitor-builder-page__endpoint-test-result__header___VGRHl",success:"-esm-report-builder__etl-monitor-builder-page__success___T+spt",error:"-esm-report-builder__etl-monitor-builder-page__error___yk6x2","endpoint-test-result__content":"-esm-report-builder__etl-monitor-builder-page__endpoint-test-result__content___jPfLd","detected-fields-table":"-esm-report-builder__etl-monitor-builder-page__detected-fields-table___OCESb","builder-footer":"-esm-report-builder__etl-monitor-builder-page__builder-footer___AgXEu"};function iF({state:e}){let t=(0,iO.fz)(e),r=e.testResult?.data||function(e,t){let{fields:r,componentType:a}=e;if(!r||0===r.length)return{};let n={};if(r.forEach(e=>{let t=e.path;t.startsWith("$.")?n[t.slice(2)]=iz(e):n[e.key]=iz(e)}),"DATA_TABLE"===a||"TABLE"===a||"ERROR_LOG"===a){let e=t.data?.arrayPath||"$.data";n[e.startsWith("$.")?e.slice(2):"data"]=[iq(r,0),iq(r,1,{status:"COMPLETED",result:"SUCCESS"}),iq(r,2,{status:"FAILED",result:"ERROR"})]}return n}(e,t);return n().createElement(l0.MonitorRenderer,{config:t,data:r,loading:!1,error:null})}function iz(e,t=0){switch(e.type){case"STATUS":if(e.statusMappings&&e.statusMappings.length>0)return e.statusMappings[0].rawValue||"UP";return"UP";case"TIMESTAMP":return Date.now()-36e5*t;case"DURATION":return 1e3+500*t;case"BOOLEAN":return t%2==0;case"NUMBER":case"INTEGER":case"DECIMAL":return Math.floor(1e3*Math.random())+100+100*t;case"PERCENTAGE":return Math.max(0,Math.min(100,80-20*t));case"DATE":return new Date(Date.now()-864e5*t).toISOString().split("T")[0];case"TIME":return new Date(Date.now()-36e5*t).toTimeString().split(" ")[0];default:return`Sample ${e.label} ${t+1}`}}function iq(e,t,r={}){let a={_id:t+1};return e.forEach(e=>{let n,l=e.path;void 0!==r[n=l.startsWith("$.")?l.slice(2):l.includes(".")?l.split(".").pop():e.key]?a[n]=r[n]:a[n]=iz(e,t)}),a}let ij="-esm-report-builder__generated-config-panel__generated-config-panel__tab___8Gn1P",iH="-esm-report-builder__generated-config-panel__generated-config-panel__tab--active___J75Iw",iJ=/("(?:\\.|[^"\\])*")(\s*:)?|\b(true|false|null)\b|(-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)/g;function iG(){let{state:e}=i$(),[t,r]=(0,a.useState)("json"),[l,i]=(0,a.useState)(!1),s=(0,a.useMemo)(()=>(0,iO.fz)(e),[e]),d=(0,a.useMemo)(()=>JSON.stringify(s,null,2),[s]),m=(0,a.useMemo)(()=>(function(e){let t,r=[],a=0,l=0;for(iJ.lastIndex=0;t=iJ.exec(e);)t.index>a&&r.push(e.slice(a,t.index)),void 0!==t[1]?(r.push(n().createElement("span",{key:l++,className:t[2]?"-esm-report-builder__generated-config-panel__json-key___JiqP2":"-esm-report-builder__generated-config-panel__json-string___lQCaZ"},t[1])),t[2]&&r.push(t[2])):void 0!==t[3]?r.push(n().createElement("span",{key:l++,className:"-esm-report-builder__generated-config-panel__json-boolean___HjUcS"},t[3])):void 0!==t[4]&&r.push(n().createElement("span",{key:l++,className:"-esm-report-builder__generated-config-panel__json-number___DL0+H"},t[4])),a=iJ.lastIndex;return a<e.length&&r.push(e.slice(a)),r})(d),[d]),u=(0,a.useMemo)(()=>(0,iO.yn)(e),[e]),p=(0,a.useMemo)(()=>(0,iO.lp)(e),[e]),_=0===u.length&&p.valid,g=async()=>{try{await navigator.clipboard.writeText(d),i(!0),window.setTimeout(()=>i(!1),2e3)}catch{}};return n().createElement("div",{className:"-esm-report-builder__generated-config-panel__generated-config-panel___nR3Io"},n().createElement("div",{className:"-esm-report-builder__generated-config-panel__generated-config-panel__header___uVGqn"},n().createElement("h4",null,"Generated Configuration")),n().createElement("div",{className:"-esm-report-builder__generated-config-panel__generated-config-panel__tabs___lvp75",role:"tablist"},n().createElement("button",{type:"button",role:"tab","aria-selected":"visual"===t,className:[ij,"visual"===t&&iH].filter(Boolean).join(" "),onClick:()=>r("visual")},"Visual"),n().createElement("button",{type:"button",role:"tab","aria-selected":"json"===t,className:[ij,"json"===t&&iH].filter(Boolean).join(" "),onClick:()=>r("json")},"JSON")),n().createElement("div",{className:"-esm-report-builder__generated-config-panel__generated-config-panel__content___7Ko+W"},"visual"===t?n().createElement(iF,{state:e}):n().createElement("div",{className:"-esm-report-builder__generated-config-panel__generated-config-panel__json-wrap___UqTf4"},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:l?U.MG:c.QR,iconDescription:l?"Copied!":"Copy JSON",className:"-esm-report-builder__generated-config-panel__generated-config-panel__copy___r1QU2",onClick:g}),n().createElement("pre",{className:"-esm-report-builder__generated-config-panel__generated-config-panel__json___FhyBN"},m))),n().createElement("div",{className:["-esm-report-builder__generated-config-panel__generated-config-panel__banner___BycCH",_?"-esm-report-builder__generated-config-panel__generated-config-panel__banner--ready___SVozm":"-esm-report-builder__generated-config-panel__generated-config-panel__banner--blocked___Iefko"].join(" ")},_?n().createElement(U._j,{size:18}):n().createElement(es.$D,{size:18}),n().createElement("span",null,_?"Ready to publish — this monitor will appear immediately on the dashboard after saving.":`Configuration incomplete — fix ${u.length} error${1===u.length?"":"s"} before saving.`)))}let iV=[{value:"uganda-etl",label:"Uganda ETL"},{value:"etl-status",label:"ETL Status"},{value:"data-quality",label:"Data Quality"},{value:"system-health",label:"System Health"},{value:"performance",label:"Performance"},{value:"reporting",label:"Reporting"},{value:"custom",label:"Custom"}];function iW(){let{state:e}=i$(),t=iP(),{general:r}=e,[l,i]=n().useState({}),[s,d]=n().useState({}),c=(e,a)=>{let n=((e,t)=>{let r={};switch(e){case"name":t&&""!==t.trim()||(r.name="Name is required");break;case"code":t&&""!==t.trim()?/^[a-z0-9-]+$/.test(t)||(r.code="Code must contain only lowercase letters, numbers, and hyphens"):r.code="Code is required";break;case"refreshInterval":(t<5||t>3600)&&(r.refreshInterval="Refresh interval must be between 5 and 3600 seconds");break;case"timeout":(t<1||t>300)&&(r.timeout="Timeout must be between 1 and 300 seconds")}return r})(e,a);i(e=>({...e,...n})),d(t=>({...t,[e]:!0})),t({general:{...r,[e]:a}})},m=n().useCallback(()=>{i((0,iO.zK)(r).errors.reduce((e,t)=>(e[t.split(" ")[0].toLowerCase()]=t,e),{}))},[r]);(0,a.useEffect)(()=>{m()},[m]);let u=Object.keys(l).some(e=>l[e]);return n().createElement("div",{className:"-esm-report-builder__general-step__general-step___xNLID"},n().createElement("div",{className:"-esm-report-builder__general-step__general-step__header___GcPrF"},n().createElement("h2",null,"General Information"),n().createElement("p",{className:"-esm-report-builder__general-step__general-step__description___gY3A1"},"Define the basic details of your ETL monitor.")),u&&s&&Object.keys(s).length>0&&n().createElement(o.jeF,{kind:"error",title:"Validation Errors",subtitle:"Please fix the errors below before proceeding",lowContrast:!0,style:{marginBottom:"1rem"}}),n().createElement(o.gE_,{legendText:""},n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"monitor-name",labelText:"Name *",placeholder:"e.g., ETL Module Health",value:r.name,onChange:e=>c("name",e.target.value),onBlur:()=>{r.name&&(!r.code||""===r.code)&&c("code",r.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""))},invalid:s.name&&!!l.name,invalidText:l.name,helperText:"A friendly name for this monitor",autoFocus:!0}),n().createElement(o.ksK,{id:"monitor-code",labelText:"Code *",placeholder:"e.g., etl-module-health",value:r.code,onChange:e=>c("code",e.target.value),invalid:s.code&&!!l.code,invalidText:l.code,helperText:"A unique code used to identify this monitor"}),n().createElement(o.fs1,{id:"monitor-description",labelText:"Description",rows:3,placeholder:"Optional description of what this monitor displays",value:r.description,onChange:e=>c("description",e.target.value),helperText:"Describe what this monitor checks and why it's important"}),n().createElement(o.l6P,{id:"monitor-category",labelText:"Category *",value:r.category,onChange:e=>{var a;let n;return a=e.target.value,n=iV.find(e=>e.value===a),void t({general:{...r,category:a,categoryLabel:n?.label||a}})},helperText:"Choose the category this monitor belongs to"},n().createElement(o.ebT,{value:"",text:"Select a category..."}),iV.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement("div",{className:"-esm-report-builder__general-step__general-step__toggle___EHfxl"},n().createElement(o.lMk,{id:"monitor-active",labelText:"Active *",labelA:"Off",labelB:"On",toggled:r.active,onToggle:e=>c("active",e)}),n().createElement("div",{className:"-esm-report-builder__general-step__general-step__toggle-helper___rKzSX"},"Enable or disable this monitor")),n().createElement(o.BJc,{orientation:"horizontal",gap:5},n().createElement("div",{style:{flex:1}},n().createElement(o.Q7x,{id:"refresh-interval",label:"Refresh Interval (seconds) *",min:5,max:3600,step:5,value:r.refreshInterval,onChange:e=>{c("refreshInterval",parseInt(e.target.value)||30)},invalid:s.refreshInterval&&!!l.refreshInterval,invalidText:l.refreshInterval,helperText:"How often the monitor runs"})),n().createElement("div",{style:{flex:1}},n().createElement(o.Q7x,{id:"timeout",label:"Timeout (seconds) *",min:1,max:300,step:1,value:r.timeout,onChange:e=>{c("timeout",parseInt(e.target.value)||10)},invalid:s.timeout&&!!l.timeout,invalidText:l.timeout,helperText:"Maximum time to wait for a response"}))))),n().createElement("div",{className:"-esm-report-builder__general-step__general-step__info-banner___CYeFk"},n().createElement(tw.$$,{size:16}),n().createElement("span",null,"You can configure the data source and design in the next steps.")))}let iK="-esm-report-builder__data-source-step__data-source-step__auth-description___mPeA8",iQ=[{value:"GET",label:"GET"},{value:"POST",label:"POST"},{value:"PUT",label:"PUT"},{value:"DELETE",label:"DELETE"}],iY=[{value:"NONE",label:"None",description:"No authentication required"},{value:"OPENMRS",label:"OpenMRS Session",description:"The monitor will use your current OpenMRS session"},{value:"BASIC",label:"Basic Auth",description:"Username and password"},{value:"API_KEY",label:"API Key",description:"Custom header with API key"},{value:"BEARER_TOKEN",label:"Bearer Token",description:"OAuth bearer token"}];function iX({authType:e,authConfig:t,onChange:r}){return"NONE"===e?n().createElement("div",{className:iK},"No authentication will be used for this endpoint."):"OPENMRS"===e?n().createElement("div",{className:iK},"The monitor will use your current OpenMRS session."):"BASIC"===e?n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"auth-username",labelText:"Username",value:t.username||"",onChange:e=>r({...t,username:e.target.value}),placeholder:"Enter username"}),n().createElement(o.ksK,{id:"auth-password",labelText:"Password",type:"password",value:t.password||"",onChange:e=>r({...t,password:e.target.value}),placeholder:"Enter password"})):"API_KEY"===e?n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"auth-header-name",labelText:"Header Name",value:t.headerName||"X-API-Key",onChange:e=>r({...t,headerName:e.target.value}),placeholder:"e.g., X-API-Key"}),n().createElement(o.ksK,{id:"auth-api-key",labelText:"API Key",value:t.apiKey||"",onChange:e=>r({...t,apiKey:e.target.value}),placeholder:"Enter API key"})):"BEARER_TOKEN"===e?n().createElement(o.ksK,{id:"auth-token",labelText:"Bearer Token",value:t.token||"",onChange:e=>r({...t,token:e.target.value}),placeholder:"Enter bearer token"}):null}function iZ(){let{state:e}=i$(),t=iP(),{endpoint:r,testResult:l,detectedSchema:i}=e,s=n().useMemo(()=>({...r,auth:r.auth||{type:"NONE"}}),[r]),[m,u]=(0,a.useState)(!1),[p,_]=(0,a.useState)(null),g=(e,r)=>{t({endpoint:{...s,[e]:r}})},E=async()=>{if(!s.url||""===s.url.trim())return void _("API URL is required");if(!s.url.startsWith("/"))return void _("URL must start with /");u(!0),_(null);try{let r=await lN({endpoint:{url:s.url,method:s.method,auth:s.auth}}),a=r.data?function e(t,r="$",a=!0){let n;if(!t||"object"!=typeof t)return{rootPath:"$",isArray:!1,fields:[],rawSample:t,detectedAt:new Date().toISOString()};let l=[];if(Array.isArray(t))return t.length>0&&"object"==typeof t[0]&&null!==t[0]?{rootPath:r,arrayPath:r,isArray:!0,fields:e(t[0],"$",!1).fields,rawSample:t,detectedAt:new Date().toISOString()}:{rootPath:r,arrayPath:r,isArray:!0,fields:[],rawSample:t,detectedAt:new Date().toISOString()};for(let[i,o]of Object.entries(t)){if(null===o||"function"==typeof o||"symbol"==typeof o)continue;let t=`${r}.${i}`;if(a&&"$"===r&&Array.isArray(o)&&o.length>0&&"object"==typeof o[0]&&null!==o[0]){n||(n=t,l.push(...e(o[0],"$",!1).fields));continue}if("object"==typeof o){if(!Array.isArray(o)){let n=e(o,t,a&&"$"!==r);l.push(...n.fields)}continue}let s=function(e){if(null==e)return"TEXT";let t=typeof e;if("boolean"===t)return"BOOLEAN";if("number"===t)return Number.isInteger(e)?"INTEGER":"DECIMAL";if("string"===t){let t=e.toUpperCase().trim();if(/^\d{13}$/.test(e)||/^\d{10}$/.test(e)||/GMT|UTC|EAT|EST|PST/.test(e)||/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(e)||/^\d{4}-\d{2}-\d{2}/.test(e))return"TIMESTAMP";if(/^(UP|DOWN|ON|OFF|ACTIVE|INACTIVE|SUCCESS|FAILURE|ERROR|WARNING|INFO|CRITICAL|READY|PENDING|RUNNING|STOPPED|COMPLETED|FAILED|STARTED)$/i.test(t))return"STATUS";if(/^\d+%?$/.test(e)||/percentage|percent|ratio|rate/i.test(e))return"PERCENTAGE";if(/^\d+\s*(seconds?|mins?|hours?|days?|h|m|s)$/.test(e)||/^\d+:\d{2}$/.test(e))return"DURATION";if(/^\d{4}-\d{2}-\d{2}$/.test(e)||/^\d{2}\/\d{2}\/\d{4}$/.test(e))return"DATE";if(/^\d{2}:\d{2}:\d{2}$/.test(e)||/^\d{2}:\d{2}$/.test(e))return"TIME"}return"TEXT"}(o),d=function(e){let t=e.toLowerCase();return t.includes("status")||t.includes("state")||t.includes("health")?"STATUS":t.includes("progress")||t.includes("percentage")||t.includes("percent")?"PERCENTAGE":t.includes("timestamp")||t.includes("date")||t.includes("time")||t.includes("created")||t.includes("updated")?"TIMESTAMP":t.includes("duration")||t.includes("elapsed")||t.includes("runtime")?"DURATION":t.includes("count")||t.includes("total")||t.includes("number")||t.includes("amount")?"NUMBER":t.includes("enabled")||t.includes("active")||t.includes("visible")?"BOOLEAN":null}(i)||s,c={name:i,path:t,type:s,suggestedType:d!==s?d:void 0,sampleValue:o,description:`Detected field: ${i}`};l.push(c)}return{rootPath:r,isArray:!1,arrayPath:n,fields:l,rawSample:t,detectedAt:new Date().toISOString()}}(r.data):void 0;if(a&&a.fields.length>0){var e;let t,r,n=(t=(e=a.fields).some(e=>"STATUS"===e.type||"STATUS"===e.suggestedType),r=e.some(e=>"PERCENTAGE"===e.type||"PERCENTAGE"===e.suggestedType),t&&e.length<=3?"STATUS_CARD":r&&t?"PROGRESS":e.length>=4?"DATA_TABLE":e.length>=2?"SUMMARY_CARD":void 0);a.recommendedComponent=n}t({testResult:{success:r.success,httpStatus:r.httpStatus,durationMs:r.durationMs,contentType:r.contentType,error:r.error,data:r.data,testedAt:r.testedAt},detectedSchema:a}),r.success||_(r.error||"Endpoint test failed")}catch(r){let e=r.message||"Failed to test endpoint";_(e),t({testResult:{success:!1,error:e,testedAt:new Date().toISOString()}})}finally{u(!1)}},f=l?.success===!0;return n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step___fRs2Z"},n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__header___LLQ8Z"},n().createElement("h2",null,"Data Source"),n().createElement("p",{className:"-esm-report-builder__data-source-step__data-source-step__description___H2j5X"},"Configure the API endpoint that will provide data for this monitor.")),p&&n().createElement(o.jeF,{kind:"error",title:"Endpoint request failed",subtitle:p,onClose:()=>_(null),lowContrast:!0,style:{marginBottom:"1rem"}}),n().createElement(o.gE_,{legendText:""},n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"api-url",labelText:"API Endpoint *",placeholder:"e.g., /ugandareportsetl/health",value:s.url,onChange:e=>g("url",e.target.value),helperText:"Relative URL path to the API endpoint",invalid:!!p&&!s.url,invalidText:"API URL is required"}),n().createElement(o.l6P,{id:"http-method",labelText:"HTTP Method *",value:s.method,onChange:e=>g("method",e.target.value)},iQ.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement(o.l6P,{id:"auth-type",labelText:"Authentication *",value:s.auth.type,onChange:e=>{var r;let a;return a={type:r=e.target.value},void("OPENMRS"===r?a.useSession=!0:"API_KEY"===r&&(a.headerName="X-API-Key"),t({endpoint:{...s,auth:a}}))}},iY.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__auth-config___sEzJM"},n().createElement(iX,{authType:s.auth.type,authConfig:s.auth,onChange:e=>{t({endpoint:{...s,auth:{...s.auth,...e}}})}})),n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__actions___RY9p3"},n().createElement(o.$nd,{kind:"primary",renderIcon:d.jG,onClick:E,disabled:m||!s.url},m?"Testing Endpoint…":"Test Endpoint")),f&&n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__test-result___e3GT0"},n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__test-header___VcmHd"},n().createElement(U._j,{size:16}),n().createElement("span",null,"Endpoint responded successfully")),n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__test-details___hQGFH"},n().createElement("span",null,"HTTP ",l.httpStatus),n().createElement("span",null,"•"),n().createElement("span",null,l.durationMs," ms"),n().createElement("span",null,"•"),n().createElement("span",null,l.contentType)),n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__test-time___VpxE2"},"Tested ",(e=>{if(!e)return"";let t=Math.floor((Date.now()-new Date(e).getTime())/1e3/60);if(t<1)return"Just now";if(t<60)return`${t} minute${t>1?"s":""} ago`;let r=Math.floor(t/60);if(r<24)return`${r} hour${r>1?"s":""} ago`;let a=Math.floor(r/24);return`${a} day${a>1?"s":""} ago`})(l.testedAt))),l?.data&&n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__response-preview___fjDQm"},n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__response-header___wHDSs"},n().createElement("h4",null,"Response Preview"),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:c.QR,onClick:()=>navigator.clipboard.writeText(JSON.stringify(l.data,null,2))},"Copy")),n().createElement("pre",{className:"-esm-report-builder__data-source-step__data-source-step__response-code___RuzGO"},JSON.stringify(l.data,null,2))),i&&i.fields.length>0&&n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__detected-fields___A-Cl2"},n().createElement("div",{className:"-esm-report-builder__data-source-step__data-source-step__detected-header___DoNsz"},n().createElement("h4",null,"Detected Fields"),n().createElement("span",{className:"-esm-report-builder__data-source-step__data-source-step__detected-count___c1Vn0"},i.fields.length," fields detected")),n().createElement("table",{className:"-esm-report-builder__data-source-step__data-source-step__fields-table___VJvtj"},n().createElement("thead",null,n().createElement("tr",null,n().createElement("th",null,"Field"),n().createElement("th",null,"Type"),n().createElement("th",null,"Suggested Label"))),n().createElement("tbody",null,i.fields.map((e,t)=>n().createElement("tr",{key:t},n().createElement("td",null,n().createElement("code",null,e.name)),n().createElement("td",null,n().createElement(o.vwO,{type:"STATUS"===e.type?"green":"gray"},e.type)),n().createElement("td",null,e.description||e.name)))))))))}var i0=r(3654);let i1=[{type:"STATUS_CARD",label:"Status Card",description:"Best for showing the health or availability of a system.",icon:n().createElement(g.Zn,{size:18}),accent:"#1A7F37",requires:"STATUS",requiredFieldTypes:["STATUS"],recommendedFor:["status","health","state","check"]},{type:"METRICS_GRID",label:"Metric Card",description:"Best for key numeric metrics at a glance.",icon:n().createElement(_._C,{size:18}),accent:"#8A3FFC",requires:"NONE",requiredFieldTypes:[],recommendedFor:["metrics","kpi","grid","multiple"]},{type:"PROGRESS",label:"Progress Card",description:"Best for showing progress of the current execution.",icon:n().createElement(u.wM,{size:18}),accent:"#0F62FE",requires:"PERCENTAGE",requiredFieldTypes:["PERCENTAGE"],recommendedFor:["progress","completion","percentage","stage"]},{type:"TABLE",aliases:["DATA_TABLE"],label:"Table Card",description:"Best for lists of executions or records.",icon:n().createElement(i0.bQ,{size:18}),accent:"#FA4D56",requires:"TABLE",requiredFieldTypes:[],recommendedFor:["list","table","records","log"]},{type:"DETAILS",label:"Details Card",description:"Best for showing all available fields and properties.",icon:n().createElement(es.yo,{size:18}),accent:"#1192E8",requires:"DETAILS",requiredFieldTypes:[],recommendedFor:["detail","property","field","config","schedule","info"]},{type:"SUMMARY_CARD",label:"Summary Card",description:"Best for stacked highlights with status badges.",icon:n().createElement(c.xh,{size:18}),accent:"#525252",requires:"SUMMARY",requiredFieldTypes:[],recommendedFor:["summary","overview","stats"]},{type:"LOG",label:"Log / Timeline Card",description:"Best for showing events or execution logs.",icon:n().createElement(nb.gX,{size:18}),accent:"#0762FE",requires:"LOG",requiredFieldTypes:[],recommendedFor:["event","timeline","activity","history"]},{type:"ERROR_LOG",label:"Error Log Card",description:"Best for monitoring failures and issues.",icon:n().createElement(tb.N5,{size:18}),accent:"#DA1E28",requires:"LOG",requiredFieldTypes:[],recommendedFor:["error","exception","failure","issue"]},{type:"TIME_SERIES",label:"Time Series Chart",description:"Best for metrics, performance data, or historical trends.",icon:n().createElement(_.BS,{size:18}),accent:"#8A3FFC",requires:"NONE",requiredFieldTypes:[],recommendedFor:["trend","history","metric","chart"]}];function i2({type:e}){let t=function(e){switch(e){case"STATUS_CARD":return{config:{schemaVersion:2,component:"STATUS_CARD",presentation:{title:"ETL Module Health",description:"ETL module is operational."},fields:[{key:"status",label:"Status",path:"$.status",type:"STATUS",primary:!0,statusMap:{UP:{label:"Running",tone:"success"},DOWN:{label:"Stopped",tone:"critical"}}},{key:"lastUpdated",label:"Last checked",path:"$.lastUpdated",type:"TIMESTAMP"}]},data:{status:"UP",lastUpdated:Date.now()-12e4}};case"METRICS_GRID":return{config:{schemaVersion:2,component:"METRICS_GRID",presentation:{title:"ETL Monitor",description:"Current run summary"},componentConfig:{icon:"chart",icons:{executionId:"badge",runDuration:"clock",progress:"trend",missedSchedule:"calendar"},iconColors:{executionId:"#24a148",runDuration:"#8A3FFC",progress:"#0F62FE",missedSchedule:"#F1C21B"},valueColors:{progress:"#198038"}},fields:[{key:"executionId",label:"Execution ID",path:"$.executionId",type:"INTEGER",description:"Run #"},{key:"runDuration",label:"Run Duration",path:"$.runDuration",type:"DURATION",description:"Duration"},{key:"progress",label:"Progress",path:"$.progress",type:"PERCENTAGE",description:"Complete"},{key:"missedSchedule",label:"Missed Schedule",path:"$.missedSchedule",type:"DURATION",description:"Behind"},{key:"lastUpdated",label:"Updated",path:"$.lastUpdated",type:"TIMESTAMP"}]},data:{executionId:17,runDuration:8927e3,progress:100,missedSchedule:528e4,lastUpdated:Date.now()-12e4}};case"PROGRESS":return{config:{schemaVersion:2,component:"PROGRESS",componentConfig:{stageFieldKey:"stage"},fields:[{key:"progress",label:"Progress",path:"$.progress",type:"PERCENTAGE",primary:!0},{key:"stage",label:"Current Stage",path:"$.stage",type:"TEXT"}]},data:{progress:100,stage:"Completed"}};case"TABLE":case"DATA_TABLE":return{config:{schemaVersion:2,component:"TABLE",componentConfig:{maxRows:5,viewAllUrl:"#",viewAllLabel:"View all executions"},fields:[{key:"started",label:"Started",path:"$.started",type:"TIMESTAMP",format:{timestamp:{display:"datetime"}}},{key:"duration",label:"Duration",path:"$.duration",type:"DURATION"},{key:"result",label:"Result",path:"$.result",type:"STATUS",statusMap:{SUCCESS:{label:"SUCCESS",tone:"success"},FAILED:{label:"FAILED",tone:"critical"}}}]},data:[{started:Date.now()-36e5,duration:8927e3,result:"SUCCESS"},{started:Date.now()-9e6,duration:1523e3,result:"SUCCESS"},{started:Date.now()-18e6,duration:1523e3,result:"SUCCESS"}]};case"ERROR_LOG":return{config:{schemaVersion:2,component:"ERROR_LOG",fields:[{key:"time",label:"Time",path:"$.time",type:"TIMESTAMP",format:{timestamp:{display:"time"}}},{key:"severity",label:"Severity",path:"$.severity",type:"STATUS",statusMap:{CRITICAL:{label:"CRITICAL",tone:"critical"},WARNING:{label:"WARNING",tone:"warning"}}},{key:"message",label:"Message",path:"$.message",type:"TEXT"}]},data:[{time:Date.now()-27e5,severity:"CRITICAL",message:"Connection timeout"},{time:Date.now()-54e5,severity:"WARNING",message:"Retry attempted"}]};case"DETAILS":return{config:{schemaVersion:2,component:"DETAILS",fields:[{key:"status",label:"status",path:"$.status",type:"STATUS",statusMap:{UP:{label:"UP",tone:"success"}}},{key:"module",label:"module",path:"$.module",type:"TEXT"},{key:"description",label:"description",path:"$.description",type:"TEXT"},{key:"timestamp",label:"timestamp",path:"$.timestamp",type:"TIMESTAMP",format:{timestamp:{display:"datetime"}}}]},data:{status:"UP",module:"ugandareportstetl",description:"Uganda Reports ETL Module",timestamp:Date.now()-3e5}};case"SUMMARY_CARD":return{config:{schemaVersion:2,component:"SUMMARY_CARD",fields:[{key:"completionStatus",label:"Completion Status",path:"$.completionStatus",type:"STATUS",statusMap:{SUCCESS:{label:"SUCCESS",tone:"success"}}},{key:"transactionStatus",label:"Transaction Status",path:"$.transactionStatus",type:"STATUS",statusMap:{COMPLETED:{label:"COMPLETED",tone:"success"}}}]},data:{completionStatus:"SUCCESS",transactionStatus:"COMPLETED"}};case"LOG":return{config:{schemaVersion:2,component:"LOG",componentConfig:{maxRows:5},fields:[{key:"time",label:"Time",path:"$.time",type:"TIMESTAMP",format:{timestamp:{display:"time"}}},{key:"event",label:"Event",path:"$.event",type:"TEXT"}]},data:[{time:Date.now()-24e5,event:"Execution started"},{time:Date.now()-192e4,event:"Data extraction completed"},{time:Date.now()-108e4,event:"Transformation completed"},{time:Date.now()-3e5,event:"Load completed"}]};case"TIME_SERIES":{let e=Date.now(),t=[892e4,861e4,836e4,848e4,812e4,824e4,89e5,925e4,903e4,8927e3];return{config:{schemaVersion:2,component:"TIME_SERIES",presentation:{title:"Execution Duration"},componentConfig:{icons:{duration:"timer"},deltaLabel:"vs previous period"},fields:[{key:"time",label:"Time",path:"$.time",type:"TIMESTAMP",format:{timestamp:{display:"time"}}},{key:"value",label:"Duration",path:"$.value",type:"DURATION",primary:!0}]},data:t.map((r,a)=>({time:e-(t.length-1-a)*216e4,value:r}))}}default:return{config:{schemaVersion:2,component:"TIME_SERIES",fields:[{key:"average",label:"Average",path:"$.average",type:"TEXT"},{key:"max",label:"Max",path:"$.max",type:"TEXT"},{key:"trend",label:"Trend",path:"$.trend",type:"TEXT"}]},data:{average:"2.3s",max:"5.1s",trend:"↑ 12%"}}}}(e);return n().createElement(l0.MonitorRenderer,{config:t.config,data:t.data,loading:!1,error:null})}function i5(e,t){return!!t&&(t===e.type||(e.aliases?.includes(t)??!1))}function i6({config:e,selected:t,disabled:r,recommended:a,onSelect:l}){return n().createElement("div",{className:["-esm-report-builder__design-step__component-card___RAlFw",t&&"-esm-report-builder__design-step__component-card--selected___Pk0Ap",r&&"-esm-report-builder__design-step__component-card--disabled___IdhpT"].filter(Boolean).join(" "),onClick:r?void 0:l,role:"button",tabIndex:r?-1:0,"aria-disabled":r,onKeyDown:e=>{r||("Enter"===e.key||" "===e.key)&&(e.preventDefault(),l())}},t&&n().createElement("span",{className:"-esm-report-builder__design-step__component-card__check___PtG-G"},n().createElement(U.MG,{size:14})),a&&!t&&n().createElement("span",{className:"-esm-report-builder__design-step__component-card__star___2LEWD",title:"Recommended"},n().createElement(f.FE,{size:11})),n().createElement("div",{className:"-esm-report-builder__design-step__component-card__head___lqb6r"},n().createElement("span",{className:"-esm-report-builder__design-step__component-card__icon___rvvJG",style:{backgroundColor:`${e.accent}1A`,color:e.accent}},e.icon),n().createElement("h4",{className:"-esm-report-builder__design-step__component-card__title___soJ9u"},e.label)),n().createElement("p",{className:"-esm-report-builder__design-step__component-card__description___ReOc4"},e.description),n().createElement("div",{className:"-esm-report-builder__design-step__component-card__preview___EOE45"},n().createElement("div",{className:"-esm-report-builder__design-step__component-card__sample___LliEt"},n().createElement(i2,{type:e.type}))),n().createElement("div",{className:"-esm-report-builder__design-step__component-card__footer___R8bVS"},n().createElement("span",{className:"-esm-report-builder__design-step__component-card__requires-label___5eSNx"},"Requires:"),n().createElement("span",{className:"-esm-report-builder__design-step__component-card__requires-chip___NnQdk"},e.requires)))}function i3(){let{state:e}=i$(),t=iP(),{componentType:r,detectedSchema:a}=e,l=()=>a?.recommendedComponent?a.recommendedComponent:null,i=l(),s=!!a&&a.fields.length>0,d=i1.find(e=>i5(e,r)),c=i?i1.find(e=>e.type===i||(e.aliases?.includes(i)??!1)):void 0;return n().createElement("div",{className:"-esm-report-builder__design-step__design-step___G-wQb"},n().createElement("div",{className:"-esm-report-builder__design-step__design-step__header___v-Cuy"},n().createElement("h2",null,"Choose a design"),n().createElement("p",{className:"-esm-report-builder__design-step__design-step__description___eANa4"},"Select how this monitor should be visualized on the dashboard.")),s&&c&&n().createElement("div",{className:"-esm-report-builder__design-step__design-step__recommendation___XFaNZ"},n().createElement(f.FE,{size:16}),n().createElement("p",null,n().createElement("strong",null,"Recommended: ",c.label)," — ",(()=>{if(!a)return"";if(a.fields.find(e=>"STATUS"===e.type||"STATUS"===e.suggestedType))return"This response contains a status-like field and supporting properties.";if(a.isArray)return"This response returns a list of records.";let e=a.fields.length;return`This response contains ${e} field${1===e?"":"s"} that suit this component.`})())),!s&&n().createElement(o.jeF,{kind:"warning",title:"No Schema Detected",subtitle:"Test your endpoint first to get a component recommendation based on your data structure.",lowContrast:!0,style:{marginBottom:"1rem"},hideCloseButton:!0}),n().createElement("div",{role:"group","aria-label":"Select a component type"},n().createElement("div",{className:"-esm-report-builder__design-step__design-step__grid___sM4Eq"},i1.map(e=>n().createElement(i6,{key:e.type,config:e,selected:i5(e,r),disabled:!!a&&0!==a.fields.length&&e.requiredFieldTypes.some(e=>!a.fields.some(t=>t.type===e||t.suggestedType===e)),recommended:(e=>{let t=l();if(t)return t===e.type||(e.aliases?.includes(t)??!1);if(!a)return!1;let r=a.fields.map(e=>e.name.toLowerCase());return e.recommendedFor.some(e=>r.some(t=>t.includes(e)))||!1})(e),onSelect:()=>{t({componentType:e.type})}})))),d&&n().createElement("div",{className:"-esm-report-builder__design-step__design-step__summary___m51vL"},n().createElement("div",{className:"-esm-report-builder__design-step__design-step__summary-content___2+5v2"},n().createElement("h4",null,n().createElement(tw.$$,{size:16}),"Selected: ",d.label),n().createElement("p",null,d.description))),s&&c&&i5(c,r)&&n().createElement("div",{className:"-esm-report-builder__design-step__design-step__why-recommended___3otjU"},n().createElement("div",{className:"-esm-report-builder__design-step__design-step__why-recommended-header___+-JvI"},n().createElement(tw.$$,{size:16}),n().createElement("h5",null,"Why this is recommended")),n().createElement("div",{className:"-esm-report-builder__design-step__design-step__why-recommended-content___EhNzx"},n().createElement("p",null,"Your endpoint returns a status field along with"," ",a.fields.filter(e=>"STATUS"!==e.type&&"STATUS"!==e.suggestedType).slice(0,3).map(e=>e.name).join(", ")||"supporting properties","."),n().createElement("p",null,"The ",n().createElement("strong",null,d?.label)," is the best way to highlight the overall status at a glance, with key context shown below."))),n().createElement("div",{className:"-esm-report-builder__design-step__design-step__help___plMPQ"},n().createElement("p",{className:"-esm-report-builder__design-step__design-step__help-text___SCYHj"},n().createElement("strong",null,"Tip:")," You can change the design or settings later. Your data and mappings will be preserved.")))}let i4={"fields-step":"-esm-report-builder__fields-step__fields-step___BHslw","fields-step__header":"-esm-report-builder__fields-step__fields-step__header___KKBku","fields-step__description":"-esm-report-builder__fields-step__fields-step__description___OrEK7","fields-step__empty":"-esm-report-builder__fields-step__fields-step__empty___OB+tt","fields-step__list":"-esm-report-builder__fields-step__fields-step__list___jmk5R","fields-step__list-header":"-esm-report-builder__fields-step__fields-step__list-header___oRXUE","fields-step__fields":"-esm-report-builder__fields-step__fields-step__fields___poKhr","fields-step__actions":"-esm-report-builder__fields-step__fields-step__actions___cAsjr","fields-step__timestamp-config":"-esm-report-builder__fields-step__fields-step__timestamp-config___Xj9nd","fields-step__timestamp-header":"-esm-report-builder__fields-step__fields-step__timestamp-header___WrBDT","fields-step__timestamp-description":"-esm-report-builder__fields-step__fields-step__timestamp-description___JAZ0D","fields-step__timestamp-settings":"-esm-report-builder__fields-step__fields-step__timestamp-settings___RD7Ap","fields-step__timestamp-field":"-esm-report-builder__fields-step__fields-step__timestamp-field___UFYF9","cds--text-input":"-esm-report-builder__fields-step__cds--text-input___mR2xM","cds--select-input":"-esm-report-builder__fields-step__cds--select-input___8hlIi","cds--toggle-input__label":"-esm-report-builder__fields-step__cds--toggle-input__label___TssaG","fields-step__timestamp-helper":"-esm-report-builder__fields-step__fields-step__timestamp-helper___8s1Vj","field-row":"-esm-report-builder__fields-step__field-row___Pn8gW","field-row__drag":"-esm-report-builder__fields-step__field-row__drag___w5YU4","field-row__drag-handle":"-esm-report-builder__fields-step__field-row__drag-handle___lrlH3","field-row__content":"-esm-report-builder__fields-step__field-row__content___Es4+4","field-row__main":"-esm-report-builder__fields-step__field-row__main___vzk-u","field-row__info":"-esm-report-builder__fields-step__field-row__info___vuDhd","field-row__header":"-esm-report-builder__fields-step__field-row__header___HI6LF","field-row__label":"-esm-report-builder__fields-step__field-row__label___HknJt","field-row__meta":"-esm-report-builder__fields-step__field-row__meta___MbwR6","field-row__path":"-esm-report-builder__fields-step__field-row__path___dwhbH","field-row__actions":"-esm-report-builder__fields-step__field-row__actions___9WjPq","field-config-modal":"-esm-report-builder__fields-step__field-config-modal___6sBee","cds--modal-content":"-esm-report-builder__fields-step__cds--modal-content___m4c-G","field-format-options":"-esm-report-builder__fields-step__field-format-options___MhU8L","status-mapping-modal__description":"-esm-report-builder__fields-step__status-mapping-modal__description___1hhb4","status-mapping-row":"-esm-report-builder__fields-step__status-mapping-row___Ct+n2","status-mapping-row__raw":"-esm-report-builder__fields-step__status-mapping-row__raw___c+bdP","status-mapping-row__label":"-esm-report-builder__fields-step__status-mapping-row__label___aA9zm","status-mapping-row__tone":"-esm-report-builder__fields-step__status-mapping-row__tone___vpGZL","cds--btn":"-esm-report-builder__fields-step__cds--btn___0Hgvy"},i8=[{value:"TEXT",label:"Text",description:"Plain text content"},{value:"STRING",label:"String",description:"Short text string"},{value:"NUMBER",label:"Number",description:"Numeric value"},{value:"INTEGER",label:"Integer",description:"Whole number"},{value:"DECIMAL",label:"Decimal",description:"Decimal number"},{value:"BOOLEAN",label:"Boolean",description:"True/false value"},{value:"STATUS",label:"Status",description:"Status indicator with tone mapping"},{value:"PERCENTAGE",label:"Percentage",description:"Percentage value (0-100)"},{value:"TIMESTAMP",label:"Timestamp",description:"Unix timestamp in milliseconds"},{value:"DURATION",label:"Duration",description:"Duration in seconds or milliseconds"},{value:"DATE",label:"Date",description:"Date value"},{value:"TIME",label:"Time",description:"Time value"}],i7=[{value:"success",label:"Success",color:"#198038"},{value:"critical",label:"Critical",color:"#da1e28"},{value:"warning",label:"Warning",color:"#f1c21b"},{value:"info",label:"Info",color:"#0f62fe"},{value:"neutral",label:"Neutral",color:"#6f6f6f"}];function i9({open:e,onClose:t,onSave:r,currentMappings:l,detectedValues:i}){let[s,d]=(0,a.useState)(l.length>0?l:i.map(e=>({rawValue:e,label:e,tone:"neutral"}))),c=(e,t)=>{d(r=>r.map((r,a)=>a===e?{...r,...t}:r))};return n().createElement(o.aFV,{open:e,onRequestClose:t,modalHeading:"Configure Status Mappings",primaryButtonText:"Save",secondaryButtonText:"Cancel",onRequestSubmit:()=>{r(s),t()},size:"md"},n().createElement("div",{className:i4["status-mapping-modal"]},n().createElement("p",{className:i4["status-mapping-modal__description"]},"Map each detected status value to a display label and tone."),n().createElement(o.BJc,{gap:4},s.map((e,t)=>n().createElement("div",{key:t,className:i4["status-mapping-row"]},n().createElement("div",{className:i4["status-mapping-row__raw"]},n().createElement("label",null,"Raw Value"),n().createElement(o.ksK,{id:`raw-${t}`,value:e.rawValue,onChange:e=>c(t,{rawValue:e.target.value}),disabled:!0,labelText:""})),n().createElement("div",{className:i4["status-mapping-row__label"]},n().createElement("label",null,"Display Label"),n().createElement(o.ksK,{id:`label-${t}`,value:e.label,onChange:e=>c(t,{label:e.target.value}),placeholder:"Enter display label",labelText:""})),n().createElement("div",{className:i4["status-mapping-row__tone"]},n().createElement("label",null,"Tone"),n().createElement(o.l6P,{id:`tone-${t}`,value:e.tone,onChange:e=>c(t,{tone:e.target.value})},i7.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label})))))))))}function oe({open:e,onClose:t,onSave:r,field:l,detectedFields:i}){let s=!!l,[d,c]=(0,a.useState)(l||{key:"",label:"",path:"",type:"TEXT",primary:!1,hidden:!1,order:0});return n().useEffect(()=>{l?c(l):c({key:"",label:"",path:"",type:"TEXT",primary:!1,hidden:!1,order:0})},[l,e]),n().createElement(o.aFV,{open:e,onRequestClose:()=>{c(l||{key:"",label:"",path:"",type:"TEXT",primary:!1,hidden:!1,order:0}),t()},modalHeading:s?"Edit Field":"Add Field",primaryButtonText:"Save",secondaryButtonText:"Cancel",onRequestSubmit:()=>{d.key&&d.label&&d.path&&(r(d),t())},size:"md"},n().createElement("div",{className:i4["field-config-modal"]},n().createElement(o.gE_,{legendText:""},n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"field-key",labelText:"Key *",value:d.key,onChange:e=>c({...d,key:e.target.value}),placeholder:"Unique identifier (e.g., status)",disabled:s,helperText:"Unique key for this field"}),n().createElement(o.ksK,{id:"field-label",labelText:"Label *",value:d.label,onChange:e=>c({...d,label:e.target.value}),placeholder:"Display label (e.g., Status)",helperText:"Human-readable label"}),n().createElement(o.l6P,{id:"field-path",labelText:"JSON Path *",value:d.path,onChange:e=>c({...d,path:e.target.value}),helperText:"Path to extract value from response"},n().createElement(o.ebT,{value:"",text:"Select a field..."}),i.map(e=>n().createElement(o.ebT,{key:e.path,value:e.path,text:`${e.name} (${e.path})`}))),n().createElement(o.l6P,{id:"field-type",labelText:"Type *",value:d.type,onChange:e=>c({...d,type:e.target.value}),helperText:"How should this value be interpreted and formatted?"},i8.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement(o.fs1,{id:"field-description",labelText:"Description",rows:2,value:d.description||"",onChange:e=>c({...d,description:e.target.value}),placeholder:"Optional description"}),n().createElement(o.lMk,{id:"field-primary",labelText:"Primary Field",labelA:"No",labelB:"Yes",toggled:d.primary,onToggle:e=>c({...d,primary:e})}),n().createElement(o.lMk,{id:"field-hidden",labelText:"Hidden",labelA:"No",labelB:"Yes",toggled:d.hidden,onToggle:e=>c({...d,hidden:e})}),"NUMBER"===d.type||"INTEGER"===d.type||"DECIMAL"===d.type?n().createElement("div",{className:i4["field-format-options"]},n().createElement("h5",null,"Number Formatting"),n().createElement(o.BJc,{orientation:"horizontal",gap:4},n().createElement(o.Q7x,{id:"field-decimals",label:"Decimal Places",value:d.format?.decimals||0,onChange:e=>{let t=parseInt(e.target.value)||0;c({...d,format:{...d.format,decimals:t}})},min:0,max:6}))):null))))}function ot({field:e,detectedField:t,isPrimary:r,onEdit:l,onUpdateField:i,onDelete:s,onMoveUp:d,onMoveDown:c,canMoveUp:m,canMoveDown:u,componentType:p}){let[_,g]=(0,a.useState)(!1),f=function(e){switch(e){case"STATUS_CARD":return["STATUS"];case"PROGRESS":return["PERCENTAGE"];default:return[]}}(p);return n().createElement("div",{className:i4["field-row"]},n().createElement("div",{className:i4["field-row__drag"]},n().createElement("div",{className:i4["field-row__drag-handle"]},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:E.Do,iconDescription:"Move up",onClick:d,disabled:!m}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:E.yd,iconDescription:"Move down",onClick:c,disabled:!u}))),n().createElement("div",{className:i4["field-row__content"]},n().createElement("div",{className:i4["field-row__main"]},n().createElement("div",{className:i4["field-row__info"]},n().createElement("div",{className:i4["field-row__header"]},n().createElement("span",{className:i4["field-row__label"]},e.label),r&&n().createElement(o.vwO,{type:"blue",size:"sm"},"Primary"),e.hidden&&n().createElement(o.vwO,{type:"gray",size:"sm"},"Hidden"),f.includes(e.type)&&n().createElement(o.vwO,{type:"green",size:"sm"},"Required")),n().createElement("div",{className:i4["field-row__meta"]},n().createElement("span",{className:i4["field-row__path"]},e.path),n().createElement(o.vwO,{type:"purple",size:"sm"},e.type))),n().createElement("div",{className:i4["field-row__actions"]},n().createElement(o.BJc,{orientation:"horizontal",gap:2},"STATUS"===e.type&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>g(!0)},"Map Status"),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:es.ff,iconDescription:"Edit field",onClick:l}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,iconDescription:"Delete field",onClick:s}))))),"STATUS"===e.type&&n().createElement(i9,{open:_,onClose:()=>g(!1),onSave:t=>{i({...e,statusMappings:t}),g(!1)},currentMappings:e.statusMappings||[],detectedValues:t?.sampleValue?[String(t.sampleValue)]:[]}))}function or(){let{state:e}=i$(),t=iP(),{fields:r,componentType:l,detectedSchema:i,testResult:s}=e,[d,c]=(0,a.useState)(!1),[m,u]=(0,a.useState)(null),[p,_]=(0,a.useState)([]),[g,E]=(0,a.useState)([]),[f,y]=(0,a.useState)({unit:"milliseconds",format:"DD MMM YYYY, HH:mm",relative:!1}),h=i?.fields||[],v=function(e){switch(e){case"STATUS_CARD":return["Requires at least one STATUS field","Requires a primary field"];case"PROGRESS":return["Requires a PERCENTAGE field"];default:return["Requires at least one field"]}}(l),S=e=>{let a=r.findIndex(t=>t.key===e.key);if(a>=0){let n=[...r];n[a]=e,t({fields:n})}C()},T=()=>{i&&0!==h.length&&(t({fields:h.map((e,t)=>{let a=r.find(t=>t.path===e.path);return a||{key:e.name.replace(/[^a-zA-Z0-9]/g,"_").toLowerCase(),label:e.name,path:e.path,type:e.suggestedType||e.type,primary:0===t,hidden:!1,order:t,description:e.description}})}),C())},C=n().useCallback(()=>{let e=(0,iO.Kk)(r,l,s?.data,i?.arrayPath);_(e.errors),E(e.warnings??[])},[r,l,s,i]);n().useEffect(()=>{C()},[C]);let w=r.length>0,N=h.length>0,I=p.length>0;return n().createElement("div",{className:i4["fields-step"]},n().createElement("div",{className:i4["fields-step__header"]},n().createElement("h2",null,"Field Mapping"),n().createElement("p",{className:i4["fields-step__description"]},"Map fields from your API response to display fields. Configure types and formatting for each field.")),I&&n().createElement(o.jeF,{kind:"error",title:"Field Configuration Errors",subtitle:p.length>0?`${p.length} error(s) - see details above`:"",lowContrast:!0,style:{marginBottom:"1rem"}}),g.length>0&&n().createElement(o.jeF,{kind:"warning",title:"Unresolved Field Paths",subtitle:g.join(" \xb7 "),lowContrast:!0,style:{marginBottom:"1rem"}}),l&&n().createElement(o.jeF,{kind:"info",title:"Component Requirements",subtitle:v.join("; "),lowContrast:!0,style:{marginBottom:"1rem"},hideCloseButton:!0}),!w&&n().createElement("div",{className:i4["fields-step__empty"]},n().createElement("h3",null,"No Fields Configured"),n().createElement("p",null,N?`We detected ${h.length} fields from your endpoint response.`:"Test your endpoint first to detect available fields."),N&&n().createElement(o.$nd,{kind:"primary",renderIcon:b.OM,onClick:T},"Auto-Map Detected Fields")),w&&n().createElement("div",{className:i4["fields-step__list"]},n().createElement("div",{className:i4["fields-step__list-header"]},n().createElement("h4",null,"Configured Fields (",r.length,")"),N&&r.length<h.length&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:T},"Add Remaining Fields")),n().createElement("div",{className:i4["fields-step__fields"]},r.map((e,a)=>{let i=h.find(t=>t.path===e.path);return n().createElement(ot,{key:e.key,field:e,detectedField:i,isPrimary:e.primary,onEdit:()=>{u(e),c(!0)},onUpdateField:S,onDelete:()=>{var a;let n;return a=e.key,void((n=r.filter(e=>e.key!==a)).length>0&&!n.some(e=>e.primary)&&(n[0]={...n[0],primary:!0}),t({fields:n}),C())},onMoveUp:()=>(e=>{if(0===e)return;let a=[...r];[a[e-1],a[e]]=[a[e],a[e-1]],a.forEach((e,t)=>e.order=t),t({fields:a})})(a),onMoveDown:()=>(e=>{if(e===r.length-1)return;let a=[...r];[a[e],a[e+1]]=[a[e+1],a[e]],a.forEach((e,t)=>e.order=t),t({fields:a})})(a),canMoveUp:a>0,canMoveDown:a<r.length-1,componentType:l})})),n().createElement("div",{className:i4["fields-step__actions"]},n().createElement(o.$nd,{kind:"primary",renderIcon:b.OM,onClick:()=>{u(null),c(!0)}},"Add Field")),w&&r.some(e=>"TIMESTAMP"===e.type)&&n().createElement("div",{className:i4["fields-step__timestamp-config"]},n().createElement("div",{className:i4["fields-step__timestamp-header"]},n().createElement("h4",null,"Timestamp Format"),n().createElement("p",{className:i4["fields-step__timestamp-description"]},"Configure how timestamp fields are displayed")),n().createElement("div",{className:i4["fields-step__timestamp-settings"]},n().createElement("div",{className:i4["fields-step__timestamp-field"]},n().createElement("label",null,"Input unit"),n().createElement(o.l6P,{id:"timestamp-unit",size:"sm",value:f.unit,onChange:e=>{y({...f,unit:e.target.value})}},n().createElement(o.ebT,{value:"milliseconds",text:"Milliseconds"}),n().createElement(o.ebT,{value:"seconds",text:"Seconds"}))),n().createElement("div",{className:i4["fields-step__timestamp-field"]},n().createElement("label",null,"Display format"),n().createElement(o.ksK,{id:"timestamp-format",labelText:"",size:"sm",value:f.format,onChange:e=>{y({...f,format:e.target.value})},placeholder:"e.g., 15 Aug 2026, 19:23"})),n().createElement("div",{className:i4["fields-step__timestamp-field"]},n().createElement(o.lMk,{id:"timestamp-relative",size:"sm",labelText:"Show relative time",labelA:"No",labelB:"Yes",toggled:f.relative,onToggle:e=>{y({...f,relative:e})}}),n().createElement("span",{className:i4["fields-step__timestamp-helper"]},'Display timestamps as "2 minutes ago" instead of absolute time'))))),n().createElement(oe,{open:d,onClose:()=>c(!1),onSave:e=>{let a=r.findIndex(t=>t.key===e.key);if(a>=0){let n=[...r];n[a]=e,t({fields:n})}else t({fields:[...r,{...e,order:r.length}]});C()},field:m,detectedFields:h,componentType:l}))}let oa={"preview-step__header":"-esm-report-builder__preview-step__preview-step__header___8GGTm","preview-design-head":"-esm-report-builder__preview-step__preview-design-head___MrfTM","preview-design-head__icon":"-esm-report-builder__preview-step__preview-design-head__icon___Xw-Zn","preview-design-head__title":"-esm-report-builder__preview-step__preview-design-head__title___BYiU5","preview-design-head__desc":"-esm-report-builder__preview-step__preview-design-head__desc___JVYw3","preview-section":"-esm-report-builder__preview-step__preview-section___YQDjm","preview-section__divider":"-esm-report-builder__preview-step__preview-section__divider___vsFh6","preview-summary":"-esm-report-builder__preview-step__preview-summary___RRaW9","preview-summary__item":"-esm-report-builder__preview-step__preview-summary__item___5xg1m","preview-summary__icon":"-esm-report-builder__preview-step__preview-summary__icon___4rLgH","preview-summary__label":"-esm-report-builder__preview-step__preview-summary__label___VX+bA","preview-summary__value":"-esm-report-builder__preview-step__preview-summary__value___Kubko","preview-checklist":"-esm-report-builder__preview-step__preview-checklist___NkLbI","preview-checklist__item":"-esm-report-builder__preview-step__preview-checklist__item___I4I1I","preview-checklist__icon":"-esm-report-builder__preview-step__preview-checklist__icon___r0U1M","preview-checklist__icon--pass":"-esm-report-builder__preview-step__preview-checklist__icon--pass___a8+LE","preview-checklist__icon--fail":"-esm-report-builder__preview-step__preview-checklist__icon--fail___j5pDe","preview-checklist__label":"-esm-report-builder__preview-step__preview-checklist__label___bM9w-","preview-checklist__sub":"-esm-report-builder__preview-step__preview-checklist__sub___t+WSb","preview-save":"-esm-report-builder__preview-step__preview-save___Oe0PP"},on={NONE:"None",OPENMRS:"OpenMRS Session",BASIC:"Basic Auth",API_KEY:"API Key",BEARER_TOKEN:"Bearer Token"};function ol(){let{state:e,saveMonitor:t}=i$(),r=(0,i.Zp)(),[l,d]=(0,a.useState)(!1),[p,_]=(0,a.useState)(null),[E,f]=(0,a.useState)(!1),[b,y]=(0,a.useState)(0),h=(0,a.useMemo)(()=>(0,iO.stateToSavePayload)(e),[e]),v=function(e){if(e)return i1.find(t=>t.type===e||(t.aliases?.includes(e)??!1))}(e.componentType),S=(0,a.useMemo)(()=>(0,iO.yn)(e),[e]),T=(0,a.useMemo)(()=>(0,iO.lp)(e),[e]),C=0===S.length&&T.valid,w=e.fields.filter(e=>"STATUS"===e.type),N=w.every(e=>(e.statusMappings?.length??0)>0),I=[{icon:n().createElement(s.qz,null),label:"Data source",value:`${e.endpoint.method} ${e.endpoint.url||"—"}`},{icon:n().createElement(g.Zn,null),label:"Authentication",value:on[e.endpoint.auth?.type]||e.endpoint.auth?.type||"None"},{icon:n().createElement(tb.Ss,null),label:"Component",value:v?.label||e.componentType||"—"},{icon:n().createElement(nb.M4,null),label:"Timeout",value:`${e.general.timeout} sec`},{icon:n().createElement(u.wM,null),label:"Refresh",value:`${e.general.refreshInterval} sec`},{icon:n().createElement(m.vd,null),label:"Category",value:e.general.category||"—"}],k=[{pass:e.testResult?e.testResult.success:"edit"===e.mode&&!!e.endpoint.url,label:e.testResult?"Endpoint tested":"edit"===e.mode?"Endpoint configured":"Endpoint tested",sub:e.testResult?e.testResult.success?"Successfully connected and returned data":`Test failed: ${e.testResult.error||"unknown error"}`:"edit"===e.mode?"Endpoint configured and saved previously":"Run the endpoint test in the Data Source step"},{pass:e.fields.length>0,label:"Fields mapped",sub:e.fields.length>0?`${e.fields.length} field${1===e.fields.length?"":"s"} mapped to response paths`:"Map at least one response field"},{pass:0===w.length||N,label:"Status mapping complete",sub:0===w.length?"No status fields configured":N?"Status and thresholds configured":"Add status mappings to all STATUS fields"},{pass:T.valid,label:"Preview ready",sub:T.valid?"Monitor preview generated successfully":"Fix configuration errors to generate the preview"}],A=async()=>{d(!0),_(null);try{await t(),r("/admin/etl-monitors")}catch(e){_(e?.message||"Failed to save monitor")}finally{d(!1)}},R=async()=>{try{await navigator.clipboard.writeText(h.displayConfigJson||""),f(!0),window.setTimeout(()=>f(!1),2e3)}catch{}};return n().createElement("div",{className:oa["preview-step"]},n().createElement("div",{className:oa["preview-step__header"]},n().createElement("h2",null,"Preview & publish"),n().createElement("p",{className:oa["preview-step__description"]},"Review the monitor before saving it to the dashboard.")),p&&n().createElement(o.jeF,{kind:"error",lowContrast:!0,title:"Save Failed",subtitle:p,onCloseButtonClick:()=>_(null),style:{marginBottom:"1rem"}}),n().createElement(l1,{loading:!1,onRefresh:()=>y(e=>e+1),actions:[{label:E?"Copied!":"Copy configuration JSON",onClick:R}]},v&&n().createElement("div",{className:oa["preview-design-head"]},n().createElement("span",{className:oa["preview-design-head__icon"],style:{backgroundColor:`${v.accent}1A`,color:v.accent}},v.icon),n().createElement("div",{className:oa["preview-design-head__text"]},n().createElement("h3",{className:oa["preview-design-head__title"]},v.label),n().createElement("p",{className:oa["preview-design-head__desc"]},v.description))),n().createElement("div",{key:b},n().createElement(iF,{state:e}))),n().createElement("div",{className:oa["preview-section"]},n().createElement("h4",null,"Configuration summary"),n().createElement("div",{className:oa["preview-summary"]},I.map(e=>n().createElement("div",{key:e.label,className:oa["preview-summary__item"]},n().createElement("span",{className:oa["preview-summary__icon"]},e.icon),n().createElement("div",{className:oa["preview-summary__text"]},n().createElement("div",{className:oa["preview-summary__label"]},e.label),n().createElement("div",{className:oa["preview-summary__value"]},e.value))))),n().createElement("div",{className:oa["preview-section__divider"]}),n().createElement("h4",null,"Validation checklist"),n().createElement("div",{className:oa["preview-checklist"]},k.map(e=>n().createElement("div",{key:e.label,className:oa["preview-checklist__item"]},n().createElement("span",{className:[oa["preview-checklist__icon"],e.pass?oa["preview-checklist__icon--pass"]:oa["preview-checklist__icon--fail"]].join(" ")},e.pass?n().createElement(U._j,null):n().createElement(es.$D,null)),n().createElement("div",null,n().createElement("div",{className:oa["preview-checklist__label"]},e.label),n().createElement("div",{className:oa["preview-checklist__sub"]},e.sub)))))),n().createElement("div",{className:oa["preview-save"]},n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:E?U.MG:c.QR,onClick:R},E?"Copied!":"Copy JSON"),n().createElement(o.$nd,{kind:"primary",renderIcon:g.eM,onClick:A,disabled:l||!C,title:C?void 0:S.join(", ")||"Configuration incomplete"},l?"Saving…":"Save Monitor")))}function oi(){let e=(0,i.Zp)(),[t]=(0,l.ok)(),r=t.get("mode")||"create",a=t.get("monitor");return n().createElement(iM,{mode:r,monitorId:a??void 0},n().createElement(oo,{onClose:()=>{e("/admin/etl-monitors")},mode:r}))}function oo({onClose:e,mode:t}){let{state:r,saveMonitor:a,updateState:l}=i$(),{has:i}=v(),{currentStep:d,goToNextStep:c,goToPreviousStep:m,canGoNext:u,canGoPrevious:p}=iU(),[_,f]=n().useState(null),[b,h]=n().useState(!1),S=(0,iO.yn)(r),T=!!r.parseError,C=i(y.RB.ETLMONITOR_ADD,y.RB.ETLMONITOR_EDIT),w=async()=>{if(S.length>0)return void f("Please fix validation errors before saving");h(!0),f(null);try{await a(),e()}catch(e){f(e?.message||"Failed to save monitor")}finally{h(!1)}},N=n().useMemo(()=>[{id:"general",label:"Basic information",sublabel:"Name & details"},{id:"data-source",label:"Data Source",sublabel:"Endpoint & test"},{id:"design",label:"Design",sublabel:"Choose layout"},{id:"fields",label:"Fields",sublabel:"Map data"},{id:"preview",label:"Preview",sublabel:"Review & save"}],[]),I=N.findIndex(e=>e.id===d),k=r.general.name||"New Monitor",A=r.general.categoryLabel||r.general.category||"ETL Monitor";return n().createElement("div",{className:iB["etl-monitor-builder-page"]},n().createElement("header",{className:iB["builder-header"]},n().createElement("div",{className:iB["builder-header__breadcrumb"]},n().createElement("span",{className:iB["builder-header__category"]},A),n().createElement("span",{className:iB["builder-header__separator"]},"/"),n().createElement("span",{className:iB["builder-header__name"]},k)),n().createElement("div",{className:iB["builder-header__title"]},"create"===t?"New ETL Monitor":"Edit ETL Monitor"),n().createElement("div",{className:iB["builder-header__actions"]},p&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:E.nk,onClick:()=>{p&&m()}},"Back"),u&&n().createElement(o.$nd,{kind:"primary",size:"sm",renderIcon:E.Qp,onClick:()=>{u&&c()}},"Continue"),!u&&"preview"===d&&n().createElement(o.$nd,{kind:"primary",size:"sm",renderIcon:g.eM,onClick:w,disabled:b||S.length>0||!C,title:C?void 0:"Requires ETL monitor privileges"},b?"Saving…":"Save Monitor"))),n().createElement("div",{className:iB["builder-content"]},n().createElement("div",{className:iB["builder-grid"]},n().createElement("div",{className:iB["builder-sidebar"]},n().createElement("nav",{className:iB["builder-steps-nav"],"aria-label":"Wizard steps"},n().createElement("ul",{className:iB["builder-steps-list"]},N.map((e,t)=>{let r=t<I?"completed":t===I?"current":"upcoming";return n().createElement("li",{key:e.id,className:`${iB["builder-step-item"]} ${iB[`builder-step-item--${r}`]}`},n().createElement("button",{type:"button",className:iB["builder-step-button"],"aria-current":"current"===r?"step":void 0},n().createElement("span",{className:iB["builder-step-number"]},"completed"===r?n().createElement(U._j,{size:16}):t+1),n().createElement("div",{className:iB["builder-step-content"]},n().createElement("span",{className:iB["builder-step-label"]},e.label),e.sublabel&&n().createElement("span",{className:iB["builder-step-sublabel"]},e.sublabel))))}))),n().createElement("div",{className:iB["builder-help-section"]},n().createElement(s._V,{size:16,className:iB["builder-help-icon"]}),n().createElement("div",{className:iB["builder-help-content"]},n().createElement("span",{className:iB["builder-help-label"]},"Need help?"),n().createElement("a",{href:"#",className:iB["builder-help-link"],onClick:e=>{e.preventDefault()}},"Learn how to create ETL monitors")))),n().createElement("div",{className:iB["builder-main"]},_&&n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:_,onClose:()=>f(null),style:{marginBottom:"1rem"}}),T&&"edit"===t&&n().createElement(o.jeF,{kind:"warning",title:"Configuration Parsing Issue",subtitle:`Some monitor configuration fields could not be parsed: ${r.parseError}. You may need to reconfigure these fields.`,style:{marginBottom:"1rem"},lowContrast:!0,hideCloseButton:!0}),S.length>0&&"preview"===d&&n().createElement(o.jeF,{kind:"error",title:"Validation Errors",subtitle:S.join(", "),style:{marginBottom:"1rem"},lowContrast:!0}),n().createElement("div",{className:iB["builder-step-content"]},(()=>{switch(d){case"general":default:return n().createElement(iW,null);case"data-source":return n().createElement(iZ,null);case"design":return n().createElement(i3,null);case"fields":return n().createElement(or,null);case"preview":return n().createElement(ol,null)}})())),n().createElement("div",{className:iB["builder-preview"]},"preview"===d?n().createElement(iG,null):n().createElement("div",{className:iB["builder-preview-panel"]},n().createElement("div",{className:iB["builder-preview-header"]},n().createElement("h4",null,"Live Preview"),n().createElement("p",{className:iB["builder-preview-description"]},"See how your monitor will appear in real-time")),n().createElement("div",{className:iB["builder-preview-content"]},r.componentType&&r.fields.length>0?n().createElement(n().Fragment,null,n().createElement(iF,{state:r}),r.componentType&&n().createElement("div",{className:iB["builder-preview-settings"]},n().createElement("div",{className:iB["builder-preview-settings-header"]},n().createElement("h5",null,"Selected Design Settings")),n().createElement("div",{className:iB["builder-preview-settings-content"]},n().createElement("div",{className:iB["builder-preview-setting"]},n().createElement("label",null,"Component"),n().createElement(o.vwO,{type:"purple"},r.componentType)),n().createElement("div",{className:iB["builder-preview-setting"]},n().createElement("label",null,"Density"),n().createElement(o.l6P,{id:"density-select",size:"sm",inline:!0,value:r.density||"compact",onChange:e=>{l({density:e.target.value})}},n().createElement(o.ebT,{value:"compact",text:"Compact"}),n().createElement(o.ebT,{value:"default",text:"Default"}),n().createElement(o.ebT,{value:"spacious",text:"Spacious"}))),n().createElement("div",{className:iB["builder-preview-setting"]},n().createElement("label",null,"Section"),n().createElement(o.l6P,{id:"section-select",size:"sm",inline:!0,value:r.layout?.section||"overview",onChange:e=>{l({layout:{section:e.target.value,span:r.layout?.span??{sm:4,md:4,lg:4},priority:r.layout?.priority??1}})}},n().createElement(o.ebT,{value:"overview",text:"Overview"}),n().createElement(o.ebT,{value:"execution",text:"Execution"}),n().createElement(o.ebT,{value:"history",text:"History"}),n().createElement(o.ebT,{value:"errors",text:"Errors"}),n().createElement(o.ebT,{value:"configuration",text:"Configuration"})))),n().createElement("div",{className:iB["builder-preview-settings-note"]},n().createElement(tw.$$,{size:12}),n().createElement("span",null,"You can change the design or settings later. Your data and mappings will be preserved."))),n().createElement("div",{className:iB["builder-preview-config"]},n().createElement("div",{className:iB["builder-preview-config-header"]},n().createElement("h5",null,"Generated Configuration (JSON)")),n().createElement("pre",{className:iB["builder-preview-json"]},JSON.stringify({schemaVersion:2,component:r.componentType,fields:r.fields.map(e=>({key:e.key,label:e.label,path:e.path,type:e.type}))},null,2)))):n().createElement("div",{className:iB["builder-preview-empty"]},n().createElement("p",null,"Configure your data source and select a design to see the live preview"))))))))}function os({state:e}){let[t,a]=n().useState(null);n().useEffect(()=>{Promise.resolve().then(r.bind(r,6434)).then(e=>{a(()=>e.MonitorRenderer)})},[]);let l=n().useMemo(()=>e.componentType&&e.fields&&0!==e.fields.length?{schemaVersion:2,component:e.componentType,data:{rootPath:"$"},fields:e.fields,layout:e.layout,emptyState:e.emptyState,componentConfig:e.componentConfig,presentation:{title:e.general.name||"Preview Monitor",description:e.general.description}}:null,[e]),i=n().useMemo(()=>{let t={};return e.fields?.forEach(e=>{let r=e.path.startsWith("$.")?e.path.slice(2):e.key;switch(e.type){case"STATUS":t[r]="UP";break;case"PERCENTAGE":t[r]=67;break;case"TIMESTAMP":t[r]=Date.now();break;case"DURATION":t[r]=5432;break;case"BOOLEAN":t[r]=!0;break;case"NUMBER":case"INTEGER":case"DECIMAL":t[r]=100;break;default:t[r]=`Sample ${e.label}`}}),t},[e.fields]),o=e.testResult?.data||e.detectedSchema?.rawSample||i;return l?t?n().createElement("div",{className:"builder-preview-renderer"},n().createElement(t,{config:l,data:o,loading:!1,error:null})):n().createElement("div",{className:"builder-preview-placeholder"},n().createElement("p",{style:{color:"var(--cds-text-secondary, #666)"}},"Loading preview renderer...")):n().createElement("div",{className:"builder-preview-placeholder"},n().createElement("p",{style:{color:"var(--cds-text-secondary, #666)"}},e.componentType?"Configure fields to see the live preview":"Select a component type to see the preview"))}function od({open:e,mode:t,onClose:r,onSave:a}){let{state:l}=i$(),{currentStep:i,goToNextStep:s,goToPreviousStep:d,canGoNext:c,canGoPrevious:m}=iU(),[u,p]=n().useState(null),[_,f]=n().useState(!1),b=(0,iO.yn)(l),y=!!l.parseError,h=async()=>{if(b.length>0)return void p("Please fix validation errors before saving");f(!0),p(null);try{let e={name:l.general.name.trim(),code:l.general.code.trim()||void 0,description:l.general.description.trim()||void 0,monitorType:l.componentType,category:l.general.category.trim()||void 0,refreshInterval:l.general.refreshInterval,timeout:l.general.timeout,active:l.general.active,configJson:JSON.stringify({apiEndpoint:{url:l.endpoint.url,method:l.endpoint.method,auth:{type:l.endpoint.auth.type,useSession:l.endpoint.auth.useSession,username:l.endpoint.auth.username,password:l.endpoint.auth.password,headerName:l.endpoint.auth.headerName,apiKey:l.endpoint.auth.apiKey,token:l.endpoint.auth.token}}}),displayConfigJson:JSON.stringify({schemaVersion:2,component:l.componentType,fields:l.fields,layout:l.layout,emptyState:l.emptyState,componentConfig:l.componentConfig})};await a(e),r()}catch(e){p(e?.message||"Failed to save monitor")}finally{f(!1)}},v=()=>{(!l.isDirty||window.confirm("You have unsaved changes. Are you sure you want to close?"))&&r()},S=[{id:"general",label:"General"},{id:"data-source",label:"Data Source"},{id:"design",label:"Design"},{id:"fields",label:"Fields"},{id:"preview",label:"Preview"}],T=S.findIndex(e=>e.id===i);return n().createElement(o.aFV,{open:e,onRequestClose:v,modalHeading:"create"===t?"New ETL Monitor":"Edit ETL Monitor",primaryButtonText:_?"Saving…":"Save",secondaryButtonText:"Cancel",onSecondarySubmit:v,onRequestSubmit:h,primaryButtonDisabled:_||b.length>0,size:"lg",className:"etl-monitor-builder-modal"},n().createElement("div",{className:"etl-monitor-builder-modal__content"},n().createElement(o.xA9,{className:"etl-monitor-builder-modal__grid"},n().createElement(o.VPZ,{sm:4,md:2,lg:3,className:"etl-monitor-builder-modal__sidebar"},n().createElement("nav",{className:"builder-steps-nav"},n().createElement("ul",{className:"builder-steps-list"},S.map((e,t)=>{let r=t<T,a=e.id===i,l=t<=T;return n().createElement("li",{key:e.id,className:["builder-step-item",a&&"builder-step-item--current",r&&"builder-step-item--completed",!l&&"builder-step-item--disabled"].filter(Boolean).join(" ")},n().createElement("button",{type:"button",disabled:!l,onClick:()=>{},className:"builder-step-button"},n().createElement("span",{className:"builder-step-number"},r?"✓":t+1),n().createElement("span",{className:"builder-step-label"},e.label)))})))),n().createElement(o.VPZ,{sm:12,md:14,lg:13,className:"etl-monitor-builder-modal__main"},n().createElement("div",{className:"builder-step-content"},u&&n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:u,onClose:()=>p(null),style:{marginBottom:"1rem"}}),y&&"edit"===t&&n().createElement(o.jeF,{kind:"warning",title:"Configuration Parsing Issue",subtitle:`Some monitor configuration fields could not be parsed: ${l.parseError}. You may need to reconfigure these fields.`,style:{marginBottom:"1rem"},lowContrast:!0,hideCloseButton:!0}),b.length>0&&"preview"===i&&n().createElement(o.jeF,{kind:"error",title:"Validation Errors",subtitle:b.join(", "),style:{marginBottom:"1rem"},lowContrast:!0}),(()=>{switch(i){case"general":default:return n().createElement(iW,null);case"data-source":return n().createElement(iZ,null);case"design":return n().createElement(i3,null);case"fields":return n().createElement(or,null);case"preview":return n().createElement(ol,null)}})()),n().createElement("div",{className:"builder-step-footer"},n().createElement(o.BJc,{orientation:"horizontal",gap:4},m&&n().createElement(o.$nd,{kind:"secondary",renderIcon:E.nk,onClick:()=>{m&&d()}},"Previous"),c&&n().createElement(o.$nd,{kind:"primary",renderIcon:E.Qp,onClick:()=>{c&&s()}},"Next"),!c&&"preview"===i&&n().createElement(o.$nd,{kind:"primary",renderIcon:g.eM,onClick:h,disabled:_||b.length>0},_?"Saving…":"Save Monitor")))),n().createElement(o.VPZ,{sm:4,md:6,lg:8,className:"etl-monitor-builder-modal__preview"},n().createElement("div",{className:"builder-preview-panel"},n().createElement("div",{className:"builder-preview-header"},n().createElement("h4",null,"Live Preview"),n().createElement("span",{className:"builder-preview-badge"},l.componentType||"Select a component")),n().createElement("div",{className:"builder-preview-content"},n().createElement(os,{state:l})))))))}function oc({open:e,mode:t,monitorId:r,onClose:a,onSave:l}){return e?n().createElement(iM,{mode:t,monitorId:r},n().createElement(od,{open:e,mode:t,monitorId:r,onClose:a,onSave:l})):null}let om=[{key:"name",header:"Name"},{key:"code",header:"Code"},{key:"monitorType",header:"Type"},{key:"category",header:"Category"},{key:"refreshInterval",header:"Refresh"},{key:"status",header:"Status"},{key:"actions",header:"Actions"}],ou={name:"",code:"",description:"",monitorType:"STATUS_CARD",category:"",refreshInterval:30,timeout:10,active:!0,apiUrl:"",apiMethod:"GET",authType:"NONE",authUsername:"",authPassword:"",authHeaderName:"",authApiKey:"",authToken:"",displayColumnsJson:""},op=[{value:"STATUS_CARD",label:"Status Card"},{value:"METRICS_GRID",label:"Metric Card"},{value:"PROGRESS",label:"Progress Card"},{value:"TABLE",label:"Table Card"},{value:"DETAILS",label:"Details Card"},{value:"SUMMARY_CARD",label:"Summary Card"},{value:"LOG",label:"Log / Timeline Card"},{value:"ERROR_LOG",label:"Error Log Card"},{value:"TIME_SERIES",label:"Time Series Chart"},{value:"PROGRESS_BAR",label:"Progress Bar (legacy)"},{value:"DATA_TABLE",label:"Data Table (legacy)"}],o_=[{value:"NONE",label:"None"},{value:"BASIC",label:"Basic Auth"},{value:"API_KEY",label:"API Key"},{value:"BEARER_TOKEN",label:"Bearer Token"},{value:"OPENMRS",label:"OpenMRS Session"}];function og(){let e=(0,i.Zp)(),{has:t}=v(),r=t(y.RB.ETLMONITOR_ADD,y.RB.ETLMONITOR_EDIT),a=t(y.RB.ETLMONITOR_PURGE),[l,s]=n().useState(""),[d,c]=n().useState([]),[m,u]=n().useState(!1),[p,_]=n().useState(null),[g,E]=n().useState(!1),[f,h]=n().useState("create"),[S,T]=n().useState(null),[C,w]=n().useState(ou),[N,I]=n().useState(!1),[k,A]=n().useState(!1),R=n().useCallback(async e=>{u(!0),_(null);try{let t=await lA(l,e);c(t)}catch(e){_(e?.message??"Failed to load ETL monitors")}finally{u(!1)}},[l]);n().useEffect(()=>{let e=new AbortController;return R(e.signal),()=>e.abort()},[R]);let O=async()=>{if(!C.name.trim()||!C.apiUrl.trim())return void _("Name and API URL are required");I(!0),_(null);try{let e,t={name:C.name.trim(),code:C.code.trim()||void 0,description:C.description.trim()||void 0,monitorType:C.monitorType,category:C.category.trim()||void 0,refreshInterval:C.refreshInterval,timeout:C.timeout,active:C.active,configJson:(e={apiEndpoint:{url:C.apiUrl,method:C.apiMethod,authType:C.authType}},"BASIC"===C.authType?e.apiEndpoint.authConfig={username:C.authUsername,password:C.authPassword}:"API_KEY"===C.authType?e.apiEndpoint.authConfig={headerName:C.authHeaderName,apiKey:C.authApiKey}:"BEARER_TOKEN"===C.authType?e.apiEndpoint.authConfig={token:C.authToken}:"OPENMRS"===C.authType&&(e.apiEndpoint.authConfig={useSession:"true"}),JSON.stringify(e,null,2)),displayConfigJson:C.displayColumnsJson.trim()||void 0};"create"===f?await lD(t):S?.uuid&&await lx(S.uuid,t),E(!1);let r=new AbortController;await R(r.signal)}catch(e){_(e?.message??"Failed to save ETL monitor")}finally{I(!1)}},D=async e=>{if(e?.uuid&&window.confirm(`Retire ETL monitor "${e.name}"?`))try{await lL(e.uuid);let t=new AbortController;await R(t.signal)}catch(e){_(e?.message??"Failed to retire ETL monitor")}},x=d.map(e=>({id:e.uuid,name:e.name,code:e.code||"—",monitorType:e.monitorType||"—",category:e.category||"—",refreshInterval:`${e.refreshInterval}s`,status:!1===e.active||e.retired?"Inactive":"Active",actions:""}));return n().createElement(o.BJc,{gap:5},n().createElement(G,{title:"ETL Monitors",subtitle:"Configure and monitor external ETL processes. Set up API endpoints and define how to extract and display data.",actions:r?n().createElement(o.BJc,{orientation:"horizontal",gap:2},n().createElement(o.$nd,{size:"sm",renderIcon:b.OM,onClick:()=>e("/admin/etl-monitors/builder?mode=create")},"New Monitor"),n().createElement(o.$nd,{size:"sm",kind:"ghost",onClick:()=>{h("create"),T(null),w(ou),E(!0)}},"Advanced (JSON)")):void 0}),n().createElement("div",{style:{padding:"0 1rem 1rem",display:"grid",gap:"1rem"}},n().createElement(o.vji,{size:"lg",labelText:"Search",placeholder:"Search ETL monitors…",value:l,onChange:e=>s(e.target.value)}),p?n().createElement(o.jeF,{lowContrast:!0,kind:"error",title:"Error",subtitle:p}):null,m?n().createElement(o.OOb,{rowCount:5,columnCount:7,showHeader:!1,showToolbar:!1}):n().createElement(o.bQt,{rows:x,headers:om},({rows:t,headers:l,getHeaderProps:i,getRowProps:s})=>n().createElement(o.K3K,null,n().createElement(o.XIK,{useZebraStyles:!0},n().createElement(o.ndF,null,n().createElement(o.Hjg,null,l.map(e=>n().createElement(o.A0N,{key:e.key,...i({header:e})},e.header)))),n().createElement(o.BFY,null,t.map(t=>{let l=d.find(e=>e.uuid===t.id);return n().createElement(o.Hjg,{key:t.id,...s({row:t})},n().createElement(o.nA6,null,t.cells[0].value),n().createElement(o.nA6,null,t.cells[1].value),n().createElement(o.nA6,null,t.cells[2].value),n().createElement(o.nA6,null,t.cells[3].value),n().createElement(o.nA6,null,t.cells[4].value),n().createElement(o.nA6,null,l?.active===!1||l?.retired?n().createElement(o.vwO,{type:"gray"},"Inactive"):n().createElement(o.vwO,{type:"green"},"Active")),n().createElement(o.nA6,null,n().createElement("div",{style:{display:"flex",gap:"0.5rem"}},r&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:es.ff,iconDescription:"Edit",hasIconOnly:!0,onClick:()=>l&&void e(`/admin/etl-monitors/builder?mode=edit&monitor=${l.uuid}`)}),a&&n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:P.zH,iconDescription:"Retire",hasIconOnly:!0,onClick:()=>l&&D(l)}))))})))))),n().createElement(o.aFV,{open:g,modalHeading:"create"===f?"New ETL Monitor":"Edit ETL Monitor",primaryButtonText:N?"Saving…":"Save",secondaryButtonText:"Cancel",onRequestClose:()=>!N&&E(!1),onRequestSubmit:O,primaryButtonDisabled:N||!C.name.trim()||!C.apiUrl.trim(),size:"lg"},n().createElement(o.BJc,{gap:5},n().createElement(o.ksK,{id:"monitor-name",labelText:"Name",placeholder:"e.g., Uganda ETL Status",value:C.name,onChange:e=>w(t=>({...t,name:e.target.value}))}),n().createElement(o.ksK,{id:"monitor-code",labelText:"Code",placeholder:"e.g., uganda-etl-status",value:C.code,onChange:e=>w(t=>({...t,code:e.target.value}))}),n().createElement(o.fs1,{id:"monitor-description",labelText:"Description",rows:2,value:C.description,onChange:e=>w(t=>({...t,description:e.target.value}))}),n().createElement(o.l6P,{id:"monitor-type",labelText:"Monitor Type",value:C.monitorType,onChange:e=>w(t=>({...t,monitorType:e.target.value}))},op.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement(o.ksK,{id:"monitor-category",labelText:"Category",placeholder:"e.g., Uganda ETL",value:C.category,onChange:e=>w(t=>({...t,category:e.target.value}))}),n().createElement(o.BJc,{orientation:"horizontal",gap:5},n().createElement("div",null,n().createElement("label",{htmlFor:"refresh-interval",style:{display:"block",marginBottom:"0.5rem"}},"Refresh Interval (seconds)"),n().createElement(o.Q7x,{id:"refresh-interval",min:5,max:3600,value:C.refreshInterval,onChange:e=>{let t=parseInt(e.target.value)||30;w(e=>({...e,refreshInterval:t}))}})),n().createElement("div",null,n().createElement("label",{htmlFor:"timeout",style:{display:"block",marginBottom:"0.5rem"}},"Timeout (seconds)"),n().createElement(o.Q7x,{id:"timeout",min:1,max:300,value:C.timeout,onChange:e=>{let t=parseInt(e.target.value)||10;w(e=>({...e,timeout:t}))}}))),n().createElement(o.lMk,{id:"monitor-active",labelText:"Active",toggled:C.active,onToggle:e=>w(t=>({...t,active:e}))}),n().createElement("div",{style:{padding:"1rem",background:"var(--cds-background, #f4f4f4)",borderRadius:"0.5rem"}},n().createElement("h4",{style:{margin:"0 0 1rem 0"}},"API Endpoint Configuration"),n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"api-url",labelText:"API URL",placeholder:"/ws/rest/v1/ugandareportsetl/etl/status",value:C.apiUrl,onChange:e=>w(t=>({...t,apiUrl:e.target.value})),helperText:"Can be relative (starts with /) or absolute"}),n().createElement(o.l6P,{id:"api-method",labelText:"HTTP Method",value:C.apiMethod,onChange:e=>w(t=>({...t,apiMethod:e.target.value}))},n().createElement(o.ebT,{value:"GET",text:"GET"}),n().createElement(o.ebT,{value:"POST",text:"POST"})),n().createElement(o.l6P,{id:"auth-type",labelText:"Authentication",value:C.authType,onChange:e=>w(t=>({...t,authType:e.target.value}))},o_.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),(()=>{switch(C.authType){case"BASIC":return n().createElement(o.BJc,{gap:3},n().createElement(o.ksK,{id:"auth-username",labelText:"Username",value:C.authUsername,onChange:e=>w(t=>({...t,authUsername:e.target.value}))}),n().createElement(o.ksK,{id:"auth-password",labelText:"Password",type:"password",value:C.authPassword,onChange:e=>w(t=>({...t,authPassword:e.target.value}))}));case"API_KEY":return n().createElement(o.BJc,{gap:3},n().createElement(o.ksK,{id:"auth-header-name",labelText:"Header Name",placeholder:"e.g., X-API-Key",value:C.authHeaderName,onChange:e=>w(t=>({...t,authHeaderName:e.target.value}))}),n().createElement(o.ksK,{id:"auth-api-key",labelText:"API Key",type:"password",value:C.authApiKey,onChange:e=>w(t=>({...t,authApiKey:e.target.value}))}));case"BEARER_TOKEN":return n().createElement(o.ksK,{id:"auth-token",labelText:"Bearer Token",type:"password",value:C.authToken,onChange:e=>w(t=>({...t,authToken:e.target.value}))});case"OPENMRS":return n().createElement(o.jeF,{kind:"info",title:"Using OpenMRS Session",subtitle:"The monitor will use your current OpenMRS session. No additional credentials needed.",lowContrast:!0});default:return null}})())),n().createElement("div",{style:{padding:"1rem",background:"var(--cds-background, #f4f4f4)",borderRadius:"0.5rem"}},n().createElement("h4",{style:{margin:"0 0 1rem 0"}},"Display Configuration (JSON)"),n().createElement(o.fs1,{id:"display-config",labelText:"Display Configuration JSON",rows:6,value:C.displayColumnsJson,placeholder:`{
308
+ "columns": [
309
+ {
310
+ "key": "status",
311
+ "header": "Status",
312
+ "jsonPath": "$.isRunning",
313
+ "columnType": "STATUS_BADGE",
314
+ "colorMap": { "true": "running", "false": "success" }
315
+ }
316
+ ]
317
+ }`,onChange:e=>w(t=>({...t,displayColumnsJson:e.target.value})),helperText:"Define how to extract and display data from the API response"})))),n().createElement(oc,{open:k,mode:"create",monitorId:S?.uuid,onClose:()=>A(!1),onSave:async e=>{try{await lD(e),A(!1),R()}catch(e){throw console.error("Failed to save monitor:",e),e}}}))}let oE="/reportbuilder/dashboard";async function of(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)(`${oE}?${a.toString()}`,t))?Array.isArray(r)?r:Array.isArray(r.results)?r.results:[]:[]}async function ob(e,t){return(0,W.wO)(`${oE}/${encodeURIComponent(e.trim())}?v=full`,t)}async function oy(e,t){return(0,W.oV)(oE,e,t)}async function oh(e,t,r){return(0,W.oV)(`${oE}/${encodeURIComponent(e)}`,t,r)}async function ov(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)(`${oE}/${encodeURIComponent(e)}?${n.toString()}`,a)}function oS(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),ob(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 oT=r(3155);let oC=[{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}],ow={sm:4,md:8,lg:8},oN="__other";function oI(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 ok(){return{schemaVersion:1,sections:[],widgets:[],autoInclude:{etlMonitors:{enabled:!0,arrangeBy:"monitorLayout"}}}}function oA(e,t,r){return Math.min(r,Math.max(t,Math.round(e)))}function oR(e,t){let r=t??ow,a=e??{};if("number"!=typeof a.sm&&"number"!=typeof a.md&&"number"!=typeof a.lg)return{sm:oA(r.sm??4,0,4),md:oA(r.md??8,0,8),lg:oA(r.lg??8,1,16)};let n="number"==typeof a.sm&&Number.isFinite(a.sm)?oA(a.sm,0,4):4,l="number"==typeof a.md&&Number.isFinite(a.md)?oA(a.md,0,8):Math.min(8,2*n),i="number"==typeof a.lg&&Number.isFinite(a.lg)?oA(a.lg,0,16):Math.min(16,Math.max(2*l,4));return 0===i&&(i=oA(r.lg??8,1,16)),{sm:n,md:l,lg:i}}function oO(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 oD={success:{label:"Healthy",kind:"success"},warning:{label:"Degraded",kind:"warning"},error:{label:"Errors detected",kind:"warning"}},ox=function({title:e,subtitle:t,status:r,lastRefreshed:a,onRefresh:l,refreshing:i}){let s=oD[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 oL(e){return!!e&&!(e<=0)&&e}let oM=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:oL(e.span.sm),md:oL(e.span.md),lg:oL(e.span.lg),className:"-esm-report-builder__dashboards__dashboard-grid__cell___BeymQ"},t(e,a))}))},o$=function({section:e,renderSlot:t}){let r=n().createElement(oM,{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))},oP=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")))},oU={"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."},oB=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?oU[t]:"This widget is currently unavailable."))},oF=function({slot:e,position:t,data:r,error:a,loading:l,onRefreshMonitor:i}){return"UNAVAILABLE"===e.status?n().createElement(oB,{title:e.title,reason:e.unavailableReason}):"UNSUPPORTED"===e.status?null:"ETL"===e.kind&&e.monitor?n().createElement(l3,{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(oP,{title:e.title,report:e.report}):null},oz=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 oq({code:e,dashboard:t,fallbackConfig:r,titleOverride:a}){let l=(0,i.g)(),s=e??l.code,d=oS(t?void 0:s),c=t??d.dashboard,m=n().useMemo(()=>oI(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([lR(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=ok(),a.configSynthesized=!0);let l=(n.sections?.length?n.sections:oC.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:oN,o=e.order??(n+1)*100,d=oR(e.span,ow),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??ow;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=lZ(e.displayConfigJson);if(2===a.version&&a.config)t=a.config.component,r=a.config.layout;else{let a=lX(e.displayConfigJson,e.monitorType);a&&(t=a.component,r=a.layout)}}catch{}return r&&r.section?r:(0,oT.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??oN).push({slotKey:c(`ETL_MONITOR:${r.uuid}`),status:"OK",kind:"ETL",explicit:!1,priority:t.priority??999,title:r.name,sectionKey:a??oN,span:oR(t.span,e),monitor:r})}}let p=l.map(e=>({...e,slots:oO(o.get(e.key)??[])})),_=o.get(oN);_&&_.length>0&&p.push({key:oN,label:"Other",order:9999,slots:oO(_)});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 lM(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(oF,{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(oz,null)):!t&&d.error?n().createElement(o.BJc,{gap:5},n().createElement(ox,{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(ox,{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(ox,{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(oz,{synthesized:E.flags.configSynthesized}):E.sections.map(e=>n().createElement(o$,{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 oH(){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),of({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 oJ=ok(),oG=function(){let{dashboard:e,isLoading:t}=oS("etl-dashboard");return!t&&e?.uuid?n().createElement(oq,{dashboard:e}):n().createElement(oq,{fallbackConfig:oJ,titleOverride:"ETL Monitor Dashboard"})},oV="-esm-report-builder__dashboards-admin__dashboard-form-modal__errors___OVqEo",oW="-esm-report-builder__dashboards-admin__dashboard-widgets-editor__row-fields___N7eOV",oK="-esm-report-builder__dashboards-admin__dashboard-editor__hint___rHHUP",oQ="-esm-report-builder__dashboards-admin__dashboard-editor__row-actions___4sHig",oY=[{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 oX({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:oY},({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 oZ=/^[a-z0-9][a-z0-9-]{0,49}$/,o0=/^[a-z0-9][a-z0-9-]{0,99}$/;function o1(){return{schemaVersion:1,sections:oC.map(e=>({...e})),widgets:[],autoInclude:{etlMonitors:{enabled:!1}}}}function o2(e){return e&&e.trim()?oZ.test(e)?null:"Section key must be lowercase letters, numbers and dashes (max 50)":"Section key is required"}function o5(e){let t=[],r=e.sections??[],a=new Set;for(let e of r){let r=o2(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 o6=[{value:"ETL",label:"ETL"},{value:"REPORT",label:"Report"},{value:"CUSTOM",label:"Custom"}];function o3({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})},o6.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 o4({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:oK},'Widgets are placed into sections. Empty sections are hidden unless "always show" is set.'),r.map((e,t)=>{let s=o2(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:oQ},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 o8=[{value:"ETL_MONITOR",label:"ETL Monitor"},{value:"REPORT",label:"Report"}];function o7({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 lA(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:oK},"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:oW},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})}},o8.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:oW},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:oQ},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 o9({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:oK},"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 se({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:oK},"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:oV},d.map((e,t)=>n().createElement("li",{key:t},e))),n().createElement("div",{className:oQ},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:o5(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 st(e){if(!e)return{name:"",code:"",description:"",dashboardType:"CUSTOM",active:!0,sortOrder:0,config:o1()};let t=oI(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??o1()}}function sr({open:e,mode:t,initial:r,onClose:a,onSave:l}){let[i,s]=n().useState(()=>st(r)),[d,c]=n().useState([]),[m,u]=n().useState(!1);n().useEffect(()=>{e&&(s(st(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()&&!o0.test(i.code.trim())&&e.push("Code must be lowercase letters, numbers and dashes"),e.push(...o5(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:oV},d.map((e,t)=>n().createElement("li",{key:t},e))),n().createElement(o3,{form:i,onChange:e=>s(t=>({...t,...e}))}),n().createElement(o4,{config:i.config,onChange:p}),n().createElement(o7,{config:i.config,onChange:p}),n().createElement(o9,{config:i.config,onChange:p}),n().createElement(se,{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 sa(){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),of({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 ob(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 ov(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 oy(e);else{if(!f?.uuid)throw Error("Missing uuid for update");await oh(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(oX,{rows:i,loading:d,onEdit:T,onDelete:C,canEdit:t,canDelete:r})),n().createElement(sr,{open:p,mode:g,initial:f,onClose:()=>_(!1),onSave:w}))}var sn=r(2075);let sl=()=>{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(),tP()]);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,sn.CB)({includeRetired:"active"!==S})).map(e=>{let t=(0,sn.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,sn.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,sn.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,sn.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 si(e,t){let r=()=>{let r=e.population.indicatorRules||e.indicatorRules;if(!r||0===r.length)return e.population.sqlTemplate||"";let a=[];for(let e of r){if(!e.indicatorUuid||!t?.has(e.indicatorUuid))continue;let r=function(e){if(!e)return"";if(e.sqlTemplate?.trim())return e.sqlTemplate.trim();if(e.configJson)try{let t=JSON.parse(e.configJson);for(let e of[t.sqlPreview,t.sqlTemplate,t.base?.sqlPreview,t.base?.sqlTemplate,t.authoring?.base?.sqlPreview,t.authoring?.base?.sqlTemplate,t.baseIndicator?.sqlPreview,t.baseIndicator?.sqlTemplate])if("string"==typeof e&&e.trim())return e.trim()}catch(e){console.warn("Failed to parse indicator configJson:",e)}return""}(t.get(e.indicatorUuid));if(!r){console.warn(`No SQL found for indicator: ${e.name} (${e.indicatorUuid})`);continue}let n=function(e){let t=e.trim().replace(/;+\s*$/,"");if(!t)return"";let r=t.match(/SELECT\s+COUNT\s*\(\s*DISTINCT\s+([a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)?)\s*\)\s+AS\s+(\w+)\s*/i);if(r){let e=r[1],a=t.substring(r[0].length);if(e.includes(".")){let t=e.split(".")[1];return`SELECT DISTINCT ${e} AS ${t} ${a}`.trim()}let n=a.match(/FROM\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+(?:AS\s+)?([a-zA-Z_][a-zA-Z0-9_]*)\b/i),l=n?n[2]:"a";return`SELECT DISTINCT ${l}.${e} AS ${e} ${a}`.trim()}let a=t.match(/^WITH\s+([\s\S]*?)\s*SELECT\s+COUNT\s*\(\s*\*\s*\)\s+AS\s+total\s+FROM\s*\(\s*(SELECT[\s\S]*?)\)\s*X\b/i);if(a){let e=a[1],t=a[2].trim();return`WITH ${e}
318
+ SELECT DISTINCT pop.patient_id
319
+ FROM (
320
+ ${t}
321
+ ) pop`}let n=t.match(/SELECT\s+COUNT\s*\(\s*\*\s*\)\s+AS\s+total\s*/i);if(n){let e=t.substring(n[0].length),r=e.match(/FROM\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+(?:AS\s+)?([a-zA-Z_][a-zA-Z0-9_]*)\b/i),a=r?r[2]:"a",l="patient_id";for(let t of[/\b(?:${tableAlias}\.)?(patient_id|patient_id|person_id)\b/i,/ON\s+\w+\.(?:patient_id|patient_id|person_id)\s*=\s*${tableAlias}\.(patient_id|patient_id|person_id)/i]){let r=e.match(t);if(r){l=r[1]||r[2]||"patient_id";break}}return`SELECT DISTINCT ${a}.${l} AS patient_id ${e}`.trim()}return t}(r);n&&a.push({sql:n,operator:e.logicalOperator||"AND",negate:e.negate})}if(0===a.length)return e.population.sqlTemplate||"";if(0===a.length)return"";if(1===a.length)return a[0].sql;let n=[],l=[];for(let e of a)e.negate?l.push(e.sql):n.push(e.sql);let i="";if(i=0===n.length?"SELECT DISTINCT patient_id AS patient_id FROM mamba_fact_patients_latest WHERE patient_id IS NOT NULL":1===n.length?n[0]:`(${n.join("\n INTERSECT\n ")})`,l.length>0)for(let e of l)i=`(${i}
322
+ EXCEPT
323
+ ${e})`;return i},a=(()=>{switch(e.populationMode){case"INDICATOR":return r();case"HYBRID":{let t=r();if(t&&e.population.sqlTemplate)return`SELECT DISTINCT base.patient_id AS patient_id
324
+ FROM (${e.population.sqlTemplate}) base
325
+ INNER JOIN (${t}) indicators ON indicators.patient_id = base.patient_id`;return t||e.population.sqlTemplate||""}default:return e.population.sqlTemplate||""}})(),n=e.columns.sort((e,t)=>e.sortOrder-t.sortOrder).map((e,t)=>{let r={name:e.name,dataDefinition:function(e,t){switch(e){case"IDENTIFIER":return{type:"IDENTIFIER",config:t};case"PERSON_NAME":return{type:"PERSON_NAME",config:t};case"PERSON_ATTRIBUTE":return{type:"PERSON_ATTRIBUTE",config:t};case"CALCULATION":return{type:"CALCULATION",config:t};case"SQL":return{type:"SQL",config:t};case"PERSON_ADDRESS":return{type:"PERSON_ADDRESS",config:t};case"CONVERTER":return{type:"CONVERTER",config:t};case"OBSERVATION":return{type:"OBSERVATION",config:t};case"ENCOUNTER_DIAGNOSIS":return{type:"ENCOUNTER_DIAGNOSIS",config:t};default:return{type:"SQL",config:{sql:t.sql||""}}}}(e.dataDefinitionType,e.dataDefinitionConfig)};if(r._metadata={id:e.id,position:e.sortOrder??t},e.repeatResolution)r.repeatResolution=e.repeatResolution;else{let t=e.dataDefinitionConfig.sql||"",a=/^(?:SELECT\s+(?:DISTINCT\s+)?(?:COUNT|MAX|MIN|SUM|AVG|GROUP_CONCAT|ARRAY_AGG|STRING_AGG|JSON_AGG)\s*\()/i.test(t)||/GROUP\s+BY\s+/i.test(t),n=/\bLIMIT\s+1\b/i.test(t);if("SQL"===e.dataDefinitionType&&/appointment|observation|encounter|program_enrollment|visit/i.test(t)&&!a&&!n){let e=t.match(/ORDER BY\s+([a-z_][a-z0-9_]*)/i);r.repeatResolution={strategy:"LATEST",orderBy:e?e[1]:"encounter_date",restrictToPeriod:!1,ignoreVoided:!0}}}return r}),l=(e.parameters||[]).sort((e,t)=>e.displayOrder-t.displayOrder).map(e=>({name:e.name,label:e.label,type:e.type,required:e.required,...e.config&&{config:e.config}})),i=l.length>0?l:[{name:"startDate",label:"Start Date",type:"DATE",required:!0},{name:"endDate",label:"End Date",type:"DATE",required:!0}],o={version:3,type:"LINE_LIST",categoryUuid:e.categoryUuid,dataSourceUuid:e.dataSources.find(e=>"PRIMARY"===e.role)?.uuid,dataSources:(()=>{let t=new Map,r=e.dataSources.find(e=>"PRIMARY"===e.role)?.uuid||"",a=!!r,n=e.columns.some(e=>"PERSON_ATTRIBUTE"===e.dataDefinitionType),l=e.columns.some(e=>"IDENTIFIER"===e.dataDefinitionType);n&&t.set("person_attributes",{uuid:"person_attributes",name:"Person Attributes",type:"CORE",role:"REFERENCE"}),l&&t.set("patient_identifiers",{uuid:"patient_identifiers",name:"Patient Identifiers",type:"CORE",role:"REFERENCE"});let i=null;if(e.columns.forEach(e=>{let n;if("PERSON_ATTRIBUTE"===e.dataDefinitionType||"IDENTIFIER"===e.dataDefinitionType)return;let l=n="CALCULATION"===e.dataDefinitionType?"calculated":"OBSERVATION"===e.dataDefinitionType?"observations":"ENCOUNTER_DIAGNOSIS"===e.dataDefinitionType?"encounter_diagnoses":"PERSON_ADDRESS"===e.dataDefinitionType?"person_address":"PERSON_NAME"===e.dataDefinitionType?"person_name":(e=>{if(!e)return"unknown";let t=e.trim();if(/^SELECT\s/i.test(t)||/:(patientId|patient_id)\b/i.test(t))return"custom_sql";let r=t.match(/`?(\w+)`?\.\s*`?\w+`?/);return r?r[1]:"unknown"})(e.dataDefinitionConfig?.sql),o=l===r,s="custom_sql"===l||"calculated"===l?"SQL":l.startsWith("mamba_")?"ETL":"SQL";!t.has(l)&&(t.set(l,{uuid:l,name:{observations:"Observations",encounter_diagnoses:"Encounter Diagnoses",person_address:"Person Address",person_name:"Person Names",calculated:"Calculated Fields",custom_sql:"Custom SQL"}[l]||l,type:s,role:o?"PRIMARY":"SECONDARY",columns:{}}),a||i||(i=l));let d=t.get(l);d&&d.columns&&(d.columns[e.name]={name:e.name,type:e.source?.fieldType||"UNKNOWN",sourceTable:n})}),!a&&i){let e=t.get(i);e&&(e.role="PRIMARY",a=!0)}return Array.from(t.values())})(),rowGrain:e.rowGrain,templateId:e.templateId,parameters:i,indicatorRules:e.population.indicatorRules||e.indicatorRules,buildMethod:(e.population.indicatorRules||e.indicatorRules||[]).length>0?"INDICATOR_BASED":e.population.buildMethod||"SQL_BUILDER",baseCohortDefinition:{type:"SQL",name:"INDICATOR_BASED"===e.population.buildMethod?"Indicator-based Patient Cohort":"Patient Cohort",config:{sql:a,...e.population.filterMap&&{filterMap:e.population.filterMap}}},dataSetDefinitions:[{name:e.dataSetName||"PATIENT_LIST",type:"PATIENT_DATA_SET",rowFilter:{type:"SQL",name:"Row Filter",config:{sql:a,...e.population.filterMap&&{filterMap:e.population.filterMap}}},columns:n}]};if(e.sortConfig&&e.sortConfig.length>0){let t=e.sortConfig[0];o.orderBy=t.columnId,o.orderDirection=t.direction,e.sortConfig.length>1&&console.warn("Multiple sort rules defined, but only the first will be used until backend supports multi-column sorting")}return e.limit&&(o.limit=e.limit),o}function so(){let e=new Date().toISOString();return{version:3,name:"",description:"",code:"",currentPanel:"basics",categoryUuid:"",rowGrain:"PATIENT",templateId:"",populationSources:[],dataSources:[],population:{baseDataSourceUuid:"",buildMethod:"SQL_BUILDER",sqlTemplate:"",parameterReferences:[],visualFilter:{rootGroup:{id:"root",logicalOperator:"AND",conditions:[],nestedGroups:[]},useVisualBuilder:!1},buildHistory:[],filterMap:void 0},columns:[],parameters:[{id:"param-startDate",name:"startDate",label:"Start Date",type:"DATE",required:!0,defaultValue:"",displayOrder:0},{id:"param-endDate",name:"endDate",label:"End Date",type:"DATE",required:!0,defaultValue:"",displayOrder:1}],sortConfig:[],limit:1e3,displaySettings:{defaultPageSize:25,freezeFirstColumn:!0,freezeHeader:!0,dateDisplayFormat:"dd MMM yyyy",nullDisplayValue:"—",maxInteractiveRows:500,maxExportRows:1e5,allowedExports:["CSV","XLSX","PDF"],includeParametersInExportHeader:!0,includeGeneratedTimestamp:!0},validation:{errors:{},warnings:{},lastValidated:e},metadata:{createdAt:e,lastModified:e,buildMethod:"NEW",version:2,status:"DRAFT"}}}async function ss(){try{let e,t,r,a,n,l=await (0,W.wO)("/systemsetting?q=layout.address.format&v=full"),i=l?.results?.[0]?.value;if(!i)return console.warn("No address template found in system settings"),sd();return e=new DOMParser().parseFromString(i,"text/xml"),t=[],e.querySelectorAll("nameMappings entry").forEach(e=>{let r=e.querySelector("string");if(!r)return;let a=r.textContent?.trim(),n=e.querySelectorAll("string")[1],l=n?.textContent?.trim();if(a&&l){let e=l.split("."),r=e[e.length-1]||a;t.push({field:a,label:l,display:r.charAt(0).toUpperCase()+r.slice(1)})}}),r={},e.querySelectorAll("sizeMappings entry").forEach(e=>{let t=e.querySelector("string"),a=e.querySelectorAll("string")[1],n=t?.textContent?.trim(),l=a?.textContent?.trim();n&&l&&(r[n]=parseInt(l,10))}),a={},e.querySelectorAll("elementDefaults entry").forEach(e=>{let t=e.querySelector("string"),r=e.querySelectorAll("string")[1],n=t?.textContent?.trim(),l=r?.textContent?.trim();n&&l&&(a[n]=l)}),n=[],e.querySelectorAll("lineByLineFormat string").forEach(e=>{let t=e.textContent?.trim();t&&n.push(t)}),{nameMappings:t,sizeMappings:r,elementDefaults:a,lineByLineFormat:n}}catch(e){return console.error("Failed to fetch address template:",e),sd()}}function sd(){return{nameMappings:[{field:"address1",label:"Address Line 1",display:"Address 1"},{field:"address2",label:"Address Line 2",display:"Address 2"},{field:"address3",label:"Address 3",display:"Address 3"},{field:"address4",label:"Address 4",display:"Address 4"},{field:"address5",label:"Address 5",display:"Address 5"},{field:"cityVillage",label:"City/Village",display:"City/Village"},{field:"stateProvince",label:"State/Province",display:"State"},{field:"countyDistrict",label:"County/District",display:"District"},{field:"country",label:"Country",display:"Country"},{field:"postalCode",label:"Postal Code",display:"Postal Code"},{field:"latitude",label:"Latitude",display:"Latitude"},{field:"longitude",label:"Longitude",display:"Longitude"}],sizeMappings:{},elementDefaults:{},lineByLineFormat:[]}}let sc=[{label:"Last visit date",sql:"SELECT MAX(encounter_datetime) FROM encounter WHERE patient_id = :patient_id"},{label:"Latest CD4 count",sql:"SELECT value_numeric FROM obs WHERE patient_id = :patient_id AND concept_id = 5497 ORDER BY obs_datetime DESC LIMIT 1"},{label:"Current ART regimen",sql:"SELECT value_text FROM obs WHERE patient_id = :patient_id AND concept_id = 1085 ORDER BY obs_datetime DESC LIMIT 1"}],sm=({open:e,onClose:t,onSave:r,existingColumnNames:l=[],idColumnAlias:i="patient_id",primaryDatasourceName:s=""})=>{let[d,c]=(0,a.useState)(""),[m,u]=(0,a.useState)(""),[p,_]=(0,a.useState)(""),[g,E]=(0,a.useState)(!1),[f,b]=(0,a.useState)(null);return(0,a.useEffect)(()=>{e&&(c(""),u(""),_(""),E(!1),b(null))},[e]),n().createElement(o.aFV,{open:e,onRequestClose:t,onRequestSubmit:()=>{d.trim()?l.some(e=>e.toLowerCase()===d.trim().toLowerCase())?b("A column with this name already exists"):p.trim()?/:(patient_id|patient_id|clientId|patientId)\b/i.test(p)?(r({name:d.trim(),description:m.trim()||void 0,sql:p.trim(),repeatResolution:g}),t()):b(`SQL should reference :${i} to return a value per patient. Add it to your WHERE clause.`):b("SQL expression is required"):b("Column name is required")},modalHeading:"Add Custom SQL Column",modalLabel:"Custom Column",primaryButtonText:"Add Column",secondaryButtonText:"Cancel",size:"lg",preventCloseOnClickOutside:!0},n().createElement(o.BJc,{gap:5},n().createElement("p",null,"Write a SQL expression that returns a single value for each patient. Use"," ",n().createElement("code",null,":",i)," as a bind parameter — it will be replaced with the patient/client ID for each row in the report."),s&&n().createElement(o.jeF,{kind:"info",title:"About Data Sources",subtitle:`This column will be associated with your primary datasource: "${s}". To use a different datasource, go to the Data Sources panel and set it as primary first.`,lowContrast:!0}),!s&&n().createElement(o.jeF,{kind:"warning",title:"No Primary Data Source",subtitle:"Custom SQL columns need a primary datasource. Please select a datasource in the Data Sources panel before adding custom columns.",lowContrast:!0}),f&&n().createElement(o.jeF,{kind:"error",title:"Validation Error",subtitle:f,hideCloseButton:!0}),n().createElement(o.ksK,{id:"custom-column-name",labelText:"Column Name *",placeholder:"e.g., Last Visit Date",value:d,onChange:e=>{c(e.target.value),b(null)}}),n().createElement(o.ksK,{id:"custom-column-description",labelText:"Description (optional)",placeholder:"What this column represents",value:m,onChange:e=>u(e.target.value)}),n().createElement(o.fs1,{id:"custom-column-sql",labelText:"SQL Expression *",placeholder:`SELECT ... FROM ... WHERE patient_id = :${i}`,value:p,onChange:e=>{_(e.target.value),b(null)},rows:6,helperText:`The :${i} parameter is replaced with each patient's ID. The query must return a single value.`}),n().createElement(o.lMk,{id:"custom-column-repeat",labelText:"May return multiple values (configure repeat resolution)",labelA:"No",labelB:"Yes",toggled:g,onToggle:E}),g&&n().createElement(o.jeF,{kind:"info",title:"Repeat Resolution",subtitle:"The most recent value (LATEST strategy) will be used by default. You can adjust this later in the column settings.",hideCloseButton:!0,lowContrast:!0}),n().createElement("div",null,n().createElement("p",{style:{fontWeight:600,marginBottom:"0.5rem"}},"Examples (click to use):"),n().createElement(o.BJc,{gap:2},sc.map(e=>n().createElement(o.$nd,{key:e.label,kind:"ghost",size:"sm",onClick:()=>{_(e.sql),d||c(e.label),b(null)},style:{justifyContent:"flex-start",textAlign:"left"}},e.label)))),p&&n().createElement("div",null,n().createElement("p",{style:{fontWeight:600,marginBottom:"0.25rem"}},"Your SQL:"),n().createElement(o.z7k,{type:"multi"},p))))},su="-esm-report-builder__population-source-selector__optionRow___57yaq",sp=[{uuid:"person_attributes",name:"Person Attributes",type:"CORE",joinType:"JOIN"}],s_=[{value:"JOIN",label:"JOIN",description:"Combine sources with matching patient_ids (INNER JOIN)"},{value:"LEFT_JOIN",label:"LEFT JOIN",description:"All patients from first source, match from second"},{value:"INTERSECT",label:"INTERSECT",description:"Patients present in ALL sources (AND logic)"},{value:"UNION",label:"UNION",description:"Patients from ANY source (OR logic)"},{value:"EXCEPT",label:"EXCEPT",description:"Patients in first source but NOT in second"}],sg=({populationSources:e,onChange:t,disabled:r=!1,showAdvanced:l=!1})=>{let[i,s]=(0,a.useState)(null),{tables:d,loading:c,error:m}=io(!0),u=(0,a.useMemo)(()=>0===e.length?0:Math.max(...e.map(e=>e.order))+1,[e]),p=(0,a.useMemo)(()=>[...(d||[]).map(e=>({id:e,label:e,type:"ETL"})),...sp.map(e=>({id:e.uuid,label:e.name,type:"CORE"}))],[d]),_=(0,a.useMemo)(()=>e.map(e=>({id:e.uuid,label:e.name})),[e]),g=(r,a)=>{t(e.map(e=>e.uuid===r?{...e,...a}:e))},E=e.filter(e=>e.enabled).length;return n().createElement("div",{className:"-esm-report-builder__population-source-selector__container___LrQoh"},n().createElement(o.BJc,{gap:4},n().createElement("div",{className:"-esm-report-builder__population-source-selector__header___Cck9x"},n().createElement("div",{className:"-esm-report-builder__population-source-selector__headerTitle___hw3UR"},n().createElement(tw.$$,{size:16}),n().createElement("h4",null,"Population Sources")),n().createElement("p",{className:"-esm-report-builder__population-source-selector__headerDescription___dVbnP"},"Select multiple datasources to define the patient population. Each source can have a different join type.")),n().createElement("div",{className:"-esm-report-builder__population-source-selector__addSection___iEpr6"},n().createElement(o.KFt,{id:"population-sources-multiselect",titleText:"Add Population Sources",label:"Search and select datasources...",placeholder:"Type to search datasources...",items:p,selectedItems:_,itemToString:e=>e?.label||"",onChange:({selectedItems:r})=>{let a=new Set(e.map(e=>e.uuid)),n=r.filter(e=>!a.has(e.id)),l=e.map(e=>e.uuid).filter(e=>!r.some(t=>t.id===e)),i=n.map(e=>({...sp.find(t=>t.uuid===e.id)||{uuid:e.id,name:e.id,type:e.id.startsWith("mamba_")?"ETL":"SQL",joinType:"JOIN"},enabled:!0,order:u+n.findIndex(t=>t.id===e.id)}));t([...e.filter(e=>!l.includes(e.uuid)),...i])},disabled:r||c,size:"sm",selectionFeedback:"fixed"}),m&&n().createElement("div",{className:"-esm-report-builder__population-source-selector__error___bQ4dv"},"Failed to load tables: ",m)),e.length>0&&n().createElement("div",{className:"-esm-report-builder__population-source-selector__listSection___LEh3Z"},n().createElement("div",{className:"-esm-report-builder__population-source-selector__listHeader___DrC+F"},n().createElement("h5",{className:"-esm-report-builder__population-source-selector__listTitle___cBpkm"},"Selected Sources (",E," enabled)"),E<e.length&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>t(e.map(e=>({...e,enabled:!0}))),disabled:r},"Enable All")),n().createElement(o.BJc,{gap:2},e.sort((e,t)=>e.order-t.order).map((a,d)=>n().createElement("div",{key:a.uuid,className:`-esm-report-builder__population-source-selector__sourceCard___lhHkf ${!a.enabled?"-esm-report-builder__population-source-selector__sourceCardDisabled___05itb":""}`,"data-join-type":a.joinType},n().createElement("div",{className:"-esm-report-builder__population-source-selector__cardHeader___hJig+"},n().createElement("div",{className:"-esm-report-builder__population-source-selector__cardInfo___Plc8O"},n().createElement(o.vwO,{type:a.enabled?(e=>{switch(e){case"JOIN":case"LEFT_JOIN":return"blue";case"INTERSECT":return"green";case"UNION":return"purple";case"EXCEPT":return"red";default:return"gray"}})(a.joinType):"gray",size:"sm"},a.joinType),n().createElement("span",{className:"-esm-report-builder__population-source-selector__dsName___veHbk"},a.name),n().createElement(o.vwO,{type:"cool-gray",size:"sm"},a.type)),n().createElement("div",{className:"-esm-report-builder__population-source-selector__cardActions___a3fnQ"},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.rX,iconDescription:"Move up",onClick:()=>{var r;let n,l;return r=a.uuid,void((l=(n=[...e]).findIndex(e=>e.uuid===r))>0&&([n[l-1],n[l]]=[n[l],n[l-1]],n.forEach((e,t)=>e.order=t),t(n)))},disabled:r||0===d}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.yQ,iconDescription:"Move down",onClick:()=>{var r;let n,l;return r=a.uuid,void((l=(n=[...e]).findIndex(e=>e.uuid===r))<n.length-1&&([n[l],n[l+1]]=[n[l+1],n[l]],n.forEach((e,t)=>e.order=t),t(n)))},disabled:r||d===e.length-1}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.bm,iconDescription:"Remove",onClick:()=>{var r;return r=a.uuid,void(t(e.filter(e=>e.uuid!==r)),i===r&&s(null))},disabled:r}))),n().createElement("div",{className:"-esm-report-builder__population-source-selector__cardControls___mhn2x"},n().createElement("div",{className:"-esm-report-builder__population-source-selector__controlRow___dvItb"},n().createElement(o.lMk,{id:`enable-${a.uuid}`,labelText:"Enabled",toggled:a.enabled,onToggle:e=>g(a.uuid,{enabled:e}),disabled:r,size:"sm"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>{var e;s(i===(e=a.uuid)?null:e)},disabled:r},i===a.uuid?"Hide Options":"Show Options")),i===a.uuid&&n().createElement("div",{className:"-esm-report-builder__population-source-selector__expandedOptions___h6VNd"},n().createElement("div",{className:su},n().createElement(o.l6P,{id:`join-type-${a.uuid}`,labelText:"Join Type",value:a.joinType,onChange:e=>g(a.uuid,{joinType:e.target.value}),disabled:r||!a.enabled,size:"sm"},s_.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label,title:e.description})))),("JOIN"===a.joinType||"LEFT_JOIN"===a.joinType)&&l&&n().createElement("div",{className:su},n().createElement(o.ksK,{id:`join-condition-${a.uuid}`,labelText:"Custom Join Condition",placeholder:"e.g., a.patient_id = b.patient_id",value:a.joinCondition||"",onChange:e=>g(a.uuid,{joinCondition:e.target.value}),disabled:r||!a.enabled,size:"sm"})),n().createElement("div",{className:"-esm-report-builder__population-source-selector__optionDescription___nFA9m"},s_.find(e=>e.value===a.joinType)?.description))))))),0===e.length&&n().createElement("div",{className:"-esm-report-builder__population-source-selector__emptyState___doc1n"},n().createElement("p",null,"No population sources selected. Add datasources above to define the patient cohort.")),e.length>0&&n().createElement("div",{className:"-esm-report-builder__population-source-selector__summary___EZxeZ"},n().createElement("span",null,e.length," source",1!==e.length?"s":""," selected"),n().createElement("span",null,E," enabled"),E>1&&n().createElement("span",null,"Order matters for INTERSECT/EXCEPT operations"))))},sE="-esm-report-builder__concept-selector__detailRow___cSddw",sf="-esm-report-builder__concept-selector__detailLabel___f0XAS",sb="-esm-report-builder__concept-selector__detailValue___ozuUf",sy=({selectedConcept:e,onSelect:t,onClear:r,disabled:l=!1,placeholder:i="Type to search concepts...",label:s="Search concepts",showAdvanced:d=!1,openKey:c=0})=>{let[m,u]=(0,a.useState)(""),[p,_]=(0,a.useState)(0);(0,a.useEffect)(()=>{u(""),_(e=>e+1)},[c]);let{loading:g,results:E,error:f}=tG(m),b=n().useMemo(()=>{let t=[...E];return e&&(E.some(t=>t.uuid===e.uuid)||t.unshift(e)),t},[E,e]),y=(0,a.useCallback)(e=>{u(e.target.value)},[]),h=(0,a.useCallback)(e=>{e.length>0&&t(e[0])},[t]),v=(0,a.useCallback)(()=>{r?.(),u("")},[r]),S=(0,a.useCallback)(e=>{if(!e)return"";let t=e.conceptClass?.name||"";return t?`${e.display} (${t})`:e.display},[]);return n().createElement("div",{className:"-esm-report-builder__concept-selector__container___DvAQ9"},n().createElement(o.BJc,{gap:4},d&&n().createElement("div",{className:"-esm-report-builder__concept-selector__header___Dj1OB"},n().createElement("div",{className:"-esm-report-builder__concept-selector__headerTitle___QWz48"},n().createElement(tw.$$,{size:16}),n().createElement("h4",null,"Select Concept")),n().createElement("p",{className:"-esm-report-builder__concept-selector__headerDescription___IqW9S"},"Search for an OpenMRS concept to use for this column. Concepts define what data to observe or diagnose.")),e&&n().createElement("div",{className:"-esm-report-builder__concept-selector__selectedDisplay___vQBv8"},n().createElement("div",{className:"-esm-report-builder__concept-selector__selectedInfo___ciora"},n().createElement("span",{className:"-esm-report-builder__concept-selector__selectedLabel___jp3V3"},"Selected:"),n().createElement(o.vwO,{type:"blue",size:"sm"},e.display),n().createElement("span",{className:"-esm-report-builder__concept-selector__selectedMeta___8hqVk"},e.conceptClass?.name)),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.bm,iconDescription:"Clear selection",onClick:v,disabled:l})),n().createElement("div",{className:"-esm-report-builder__concept-selector__searchSection___woEy-"},n().createElement(o.vji,{id:"concept-search",labelText:s,placeholder:i,value:m,onChange:y,size:"lg",disabled:l}),g?n().createElement(o.OuH,{description:"Searching…"}):null,f?n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:f,lowContrast:!0,hideCloseButton:!0}):null,n().createElement(o.Qp5,{key:p,id:"concept-select",titleText:"Select concept",items:b,itemToString:S,placeholder:b.length?"Select a concept…":"No results",helperText:e?"Click to change selection":"Type at least 2 characters to search",onChange:e=>h(e.selectedItems??[]),disabled:l,selectionFeedback:"top",initialSelectedItems:e?[e]:[]}),!e&&!g&&!f&&n().createElement("div",{className:"-esm-report-builder__concept-selector__helperText___muq5h"},n().createElement("p",null,"Type at least 2 characters to search for concepts. You can search by concept name or UUID."),n().createElement("p",{className:"-esm-report-builder__concept-selector__hint___RMczP"},n().createElement("strong",null,"Tip:"),' Use specific terms like "Weight", "HIV Status", or "Diagnosis" for better results.'))),d&&e&&n().createElement("div",{className:"-esm-report-builder__concept-selector__advancedOptions___0NapC"},n().createElement("h5",{className:"-esm-report-builder__concept-selector__advancedTitle___FdaYm"},"Concept Details"),n().createElement(o.BJc,{gap:2},n().createElement("div",{className:sE},n().createElement("span",{className:sf},"UUID:"),n().createElement("span",{className:sb},e.uuid)),n().createElement("div",{className:sE},n().createElement("span",{className:sf},"Data Type:"),n().createElement("span",{className:sb},e.datatype?.name)),n().createElement("div",{className:sE},n().createElement("span",{className:sf},"Class:"),n().createElement("span",{className:sb},e.conceptClass?.name)),e.answers&&e.answers.length>0&&n().createElement("div",{className:sE},n().createElement("span",{className:sf},"Answers:"),n().createElement("div",{className:sb},e.answers.map(e=>n().createElement(o.vwO,{key:e.uuid,type:"gray",size:"sm"},e.display))))))))},sh=[{value:"ANY",label:"Any",description:"Return all observation values"},{value:"FIRST",label:"First",description:"Earliest observation by date"},{value:"MOST_RECENT",label:"Most Recent",description:"Most recent observation by date"},{value:"FIRST_N",label:"First #",description:"First N observations by date"},{value:"MOST_RECENT_N",label:"Most Recent #",description:"Most recent N observations"}],sv=[{value:"obsDatetime",label:"Obs Datetime",description:"Include observation date/time"},{value:"location",label:"Location",description:"Include observation location"},{value:"comment",label:"Comment",description:"Include observation comment"},{value:"encounterType",label:"Encounter Type",description:"Include encounter type"},{value:"provider",label:"Provider",description:"Include provider who made the observation"}],sS=({open:e,onClose:t,onAddColumn:r,existingColumns:l=[],editingColumn:i=null})=>{let[s,d]=(0,a.useState)(0),[c,m]=(0,a.useState)(),[u,p]=(0,a.useState)(""),[_,g]=(0,a.useState)(""),[E,f]=(0,a.useState)("MOST_RECENT"),[b,y]=(0,a.useState)(1),[h,v]=(0,a.useState)(!0),[S,T]=(0,a.useState)([]),[C,w]=(0,a.useState)(),N=(0,a.useCallback)(()=>{m(void 0),p(""),g(""),f("MOST_RECENT"),y(1),v(!0),T([]),w(void 0)},[]);(0,a.useEffect)(()=>{if(e)if(d(e=>e+1),i){let e=i.dataDefinitionConfig||{};e.conceptUuid||console.warn("⚠️ Missing conceptUuid in dataDefinitionConfig"),e.conceptName||i.name||console.warn("⚠️ Missing conceptName and column name"),e.strategy||console.warn("⚠️ Missing strategy in dataDefinitionConfig");let t="MOST_RECENT",r=e.strategy;"ALL_VALUES"===r?t="ANY":"EARLIEST"===r?t="FIRST":"LATEST"===r?t="MOST_RECENT":"string"==typeof r&&r.startsWith("FIRST_")?t="FIRST_N":"string"==typeof r&&r.startsWith("LAST_")&&(t="MOST_RECENT_N");let a=1;if("string"==typeof r&&r.startsWith("FIRST_")){let e=r.match(/^FIRST_(\d+)$/);e&&(a=parseInt(e[1])||1)}else if("string"==typeof r&&r.startsWith("LAST_")){let e=r.match(/^LAST_(\d+)$/);e&&(a=parseInt(e[1])||1)}m(i.source?.conceptUuid?{uuid:i.source.conceptUuid,display:e.conceptName||i.name,datatype:{name:i.source?.fieldType||"TEXT"},conceptClass:void 0}:void 0),p(i.name||""),g(i.description||""),f(e.columnModifier||t),y(e.modifierCount||a),v(!1!==e.returnDisplay),T(e.extraValues||[]),w(e.answerConceptUuid?{uuid:e.answerConceptUuid,display:e.answerConceptName||""}:void 0)}else N()},[e,i,N]);let I=(0,a.useCallback)(()=>{N(),t()},[N,t]),k=(0,a.useCallback)(e=>{m(e),u||p(e.display),_||g(e.display)},[u,_]),A=(0,a.useCallback)((e,t)=>{let r=t.target.checked;T(t=>r?[...t,e]:t.filter(t=>t!==e))},[]),R=(0,a.useCallback)(()=>{let e;if(!c||!u?.trim()||l.some(e=>e.id!==i?.id&&e.name.toLowerCase()===u.toLowerCase()))return;let t=new Date().toISOString(),a="LATEST";switch(E){case"ANY":e="ALL_VALUES",a="NONE";break;case"FIRST":e="EARLIEST",a="EARLIEST";break;case"MOST_RECENT":default:e="LATEST",a="LATEST";break;case"FIRST_N":e=`FIRST_${b}`,a="EARLIEST";break;case"MOST_RECENT_N":e=`LAST_${b}`,a="LATEST"}let n={id:i?.id||`col-${t}-${c.uuid}`,name:u.trim(),description:_.trim()||c.display,source:{dataSourceUuid:"observations",dataSourceName:"Observations",table:"observations",field:c.uuid,fieldType:c.datatype?.name||"TEXT",conceptUuid:c.uuid},dataDefinitionType:"OBSERVATION",dataDefinitionConfig:{conceptUuid:c.uuid,conceptName:c.display,strategy:e,columnModifier:E,modifierCount:"FIRST_N"===E||"MOST_RECENT_N"===E?b:void 0,returnDisplay:h,extraValues:S,...C&&{answerConceptUuid:C.uuid}},additionInfo:{addedVia:i?.additionInfo?.addedVia||"VISUAL_SELECTOR",addedAt:i?.additionInfo?.addedAt||t,orderAdded:i?.additionInfo?.orderAdded||l.length},display:i?.display||{width:150,align:"left",sortable:!0,filterable:!0,format:"coded"},sortOrder:i?.sortOrder??l.length,repeatResolution:"ANY"===E?void 0:{strategy:a,orderBy:"obs_datetime",restrictToPeriod:!0,ignoreVoided:!0}};r(n),I()},[c,u,_,E,b,h,S,C,l,r,I,i]),O=c&&u?.trim();return n().createElement(o.aFV,{open:e,onRequestClose:I,modalHeading:i?"Edit Observation Column":"Add Observation Column",modalLabel:"Data Catalogue",size:"md",preventCloseOnClickOutside:!0,primaryButtonText:i?"Save Changes":"Add Column",primaryButtonDisabled:!O,onRequestSubmit:R,secondaryButtonText:"Cancel",onSecondarySubmit:I},n().createElement("div",{className:"-esm-report-builder__observation-column-modal__content___pe9g4"},n().createElement(o.BJc,{gap:6},n().createElement(sy,{key:s,openKey:s,selectedConcept:c,onSelect:k,onClear:()=>m(void 0),label:"Search for Concept",placeholder:"Type to search for concepts (e.g., Weight, Temperature, HIV Status)...",showAdvanced:!1}),c&&n().createElement(o.gE_,{legendText:"Column Configuration"},n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"observation-column-name",labelText:"Column Name *",placeholder:"Enter display name for this column",value:u,onChange:e=>p(e.target.value)}),n().createElement(o.ksK,{id:"observation-column-value",labelText:"Column Value",placeholder:"Description for the column value",value:_,onChange:e=>g(e.target.value)}),n().createElement(o.l6P,{id:"observation-column-modifier",labelText:"Column Modifier",value:E,onChange:e=>f(e.target.value)},sh.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label,title:e.description}))),("FIRST_N"===E||"MOST_RECENT_N"===E)&&n().createElement(o.ksK,{id:"observation-modifier-count",labelText:"Number of Values",type:"number",min:1,max:100,value:b.toString(),onChange:e=>y(parseInt(e.target.value)||1)}),n().createElement(o.lMk,{id:"observation-return-display",labelText:"Return concept display name instead of UUID",toggled:h,onToggle:e=>v(e),size:"sm"}),n().createElement("div",null,n().createElement("label",{className:"-esm-report-builder__observation-column-modal__extraValuesLabel___9ie9M"},"Extra Values"),n().createElement(o.BJc,{gap:2,className:"-esm-report-builder__observation-column-modal__extraValuesGrid___Yvzg+"},sv.map(e=>n().createElement(o.Sc0,{key:e.value,id:`extra-${e.value}`,labelText:e.label,checked:S.includes(e.value),onChange:t=>A(e.value,t),title:e.description})))),(c.answers&&c.answers.length>0||C)&&n().createElement("div",null,C&&(!c.answers||0===c.answers.length)&&n().createElement("div",{style:{marginBottom:"0.5rem",fontSize:"0.875rem",opacity:.9}},n().createElement("strong",null,"Filter by Answer:")," ",C.display||C.uuid,n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>w(void 0),style:{marginLeft:"0.5rem"}},"Clear")),c.answers&&c.answers.length>0&&n().createElement(o.l6P,{id:"observation-answer-concept",labelText:"Filter by Answer (Optional)",value:C?.uuid||"",onChange:e=>{w(c.answers?.find(t=>t.uuid===e.target.value))}},n().createElement(o.ebT,{value:"",text:"All answers"}),c.answers.map(e=>n().createElement(o.ebT,{key:e.uuid,value:e.uuid,text:e.display})))))))))},sT=[{value:"ALL_VALUES",label:"All Values",description:"Return all diagnoses as comma-separated list"},{value:"LATEST",label:"Latest",description:"Most recent diagnosis"},{value:"FIRST_WITHIN_PERIOD",label:"First in Period",description:"First diagnosis within reporting period"},{value:"LAST_WITHIN_PERIOD",label:"Last in Period",description:"Last diagnosis within reporting period"}],sC=[{value:"PRIMARY",label:"Primary Only",description:"Only primary diagnoses"},{value:"SECONDARY",label:"Secondary Only",description:"Only secondary diagnoses"},{value:"ANY",label:"Any",description:"Both primary and secondary diagnoses"}],sw=({open:e,onClose:t,onAddColumn:r,existingColumns:l=[],editingColumn:i=null})=>{let[s,d]=(0,a.useState)(0),[c,m]=(0,a.useState)(),[u,p]=(0,a.useState)(""),[_,g]=(0,a.useState)("LAST_WITHIN_PERIOD"),[E,f]=(0,a.useState)("ANY"),[b,y]=(0,a.useState)(!0),[h,v]=(0,a.useState)(!0),S=(0,a.useCallback)(()=>{m(void 0),p(""),g("LAST_WITHIN_PERIOD"),f("ANY"),y(!0),v(!0)},[]);(0,a.useEffect)(()=>{if(e)if(d(e=>e+1),i){let e=i.dataDefinitionConfig||{};m(i.source?.conceptUuid?{uuid:i.source.conceptUuid,display:e.conceptName||i.name,datatype:{name:i.source?.fieldType||"TEXT"}}:void 0),p(i.name||""),g(e.strategy||"LAST_WITHIN_PERIOD"),f(e.rank||"ANY"),y(!1!==e.confirmedOnly),v(!1!==e.returnDisplay)}else S()},[e,i,S]);let T=(0,a.useCallback)(()=>{S(),t()},[S,t]),C=(0,a.useCallback)(e=>{m(e),u||p(e.display)},[u]),w=(0,a.useCallback)(()=>{let e=u?.trim()||c?.display||"Diagnoses";if(l.some(t=>t.id!==i?.id&&t.name.toLowerCase()===e.toLowerCase()))return;let t=new Date().toISOString();r({id:i?.id||`col-${t}-${c?.uuid||"all-diagnoses"}`,name:e,description:i?.description||(c?`Diagnosis: ${c.display}`:"All encounter diagnoses"),source:{dataSourceUuid:"encounter_diagnoses",dataSourceName:"Encounter Diagnoses",table:"encounter_diagnoses",field:c?.uuid||"*",fieldType:"TEXT",conceptUuid:c?.uuid},dataDefinitionType:"ENCOUNTER_DIAGNOSIS",dataDefinitionConfig:{conceptUuid:c?.uuid,conceptName:c?.display,rank:E,confirmedOnly:b,strategy:_,returnDisplay:h},additionInfo:{addedVia:i?.additionInfo?.addedVia||"VISUAL_SELECTOR",addedAt:i?.additionInfo?.addedAt||t,orderAdded:i?.additionInfo?.orderAdded||l.length},display:i?.display||{width:150,align:"left",sortable:!0,filterable:!0,format:"coded"},sortOrder:i?.sortOrder??l.length,repeatResolution:{strategy:"ALL_VALUES"===_?"NONE":"LATEST",orderBy:"encounter_date",restrictToPeriod:!0,ignoreVoided:!0}}),T()},[c,u,_,E,b,h,l,r,T,i]),N=u?.trim();return n().createElement(o.aFV,{open:e,onRequestClose:T,modalHeading:i?"Edit Diagnosis Column":"Add Diagnosis Column",modalLabel:"Data Catalogue",size:"md",preventCloseOnClickOutside:!0,primaryButtonText:i?"Save Changes":"Add Column",primaryButtonDisabled:!N,onRequestSubmit:w,secondaryButtonText:"Cancel",onSecondarySubmit:T},n().createElement("div",{className:"-esm-report-builder__encounter-diagnosis-column-modal__content___H9xGm"},n().createElement(o.BJc,{gap:6},n().createElement("div",{className:"-esm-report-builder__encounter-diagnosis-column-modal__conceptSection___jMZIp"},n().createElement("div",{className:"-esm-report-builder__encounter-diagnosis-column-modal__conceptSectionHeader___hP0U0"},n().createElement("p",{className:"-esm-report-builder__encounter-diagnosis-column-modal__helperText___oKLdn"},'Leave empty to capture ALL encounter diagnoses, or search for a specific diagnosis condition (e.g., "Malaria", "HIV", "TB").')),n().createElement(sy,{key:s,openKey:s,selectedConcept:c,onSelect:C,onClear:()=>m(void 0),label:"Search for Diagnosis Concept",placeholder:"Type to search for diagnosis concepts...",showAdvanced:!1})),n().createElement(o.gE_,{legendText:"Column Configuration"},n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"diagnosis-column-name",labelText:"Column Name *",placeholder:"Enter display name for this column",value:u,onChange:e=>p(e.target.value)}),n().createElement(o.l6P,{id:"diagnosis-rank",labelText:"Diagnosis Rank",value:E,onChange:e=>f(e.target.value)},sC.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label,title:e.description}))),n().createElement(o.l6P,{id:"diagnosis-strategy",labelText:"Strategy for Multiple Diagnoses",value:_,onChange:e=>g(e.target.value)},sT.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label,title:e.description}))),n().createElement(o.lMk,{id:"diagnosis-confirmed-only",labelText:"Only include confirmed diagnoses",toggled:b,onToggle:e=>y(e),size:"sm"}),n().createElement(o.lMk,{id:"diagnosis-return-display",labelText:"Return concept display name instead of UUID",toggled:h,onToggle:e=>v(e),size:"sm"}))))))},sN={catalogue:"-esm-report-builder__data-catalogue__catalogue___pZUfl",populationSourcesSection:"-esm-report-builder__data-catalogue__populationSourcesSection___xJEns",datasetControls:"-esm-report-builder__data-catalogue__datasetControls___tAboY",etlIndicator:"-esm-report-builder__data-catalogue__etlIndicator___2MnnJ",etlTypeBadge:"-esm-report-builder__data-catalogue__etlTypeBadge___rGrpN",etlTypeIcon:"-esm-report-builder__data-catalogue__etlTypeIcon___9nBQ+",etlTypeLabel:"-esm-report-builder__data-catalogue__etlTypeLabel___k0YSe",etlDescription:"-esm-report-builder__data-catalogue__etlDescription___+6C+Y",etlHint:"-esm-report-builder__data-catalogue__etlHint___FlQWL",dropdown:"-esm-report-builder__data-catalogue__dropdown___5gNZQ",controls:"-esm-report-builder__data-catalogue__controls___4MUCu",toggleContainer:"-esm-report-builder__data-catalogue__toggleContainer___SaD2h",actionButtons:"-esm-report-builder__data-catalogue__actionButtons___c2wiE",customColumnSection:"-esm-report-builder__data-catalogue__customColumnSection___2v6jm",empty:"-esm-report-builder__data-catalogue__empty___E5VTP",loading:"-esm-report-builder__data-catalogue__loading___cyncT",fieldGroups:"-esm-report-builder__data-catalogue__fieldGroups___p+v5m",accordion:"-esm-report-builder__data-catalogue__accordion___8juo8",groupHeader:"-esm-report-builder__data-catalogue__groupHeader___nUsJO",groupIcon:"-esm-report-builder__data-catalogue__groupIcon___lb0kc",groupName:"-esm-report-builder__data-catalogue__groupName___Tea3A",fieldList:"-esm-report-builder__data-catalogue__fieldList___uXn3i",fieldItem:"-esm-report-builder__data-catalogue__fieldItem___celmC",fieldActions:"-esm-report-builder__data-catalogue__fieldActions___7qEPl",fieldInfo:"-esm-report-builder__data-catalogue__fieldInfo___+qTtN",fieldName:"-esm-report-builder__data-catalogue__fieldName___d7l4S",fieldMeta:"-esm-report-builder__data-catalogue__fieldMeta___eubsJ",summary:"-esm-report-builder__data-catalogue__summary___Rg0-y"},sI=[{id:"demographics",name:"Demographics",description:"Patient demographic information",fieldPatterns:["given_name","family_name","person_name","sex","gender","birth_date","age","death_date"],icon:P.KJ},{id:"api-person-attributes",name:"Person Attributes",description:"Custom person attributes from OpenMRS (Telephone, Civil Status, etc.)",fieldPatterns:[],icon:f.vw,isApiDriven:!0},{id:"openmrs-calculated",name:"Calculated Fields",description:"Fields calculated from other data",fieldPatterns:["age","bmi"],icon:m.zt},{id:"api-patient-identifiers",name:"Patient Identifiers",description:"Patient identification numbers from OpenMRS (Clinic No, National ID, etc.)",fieldPatterns:[],icon:s.vG,isApiDriven:!0},{id:"api-observations",name:"Observations",description:"Clinical observations from OpenMRS based on concepts (e.g., Weight, Height, Temperature)",fieldPatterns:[],icon:"\uD83D\uDCCA",isApiDriven:!0,isConceptBased:!0},{id:"api-encounter-diagnoses",name:"Encounter Diagnoses",description:"Diagnoses from OpenMRS encounters based on concepts (ICD coded conditions)",fieldPatterns:[],icon:"\uD83C\uDFE5",isApiDriven:!0,isConceptBased:!0},{id:"openmrs-person-name",name:"Person Name",description:"Patient name components",fieldPatterns:["given_name","family_name","middle_name","person_name"],icon:P.KJ},{id:"openmrs-address",name:"Address & Contact",description:"Address and contact information",fieldPatterns:["address","address1","address2","address3","address4","address5","village","parish","subcounty","county","district","state","stateProvince","countyDistrict","city","cityVillage","phone","telephone"],icon:"\uD83D\uDCCD"},{id:"addresses",name:"Addresses & Contacts",description:"Patient address and contact information",fieldPatterns:["address","address1","address2","address3","address4","address5","city","village","parish","subcounty","county","district","state","stateProvince","countyDistrict","country","phone","telephone","email"],icon:"\uD83D\uDCCD"},{id:"encounters",name:"Encounters & Visits",description:"Encounter and visit information",fieldPatterns:["encounter","visit","visit_date","encounter_date","encounter_type","location"],icon:"\uD83C\uDFE5"},{id:"observations",name:"Observations",description:"Clinical observations and vitals",fieldPatterns:["obs","observation","value","concept","weight","height","bmi","temperature","blood_pressure"],icon:"\uD83D\uDCCA"},{id:"programs",name:"Programs & Enrollments",description:"Program enrollment and status",fieldPatterns:["program","enrollment","enrol","program_enrollment","regimen","art","hiv","tb"],icon:"\uD83D\uDCCB"},{id:"appointments",name:"Appointments",description:"Scheduled appointments",fieldPatterns:["appointment","return_visit","appointment_date","fulfillment","scheduled"],icon:"\uD83D\uDCC5"},{id:"laboratory",name:"Laboratory",description:"Lab results and orders",fieldPatterns:["lab","laboratory","test","result","specimen","order_date","result_date"],icon:"\uD83D\uDD2C"},{id:"medications",name:"Medications",description:"Drug prescriptions and dispenses",fieldPatterns:["drug","medication","prescription","dispense","regimen","dose"],icon:"\uD83D\uDC8A"}],sk=[{id:"openmrs.calc.age",name:"age",label:"Age",type:"NUMBER",source:"CALCULATION",table:"person",isRepeated:!1,description:"Age in years (as of report end date)"},{id:"openmrs.calc.age_months",name:"age_months",label:"Age (Months)",type:"NUMBER",source:"CALCULATION",table:"person",isRepeated:!1,description:"Age in months (as of report end date)"},{id:"openmrs.calc.age_years",name:"age_years",label:"Age (Years)",type:"NUMBER",source:"CALCULATION",table:"person",isRepeated:!1,description:"Age in whole years (as of report end date)"},{id:"openmrs.calc.bmi",name:"bmi",label:"BMI",type:"NUMBER",source:"CALCULATION",table:"person",isRepeated:!1,description:"Body Mass Index"}],sA=[{id:"openmrs.person.given_name",name:"given_name",label:"Given Name",type:"TEXT",source:"CORE",table:"person",isRepeated:!1,description:"Patient given name"},{id:"openmrs.person.family_name",name:"family_name",label:"Family Name",type:"TEXT",source:"CORE",table:"person",isRepeated:!1,description:"Patient family name/surname"},{id:"openmrs.person.full_name",name:"full_name",label:"Full Name",type:"TEXT",source:"CORE",table:"person",isRepeated:!1,description:"Complete patient name"},{id:"openmrs.person.gender",name:"gender",label:"Gender",type:"CODED",source:"CORE",table:"person",isRepeated:!1,description:"Patient gender"},{id:"openmrs.person.birthdate",name:"birthdate",label:"Birth Date",type:"DATE",source:"CORE",table:"person",isRepeated:!1,description:"Patient birth date"},{id:"openmrs.person.death_date",name:"death_date",label:"Death Date",type:"DATE",source:"CORE",table:"person",isRepeated:!1,description:"Patient death date"}],sR=({table:e,dataSources:t,populationSources:l,onPopulationSourcesChange:i,showPopulationSelector:s=!0,onAddToColumns:d,onAddToFilters:c,onFieldsAvailable:m,onEtlStructureDetected:u,selectedFields:p=[],disabled:_=!1,onAddCustomSqlColumn:g,onAddDraftColumn:E,idColumnAlias:f="patient_id"})=>{let[b,y]=(0,a.useState)(""),[h,v]=(0,a.useState)(!1),[S,T]=(0,a.useState)(new Set),[C,w]=(0,a.useState)(null),[N,I]=(0,a.useState)(!1),[k,A]=(0,a.useState)(!1),[R,O]=(0,a.useState)(!1),[D,x]=(0,a.useState)([]),[L,M]=(0,a.useState)([]),[$,P]=(0,a.useState)(!0),[U,B]=(0,a.useState)(null),[F,z]=(0,a.useState)([]),{addressFields:q}=function(){let{template:e,loading:t}=function(){let[e,t]=(0,a.useState)(null),[r,n]=(0,a.useState)(!0),[l,i]=(0,a.useState)(null),o=async()=>{n(!0),i(null);try{let e=await ss();t(e)}catch(e){i(e instanceof Error?e:Error("Failed to fetch address template"))}finally{n(!1)}};return(0,a.useEffect)(()=>{o()},[]),{template:e,loading:r,error:l,refresh:o}}();return{addressFields:e?.nameMappings.map(e=>({id:`openmrs.person_address.${e.field}`,name:e.field,label:e.display,type:"TEXT",source:"CORE",table:"person_address",isRepeated:!1,description:e.label}))||[],loading:t}}(),j=(0,a.useMemo)(()=>t||(e?[{uuid:e,name:e,type:"ETL",role:"PRIMARY",tables:[]}]:[]),[t,e]),H=j.find(e=>"PRIMARY"===e.role),J=H?.uuid||e||"",G=H?.name||"",{columns:V,loading:W,error:K}=is(J,!!J);(0,a.useEffect)(()=>{(async()=>{try{P(!0),B(null);let[e,t]=await Promise.all([nn(!0),na(!0)]);x(e),M(t)}catch(e){console.error("Failed to fetch person attributes/identifiers:",e),B("Failed to load person attributes and identifiers from server")}finally{P(!1)}})()},[]);let Q=(0,a.useMemo)(()=>{let e={};return sI.forEach(t=>{e[t.id]=[]}),e.uncategorized=[],e["openmrs-calculated"]=sk,e.demographics=sA,e["openmrs-address"]=q,e["api-person-attributes"]=D.filter(e=>!e.retired).map(e=>({id:`person-attribute-${e.uuid}`,name:e.uuid,label:e.display||e.name||e.uuid,type:"TEXT",source:"CORE",table:"person_attribute",isRepeated:!1,description:e.description||"Custom person attribute"})),e["api-patient-identifiers"]=L.filter(e=>!e.retired).map(e=>({id:`patient-identifier-${e.uuid}`,name:e.uuid,label:e.display||e.name||e.uuid,type:"TEXT",source:"CORE",table:"patient_identifier",isRepeated:!0,description:e.description||"Patient identifier"})),e["api-observations"]=[],e["api-encounter-diagnoses"]=[],V&&V.length>0&&V.forEach(t=>{var r;let a,n=function(e){let t=e.toLowerCase();for(let e of sI)for(let r of e.fieldPatterns)if(t.includes(r.toLowerCase()))return e.id;return null}(t.name)||"uncategorized";if("demographics"===n||"openmrs-calculated"===n)return;let l={id:`${J}.${t.name}`,name:t.name,label:t.name.toLowerCase().replace(/[_\s]+/g," ").replace(/\b\w/g,e=>e.toUpperCase()),type:function(e){if(!e)return"TEXT";let t=e.toLowerCase();return t.includes("int")||t.includes("serial")||t.includes("bigint")||t.includes("decimal")||t.includes("numeric")||t.includes("float")||t.includes("double")?"NUMBER":t.includes("date")||t.includes("time")||t.includes("timestamp")?"DATE":t.includes("bool")||t.includes("bit")?"BOOLEAN":"TEXT"}(t.type),source:(r=t.name,r.includes("age")||r.includes("bmi")?"CALCULATION":J.includes("_etl")||J.includes("_fact")||J.includes("_dim")?"ETL":"CORE"),table:J,isRepeated:(a=t.name.toLowerCase(),["appointment","visit","encounter","obs","observation","lab","test","result","program","enrollment","drug","medication","regimen"].some(e=>a.includes(e))),dataSourceUuid:j.find(e=>e.uuid===J)?.uuid||J,dataSourceName:j.find(e=>e.uuid===J)?.name||J};e[n].push(l)}),e},[V,J,D,L,j,q]);(0,a.useEffect)(()=>{m&&m(Object.values(Q).flat())},[Q,m]),(0,a.useEffect)(()=>{J&&V&&0!==V.length&&r.e("2408").then(r.bind(r,8715)).then(({detectEtlStructure:e})=>{let t=e(J,V.map(e=>e.name));w(t),u&&u(t)})},[J,V,u]);let Y=(0,a.useMemo)(()=>{let e=Q,t=new Set(p);if(!h&&t.size>0){let r={};Object.entries(Q).forEach(([e,a])=>{let n=a.filter(e=>!t.has(e.id));n.length>0&&(r[e]=n)}),e=r}else if(h){let r={};Object.entries(Q).forEach(([e,a])=>{let n=a.filter(e=>t.has(e.id));n.length>0&&(r[e]=n)}),e=r}if(b){let t=b.toLowerCase(),r={};Object.entries(e).forEach(([e,a])=>{let n=a.filter(e=>e.name.toLowerCase().includes(t)||e.label.toLowerCase().includes(t));n.length>0&&(r[e]=n)}),e=r}return e},[Q,b,h,p]),X=(0,a.useCallback)((e,t)=>{t?.stopPropagation(),T(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),Z=(0,a.useCallback)(()=>{T(new Set(Object.keys(Y)))},[Y]),ee=(0,a.useCallback)(()=>{T(new Set)},[]),et=W||$,er=K||U,ea=Object.values(Y).reduce((e,t)=>e+t.length,0);return n().createElement("div",{className:sN.catalogue},s&&i&&n().createElement("div",{className:sN.populationSourcesSection},n().createElement(sg,{populationSources:l??F,onChange:e=>{z(e),i&&i(e)},disabled:_,showAdvanced:!1})),C&&n().createElement("div",{className:sN.etlIndicator},n().createElement("div",{className:sN.etlTypeBadge},n().createElement("span",{className:sN.etlTypeIcon},"VERTICAL"===C.type?"\uD83D\uDCCA":"\uD83D\uDCCB"),n().createElement("span",{className:sN.etlTypeLabel},"VERTICAL"===C.type?"Vertical ETL":"Horizontal ETL")),n().createElement("div",{className:sN.etlDescription},"VERTICAL"===C.type?n().createElement(n().Fragment,null,"Data stored in long format. Filter by"," ",n().createElement("strong",null,C.dataIdentifierColumn||"concept")," to select specific data points."):n().createElement(n().Fragment,null,"Data stored in wide format. Columns are directly selectable data points.")),"VERTICAL"===C.type&&C.requiredFilters&&n().createElement("div",{className:sN.etlHint},n().createElement("strong",null,"Required filters:")," ",C.requiredFilters.map(e=>e.column).join(", "))),n().createElement("div",{className:sN.controls},n().createElement(o.ksK,{id:"field-search",labelText:"",placeholder:"Search fields...",size:"sm",value:b,onChange:e=>y(e.target.value),disabled:_||et}),n().createElement("div",{className:sN.actionButtons},n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:Z,disabled:_||et},"Expand All"),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:ee,disabled:_||et},"Collapse All"))),g&&n().createElement("div",{className:sN.customColumnSection},n().createElement(o.$nd,{kind:"secondary",size:"sm",onClick:()=>I(!0),disabled:_},"+ Custom SQL Column")),p.length>0&&n().createElement("div",{className:sN.toggleContainer},n().createElement(o.lMk,{id:"show-selected-toggle",labelText:"Show selected only",labelA:"All fields",labelB:"Selected only",toggled:h,onToggle:()=>v(!h),disabled:_||et}),n().createElement(o.vwO,{type:"blue"},p.length," selected")),er&&n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:er,hideCloseButton:!0}),!et&&!er&&0===ea&&n().createElement("div",{className:sN.empty},J?n().createElement("p",null,"No fields found for table: ",J):n().createElement("p",null,"Select a data source to view available fields")),et&&n().createElement("div",{className:sN.loading},"Loading fields..."),!et&&ea>0&&n().createElement("div",{className:sN.fieldGroups},n().createElement(o.nD3,{className:sN.accordion},sI.map(e=>{let t=Y[e.id]||[],r=S.has(e.id);return 0!==t.length||e.isConceptBased?n().createElement(o.AsP,{key:e.id,title:n().createElement("div",{className:sN.groupHeader},n().createElement("span",{className:sN.groupIcon},e.icon&&n().createElement(e.icon,{size:16})),n().createElement("span",{className:sN.groupName},e.name),e.isConceptBased?n().createElement(o.vwO,{size:"sm",type:"blue"},"+"):n().createElement(o.vwO,{size:"sm",type:"gray"},t.length)),open:r,onClick:t=>X(e.id,t)},e.isConceptBased?n().createElement("div",{className:sN.conceptBasedGroupContent},n().createElement("p",{className:sN.conceptBasedDescription},e.description),n().createElement("div",{className:sN.conceptBasedActions},"api-observations"===e.id&&n().createElement(o.$nd,{kind:"primary",size:"sm",onClick:()=>A(!0),disabled:_,renderIcon:null},"+ Add Observation Column"),"api-encounter-diagnoses"===e.id&&n().createElement(o.$nd,{kind:"primary",size:"sm",onClick:()=>O(!0),disabled:_,renderIcon:null},"+ Add Diagnosis Column"))):n().createElement("div",{className:sN.fieldList,onClick:e=>{e.stopPropagation()}},t.map(e=>{let t=p.includes(e.id);return n().createElement("div",{key:e.id,className:sN.fieldItem,"data-selected":t},n().createElement("div",{className:sN.fieldInfo},n().createElement("span",{className:sN.fieldName},e.label),n().createElement("div",{className:sN.fieldMeta},t&&n().createElement(o.vwO,{size:"sm",type:"green"},"Selected"),e.dataSourceName&&n().createElement(o.vwO,{size:"sm",type:"cool-gray"},e.dataSourceName),n().createElement(o.vwO,{size:"sm",type:"blue"},e.type),n().createElement(o.vwO,{size:"sm",type:"gray"},e.source),e.isRepeated&&n().createElement(o.vwO,{size:"sm",type:"purple"},"Repeated")),n().createElement("div",{className:sN.fieldName},e.name)),n().createElement("div",{className:sN.fieldActions},n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:t=>{t.stopPropagation(),d(e)},disabled:_},"+ Column"),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:t=>{t.stopPropagation(),c(e)},disabled:_},"+ Filter")))}))):null}),Y.uncategorized&&Y.uncategorized.length>0&&n().createElement(o.AsP,{key:"uncategorized",title:n().createElement("div",{className:sN.groupHeader},n().createElement("span",{className:sN.groupIcon},"\uD83D\uDCC1"),n().createElement("span",{className:sN.groupName},"Other Fields"),n().createElement(o.vwO,{size:"sm",type:"gray"},Y.uncategorized.length)),open:S.has("uncategorized"),onClick:()=>X("uncategorized")},n().createElement("div",{className:sN.fieldList},Y.uncategorized?.map(e=>{let t=p.includes(e.id);return n().createElement("div",{key:e.id,className:sN.fieldItem,"data-selected":t},n().createElement("div",{className:sN.fieldInfo},n().createElement("span",{className:sN.fieldName},e.label),n().createElement("div",{className:sN.fieldMeta},t&&n().createElement(o.vwO,{size:"sm",type:"green"},"Selected"),e.dataSourceName&&n().createElement(o.vwO,{size:"sm",type:"cool-gray"},e.dataSourceName),n().createElement(o.vwO,{size:"sm",type:"blue"},e.type),n().createElement(o.vwO,{size:"sm",type:"gray"},e.source),e.isRepeated&&n().createElement(o.vwO,{size:"sm",type:"purple"},"Repeated")),n().createElement("div",{className:sN.fieldName},e.name)),n().createElement("div",{className:sN.fieldActions},n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>d(e),disabled:_},"+ Column"),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>c(e),disabled:_},"+ Filter")))}))))),!et&&ea>0&&n().createElement("div",{className:sN.summary},ea," field",1!==ea?"s":""," available"),g&&n().createElement(sm,{open:N,onClose:()=>I(!1),onSave:g,existingColumnNames:[],idColumnAlias:f,primaryDatasourceName:G}),n().createElement(sS,{open:k,onClose:()=>A(!1),onAddColumn:E||(()=>{}),existingColumns:[]}),n().createElement(sw,{open:R,onClose:()=>O(!1),onAddColumn:E||(()=>{}),existingColumns:[]}))};function sO(e,t){let r={...e};if(r.dataSetDefinitions&&r.dataSetDefinitions[0]){let e=r.dataSetDefinitions[0],a=e.columns.map((e,r)=>{let a=t.columns.find(t=>t.name===e.name);return{...e,_metadata:{id:a?.id||`col-${r}`,position:a?.sortOrder??r}}});r.dataSetDefinitions[0]={...e,columns:a}}return r.dataSources&&(r.dataSources=r.dataSources.map(e=>{if(e.columns){let r={};return Object.entries(e.columns).forEach(([e,a])=>{let n=t.columns.find(t=>t.name===e);r[e]={...a,_metadata:{id:n?.id,position:n?.sortOrder}}}),{...e,columns:r}}return e})),r}function sD({draft:e,className:t,indicators:r=[]}){let l,i=(0,a.useMemo)(()=>{let e=new Map;for(let t of r)e.set(t.uuid,{sqlTemplate:t.sqlTemplate,configJson:t.configJson});return e},[r]),s=(0,a.useCallback)(()=>{let t=sO(si(e,i),e);navigator.clipboard.writeText(JSON.stringify(t,null,2))},[e,i]),d=sO(si(e,i),e);return n().createElement("div",{className:`-esm-report-builder__json-preview__preview___vJZ1j ${t||""}`},n().createElement("div",{className:"-esm-report-builder__json-preview__header___bFwek"},n().createElement("div",{className:"-esm-report-builder__json-preview__headerLeft___Ui32b"},n().createElement(c.Cy,{size:16,className:"-esm-report-builder__json-preview__icon___WJbCU"}),n().createElement("span",{className:"-esm-report-builder__json-preview__title___iMvKE"},"Report Configuration JSON")),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:s},"Copy JSON")),n().createElement(o.z7k,{type:"multi",feedback:"Copied!",className:"-esm-report-builder__json-preview__code___1hGdq"},JSON.stringify(d,null,2)),n().createElement("div",{className:"-esm-report-builder__json-preview__validation___UBIL0"},(l=[],0===e.columns.length?l.push(n().createElement(o.vwO,{key:"no-columns",size:"sm",type:"red"},"Missing columns")):l.push(n().createElement(o.vwO,{key:"columns",size:"sm",type:"green"},e.columns.length," columns")),e.dataSourceUuid||l.push(n().createElement(o.vwO,{key:"no-source",size:"sm",type:"red"},"No data source")),"INDICATOR"!==e.populationMode||e.indicatorRules&&0!==e.indicatorRules.length||l.push(n().createElement(o.vwO,{key:"no-indicators",size:"sm",type:"red"},"No indicators selected")),e.unsavedChanges&&l.push(n().createElement(o.vwO,{key:"unsaved",size:"sm",type:"blue"},"Unsaved changes")),l)))}let sx={container:"-esm-report-builder__column-category-selector__container___I1ArE",quickPresets:"-esm-report-builder__column-category-selector__quickPresets___NfkzC",sectionTitle:"-esm-report-builder__column-category-selector__sectionTitle___Wvv-w",presetButtons:"-esm-report-builder__column-category-selector__presetButtons___tjtD0",error:"-esm-report-builder__column-category-selector__error___wVk-E",summary:"-esm-report-builder__column-category-selector__summary___mpOac",summaryText:"-esm-report-builder__column-category-selector__summaryText___9rq3L",categoryHeader:"-esm-report-builder__column-category-selector__categoryHeader___zjlCe",categoryIcon:"-esm-report-builder__column-category-selector__categoryIcon___jTVMG",categoryName:"-esm-report-builder__column-category-selector__categoryName___0FpJF",categoryContent:"-esm-report-builder__column-category-selector__categoryContent___yGlC0",categoryDescription:"-esm-report-builder__column-category-selector__categoryDescription___HsWYd",fieldRow:"-esm-report-builder__column-category-selector__fieldRow___Z+2Zc",fieldDescription:"-esm-report-builder__column-category-selector__fieldDescription___sP2cC",categoryActions:"-esm-report-builder__column-category-selector__categoryActions___yCKdm",columnList:"-esm-report-builder__column-category-selector__columnList___NjSdW",columnItem:"-esm-report-builder__column-category-selector__columnItem___qf2zp",columnPosition:"-esm-report-builder__column-category-selector__columnPosition___AJ9gW",positionNumber:"-esm-report-builder__column-category-selector__positionNumber___MU9Lx",columnInfo:"-esm-report-builder__column-category-selector__columnInfo___v2+a8",columnName:"-esm-report-builder__column-category-selector__columnName___ETZ2b",columnIdTag:"-esm-report-builder__column-category-selector__columnIdTag___xLJE5",columnOrder:"-esm-report-builder__column-category-selector__columnOrder___92IOh",columnActions:"-esm-report-builder__column-category-selector__columnActions___LMHD9",selectedTable:"-esm-report-builder__column-category-selector__selectedTable___hrjf7",emptyState:"-esm-report-builder__column-category-selector__emptyState___+7U0l",loadingText:"-esm-report-builder__column-category-selector__loadingText___5fmqK",emptyText:"-esm-report-builder__column-category-selector__emptyText___qpbzo"},sL=`
326
+ .sql-editor {
327
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;
328
+ font-size: 0.875rem;
329
+ line-height: 1.5;
330
+ }
331
+ .sql-editor textarea {
332
+ tab-size: 2;
333
+ }
334
+ `,sM=[{value:"LATEST",label:"Latest",description:"Use the most recent value"},{value:"EARLIEST",label:"Earliest",description:"Use the earliest value"},{value:"FIRST_WITHIN_PERIOD",label:"First within period",description:"Use the first value within reporting period"},{value:"LAST_WITHIN_PERIOD",label:"Last within period",description:"Use the last value within reporting period"},{value:"ALL_VALUES",label:"All values",description:"Show all values (may change row grain)"}],s$=[{value:"left",label:"Left"},{value:"center",label:"Center"},{value:"right",label:"Right"}],sP=[{value:"text",label:"Text"},{value:"number",label:"Number"},{value:"date",label:"Date"},{value:"datetime",label:"Date & Time"},{value:"boolean",label:"Boolean"},{value:"percentage",label:"Percentage"},{value:"currency",label:"Currency"}],sU=["encounter_date","encounter_datetime","date_created","date_modified"],sB=({open:e,column:t,onSave:r,onClose:l,filterMap:i})=>{let[s,d]=(0,a.useState)(null);if((0,a.useEffect)(()=>{t&&d({...t})},[t,e]),!s)return null;let c="SQL"===s.dataDefinitionType&&/appointment|observation|encounter|program_enrollment|visit/i.test(s.dataDefinitionConfig?.sql||""),m=(e,t)=>{d(r=>r?{...r,[e]:t}:null)},u=(e,t)=>{d(r=>r?{...r,display:{...r.display,[e]:t}}:null)},p=(e,t)=>{d(r=>r?{...r,repeatResolution:{...r.repeatResolution,[e]:t}}:null)};return n().createElement(n().Fragment,null,n().createElement("style",null,sL),n().createElement(o.aFV,{open:e,onRequestClose:l,size:"md",modalHeading:"Edit Column",modalLabel:"Column Configuration",primaryButtonText:"Save Changes",onRequestSubmit:()=>{s&&r(s)},secondaryButtonText:"Cancel"},n().createElement(o.cwr,null,n().createElement(o.BJc,{gap:6},n().createElement("div",null,n().createElement("h4",{className:"cds--label"},"Basic Information"),n().createElement(o.BJc,{gap:4},n().createElement(o.ksK,{id:"column-name",labelText:"Display Name",value:s.name,onChange:e=>m("name",e.target.value),placeholder:"Enter display name"}),n().createElement(o.ksK,{id:"column-description",labelText:"Description",value:s.description||"",onChange:e=>m("description",e.target.value),placeholder:"Enter description (optional)"}))),n().createElement("div",null,n().createElement("h4",{className:"cds--label"},"Display Settings"),n().createElement(o.BJc,{gap:4},n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(o.Q7x,{id:"column-width",label:"Width (px)",value:s.display?.width||150,onChange:e=>{let t=e.target;u("width",t.value?Number(t.value):150)},min:50,max:500,step:10}),n().createElement(o.l6P,{id:"column-align",labelText:"Alignment",value:s.display?.align||"left",onChange:e=>u("align",e.target.value)},s$.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label})))),n().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"}},n().createElement(o.l6P,{id:"column-format",labelText:"Format",value:s.display?.format||"text",onChange:e=>u("format",e.target.value)},sP.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label}))),n().createElement("div",{style:{display:"flex",alignItems:"flex-end",gap:"1rem"}},n().createElement(o.lMk,{id:"column-sortable",labelText:"Sortable",toggled:s.display?.sortable||!1,onToggle:e=>u("sortable",e)}),n().createElement(o.lMk,{id:"column-filterable",labelText:"Filterable",toggled:s.display?.filterable||!1,onToggle:e=>u("filterable",e)}))))),c&&n().createElement("div",{style:{background:"var(--cds-layer-01, #f4f4f4)",padding:"1rem",borderRadius:"8px"}},n().createElement("h4",{className:"cds--label"},"Repeat Resolution"),n().createElement("p",{style:{fontSize:"0.875rem",marginBottom:"1rem",opacity:.9}},"This column may return multiple values per row. Configure how to handle them."),n().createElement(o.BJc,{gap:4},n().createElement(o.l6P,{id:"resolution-strategy",labelText:"Resolution Strategy",value:s.repeatResolution?.strategy||"LATEST",onChange:e=>p("strategy",e.target.value)},sM.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:`${e.label} - ${e.description}`}))),(s.repeatResolution?.strategy==="LATEST"||s.repeatResolution?.strategy==="EARLIEST"||s.repeatResolution?.strategy==="FIRST_WITHIN_PERIOD"||s.repeatResolution?.strategy==="LAST_WITHIN_PERIOD")&&n().createElement(n().Fragment,null,n().createElement(o.l6P,{id:"resolution-orderby",labelText:"Order By Field",value:s.repeatResolution?.orderBy||"encounter_date",onChange:e=>p("orderBy",e.target.value)},sU.map(e=>n().createElement(o.ebT,{key:e,value:e,text:e}))),n().createElement(o.lMk,{id:"resolution-ignore-voided",labelText:"Ignore voided records",toggled:s.repeatResolution?.ignoreVoided!==!1,onToggle:e=>p("ignoreVoided",e)}),n().createElement(o.lMk,{id:"resolution-restrict-period",labelText:"Restrict to time period",toggled:s.repeatResolution?.restrictToPeriod||!1,onToggle:e=>p("restrictToPeriod",e)})))),"SQL"===s.dataDefinitionType&&n().createElement("div",{style:{background:"var(--cds-layer-01, #f4f4f4)",padding:"1rem",borderRadius:"8px"}},n().createElement("h4",{className:"cds--label"},"SQL Definition"),n().createElement("p",{style:{fontSize:"0.875rem",marginBottom:"1rem",opacity:.9}},"Edit the SQL query for this column. Use ",n().createElement("code",null,":patientId")," to reference the current patient."),n().createElement(o.fs1,{id:"column-sql",className:"sql-editor",placeholder:"SELECT field_name FROM table_name WHERE patient_id = :patientId...",value:s.dataDefinitionConfig?.sql||"",onChange:e=>{var t;return t=e.target.value,void d(e=>e?{...e,dataDefinitionConfig:{...e.dataDefinitionConfig,sql:t}}:null)},rows:6,labelText:""}),n().createElement("div",{style:{marginTop:"0.5rem",fontSize:"0.875rem",opacity:.7}},n().createElement("small",null,"Available parameters: "),n().createElement(o.vwO,{size:"sm",type:"blue"},n().createElement("code",null,":patientId")),n().createElement(o.vwO,{size:"sm",type:"blue"},n().createElement("code",null,":startDate")),n().createElement(o.vwO,{size:"sm",type:"blue"},n().createElement("code",null,":endDate")),i&&Object.keys(i).length>0&&n().createElement(n().Fragment,null,n().createElement("small",{style:{marginLeft:"0.5rem"}},"| FilterMap parameters:"),Object.entries(i).map(([e,t])=>n().createElement(o.vwO,{key:e,size:"sm",type:"green"},n().createElement("code",null,":",e),n().createElement("span",{style:{opacity:.7,fontSize:"0.75em"}}," → ",t))))),i&&Object.keys(i).length>0&&n().createElement("div",{style:{marginTop:"0.5rem",fontSize:"0.75rem",opacity:.6}},n().createElement("small",null,"\uD83D\uDCA1 FilterMap parameters allow you to reference specific columns from the base cohort row (e.g., ",n().createElement("code",null,":",Object.keys(i)[0])," for the exact row that matched)"))),n().createElement("div",{style:{fontSize:"0.875rem",opacity:.8}},n().createElement("p",null,n().createElement("strong",null,"Type:")," ",s.dataDefinitionType),s.source?.dataSourceName&&n().createElement("p",null,n().createElement("strong",null,"Source:")," ",s.source.dataSourceName),s.source?.table&&n().createElement("p",null,n().createElement("strong",null,"Table:")," ",s.source.table))))))},sF={debugPanel:"-esm-report-builder__column-debug-panel__debugPanel___zvbb6",header:"-esm-report-builder__column-debug-panel__header___U8qzg",headerTitle:"-esm-report-builder__column-debug-panel__headerTitle___yGmkv",accordion:"-esm-report-builder__column-debug-panel__accordion___cWavn",section:"-esm-report-builder__column-debug-panel__section___xWLtw",row:"-esm-report-builder__column-debug-panel__row___qkZRQ",label:"-esm-report-builder__column-debug-panel__label___PxVGF",value:"-esm-report-builder__column-debug-panel__value___P2qJI",valueEmpty:"-esm-report-builder__column-debug-panel__valueEmpty___3QbIB",codeInline:"-esm-report-builder__column-debug-panel__codeInline___cd113",code:"-esm-report-builder__column-debug-panel__code___38YK3",warning:"-esm-report-builder__column-debug-panel__warning___xPDQE",info:"-esm-report-builder__column-debug-panel__info___lZSW4"};function sz({column:e,onClose:t}){return n().createElement("div",{className:sF.debugPanel},n().createElement("div",{className:sF.header},n().createElement("div",{className:sF.headerTitle},n().createElement(g.wB,{size:16,className:sF.icon}),n().createElement("span",null,"Column Debug Info")),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:t},"Close")),n().createElement(o.nD3,{className:sF.accordion},n().createElement(o.AsP,{title:"Basic Information",open:!0},n().createElement("div",{className:sF.section},n().createElement(sq,{label:"Column ID",value:e.id,type:"uuid"}),n().createElement(sq,{label:"Name",value:e.name}),n().createElement(sq,{label:"Description",value:e.description}),n().createElement(sq,{label:"Position (sortOrder)",value:e.sortOrder?.toString(),type:"number"}),n().createElement(sq,{label:"Data Type",value:e.dataDefinitionType,type:"tag"}))),n().createElement(o.AsP,{title:"Source Information",open:!0},n().createElement("div",{className:sF.section},e.source?n().createElement(n().Fragment,null,n().createElement(sq,{label:"Data Source UUID",value:e.source.dataSourceUuid,type:"uuid"}),n().createElement(sq,{label:"Data Source Name",value:e.source.dataSourceUuid}),n().createElement(sq,{label:"Table",value:e.source.table,type:"code"}),n().createElement(sq,{label:"Field",value:e.source.field,type:"code"}),n().createElement(sq,{label:"Field Type",value:e.source.fieldType,type:"tag"}),e.source.conceptUuid&&n().createElement(sq,{label:"Concept UUID",value:e.source.conceptUuid,type:"uuid"}),e.source.attributeTypeUuid&&n().createElement(sq,{label:"Attribute Type UUID",value:e.source.attributeTypeUuid,type:"uuid"}),e.source.identifierTypeUuid&&n().createElement(sq,{label:"Identifier Type UUID",value:e.source.identifierTypeUuid,type:"uuid"})):n().createElement("div",{className:sF.warning},n().createElement(tw.$$,{size:16}),n().createElement("span",null,"No source information available")))),n().createElement(o.AsP,{title:"Data Definition Config",open:!1},n().createElement("div",{className:sF.section},e.dataDefinitionConfig?n().createElement("pre",{className:sF.code},JSON.stringify(e.dataDefinitionConfig,null,2)):n().createElement("div",{className:sF.warning},n().createElement(tw.$$,{size:16}),n().createElement("span",null,"No data definition config available")))),n().createElement(o.AsP,{title:"Repeat Resolution",open:!1},n().createElement("div",{className:sF.section},e.repeatResolution?n().createElement(n().Fragment,null,n().createElement(sq,{label:"Strategy",value:e.repeatResolution.strategy}),n().createElement(sq,{label:"Order By",value:e.repeatResolution.orderBy}),n().createElement(sq,{label:"Restrict to Period",value:e.repeatResolution.restrictToPeriod?.toString(),type:"boolean"}),n().createElement(sq,{label:"Ignore Voided",value:e.repeatResolution.ignoreVoided?.toString(),type:"boolean"})):n().createElement("div",{className:sF.info},n().createElement(tw.$$,{size:16}),n().createElement("span",null,"No repeat resolution configured")))),n().createElement(o.AsP,{title:"Display Settings",open:!1},n().createElement("div",{className:sF.section},e.display?n().createElement(n().Fragment,null,n().createElement(sq,{label:"Width",value:e.display.width?.toString(),type:"number"}),n().createElement(sq,{label:"Align",value:e.display.align}),n().createElement(sq,{label:"Sortable",value:e.display.sortable?.toString(),type:"boolean"}),n().createElement(sq,{label:"Filterable",value:e.display.filterable?.toString(),type:"boolean"}),n().createElement(sq,{label:"Format",value:e.display.format})):n().createElement("div",{className:sF.info},n().createElement(tw.$$,{size:16}),n().createElement("span",null,"No display settings configured")))),n().createElement(o.AsP,{title:"Addition Info",open:!1},n().createElement("div",{className:sF.section},e.additionInfo?n().createElement(n().Fragment,null,n().createElement(sq,{label:"Added Via",value:e.additionInfo.addedVia}),n().createElement(sq,{label:"Added At",value:e.additionInfo.addedAt}),n().createElement(sq,{label:"Order Added",value:e.additionInfo.orderAdded?.toString(),type:"number"})):n().createElement("div",{className:sF.info},n().createElement(tw.$$,{size:16}),n().createElement("span",null,"No addition info available")))),n().createElement(o.AsP,{title:"Raw Column JSON",open:!1},n().createElement("div",{className:sF.section},n().createElement(o.z7k,{type:"multi",feedback:"Copied!"},JSON.stringify(e,null,2))))))}function sq({label:e,value:t,type:r="text"}){if(null==t||""===t)return n().createElement("div",{className:sF.row},n().createElement("span",{className:sF.label},e,":"),n().createElement("span",{className:sF.valueEmpty},"(not set)"));let a=t;switch(r){case"uuid":case"code":a=n().createElement("code",{className:sF.codeInline},t);break;case"tag":a=n().createElement(o.vwO,{size:"sm",type:"cool-gray"},t);break;case"boolean":a=n().createElement(o.vwO,{size:"sm",type:"true"===t?"green":"red"},"true"===t?"Yes":"No");break;case"number":a=n().createElement(o.vwO,{size:"sm",type:"blue"},t);break;default:a=t}return n().createElement("div",{className:sF.row},n().createElement("span",{className:sF.label},e,":"),n().createElement("span",{className:sF.value},a))}let sj={calculated:{id:"calculated",name:"Calculated Fields",description:"Fields calculated from other data (Age, BMI, etc.)",icon:m.zt},attributes:{id:"attributes",name:"Person Attributes",description:"Custom person attributes (Telephone, Civil Status, etc.)",icon:f.vw},identifiers:{id:"identifiers",name:"Patient Identifiers",description:"Patient identification numbers (Clinic Number, EID Number, etc.)",icon:s.vG},demographics:{id:"demographics",name:"Demographics",description:"Built-in demographic fields (Name, Gender, Birth Date, etc.)",icon:P.KJ},other:{id:"other",name:"Other Fields",description:"ETL table columns and other fields",icon:_.n5}};function sH({columns:e,onChange:t,disabled:r=!1,error:l,filterMap:i}){let[s,d]=(0,a.useState)(null),[m,u]=(0,a.useState)(!1),[p,_]=(0,a.useState)(!1),[f,b]=(0,a.useState)(!1),[y,h]=(0,a.useState)(!1),[v,S]=(0,a.useState)(null),T=(0,a.useCallback)(e=>"CALCULATION"===e.dataDefinitionType?"calculated":"IDENTIFIER"===e.dataDefinitionType?"identifiers":"PERSON_ATTRIBUTE"===e.dataDefinitionType?"GENDER"===e.dataDefinitionConfig.type||"BIRTHDATE"===e.dataDefinitionConfig.type?"demographics":"attributes":"PERSON_NAME"===e.dataDefinitionType||"PERSON_ADDRESS"===e.dataDefinitionType?"demographics":["full_name","given_name","family_name","sex","gender","birth_date","death_date","village","parish","city_village","address1","state_province","country"].includes(e.name.toLowerCase().replace(/[\s-]+/g,"_"))?"demographics":"other",[]),C=(0,a.useMemo)(()=>{let t={calculated:[],attributes:[],identifiers:[],demographics:[],other:[]};return e.forEach(e=>{t[T(e)].push(e)}),t},[e,T]),w=(0,a.useCallback)(r=>{t(e.filter(e=>e.id!==r))},[e,t]),N=(0,a.useCallback)(e=>{switch(d(e),e.dataDefinitionType){case"OBSERVATION":_(!0);break;case"ENCOUNTER_DIAGNOSIS":b(!0);break;default:u(!0)}},[]),I=(0,a.useCallback)(r=>{let a=e.findIndex(e=>e.id===r.id);if(-1!==a){let n=[...e];n[a]=r,t(n)}u(!1),d(null)},[e,t]),k=(0,a.useCallback)(()=>{u(!1),_(!1),b(!1),d(null)},[]),A=(0,a.useCallback)(e=>{navigator.clipboard.writeText(e).then(()=>{})},[]),R=(0,a.useCallback)(r=>{let a=e.findIndex(e=>e.id===r);if(a<=0)return;let n=[...e];[n[a-1],n[a]]=[n[a],n[a-1]],n.forEach((e,t)=>e.sortOrder=t),t(n)},[e,t]),O=(0,a.useCallback)(r=>{let a=e.findIndex(e=>e.id===r);if(-1===a||a>=e.length-1)return;let n=[...e];[n[a],n[a+1]]=[n[a+1],n[a]],n.forEach((e,t)=>e.sortOrder=t),t(n)},[e,t]),D=(0,a.useCallback)(e=>{S(e),h(!0)},[]),x=e.length;return n().createElement("div",{className:sx.container},n().createElement(o.BJc,{gap:4},l&&n().createElement("div",{className:sx.error},l),n().createElement("div",{className:sx.summary},n().createElement("span",{className:sx.summaryText},x," column",1!==x?"s":""," selected"),x>0&&n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>t([]),disabled:r},"Clear All")),0===x&&n().createElement("div",{className:sx.emptyState},n().createElement("p",null,"No columns selected. Use the Data Catalogue panel to add columns to your linelist report.")),x>0&&n().createElement(o.nD3,{className:sx.accordion},Object.values(sj).map(t=>{let a=C[t.id],l=a.length;return 0===l?null:n().createElement(o.AsP,{key:t.id,title:n().createElement("div",{className:sx.categoryHeader},n().createElement("span",{className:sx.categoryIcon},t.icon&&n().createElement(t.icon,{size:16})),n().createElement("span",{className:sx.categoryName},t.name),n().createElement(o.vwO,{size:"sm",type:"cool-gray"},l)),open:!0},n().createElement("div",{className:sx.categoryContent},n().createElement("p",{className:sx.categoryDescription},t.description),n().createElement("div",{className:sx.columnList},a.map(t=>n().createElement("div",{key:t.id,className:sx.columnItem,"data-column-id":t.id,"data-position":t.sortOrder},n().createElement("div",{className:sx.columnPosition},n().createElement("span",{className:sx.positionNumber},"#",t.sortOrder+1)),n().createElement("div",{className:sx.columnInfo},n().createElement("span",{className:sx.columnName},t.name),n().createElement(o.vwO,{size:"sm",type:"blue",className:sx.columnIdTag},"ID: ",t.id),t.source?.dataSourceName&&n().createElement(o.vwO,{size:"sm",type:"cool-gray"},t.source.dataSourceName),n().createElement(o.vwO,{size:"sm",type:"gray"},t.dataDefinitionType)),n().createElement("div",{className:sx.columnActions},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:E.Do,onClick:()=>R(t.id),disabled:r||0===t.sortOrder,iconDescription:"Move column up"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:E.yd,onClick:()=>O(t.id),disabled:r||t.sortOrder===e.length-1,iconDescription:"Move column down"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:c.QR,onClick:()=>A(t.id),disabled:r,iconDescription:"Copy column ID to clipboard"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:g.wB,onClick:()=>D(t),disabled:r,iconDescription:"View column debug info",style:{color:"#0f62fe"}}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:es.ff,onClick:()=>N(t),disabled:r,iconDescription:"Edit column"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:P.zH,onClick:()=>w(t.id),disabled:r,iconDescription:"Remove column"})))))))})),n().createElement(sB,{open:m,column:s,onSave:I,onClose:k,filterMap:i}),n().createElement(sS,{open:p,onClose:k,onAddColumn:I,existingColumns:e,editingColumn:s}),n().createElement(sw,{open:f,onClose:k,onAddColumn:I,existingColumns:e,editingColumn:s}),y&&v&&n().createElement(sz,{column:v,onClose:()=>{h(!1),S(null)}})))}let sJ="-esm-report-builder__parameter-panel__sectionTitle___wEKUC",sG="-esm-report-builder__parameter-panel__helperText___YnhSF",sV=[{value:"DATE",label:"Date",description:"Date value (e.g., for report start/end dates)",needsConfig:!1},{value:"DATETIME",label:"Date & Time",description:"Date and time value with time component",needsConfig:!1},{value:"LOCATION",label:"Location",description:"Facility or location picker",needsConfig:!0},{value:"PROGRAM",label:"Program",description:"Program selection (e.g., HIV, TB)",needsConfig:!0},{value:"PROVIDER",label:"Provider",description:"Healthcare provider selection",needsConfig:!0},{value:"CONCEPT",label:"Concept",description:"OpenMRS concept/value selection",needsConfig:!0},{value:"CODED_VALUE",label:"Coded Value",description:"Coded value from a defined answer list",needsConfig:!0},{value:"BOOLEAN",label:"Boolean",description:"Yes/No toggle",needsConfig:!1},{value:"NUMBER",label:"Number",description:"Numeric value",needsConfig:!1},{value:"TEXT",label:"Text",description:"Free text input",needsConfig:!1}],sW={DATE:"blue",DATETIME:"cyan",LOCATION:"green",PROGRAM:"purple",PROVIDER:"magenta",CONCEPT:"red",CODED_VALUE:"warm-gray",IDENTIFIER_TYPE:"teal",PERSON_ATTRIBUTE:"purple",BOOLEAN:"gray",NUMBER:"teal",TEXT:"cool-gray",LIST:"blue"};function sK({parameters:e,onChange:t,disabled:r=!1}){let[l,i]=(0,a.useState)(new Set),s=r=>{let a={id:`param-${Date.now()}`,name:r,label:"startDate"===r?"Start Date":"End Date",type:"DATE",required:!0,defaultValue:"",displayOrder:e.length,config:{type:"DATE",includeTime:!1}};t([...e,a])},d=(r,a)=>{t(e.map(e=>e.id===r?{...e,...a}:e))},c=(r,a)=>{let n=[...e],l="up"===a?r-1:r+1;l<0||l>=n.length||([n[r],n[l]]=[n[l],n[r]],n.forEach((e,t)=>{e.displayOrder=t}),t(n))};return n().createElement("div",{className:"-esm-report-builder__parameter-panel__container___qtbXF"},n().createElement(o.BJc,{gap:4},n().createElement("div",{className:"-esm-report-builder__parameter-panel__quickAdd___NcrBq"},n().createElement("h4",{className:sJ},"Quick Add Common Parameters"),n().createElement(o.Te$,null,n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:()=>s("startDate"),disabled:r},"Start Date"),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:()=>s("endDate"),disabled:r},"End Date"),n().createElement(o.$nd,{kind:"ghost",size:"sm",renderIcon:b.OM,onClick:()=>{let r={id:`param-${Date.now()}`,name:"location",label:"Location",type:"LOCATION",required:!1,defaultValue:"",displayOrder:e.length,config:{type:"LOCATION"}};t([...e,r])},disabled:r},"Location"))),n().createElement(o.$nd,{kind:"secondary",renderIcon:b.OM,onClick:()=>{let r={id:`param-${Date.now()}`,name:"",label:"",type:"TEXT",required:!1,defaultValue:"",displayOrder:e.length,config:{type:"TEXT"}};t([...e,r])},disabled:r},"Add Custom Parameter"),e.length>0&&n().createElement("div",{className:"-esm-report-builder__parameter-panel__parametersTable___y5Wq7"},n().createElement("h4",{className:sJ},"Parameters (",e.length,")"),n().createElement(o.bQt,{rows:e.map(e=>({id:e.id,...e})),headers:[]},({rows:a})=>n().createElement(o.BFY,null,a.map((a,s)=>{let m=e[s];if(!m||!m.id)return null;let u=l.has(m.id),p=sV.find(e=>e.value===m.type);return n().createElement(n().Fragment,{key:m.id},n().createElement(o.Hjg,null,n().createElement(o.nA6,{className:"-esm-report-builder__parameter-panel__orderCell___eBvXS"},s+1),n().createElement(o.nA6,null,n().createElement(o.ksK,{id:`param-name-${m.id}`,labelText:"",hideLabel:!0,placeholder:"parameter_name",value:m.name,onChange:e=>d(m.id,{name:e.target.value}),disabled:r})),n().createElement(o.nA6,null,n().createElement(o.ksK,{id:`param-label-${m.id}`,labelText:"",hideLabel:!0,placeholder:"Display Label",value:m.label,onChange:e=>d(m.id,{label:e.target.value}),disabled:r})),n().createElement(o.nA6,null,n().createElement(o.vwO,{type:sW[m.type]},p?.label||m.type)),n().createElement(o.nA6,null,m.required?n().createElement(o.vwO,{type:"red"},"Required"):null),n().createElement(o.nA6,{className:"-esm-report-builder__parameter-panel__actionsCell___Pbeyp"},n().createElement(o.Te$,null,n().createElement(o.$nd,{hasIconOnly:!0,kind:"ghost",size:"sm",renderIcon:U.rX,onClick:()=>c(s,"up"),disabled:r||0===s,iconDescription:"Move up"}),n().createElement(o.$nd,{hasIconOnly:!0,kind:"ghost",size:"sm",renderIcon:U.yQ,onClick:()=>c(s,"down"),disabled:r||s===e.length-1,iconDescription:"Move down"}),n().createElement(o.$nd,{hasIconOnly:!0,kind:"ghost",size:"sm",renderIcon:P.zH,onClick:()=>{var r;return r=m.id,void t(e.filter(e=>e.id!==r).map((e,t)=>({...e,displayOrder:t})))},disabled:r,iconDescription:"Remove parameter"}),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>{var e;return e=m.id,void i(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},disabled:r},u?"Less":"More")))),u&&n().createElement(o.Hjg,{className:"-esm-report-builder__parameter-panel__expandedRow___7Z-W+"},n().createElement(o.nA6,{colSpan:6},n().createElement("div",{className:"-esm-report-builder__parameter-panel__expandedContent___5xPhD"},n().createElement(o.BJc,{gap:3},n().createElement(o.l6P,{id:`param-type-${m.id}`,labelText:"Parameter Type",value:m.type,onChange:e=>{let t=e.target.value,r={type:t};switch(t){case"DATE":case"DATETIME":r={type:t,includeTime:!1};break;case"LIST":r={type:"LIST",options:[]};break;case"TEXT":r={type:"TEXT"};break;default:r={type:t}}d(m.id,{type:t,config:r})},disabled:r},sV.map(e=>n().createElement(o.ebT,{key:e.value,value:e.value,text:e.label,title:e.description}))),p?.description&&n().createElement("p",{className:sG},p.description),n().createElement(o.lMk,{id:`param-required-${m.id}`,labelText:"Required (user must provide value)",toggled:m.required,onToggle:e=>d(m.id,{required:e}),disabled:r}),n().createElement(o.ksK,{id:`param-default-${m.id}`,labelText:"Default Value (optional)",placeholder:"e.g., 2024-01-01, current_location",value:m.defaultValue||"",onChange:e=>d(m.id,{defaultValue:e.target.value}),disabled:r,helperText:"This value will be used if user doesn't provide one"}),n().createElement(o.ksK,{id:`param-order-${m.id}`,labelText:"Display Order",type:"number",value:String(m.displayOrder),onChange:e=>d(m.id,{displayOrder:Number(e.target.value)}),disabled:r,helperText:"Order in which parameters appear to users"}),(e=>{switch(e.type){case"DATE":case"DATETIME":return n().createElement(o.lMk,{id:`param-include-time-${e.id}`,labelText:"Include time component",toggled:e.config?.includeTime||!1,onToggle:t=>d(e.id,{config:{...e.config,includeTime:t,type:e.type}}),disabled:r});case"LOCATION":return n().createElement(o.ksK,{id:`param-locations-${e.id}`,labelText:"Allowed Location UUIDs (comma-separated)",placeholder:"e.g., uuid1,uuid2,uuid3",value:e.config?.locationUuids?.join(",")||"",onChange:t=>d(e.id,{config:{...e.config,type:"LOCATION",locationUuids:t.target.value.split(",").map(e=>e.trim()).filter(Boolean)}}),disabled:r,helperText:"Leave empty for all locations"});case"PROGRAM":case"PROVIDER":case"CONCEPT":case"CODED_VALUE":return n().createElement(o.ksK,{id:`param-source-${e.id}`,labelText:"Source UUID (for data source)",placeholder:"e.g., program-uuid, concept-uuid",value:e.config?.sourceUuid||"",onChange:t=>d(e.id,{config:{...e.config,type:e.type,sourceUuid:t.target.value}}),disabled:r,helperText:"The UUID of the data source for this parameter type"});case"LIST":return n().createElement(o.ksK,{id:`param-list-options-${e.id}`,labelText:"List Options (JSON format)",placeholder:'[{"value":"1","label":"One"},{"value":"2","label":"Two"}]',value:e.config?.options?JSON.stringify(e.config.options):"",onChange:t=>{try{let r=JSON.parse(t.target.value);d(e.id,{config:{type:"LIST",options:r}})}catch{}},disabled:r,helperText:"Array of objects with value and label properties"});case"IDENTIFIER_TYPE":return n().createElement(o.ksK,{id:`param-ident-types-${e.id}`,labelText:"Allowed Identifier Type UUIDs (comma-separated)",placeholder:"e.g., uuid1,uuid2,uuid3",value:e.config?.identifierTypeUuids?.join(",")||"",onChange:t=>d(e.id,{config:{...e.config,type:"IDENTIFIER_TYPE",identifierTypeUuids:t.target.value.split(",").map(e=>e.trim()).filter(Boolean)}}),disabled:r,helperText:"Leave empty for all identifier types"});case"PERSON_ATTRIBUTE":return n().createElement(o.ksK,{id:`param-attr-format-${e.id}`,labelText:"Format filter (e.g., org.openmrs.Concept)",placeholder:"e.g., org.openmrs.Concept",value:e.config?.format||"",onChange:t=>d(e.id,{config:{...e.config,type:"PERSON_ATTRIBUTE",format:t.target.value}}),disabled:r,helperText:"Filter by attribute type format"});default:return null}})(m))))))})))),0===e.length&&n().createElement("div",{className:"-esm-report-builder__parameter-panel__emptyState___ens3F"},n().createElement("p",null,"No parameters defined. Add parameters to allow users to customize report output at runtime."),n().createElement("p",{className:sG},"Common parameters: Start Date, End Date, Location, Program"))))}let sQ="-esm-report-builder__filtermap-editor__fieldGroup___UtS6F",sY=["SELECT","FROM","WHERE","AND","OR","NOT","IN","BETWEEN","JOIN","LEFT","RIGHT","INNER","OUTER","ON","AS","ORDER","BY","GROUP","HAVING","UNION","EXISTS","DISTINCT","NULL","IS","patientId","clientId","startDate","endDate"];function sX(e){if(!e||""===e.trim())return!1;let t=e.trim();return!(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)||sY.includes(t.toUpperCase()))}function sZ(e){if(!e||""===e.trim())return!1;let t=e.trim();return/^[\w.]+$/.test(t)}let s0=({filterMap:e,onChange:t,availableColumns:r,disabled:l=!1,sqlQuery:i})=>{let[s,d]=(0,a.useState)(()=>e?Object.entries(e).map(([e,t])=>({parameterName:e,columnReference:t})):[]),[c,m]=(0,a.useState)({}),[u,p]=(0,a.useState)(!1);n().useEffect(()=>{e&&0!==Object.keys(e).length?d(Object.entries(e).map(([e,t])=>({parameterName:e,columnReference:t}))):d([])},[e]);let _=(0,a.useMemo)(()=>i?function(e){let t=e.trim();if(!t)return[];let r=t.match(/SELECT\s+(?:DISTINCT\s+)?([\s\S]+?)\s+FROM/i);if(!r)return[];let a=r[1],n=[];for(let e of a.split(",").map(e=>e.trim())){if(!e)continue;let t=e.match(/(\w+)\.(\w+)/);if(t){let[,e,r]=t;n.push({name:r,reference:`${e}.${r}`})}else{let t=e.split(/\s+/)[0];t&&!t.includes("(")&&n.push({name:t,reference:t})}}return n}(i):[],[i]),g=r||_,E=e=>{d(e);let r={};e.forEach((e,t)=>{e.parameterName&&!sX(e.parameterName)&&(r[t]="Invalid parameter name"),e.columnReference&&!sZ(e.columnReference)&&(r[t]="Invalid column reference")}),m(r),t((e=>{let t=e.filter(e=>sX(e.parameterName)&&sZ(e.columnReference));if(0!==t.length)return Object.fromEntries(t.map(e=>[e.parameterName.trim(),e.columnReference.trim()]))})(e))},f=(e,t,r)=>{let a=[...s];a[e]={...a[e],[t]:r},E(a)},y=Object.keys(c).length>0,h=s.length>0;return n().createElement("div",{className:"-esm-report-builder__filtermap-editor__container___3VKia"},n().createElement(o.BJc,{gap:4},n().createElement("div",{className:"-esm-report-builder__filtermap-editor__header___v62qf"},n().createElement("div",{className:"-esm-report-builder__filtermap-editor__headerTitle___RV47u"},n().createElement(tw.$$,{size:16}),n().createElement("h4",null,"FilterMap Configuration")),n().createElement(o.$nd,{kind:"ghost",size:"sm",onClick:()=>p(!u)},u?"Hide":"What is this?")),u&&n().createElement("div",{className:"-esm-report-builder__filtermap-editor__infoPanel___8POeK"},n().createElement(o.jeF,{kind:"info",title:"About FilterMap",subtitle:"FilterMap enables column queries to filter to the exact row that matched the base cohort criteria. Use this when: Base cohort SELECTs multiple identifier columns (episode_id, order_id, etc.), Column queries reference the same table as the base cohort, and Multiple rows exist per patient and you need consistent data across columns.",hideCloseButton:!0,lowContrast:!0}),n().createElement("div",{className:"-esm-report-builder__filtermap-editor__infoDetails___nXYcY"},n().createElement("p",{className:"-esm-report-builder__filtermap-editor__example___7Mjo2"},n().createElement("strong",null,"Example:")," If base cohort selects ",n().createElement("code",null,"patient_id, episode_id, order_id"),", you can map these to parameters that column queries use:"),n().createElement("pre",{className:"-esm-report-builder__filtermap-editor__codeExample___JVgP+"},`{
335
+ "patientId": "vl.patient_id",
336
+ "orderId": "vl.native_order_id",
337
+ "episodeId": "vl.episode_id"
338
+ }`),n().createElement("p",null,"Column SQL can then use ",n().createElement("code",null,":patientId"),", ",n().createElement("code",null,":orderId"),", ",n().createElement("code",null,":episodeId"),"to filter to the specific episode/order."))),h?n().createElement("div",{className:"-esm-report-builder__filtermap-editor__entriesContainer___m3FGR"},s.map((e,t)=>n().createElement("div",{key:t,className:"-esm-report-builder__filtermap-editor__entryRow___jo33d"},n().createElement("div",{className:"-esm-report-builder__filtermap-editor__entryFields___a4rzC"},n().createElement("div",{className:sQ},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:sQ},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"))))},s1={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 s2(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 s5(e){return e.split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function s6({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,s2(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:s1.container},n().createElement("div",{className:s1.section},n().createElement("button",{className:s1.sectionHeader,onClick:()=>h("dataset"),type:"button"},n().createElement("div",{className:s1.sectionHeaderLeft},n().createElement(i0.bQ,{size:20}),n().createElement("span",{className:s1.sectionTitle},"Dataset")),n().createElement("div",{className:s1.sectionHeaderRight},u.has("dataset")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("dataset")&&n().createElement("div",{className:s1.sectionContent},n().createElement("div",{className:s1.datasetInfo},n().createElement("div",{className:s1.datasetRow},n().createElement("span",{className:s1.datasetLabel},"Population sources:"),n().createElement("span",{className:s1.datasetValue},e.populationSources&&e.populationSources.length>0?n().createElement("div",{className:s1.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:s1.datasetRow},n().createElement("span",{className:s1.datasetLabel},"Data sources:"),n().createElement("span",{className:s1.datasetValue},e.dataSources&&e.dataSources.length>0?n().createElement("div",{className:s1.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:s1.datasetRow},n().createElement("span",{className:s1.datasetLabel},"Row grain:"),n().createElement("span",{className:s1.datasetValue},e.rowGrain||"Not set"))))),n().createElement("div",{className:s1.section},n().createElement("button",{className:s1.sectionHeader,onClick:()=>h("population"),type:"button"},n().createElement("div",{className:s1.sectionHeaderLeft},n().createElement(i0.bQ,{size:20}),n().createElement("span",{className:s1.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:s1.sectionHeaderRight},u.has("population")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("population")&&n().createElement("div",{className:s1.sectionContent},n().createElement("div",{className:s1.populationModeSelector},n().createElement("span",{className:s1.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:s1.populationHeader},n().createElement("span",{className:s1.populationLabel},"All patients where (SQL):")),n().createElement(o.BJc,{gap:3,className:s1.conditionsStack},R.map((e,t)=>n().createElement("div",{key:e.id,className:s1.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:""},s2(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:s1.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:s1.sqlEditorSection},n().createElement("div",{className:s1.populationHeader},n().createElement("span",{className:s1.populationLabel},"Or edit raw SQL:"),n().createElement("span",{className:s1.populationHint},"Directly edit the SQL query (use :startDate and :endDate for date parameters)")),n().createElement(o.fs1,{id:"population-sql",className:s1.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:s1.populationHeader},n().createElement("span",{className:s1.populationLabel},"All patients matching these indicators:"),n().createElement("span",{className:s1.populationHint},"Use indicators with prebuilt query definitions for patient selection")),n().createElement(o.BJc,{gap:3,className:s1.conditionsStack},(e.population?.indicatorRules||e.indicatorRules||[]).map((t,r)=>n().createElement("div",{key:t.id,className:s1.conditionRow},n().createElement(es.yo,{size:16,className:s1.rowIcon}),n().createElement("div",{className:s1.indicatorSearch},n().createElement(rR,{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:s1.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:s1.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:s1.populationHeader},n().createElement("span",{className:s1.populationLabel},"Indicators:"),n().createElement("span",{className:s1.populationHint},"Add indicators to combine with SQL")),n().createElement(o.BJc,{gap:3,className:s1.conditionsStack},(e.population?.indicatorRules||e.indicatorRules||[]).map((t,r)=>n().createElement("div",{key:t.id,className:s1.conditionRow},n().createElement(es.yo,{size:16,className:s1.rowIcon}),n().createElement("div",{className:s1.indicatorSearch},n().createElement(rR,{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:s1.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:s1.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:s1.hybridDivider},n().createElement("span",null,"AND")),n().createElement("div",{className:s1.populationHeader},n().createElement("span",{className:s1.populationLabel},"Additional SQL conditions:"),n().createElement("span",{className:s1.populationHint},"Filter the selected patients further with custom SQL")),n().createElement(o.BJc,{gap:3,className:s1.conditionsStack},R.map((e,t)=>n().createElement("div",{key:e.id,className:s1.conditionRow},n().createElement(m.dJ,{size:16,className:s1.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:""},s2(e.fieldType).map(e=>n().createElement(o.ebT,{key:e,value:e.toUpperCase(),text:s5(e)},s5(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:s1.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:s1.sqlEditorSection},n().createElement("div",{className:s1.populationHeader},n().createElement("span",{className:s1.populationLabel},"Or edit raw SQL:"),n().createElement("span",{className:s1.populationHint},"Directly edit the SQL query (use :startDate and :endDate for date parameters)")),n().createElement(o.fs1,{id:"population-sql-hybrid",className:s1.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:s1.filterMapSection},n().createElement(s0,{filterMap:e.population.filterMap,onChange:r=>t({population:{...e.population,filterMap:r}}),disabled:d,sqlQuery:e.population.sqlTemplate})))),n().createElement("div",{className:s1.section},n().createElement("button",{className:s1.sectionHeader,onClick:()=>h("columns"),type:"button"},n().createElement("div",{className:s1.sectionHeaderLeft},n().createElement(p.B8,{size:20}),n().createElement("span",{className:s1.sectionTitle},"Columns"),n().createElement(o.vwO,{size:"sm",type:"gray"},e.columns.length)),n().createElement("div",{className:s1.sectionHeaderRight},u.has("columns")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("columns")&&n().createElement("div",{className:s1.sectionContent},n().createElement(sH,{columns:e.columns,onChange:e=>t({columns:e}),disabled:d,filterMap:e.population.filterMap}))),n().createElement("div",{className:s1.section},n().createElement("button",{className:s1.sectionHeader,onClick:()=>h("filters"),type:"button"},n().createElement("div",{className:s1.sectionHeaderLeft},n().createElement(m.dJ,{size:20}),n().createElement("span",{className:s1.sectionTitle},"Filters"),n().createElement(o.vwO,{size:"sm",type:"gray"},"0")),n().createElement("div",{className:s1.sectionHeaderRight},u.has("filters")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("filters")&&n().createElement("div",{className:s1.sectionContent},n().createElement("div",{className:s1.placeholderContent},n().createElement("p",null,"Runtime filters configuration will be shown here."),n().createElement("p",{className:s1.placeholderSubtext},"Filters shown when running the report")))),n().createElement("div",{className:s1.section},n().createElement("button",{className:s1.sectionHeader,onClick:()=>h("sort"),type:"button"},n().createElement("div",{className:s1.sectionHeaderLeft},n().createElement(f.ZE,{size:20}),n().createElement("span",{className:s1.sectionTitle},"Sort"),n().createElement(o.vwO,{size:"sm",type:"gray"},e.sortConfig.length)),n().createElement("div",{className:s1.sectionHeaderRight},u.has("sort")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("sort")&&n().createElement("div",{className:s1.sectionContent},n().createElement("div",{className:s1.placeholderContent},n().createElement("p",null,"Sort configuration will be shown here."),n().createElement("p",{className:s1.placeholderSubtext},e.sortConfig.length," sort rule",1!==e.sortConfig.length?"s":""," defined")))),n().createElement("div",{className:s1.section},n().createElement("button",{className:s1.sectionHeader,onClick:()=>h("parameters"),type:"button"},n().createElement("div",{className:s1.sectionHeaderLeft},n().createElement(g.wB,{size:20}),n().createElement("span",{className:s1.sectionTitle},"Parameters"),n().createElement(o.vwO,{size:"sm",type:"gray"},e.parameters.length)),n().createElement("div",{className:s1.sectionHeaderRight},u.has("parameters")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("parameters")&&n().createElement("div",{className:s1.sectionContent},n().createElement(sK,{parameters:e.parameters,onChange:e=>t({parameters:e}),disabled:d}))),n().createElement("div",{className:s1.section},n().createElement("button",{className:s1.sectionHeader,onClick:()=>h("display"),type:"button"},n().createElement("div",{className:s1.sectionHeaderLeft},n().createElement(m.FN,{size:20}),n().createElement("span",{className:s1.sectionTitle},"Display & Export")),n().createElement("div",{className:s1.sectionHeaderRight},u.has("display")?n().createElement(U.rX,{size:16}):n().createElement(U.yQ,{size:16}))),u.has("display")&&n().createElement("div",{className:s1.sectionContent},n().createElement("div",{className:s1.placeholderContent},n().createElement("p",null,"Display and export settings will be shown here."),n().createElement("p",{className:s1.placeholderSubtext},"Page size, export formats, etc.")))),n().createElement("div",{className:s1.section},n().createElement("button",{className:s1.sectionHeader,onClick:()=>h("json-preview"),type:"button"},n().createElement("div",{className:s1.sectionHeaderLeft},n().createElement(c.Cy,{size:20}),n().createElement("span",{className:s1.sectionTitle},"JSON Preview"),n().createElement(o.vwO,{size:"sm",type:"teal"},"Live")),n().createElement("div",{className:s1.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:s1.sectionContent},n().createElement(sD,{draft:e,indicators:i}))))}let s3="-esm-report-builder__multi-datasource-selector__datasourceCard___Up+p7",s4="-esm-report-builder__multi-datasource-selector__cardHeader___aAbMV",s8="-esm-report-builder__multi-datasource-selector__cardInfo___FtOrL",s7="-esm-report-builder__multi-datasource-selector__dsName___SsMes",s9="-esm-report-builder__multi-datasource-selector__cardDescription___deUQP",de=[{uuid:"person_attributes",name:"Person Attributes",type:"CORE",role:"REFERENCE"},{uuid:"patient_identifiers",name:"Patient Identifiers",type:"CORE",role:"REFERENCE"}],dt=({dataSources:e,onChange:t,disabled:r=!1})=>{let{tables:l,loading:i,error:s}=io(!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})),...de.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(tw.$$,{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=de.some(t=>t.uuid===e.id),r=i&&!t?"PRIMARY":t?"REFERENCE":"SECONDARY";"PRIMARY"===r&&(i=!1);let a=de.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:s3,"data-role":"primary"},n().createElement("div",{className:s4},n().createElement("div",{className:s8},n().createElement(o.vwO,{type:"green",size:"sm"},"Primary"),n().createElement("span",{className:s7},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:s9},"Main datasource for this report")),c.map(e=>n().createElement("div",{key:e.uuid,className:s3,"data-role":"secondary"},n().createElement("div",{className:s4},n().createElement("div",{className:s8},n().createElement(o.vwO,{type:"blue",size:"sm"},"Secondary"),n().createElement("span",{className:s7},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:s9},"Additional datasource for columns"))),m.map(e=>n().createElement("div",{key:e.uuid,className:s3,"data-role":"reference"},n().createElement("div",{className:s4},n().createElement("div",{className:s8},n().createElement(o.vwO,{type:"purple",size:"sm"},"Reference"),n().createElement("span",{className:s7},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:s9},"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"))))},dr=({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]=a4(t):1===n&&(e[r.name]=a4(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"}),a6.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(a8,{key:e.name,...a});case"NUMBER":return n().createElement(a7,{key:e.name,...a});case"BOOLEAN":return n().createElement(a9,{key:e.name,...a});case"LIST":return n().createElement(ne,{key:e.name,...a});case"LOCATION":return n().createElement(nl,{key:e.name,...a,onSearchQueryChange:t=>C(e.name,t)});case"CONCEPT":return n().createElement(ni,{key:e.name,...a,searchQuery:p[e.name]||"",onSearchQueryChange:t=>C(e.name,t)});case"IDENTIFIER_TYPE":return n().createElement(no,{key:e.name,...a});case"PERSON_ATTRIBUTE":return n().createElement(ns,{key:e.name,...a});default:return n().createElement(nd,{key:e.name,...a,onError:t=>T(e.name,t)})}})(e)))))},da={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"},dn=()=>{let e=(0,i.Zp)(),{reportId:t}=(0,i.g)(),{has:l}=v(),[s,d]=(0,a.useState)(so()),[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),rp({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"),so();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(so()),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=si(s,r),n={buildMethod:s.population.buildMethod,indicatorRules:s.population.indicatorRules,populationSources:s.populationSources,visualFilter:s.population.visualFilter,filterMap:s.population.filterMap},l=(0,sn.Nj)(a,s,n);"create"===A?(t=await (0,sn.rp)(l),e(`/linelist/edit/${t.uuid}`,{replace:!0})):t=await (0,sn.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,sn.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=si(s,r),n=await (0,sn.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(`.${da.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:da.workspace},n().createElement("div",{className:da.loading},"Loading report...")):n().createElement("div",{className:da.workspace},n().createElement("header",{className:da.header},n().createElement("div",{className:da.headerLeft},n().createElement(o.$nd,{kind:"ghost",size:"sm",hasIconOnly:!0,renderIcon:U.JG,iconDescription:"Back",onClick:e_})),n().createElement("div",{className:da.headerCenter},n().createElement(o.ksK,{id:"report-name",labelText:"",value:s.name,onChange:e=>eg({name:e.target.value}),placeholder:"Report name",className:da.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:da.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:da.notification},n().createElement(o.jeF,{kind:"error",title:"Error",subtitle:h})),T&&n().createElement("div",{className:da.notification},n().createElement(o.jeF,{kind:"error",title:"Save Error",subtitle:T,onClose:()=>C(null)})),w&&n().createElement("div",{className:da.notification},n().createElement(o.jeF,{kind:"error",title:"Compile Error",subtitle:w,onClose:()=>N(null)})),I&&n().createElement("div",{className:da.notification},n().createElement(o.jeF,{kind:"success",title:"Compiled",subtitle:I,onClose:()=>k(null)})),n().createElement(tN,{open:ec,currentCategoryUuid:s.categoryUuid,onConfirm:ef,onClose:eE,reportType:"linelist"}),n().createElement(dr,{open:ee,onClose:()=>et(!1),onRun:eT,parameters:s.parameters,loading:G}),n().createElement("div",{className:da.panels},n().createElement("aside",{className:da.leftPanel,style:{width:x?48:P}},n().createElement("div",{className:da.panelHeader},!x&&n().createElement(n().Fragment,null,n().createElement("h3",{className:da.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:da.panelContent},n().createElement("div",{className:da.columnSourcesSection},n().createElement("div",{className:da.populationCard},n().createElement(sg,{populationSources:s.populationSources,onChange:e=>eg({populationSources:e}),disabled:u})),n().createElement("div",{className:da.columnSourcesCard},n().createElement("div",{className:da.columnSourcesHeader},n().createElement("h4",{className:da.columnSourcesTitle},n().createElement("span",{className:da.columnSourcesIcon},"\uD83D\uDCCA"),"Column Sources"),n().createElement("span",{className:da.columnSourcesSubtitle},"Select columns for output")),n().createElement(dt,{dataSources:s.dataSources,onChange:eb,disabled:u}),n().createElement(sR,{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:`${da.resizeHandle} ${da.resizeHandleLeftMiddle}`,onMouseDown:eR,style:{cursor:"col-resize"}}),n().createElement("aside",{className:da.middlePanel,style:{width:M?48:F}},n().createElement("div",{className:da.panelHeader},!M&&n().createElement(n().Fragment,null,n().createElement("h3",{className:da.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:da.panelContent},n().createElement(s6,{draft:s,onDraftChange:eg,availableFields:er,indicators:eo,onRemoveColumn:ev}))),n().createElement("div",{className:`${da.resizeHandle} ${da.resizeHandleMiddleRight}`,onMouseDown:eO,style:{cursor:"col-resize"}}),n().createElement("main",{className:da.rightPanel},n().createElement("div",{className:da.panelHeader},n().createElement("h3",{className:da.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:da.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:da.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:da.previewResults},n().createElement("div",{className:da.previewStatus},n().createElement("span",null,"Preview rows: ",Q.rowCount),n().createElement("span",null,"Query duration: —")),Q.html?n().createElement("div",{className:da.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:da.emptyPreview},n().createElement(es.yo,{size:32}),n().createElement("p",null,"No data found for the current configuration"))))))},dl="-esm-report-builder__linelist-run-report-page__emptyState___PPH5o",di=()=>{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,sn.getLinelistReport)(t);l(e);let r=(0,sn.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,sn.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,sn.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]=a4(e):1===n&&(a[t.name]=a4(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,sn.ah)(r.uuid,e?.categoryUuid);if(!n.reportDefinitionUuid)return void y("Failed to compile report - no report definition UUID returned");let l=await (0,sn.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"}),a6.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(a8,a);case"NUMBER":return n().createElement(a7,a);case"BOOLEAN":return n().createElement(a9,a);case"LIST":return n().createElement(ne,a);case"LOCATION":return n().createElement(nl,{...a,onSearchQueryChange:t=>J(e.name,t)});case"CONCEPT":return n().createElement(ni,{...a,searchQuery:C[e.name]||"",onSearchQueryChange:t=>J(e.name,t)});case"IDENTIFIER_TYPE":return n().createElement(no,a);case"PERSON_ATTRIBUTE":return n().createElement(ns,a);default:return n().createElement(nd,{...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:dl},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:dl},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.')))},ds=[{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"}],dd=[{key:"validate",label:"Validating package...",status:"pending"},{key:"reports",label:"Compiled Reports...",status:"pending"},{key:"complete",label:"Complete!",status:"pending"}],dc=({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(ds),[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(ds),_(null),E(null),b(!1),h(""),S(null)};n().useEffect(()=>{"artifacts"===d?u(ds):u(dd)},[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(tw.$$,{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))))))))},dm=e=>t=>e(t).then(e=>e.length),du=[{key:"ageCategories",label:"Age Categories",kind:"metadata",Icon:s.YJ,count:dm(rL),path:"/admin/age-categories"},{key:"ageGroups",label:"Age Groups",kind:"metadata",Icon:P.Gp,count:e=>rL(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:dm(e=>en(void 0,e)),path:"/admin/report-categories"},{key:"dashboards",label:"Dashboards",kind:"metadata",Icon:_._C,count:dm(e=>of(void 0,e)),path:"/admin/dashboards"},{key:"etlMonitors",label:"ETL Monitors",kind:"metadata",Icon:g.wB,count:dm(e=>lA(void 0,e)),path:"/admin/etl-monitors"},{key:"etlSources",label:"ETL Sources",kind:"metadata",Icon:c.EN,count:dm(e=>lp(void 0,e)),path:"/admin/etl-sources"},{key:"indicators",label:"Indicators",kind:"metadata",Icon:b.j0,count:dm(e=>rp(void 0,e)),path:"/indicators"},{key:"library",label:"Library",kind:"metadata",Icon:E.E3,count:dm(e=>la(void 0,e)),path:"/admin/report-library"},{key:"sections",label:"Sections",kind:"metadata",Icon:p.B8,count:dm(e=>tp(void 0,e)),path:"/sections"},{key:"themes",label:"Themes",kind:"metadata",Icon:c.rE,count:dm(e=>tD(void 0,e)),path:"/admin/themes"},{key:"aggregateReports",label:"Aggregate Reports",kind:"reports",Icon:es.yo,count:dm(e=>X(void 0,e)),path:"/reports"},{key:"linelistReports",label:"Line-list Reports",kind:"reports",Icon:es.yo,count:dm(e=>(0,sn.CB)(void 0,e)),path:"/linelist"}],dp=[{key:"name",header:"Configuration"},{key:"version",header:"Version"},{key:"size",header:"Size"},{key:"createdDate",header:"Created"},{key:"status",header:"Status"},{key:"actions",header:"Action"}],d_=()=>{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(du.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(du.map(e=>[e.key,{count:null,status:"loading"}]))),T(!0),Promise.all(du.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=du.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=du.filter(e=>"metadata"===e.kind).length,L=du.filter(e=>"reports"===e.kind).length,M=du.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(tw.$$,{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(tw.$$,{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:dp},({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(dc,{isOpen:c,onClose:()=>m(!1),onSuccess:()=>{w(),K(e=>e+1)}}))},dg=({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"))))},dE=({required:e,children:t})=>{let{has:r,isAuthenticated:l}=v();return((0,a.useEffect)(()=>{l||(0,aO.jL)()},[l]),l)?r(...e)?n().createElement(n().Fragment,null,t):n().createElement(dg,{requiredPrivileges:e}):null},df=(e,t)=>n().createElement(dE,{required:y.bO[e]},t),db=()=>n().createElement(i.BV,null,n().createElement(i.qh,{element:n().createElement(k,null)},n().createElement(i.qh,{path:"/",element:df("/",n().createElement(V,null))}),n().createElement(i.qh,{path:"/reports",element:df("/reports",n().createElement(te,null))}),n().createElement(i.qh,{path:"/new",element:df("/new",n().createElement(tA,null))}),n().createElement(i.qh,{path:"/edit/:reportId",element:df("/edit/:reportId",n().createElement(tA,null))}),n().createElement(i.qh,{path:"/indicators",element:df("/indicators",n().createElement(ay,null))}),n().createElement(i.qh,{path:"/sections",element:df("/sections",n().createElement(aU,null))}),n().createElement(i.qh,{path:"/run",element:df("/run",n().createElement(nw,null))}),n().createElement(i.qh,{path:"/run-reports",element:df("/run-reports",n().createElement(nw,null))}),n().createElement(i.qh,{path:"/admin",element:df("/admin",n().createElement(n3,null))}),n().createElement(i.qh,{path:"/admin/report-categories",element:df("/admin/report-categories",n().createElement(n7,null))}),n().createElement(i.qh,{path:"/admin/age-categories",element:df("/admin/age-categories",n().createElement(n9,null))}),n().createElement(i.qh,{path:"/admin/age-groups",element:df("/admin/age-groups",n().createElement(lt,null))}),n().createElement(i.qh,{path:"/admin/report-library",element:df("/admin/report-library",n().createElement(lm,null))}),n().createElement(i.qh,{path:"/admin/etl-sources",element:df("/admin/etl-sources",n().createElement(ly,null))}),n().createElement(i.qh,{path:"/admin/etl-tasks",element:df("/admin/etl-tasks",n().createElement(ii,null))}),n().createElement(i.qh,{path:"/admin/etl-monitors",element:df("/admin/etl-monitors",n().createElement(og,null))}),n().createElement(i.qh,{path:"/admin/etl-monitors/builder",element:df("/admin/etl-monitors/builder",n().createElement(oi,null))}),n().createElement(i.qh,{path:"/admin/etl-browser",element:df("/admin/etl-browser",n().createElement(iw,null))}),n().createElement(i.qh,{path:"/admin/dashboards",element:df("/admin/dashboards",n().createElement(sa,null))}),n().createElement(i.qh,{path:"/dashboards",element:df("/dashboards",n().createElement(oH,null))}),n().createElement(i.qh,{path:"/dashboards/:code",element:df("/dashboards/:code",n().createElement(oq,null))}),n().createElement(i.qh,{path:"/etl-dashboard",element:df("/etl-dashboard",n().createElement(oG,null))}),n().createElement(i.qh,{path:"/admin/themes",element:df("/admin/themes",n().createElement(n5,null))}),n().createElement(i.qh,{path:"/linelist",element:df("/linelist",n().createElement(sl,null))}),n().createElement(i.qh,{path:"/linelist/new",element:df("/linelist/new",n().createElement(dn,null))}),n().createElement(i.qh,{path:"/linelist/edit/:reportId",element:df("/linelist/edit/:reportId",n().createElement(dn,null))}),n().createElement(i.qh,{path:"/linelist/run/:reportId",element:df("/linelist/run/:reportId",n().createElement(di,null))}),n().createElement(i.qh,{path:"/import-export",element:df("/import-export",n().createElement(d_,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})}))),dy=()=>n().createElement(l.Kd,{basename:`${window.spaBase}/report-builder`},n().createElement(i.BV,null,n().createElement(i.qh,{path:"/*",element:n().createElement(db,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(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/&#x2F;/g,"/").replace(/&#x60;/g,"`").replace(/&#x3D;/g,"=");while(r.length!==t&&/[&amp;]/.test(r));return r}}}]);