@gen-epix/ui-client-casedb 4.0.0 → 4.0.2

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 (393) hide show
  1. package/dist/@types/mui.d.ts +1 -1
  2. package/dist/@types/{ui-casedb.d.ts → ui-client-casedb.d.ts} +1 -1
  3. package/dist/_chunks/AddCasesToEventDialog.js +74 -74
  4. package/dist/_chunks/AddCasesToEventDialog.js.map +1 -1
  5. package/dist/_chunks/CaseContentForm.js +2 -2
  6. package/dist/_chunks/CaseContentForm.js.map +1 -1
  7. package/dist/_chunks/CaseDbDownloadUtil.js +40 -35
  8. package/dist/_chunks/CaseDbDownloadUtil.js.map +1 -1
  9. package/dist/_chunks/CaseInfoDialog.js +195 -195
  10. package/dist/_chunks/CaseInfoDialog.js.map +1 -1
  11. package/dist/_chunks/CaseSetInfoDialog.js +131 -131
  12. package/dist/_chunks/CaseSetInfoDialog.js.map +1 -1
  13. package/dist/_chunks/CaseTypeInfoDialog.js +63 -61
  14. package/dist/_chunks/CaseTypeInfoDialog.js.map +1 -1
  15. package/dist/_chunks/CasesAlreadyInCaseSetWarning.js +6 -6
  16. package/dist/_chunks/CasesAlreadyInCaseSetWarning.js.map +1 -1
  17. package/dist/_chunks/CompletCaseTypeLoader.js +3 -3
  18. package/dist/_chunks/CompletCaseTypeLoader.js.map +1 -1
  19. package/dist/_chunks/CreateEventDialogSuccessNotificationMessage.js +1 -1
  20. package/dist/_chunks/CreateEventDialogSuccessNotificationMessage.js.map +1 -1
  21. package/dist/_chunks/CustomTabPanel.js.map +1 -1
  22. package/dist/_chunks/Dashboard.js +399 -386
  23. package/dist/_chunks/Dashboard.js.map +1 -1
  24. package/dist/_chunks/DashboardStoreLoader.js +5 -5
  25. package/dist/_chunks/DashboardStoreLoader.js.map +1 -1
  26. package/dist/_chunks/DataCollectionAccessInfo.js +21 -21
  27. package/dist/_chunks/DataCollectionAccessInfo.js.map +1 -1
  28. package/dist/_chunks/EpiCurveUtil.js +4 -4
  29. package/dist/_chunks/EpiCurveUtil.js.map +1 -1
  30. package/dist/_chunks/EpiCurveWidget.js +189 -183
  31. package/dist/_chunks/EpiCurveWidget.js.map +1 -1
  32. package/dist/_chunks/FilterUtil.js +103 -101
  33. package/dist/_chunks/FilterUtil.js.map +1 -1
  34. package/dist/_chunks/FindSimilarCasesDialog.js +16 -16
  35. package/dist/_chunks/FindSimilarCasesDialog.js.map +1 -1
  36. package/dist/_chunks/FindSimilarCasesUtil.js +9 -9
  37. package/dist/_chunks/FindSimilarCasesUtil.js.map +1 -1
  38. package/dist/_chunks/HomePageTrends.js +8 -8
  39. package/dist/_chunks/HomePageTrends.js.map +1 -1
  40. package/dist/_chunks/LegendaItem.js +3 -3
  41. package/dist/_chunks/LegendaItem.js.map +1 -1
  42. package/dist/_chunks/LineListWidget.js +23 -21
  43. package/dist/_chunks/LineListWidget.js.map +1 -1
  44. package/dist/_chunks/PanelSeparator.js +374 -384
  45. package/dist/_chunks/PanelSeparator.js.map +1 -1
  46. package/dist/_chunks/Upload.js +222 -207
  47. package/dist/_chunks/Upload.js.map +1 -1
  48. package/dist/_chunks/UploadUtil.js +1970 -841
  49. package/dist/_chunks/UploadUtil.js.map +1 -1
  50. package/dist/_chunks/UserRightsDialog.js +12 -12
  51. package/dist/_chunks/UserRightsDialog.js.map +1 -1
  52. package/dist/_chunks/_MapCache.js +2 -2
  53. package/dist/_chunks/_baseGet.js +1 -1
  54. package/dist/_chunks/_baseGet.js.map +1 -1
  55. package/dist/_chunks/_baseIteratee.js +1 -1
  56. package/dist/_chunks/_baseIteratee.js.map +1 -1
  57. package/dist/_chunks/_setToString.js.map +1 -1
  58. package/dist/_chunks/{chunk-KS7C4IRE.js → chunk-BV7QT456.js} +330 -495
  59. package/dist/_chunks/chunk-BV7QT456.js.map +1 -0
  60. package/dist/_chunks/cloneDeep.js +11 -9
  61. package/dist/_chunks/cloneDeep.js.map +1 -1
  62. package/dist/_chunks/dashboardStore.js +259 -261
  63. package/dist/_chunks/dashboardStore.js.map +1 -1
  64. package/dist/_chunks/esm.js +2900 -2868
  65. package/dist/_chunks/esm.js.map +1 -1
  66. package/dist/_chunks/format.js +8 -8
  67. package/dist/_chunks/format.js.map +1 -1
  68. package/dist/_chunks/index.esm.js +919 -796
  69. package/dist/_chunks/index.esm.js.map +1 -1
  70. package/dist/_chunks/index.module.js +1 -1
  71. package/dist/_chunks/index.module.js.map +1 -1
  72. package/dist/_chunks/protectedTokens.js +79 -81
  73. package/dist/_chunks/protectedTokens.js.map +1 -1
  74. package/dist/_chunks/react.js +1 -1
  75. package/dist/_chunks/react.js.map +1 -1
  76. package/dist/_chunks/round.js +1 -1
  77. package/dist/_chunks/round.js.map +1 -1
  78. package/dist/_chunks/shallow.js +2 -2
  79. package/dist/_chunks/shallow.js.map +1 -1
  80. package/dist/_chunks/sync.js +198 -161
  81. package/dist/_chunks/sync.js.map +1 -1
  82. package/dist/_chunks/toDate.js +1 -1
  83. package/dist/_chunks/toDate.js.map +1 -1
  84. package/dist/_chunks/toString.js +1 -1
  85. package/dist/_chunks/toString.js.map +1 -1
  86. package/dist/_chunks/useUnit.js.map +1 -1
  87. package/dist/_chunks/vanilla.js +1 -1
  88. package/dist/_chunks/vanilla.js.map +1 -1
  89. package/dist/_chunks/yup.js +5 -5
  90. package/dist/_chunks/yup.js.map +1 -1
  91. package/dist/classes/filters/SelectionFilter.d.ts +2 -2
  92. package/dist/classes/filters/TreeFilter.d.ts +2 -2
  93. package/dist/classes/services/DataService/index.js +3 -3
  94. package/dist/classes/services/DataService/index.js.map +1 -1
  95. package/dist/classes/services/EventBusService/EventBusService.d.ts +1 -1
  96. package/dist/classes/services/EventBusService/index.js.map +1 -1
  97. package/dist/classes/services/LineListService/LineListServiceAbstract/index.js +1 -1
  98. package/dist/classes/services/LineListService/LineListServiceAbstract/index.js.map +1 -1
  99. package/dist/components/app/CaseDbApp/index.js +8 -5
  100. package/dist/components/app/CaseDbApp/index.js.map +1 -1
  101. package/dist/components/form/fields/ArrangementEditor/index.js +83 -83
  102. package/dist/components/form/fields/ArrangementEditor/index.js.map +1 -1
  103. package/dist/components/ui/AddCasesToEventDialog/AddCasesToEventDialog.d.ts +2 -2
  104. package/dist/components/ui/CaseContentFormDialog/CaseContentFormDialog.d.ts +2 -2
  105. package/dist/components/ui/CaseContentFormDialog/index.js +1 -1
  106. package/dist/components/ui/CaseContentFormDialog/index.js.map +1 -1
  107. package/dist/components/ui/CaseInfoDialog/CaseInfoDialog.d.ts +2 -2
  108. package/dist/components/ui/CaseSetInfoDialog/CaseSetInfoDialog.d.ts +2 -2
  109. package/dist/components/ui/CaseSummary/index.js +1 -1
  110. package/dist/components/ui/CaseSummary/index.js.map +1 -1
  111. package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialog.d.ts +2 -2
  112. package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogContent.d.ts +1 -1
  113. package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogWithLoader.d.ts +2 -2
  114. package/dist/components/ui/ContextMenu/index.js.map +1 -1
  115. package/dist/components/ui/CreateEventDialog/CreateEventDialog.d.ts +2 -2
  116. package/dist/components/ui/CreateEventDialog/index.js +9 -9
  117. package/dist/components/ui/CreateEventDialog/index.js.map +1 -1
  118. package/dist/components/ui/Dashboard/DashboardDownloadSidebarItem.d.ts +1 -1
  119. package/dist/components/ui/Dashboard/DashboardSettingsSidebarItem.d.ts +1 -1
  120. package/dist/components/ui/Dashboard/DashboardWidget.d.ts +1 -1
  121. package/dist/components/ui/DashboardEditCases/index.js +1 -1
  122. package/dist/components/ui/DashboardEditCases/index.js.map +1 -1
  123. package/dist/components/ui/FileSelector/index.js +46 -46
  124. package/dist/components/ui/FileSelector/index.js.map +1 -1
  125. package/dist/components/ui/FindSimilarCasesDialog/FindSimilarCasesDialog.d.ts +2 -2
  126. package/dist/components/ui/Grouping/index.js +50 -50
  127. package/dist/components/ui/Grouping/index.js.map +1 -1
  128. package/dist/components/ui/HistogramWidget/index.js +1 -1
  129. package/dist/components/ui/HistogramWidget/index.js.map +1 -1
  130. package/dist/components/ui/MapWidget/index.js +7 -3
  131. package/dist/components/ui/MapWidget/index.js.map +1 -1
  132. package/dist/components/ui/RemoveCasesFromEventDialog/RemoveCasesFromEventDialog.d.ts +2 -2
  133. package/dist/components/ui/RemoveCasesFromEventDialog/index.js +6 -6
  134. package/dist/components/ui/RemoveCasesFromEventDialog/index.js.map +1 -1
  135. package/dist/components/ui/RemoveFindSimilarCasesResultDialog/RemoveFindSimilarCasesResultDialog.d.ts +2 -2
  136. package/dist/components/ui/SequenceDownloadDialog/SequenceDownloadDialog.d.ts +2 -2
  137. package/dist/components/ui/SequenceDownloadDialog/index.js +22 -22
  138. package/dist/components/ui/SequenceDownloadDialog/index.js.map +1 -1
  139. package/dist/components/ui/TreeDescription/index.js.map +1 -1
  140. package/dist/components/ui/TreeWidget/index.js +11 -11
  141. package/dist/components/ui/TreeWidget/index.js.map +1 -1
  142. package/dist/components/ui/Upload/UploadCaseResultTable.d.ts +2 -2
  143. package/dist/components/ui/Upload/UploadEditColumnValuesDialog.d.ts +2 -2
  144. package/dist/components/ui/UserRightsDialog/UserRightsDialog.d.ts +2 -2
  145. package/dist/components/ui/UsersEffectiveRightsDetailsDialog/UsersEffectiveRightsDetailsDialog.d.ts +2 -2
  146. package/dist/components/ui/UsersEffectiveRightsDetailsDialog/index.js +25 -11
  147. package/dist/components/ui/UsersEffectiveRightsDetailsDialog/index.js.map +1 -1
  148. package/dist/components/ui/Warning/index.js.map +1 -1
  149. package/dist/components/ui/WidgetHeaderIconButton/index.js.map +1 -1
  150. package/dist/components/ui/WidgetMenu/WidgetMenu.d.ts +1 -1
  151. package/dist/components/ui/WidgetMenu/index.js +2 -2
  152. package/dist/components/ui/WidgetMenu/index.js.map +1 -1
  153. package/dist/components/ui/WidgetUnavailable/index.js.map +1 -1
  154. package/dist/constants/query.d.ts +1 -1
  155. package/dist/constants/query.js +1 -1
  156. package/dist/constants/query.js.map +1 -1
  157. package/dist/context/caseAbac/CaseAbacContext.d.ts +1 -1
  158. package/dist/dataHooks/useAssemblyProtocolsQuery/index.js +3 -3
  159. package/dist/dataHooks/useAssemblyProtocolsQuery/index.js.map +1 -1
  160. package/dist/dataHooks/useAssemblyProtocolsQuery/useAssemblyProtocolsQuery.d.ts +1 -1
  161. package/dist/dataHooks/useCaseRightsQuery/index.js +2 -2
  162. package/dist/dataHooks/useCaseRightsQuery/index.js.map +1 -1
  163. package/dist/dataHooks/useCaseSetCategoriesQuery/index.js +3 -3
  164. package/dist/dataHooks/useCaseSetCategoriesQuery/index.js.map +1 -1
  165. package/dist/dataHooks/useCaseSetCategoriesQuery/useCaseSetCategoriesQuery.d.ts +1 -1
  166. package/dist/dataHooks/useCaseSetRightsQuery/index.js +2 -2
  167. package/dist/dataHooks/useCaseSetRightsQuery/index.js.map +1 -1
  168. package/dist/dataHooks/useCaseSetStatsQuery/index.js +3 -3
  169. package/dist/dataHooks/useCaseSetStatsQuery/index.js.map +1 -1
  170. package/dist/dataHooks/useCaseSetStatsQuery/useCaseSetStatsQuery.d.ts +1 -1
  171. package/dist/dataHooks/useCaseSetStatusesQuery/index.js +3 -3
  172. package/dist/dataHooks/useCaseSetStatusesQuery/index.js.map +1 -1
  173. package/dist/dataHooks/useCaseSetStatusesQuery/useCaseSetStatusesQuery.d.ts +1 -1
  174. package/dist/dataHooks/useCaseSetsQuery/index.js +3 -3
  175. package/dist/dataHooks/useCaseSetsQuery/index.js.map +1 -1
  176. package/dist/dataHooks/useCaseSetsQuery/useCaseSetsQuery.d.ts +1 -1
  177. package/dist/dataHooks/useCaseTypeSetCategoriesQuery/index.js +3 -3
  178. package/dist/dataHooks/useCaseTypeSetCategoriesQuery/index.js.map +1 -1
  179. package/dist/dataHooks/useCaseTypeSetCategoriesQuery/useCaseTypeSetCategoriesQuery.d.ts +1 -1
  180. package/dist/dataHooks/useCaseTypeSetCategoryPurposeQuery/index.js.map +1 -1
  181. package/dist/dataHooks/useCaseTypeSetCategoryPurposeQuery/useCaseTypeSetCategoryPurposeQuery.d.ts +1 -1
  182. package/dist/dataHooks/useCaseTypeSetMembersQuery/index.js +2 -2
  183. package/dist/dataHooks/useCaseTypeSetMembersQuery/index.js.map +1 -1
  184. package/dist/dataHooks/useCaseTypeSetsQuery/index.js +3 -3
  185. package/dist/dataHooks/useCaseTypeSetsQuery/index.js.map +1 -1
  186. package/dist/dataHooks/useCaseTypeSetsQuery/useCaseTypeSetsQuery.d.ts +1 -1
  187. package/dist/dataHooks/useCaseTypeStatsQuery/index.js +2 -2
  188. package/dist/dataHooks/useCaseTypeStatsQuery/index.js.map +1 -1
  189. package/dist/dataHooks/useCaseTypesQuery/index.js +3 -3
  190. package/dist/dataHooks/useCaseTypesQuery/index.js.map +1 -1
  191. package/dist/dataHooks/useCaseTypesQuery/useCaseTypesQuery.d.ts +1 -1
  192. package/dist/dataHooks/useColSetMembersQuery/index.js +2 -2
  193. package/dist/dataHooks/useColSetMembersQuery/index.js.map +1 -1
  194. package/dist/dataHooks/useColSetsQuery/index.js +3 -3
  195. package/dist/dataHooks/useColSetsQuery/index.js.map +1 -1
  196. package/dist/dataHooks/useColSetsQuery/useColSetsQuery.d.ts +1 -1
  197. package/dist/dataHooks/useColTypesQuery/index.js.map +1 -1
  198. package/dist/dataHooks/useColTypesQuery/useColTypesQuery.d.ts +1 -1
  199. package/dist/dataHooks/useColsQuery/index.js +3 -3
  200. package/dist/dataHooks/useColsQuery/index.js.map +1 -1
  201. package/dist/dataHooks/useColsQuery/useColsQuery.d.ts +1 -1
  202. package/dist/dataHooks/useConceptQuery/index.js +3 -3
  203. package/dist/dataHooks/useConceptQuery/index.js.map +1 -1
  204. package/dist/dataHooks/useConceptQuery/useConceptQuery.d.ts +1 -1
  205. package/dist/dataHooks/useConceptRelationTypeQuery/index.js.map +1 -1
  206. package/dist/dataHooks/useConceptRelationTypeQuery/useConceptRelationTypeQuery.d.ts +1 -1
  207. package/dist/dataHooks/useConceptSetTypeQuery/index.js.map +1 -1
  208. package/dist/dataHooks/useConceptSetTypeQuery/useConceptSetTypeQuery.d.ts +1 -1
  209. package/dist/dataHooks/useConceptSetsQuery/index.js +3 -3
  210. package/dist/dataHooks/useConceptSetsQuery/index.js.map +1 -1
  211. package/dist/dataHooks/useConceptSetsQuery/useConceptSetsQuery.d.ts +1 -1
  212. package/dist/dataHooks/useDataCollectionSetMembersQuery/index.js +2 -2
  213. package/dist/dataHooks/useDataCollectionSetMembersQuery/index.js.map +1 -1
  214. package/dist/dataHooks/useDataCollectionsQuery/index.js +3 -3
  215. package/dist/dataHooks/useDataCollectionsQuery/index.js.map +1 -1
  216. package/dist/dataHooks/useDataCollectionsQuery/useDataCollectionsQuery.d.ts +1 -1
  217. package/dist/dataHooks/useDimTypesQuery/index.js.map +1 -1
  218. package/dist/dataHooks/useDimTypesQuery/useDimTypesQuery.d.ts +1 -1
  219. package/dist/dataHooks/useDimsQuery/index.js +3 -3
  220. package/dist/dataHooks/useDimsQuery/index.js.map +1 -1
  221. package/dist/dataHooks/useDimsQuery/useDimsQuery.d.ts +1 -1
  222. package/dist/dataHooks/useDiseasesQuery/index.js +3 -3
  223. package/dist/dataHooks/useDiseasesQuery/index.js.map +1 -1
  224. package/dist/dataHooks/useDiseasesQuery/useDiseasesQuery.d.ts +1 -1
  225. package/dist/dataHooks/useEtiologicalAgentsQuery/index.js +3 -3
  226. package/dist/dataHooks/useEtiologicalAgentsQuery/index.js.map +1 -1
  227. package/dist/dataHooks/useEtiologicalAgentsQuery/useEtiologicalAgentsQuery.d.ts +1 -1
  228. package/dist/dataHooks/useGeneticDistanceProtocolsQuery/index.js +3 -3
  229. package/dist/dataHooks/useGeneticDistanceProtocolsQuery/index.js.map +1 -1
  230. package/dist/dataHooks/useGeneticDistanceProtocolsQuery/useGeneticDistanceProtocolsQuery.d.ts +1 -1
  231. package/dist/dataHooks/useOrganizationAccessCasePoliciesQuery/index.js +2 -2
  232. package/dist/dataHooks/useOrganizationAccessCasePoliciesQuery/index.js.map +1 -1
  233. package/dist/dataHooks/useOrganizationShareCasePoliciesQuery/index.js +2 -2
  234. package/dist/dataHooks/useOrganizationShareCasePoliciesQuery/index.js.map +1 -1
  235. package/dist/dataHooks/useRefColsQuery/index.js +3 -3
  236. package/dist/dataHooks/useRefColsQuery/index.js.map +1 -1
  237. package/dist/dataHooks/useRefColsQuery/useRefColsQuery.d.ts +1 -1
  238. package/dist/dataHooks/useRefColsValidationRulesQuery/index.js +2 -2
  239. package/dist/dataHooks/useRefColsValidationRulesQuery/index.js.map +1 -1
  240. package/dist/dataHooks/useRefDimsQuery/index.js +3 -3
  241. package/dist/dataHooks/useRefDimsQuery/index.js.map +1 -1
  242. package/dist/dataHooks/useRefDimsQuery/useRefDimsQuery.d.ts +1 -1
  243. package/dist/dataHooks/useRegionQuery/index.js +3 -3
  244. package/dist/dataHooks/useRegionQuery/index.js.map +1 -1
  245. package/dist/dataHooks/useRegionQuery/useRegionQuery.d.ts +1 -1
  246. package/dist/dataHooks/useRegionRelationTypeQuery/index.js.map +1 -1
  247. package/dist/dataHooks/useRegionRelationTypeQuery/useRegionRelationTypeQuery.d.ts +1 -1
  248. package/dist/dataHooks/useRegionSetsQuery/index.js +3 -3
  249. package/dist/dataHooks/useRegionSetsQuery/index.js.map +1 -1
  250. package/dist/dataHooks/useRegionSetsQuery/useRegionSetsQuery.d.ts +1 -1
  251. package/dist/dataHooks/useSequencingProtocolsQuery/index.js +3 -3
  252. package/dist/dataHooks/useSequencingProtocolsQuery/index.js.map +1 -1
  253. package/dist/dataHooks/useSequencingProtocolsQuery/useSequencingProtocolsQuery.d.ts +1 -1
  254. package/dist/dataHooks/useTreeAlgorithmCodesQuery/index.js.map +1 -1
  255. package/dist/dataHooks/useTreeAlgorithmCodesQuery/useTreeAlgorithmCodesQuery.d.ts +1 -1
  256. package/dist/dataHooks/useUnitQuery/useUnit.d.ts +1 -1
  257. package/dist/dataHooks/useUserAccessCasePoliciesQuery/index.js +2 -2
  258. package/dist/dataHooks/useUserAccessCasePoliciesQuery/index.js.map +1 -1
  259. package/dist/dataHooks/useUserEffectiveRightsQuery/index.js +3 -3
  260. package/dist/dataHooks/useUserEffectiveRightsQuery/index.js.map +1 -1
  261. package/dist/dataHooks/useUserEffectiveRightsQuery/useUserEffectiveRightsQuery.d.ts +1 -1
  262. package/dist/dataHooks/useUserShareCasePoliciesQuery/index.js +2 -2
  263. package/dist/dataHooks/useUserShareCasePoliciesQuery/index.js.map +1 -1
  264. package/dist/hooks/useOrganizationCasePolicyNameFactory/index.js +2 -2
  265. package/dist/hooks/useOrganizationCasePolicyNameFactory/index.js.map +1 -1
  266. package/dist/hooks/useOrganizationCasePolicyNameFactory/useOrganizationCasePolicyNameFactory.d.ts +1 -1
  267. package/dist/hooks/useUserCasePolicyNameFactory/index.js +3 -3
  268. package/dist/hooks/useUserCasePolicyNameFactory/index.js.map +1 -1
  269. package/dist/hooks/useUserCasePolicyNameFactory/useUserCasePolicyNameFactory.d.ts +1 -1
  270. package/dist/locale/nl.json +1 -1
  271. package/dist/models/config.d.ts +1 -1
  272. package/dist/models/dashboard.d.ts +1 -1
  273. package/dist/models/dashboard.js.map +1 -1
  274. package/dist/models/theme.d.ts +2 -2
  275. package/dist/pages/CaseDbUsersAdminPage/index.js +5 -5
  276. package/dist/pages/CaseDbUsersAdminPage/index.js.map +1 -1
  277. package/dist/pages/CaseSetCategoryAdminPage/index.js +4 -4
  278. package/dist/pages/CaseSetCategoryAdminPage/index.js.map +1 -1
  279. package/dist/pages/CaseSetStatusAdminPage/index.js +4 -4
  280. package/dist/pages/CaseSetStatusAdminPage/index.js.map +1 -1
  281. package/dist/pages/CaseTypeSetCategoriesAdminPage/index.js +4 -4
  282. package/dist/pages/CaseTypeSetCategoriesAdminPage/index.js.map +1 -1
  283. package/dist/pages/CaseTypeSetsAdminPage/index.js +6 -6
  284. package/dist/pages/CaseTypeSetsAdminPage/index.js.map +1 -1
  285. package/dist/pages/CaseTypesAdminPage/index.js +5 -5
  286. package/dist/pages/CaseTypesAdminPage/index.js.map +1 -1
  287. package/dist/pages/CasesDetailPage/index.js +5 -5
  288. package/dist/pages/CasesDetailPage/index.js.map +1 -1
  289. package/dist/pages/CasesPage/index.js +10 -10
  290. package/dist/pages/CasesPage/index.js.map +1 -1
  291. package/dist/pages/ColSetsAdminPage/index.js +6 -6
  292. package/dist/pages/ColSetsAdminPage/index.js.map +1 -1
  293. package/dist/pages/ColsAdminPage/index.js +5 -5
  294. package/dist/pages/ColsAdminPage/index.js.map +1 -1
  295. package/dist/pages/ConceptRelationsAdminPage/index.js +19 -19
  296. package/dist/pages/ConceptRelationsAdminPage/index.js.map +1 -1
  297. package/dist/pages/ConceptSetsAdminPage/index.js +5 -5
  298. package/dist/pages/ConceptSetsAdminPage/index.js.map +1 -1
  299. package/dist/pages/ConceptsAdminPage/index.js +5 -5
  300. package/dist/pages/ConceptsAdminPage/index.js.map +1 -1
  301. package/dist/pages/DataCollectionSetsAdminPage/index.js +12 -12
  302. package/dist/pages/DataCollectionSetsAdminPage/index.js.map +1 -1
  303. package/dist/pages/DataCollectionVisualizationPage/index.js +4 -4
  304. package/dist/pages/DataCollectionVisualizationPage/index.js.map +1 -1
  305. package/dist/pages/DataCollectionsAdminPage/index.js +4 -4
  306. package/dist/pages/DataCollectionsAdminPage/index.js.map +1 -1
  307. package/dist/pages/DimsAdminPage/index.js +6 -6
  308. package/dist/pages/DimsAdminPage/index.js.map +1 -1
  309. package/dist/pages/DiseasesAdminPage/index.js +4 -4
  310. package/dist/pages/DiseasesAdminPage/index.js.map +1 -1
  311. package/dist/pages/EtiologicalAgentsAdminPage/index.js +4 -4
  312. package/dist/pages/EtiologicalAgentsAdminPage/index.js.map +1 -1
  313. package/dist/pages/EtiologiesAdminPage/index.js +3 -3
  314. package/dist/pages/EtiologiesAdminPage/index.js.map +1 -1
  315. package/dist/pages/EventsDetailPage/index.js +5 -5
  316. package/dist/pages/EventsDetailPage/index.js.map +1 -1
  317. package/dist/pages/EventsPage/index.js +11 -11
  318. package/dist/pages/EventsPage/index.js.map +1 -1
  319. package/dist/pages/HomePage/index.js +2 -2
  320. package/dist/pages/HomePage/index.js.map +1 -1
  321. package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js +4 -4
  322. package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js.map +1 -1
  323. package/dist/pages/OrganizationShareCasePoliciesAdminPage/index.js +4 -4
  324. package/dist/pages/OrganizationShareCasePoliciesAdminPage/index.js.map +1 -1
  325. package/dist/pages/RefColsAdminPage/index.js +7 -7
  326. package/dist/pages/RefColsAdminPage/index.js.map +1 -1
  327. package/dist/pages/RefDimsAdminPage/index.js +5 -5
  328. package/dist/pages/RefDimsAdminPage/index.js.map +1 -1
  329. package/dist/pages/RegionRelationsAdminPage/index.js +3 -3
  330. package/dist/pages/RegionRelationsAdminPage/index.js.map +1 -1
  331. package/dist/pages/RegionSetShapesAdminPage/index.js +4 -4
  332. package/dist/pages/RegionSetShapesAdminPage/index.js.map +1 -1
  333. package/dist/pages/RegionSetsAdminPage/index.js +5 -5
  334. package/dist/pages/RegionSetsAdminPage/index.js.map +1 -1
  335. package/dist/pages/RegionsAdminPage/index.js +5 -5
  336. package/dist/pages/RegionsAdminPage/index.js.map +1 -1
  337. package/dist/pages/TrendsPage/index.js +1 -1
  338. package/dist/pages/TrendsPage/index.js.map +1 -1
  339. package/dist/pages/UploadPage/index.js +1 -1
  340. package/dist/pages/UploadPage/index.js.map +1 -1
  341. package/dist/pages/UserAccessCasePoliciesAdminPage/index.js +4 -4
  342. package/dist/pages/UserAccessCasePoliciesAdminPage/index.js.map +1 -1
  343. package/dist/pages/UserEffectiveRightsAdminPage/index.js +12 -12
  344. package/dist/pages/UserEffectiveRightsAdminPage/index.js.map +1 -1
  345. package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js +8 -8
  346. package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js.map +1 -1
  347. package/dist/pages/UserShareCasePoliciesAdminPage/index.js +4 -4
  348. package/dist/pages/UserShareCasePoliciesAdminPage/index.js.map +1 -1
  349. package/dist/routes/adminRoutes.d.ts +1 -1
  350. package/dist/routes/index.js +11 -8
  351. package/dist/routes/index.js.map +1 -1
  352. package/dist/routes/routes.d.ts +1 -1
  353. package/dist/setup/setup.js +5 -5
  354. package/dist/setup/setup.js.map +1 -1
  355. package/dist/stores/dashboardStore/dashboardStore.d.ts +1 -1
  356. package/dist/stores/uploadStore/index.js +2 -2
  357. package/dist/stores/uploadStore/index.js.map +1 -1
  358. package/dist/stores/uploadStore/uploadStore.d.ts +1 -1
  359. package/dist/stores/userProfileStore/index.js +2 -2
  360. package/dist/stores/userProfileStore/index.js.map +1 -1
  361. package/dist/theme/demoTheme/index.js +2 -2
  362. package/dist/theme/demoTheme/index.js.map +1 -1
  363. package/dist/utils/CaseDbDataUtil/CaseDbDataUtil.d.ts +1 -1
  364. package/dist/utils/CaseDbDataUtil/index.js +1 -1
  365. package/dist/utils/CaseDbDataUtil/index.js.map +1 -1
  366. package/dist/utils/CaseDbStandardConfigUtil/index.js +2488 -1408
  367. package/dist/utils/CaseDbStandardConfigUtil/index.js.map +1 -1
  368. package/dist/utils/CaseDbTableUtil/CaseDbTableUtil.d.ts +1 -1
  369. package/dist/utils/CaseDbTableUtil/index.js +1 -1
  370. package/dist/utils/CaseDbTableUtil/index.js.map +1 -1
  371. package/dist/utils/CaseSelectionUtil/index.js.map +1 -1
  372. package/dist/utils/CaseTypeFormUtil/CaseTypeFormUtil.d.ts +1 -1
  373. package/dist/utils/CaseTypeFormUtil/index.js +7 -10
  374. package/dist/utils/CaseTypeFormUtil/index.js.map +1 -1
  375. package/dist/utils/CaseTypeUtil/index.js +1 -1
  376. package/dist/utils/CaseTypeUtil/index.js.map +1 -1
  377. package/dist/utils/CaseUtil/index.js +3 -3
  378. package/dist/utils/CaseUtil/index.js.map +1 -1
  379. package/dist/utils/DashboardUtil/index.js +1 -1
  380. package/dist/utils/DashboardUtil/index.js.map +1 -1
  381. package/dist/utils/DataSetUtil/index.js.map +1 -1
  382. package/dist/utils/FileUtil/index.js +1 -1
  383. package/dist/utils/FileUtil/index.js.map +1 -1
  384. package/dist/utils/FilterUtil/FilterUtil.d.ts +2 -2
  385. package/dist/utils/HistogramUtil/index.js +1 -1
  386. package/dist/utils/HistogramUtil/index.js.map +1 -1
  387. package/dist/utils/MapUtil/index.js +1 -1
  388. package/dist/utils/MapUtil/index.js.map +1 -1
  389. package/dist/utils/StratificationUtil/index.js +3 -2
  390. package/dist/utils/StratificationUtil/index.js.map +1 -1
  391. package/dist/utils/UploadUtil/UploadUtil.d.ts +1 -1
  392. package/package.json +19 -11
  393. package/dist/_chunks/chunk-KS7C4IRE.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"EpiCurveWidget.js","names":[],"sources":["../../../../node_modules/.pnpm/date-fns@4.4.0/node_modules/date-fns/endOfWeek.js","../../../../node_modules/.pnpm/date-fns@4.4.0/node_modules/date-fns/endOfISOWeek.js","../../../../node_modules/.pnpm/date-fns@4.4.0/node_modules/date-fns/lastDayOfMonth.js","../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isString.js","../../src/components/ui/EpiCurveWidget/EpiCurveBarChart.tsx","../../src/components/ui/EpiCurveWidget/EpiCurveStackedAreaChart.tsx","../../src/components/ui/EpiCurveWidget/EpiCurveWidget.tsx"],"sourcesContent":["import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfWeek} function options.\n */\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a week\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport function endOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date, options?.in);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n\n _date.setDate(_date.getDate() + diff);\n _date.setHours(23, 59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfWeek;\n","import { endOfWeek } from \"./endOfWeek.js\";\n\n/**\n * The {@link endOfISOWeek} function options.\n */\n\n/**\n * @name endOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the end of an ISO week for the given date.\n *\n * @description\n * Return the end of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of an ISO week\n *\n * @example\n * // The end of an ISO week for 2 September 2014 11:55:00:\n * const result = endOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport function endOfISOWeek(date, options) {\n return endOfWeek(date, { ...options, weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default endOfISOWeek;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link lastDayOfMonth} function options.\n */\n\n/**\n * @name lastDayOfMonth\n * @category Month Helpers\n * @summary Return the last day of a month for the given date.\n *\n * @description\n * Return the last day of a month for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The last day of a month\n *\n * @example\n * // The last day of a month for 2 September 2014 11:55:00:\n * const result = lastDayOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport function lastDayOfMonth(date, options) {\n const _date = toDate(date, options?.in);\n const month = _date.getMonth();\n _date.setFullYear(_date.getFullYear(), month + 1, 0);\n _date.setHours(0, 0, 0, 0);\n return toDate(_date, options?.in);\n}\n\n// Fallback for modularized imports:\nexport default lastDayOfMonth;\n","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","import type { EChartsReactProps } from 'echarts-for-react';\nimport EChartsReact from 'echarts-for-react';\nimport type {\n EChartsOption,\n EChartsType,\n} from 'echarts';\nimport {\n use,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport type { Ref } from 'react';\nimport isString from 'lodash/isString';\nimport intersection from 'lodash/intersection';\nimport { useTheme } from '@mui/material';\n\nimport { EpiCurveUtil } from '../../../utils/EpiCurveUtil';\nimport type { EpiCurveChartItem } from '../../../utils/EpiCurveUtil';\nimport type { Stratification } from '../../../models/stratification';\nimport { DashboardContext } from '../Dashboard/context/DashboardContext';\nimport { DASHBOARD_COMPONENT_NAME } from '../../../constants/dashboard';\n\nexport interface EpiCurveBarChartProps {\n chartRef: Ref<EChartsReact>;\n echarts: unknown;\n getXAxisLabel: (value: Date) => string;\n items: EpiCurveChartItem[];\n onCaseIdsChange?: (caseIds: string[]) => void;\n onChartReady?: (chart: EChartsType) => void;\n onPointMouseUp?: (payload: { caseIds: string[]; focussedDate: string; mouseEvent: MouseEvent }) => void;\n stratification?: Stratification;\n xAxisIntervals: Date[];\n}\n\nexport const EpiCurveBarChart = ({\n chartRef,\n echarts,\n getXAxisLabel,\n items,\n onCaseIdsChange,\n onChartReady,\n onPointMouseUp,\n stratification,\n xAxisIntervals,\n}: EpiCurveBarChartProps) => {\n const theme = useTheme();\n const chartInstanceRef = useRef<EChartsType | null>(null);\n const dashboardContext = use(DashboardContext);\n\n // Calculate series data only when rendering\n const seriesData = useMemo(() => EpiCurveUtil.getBarChartSeriesData(items, xAxisIntervals, getXAxisLabel, stratification, theme), [items, xAxisIntervals, getXAxisLabel, stratification, theme]);\n\n useEffect(() => {\n const unsubscribe = dashboardContext.highlightSubject.subscribe((highlighting) => {\n if (highlighting.origin === DASHBOARD_COMPONENT_NAME.EPI_CURVE) {\n return;\n }\n\n const instance = chartInstanceRef.current;\n if (!instance) {\n return;\n }\n\n if (!highlighting.caseIds.length) {\n instance.dispatchAction({\n type: 'downplay',\n });\n return;\n }\n\n const highlightTargets: Array<{ dataIndex: number; seriesIndex: number }> = [];\n seriesData.series?.forEach((serie, serieIndex) => {\n const serieData = (serie as { data: unknown[] }).data;\n serieData?.forEach((dataArray: unknown, dataIndex: number) => {\n const caseIds = JSON.parse((dataArray as [unknown, unknown, string])[2]) as string[];\n if (intersection(caseIds, highlighting.caseIds).length) {\n highlightTargets.push({\n dataIndex,\n seriesIndex: serieIndex,\n });\n }\n });\n });\n\n instance.dispatchAction({\n type: 'downplay',\n });\n\n highlightTargets.forEach((target) => {\n instance.dispatchAction({\n dataIndex: target.dataIndex,\n seriesIndex: target.seriesIndex,\n type: 'highlight',\n });\n });\n });\n\n return () => {\n unsubscribe();\n };\n }, [dashboardContext, seriesData]);\n\n const onInternalChartReady = useCallback((chart: EChartsType) => {\n chartInstanceRef.current = chart;\n onChartReady?.(chart);\n }, [onChartReady]);\n\n const getOptions = useCallback(() => {\n return {\n grid: {\n bottom: 64,\n left: 48,\n right: 8,\n top: 16,\n },\n series: seriesData.series,\n tooltip: {\n formatter: (params) => {\n const typedParams = params as { name: string; seriesName: string; value: number[] };\n\n // For bar chart, show count\n if (stratification?.legendaItems?.length) {\n return `${typedParams.name} - ${typedParams.seriesName} (n=${typedParams.value[1]})`;\n }\n return `${typedParams.name} (n=${typedParams.value[1]})`;\n },\n show: true,\n trigger: 'item',\n triggerOn: 'mousemove',\n },\n xAxis: {\n axisLabel: {\n height: 100,\n rotate: 45,\n },\n axisTick: {\n alignWithLabel: true,\n show: true,\n },\n data: xAxisIntervals.map(x => getXAxisLabel(x)),\n type: 'category',\n },\n yAxis: {\n max: seriesData.max,\n min: 0,\n minInterval: 1,\n type: 'value',\n },\n } satisfies EChartsOption;\n }, [stratification, seriesData.series, seriesData.max, xAxisIntervals, getXAxisLabel]);\n\n const onEvents = useMemo<EChartsReactProps['onEvents']>(() => {\n const getCaseIdsFromEvent = (event: unknown): string[] => {\n const caseIds = (event as { data?: [unknown, unknown, string] })?.data?.[2];\n if (isString(caseIds)) {\n return JSON.parse(caseIds) as string[];\n }\n return [];\n };\n\n return {\n mouseout: () => {\n onCaseIdsChange?.([]);\n },\n mouseover: (event: unknown) => {\n onCaseIdsChange?.(getCaseIdsFromEvent(event));\n },\n mouseup: (event: unknown) => {\n const mouseEvent = (event as { event?: { event?: MouseEvent } })?.event?.event;\n onPointMouseUp?.({\n caseIds: getCaseIdsFromEvent(event),\n focussedDate: (event as { name?: string })?.name,\n mouseEvent,\n });\n },\n };\n }, [onCaseIdsChange, onPointMouseUp]);\n\n return (\n <EChartsReact\n echarts={echarts}\n notMerge\n onChartReady={onInternalChartReady}\n onEvents={onEvents}\n option={getOptions()}\n ref={chartRef}\n style={{\n height: '100%',\n position: 'absolute',\n width: '100%',\n }}\n />\n );\n};\n","import type { EChartsReactProps } from 'echarts-for-react';\nimport EChartsReact from 'echarts-for-react';\nimport type {\n EChartsOption,\n EChartsType,\n} from 'echarts';\nimport {\n use,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport type { Ref } from 'react';\nimport isString from 'lodash/isString';\nimport intersection from 'lodash/intersection';\nimport { useTheme } from '@mui/material';\n\nimport { EpiCurveUtil } from '../../../utils/EpiCurveUtil';\nimport type { EpiCurveChartItem } from '../../../utils/EpiCurveUtil';\nimport type { Stratification } from '../../../models/stratification';\nimport { StratificationUtil } from '../../../utils/StratificationUtil';\nimport { DashboardContext } from '../Dashboard/context/DashboardContext';\nimport { DASHBOARD_COMPONENT_NAME } from '../../../constants/dashboard';\n\nexport interface EpiCurveStackedAreaChartProps {\n chartRef: Ref<EChartsReact>;\n echarts: unknown;\n getXAxisLabel: (value: Date) => string;\n includeMissingValues: boolean;\n items: EpiCurveChartItem[];\n onCaseIdsChange?: (caseIds: string[]) => void;\n onChartReady?: (chart: EChartsType) => void;\n onPointMouseUp?: (payload: { caseIds: string[]; focussedDate: string; mouseEvent: MouseEvent }) => void;\n stratification?: Stratification;\n xAxisIntervals: Date[];\n}\n\nexport const EpiCurveStackedAreaChart = ({\n chartRef,\n echarts,\n getXAxisLabel,\n includeMissingValues,\n items,\n onCaseIdsChange,\n onChartReady,\n onPointMouseUp,\n stratification,\n xAxisIntervals,\n}: EpiCurveStackedAreaChartProps) => {\n const theme = useTheme();\n const hoveredSeriesIndexRef = useRef<null | number>(null);\n const chartInstanceRef = useRef<EChartsType | null>(null);\n const dashboardContext = use(DashboardContext);\n\n // Calculate series data only when rendering\n const seriesData = useMemo(() =>\n EpiCurveUtil.getAreaChartSeriesData(items, xAxisIntervals, getXAxisLabel, includeMissingValues, stratification),\n [items, xAxisIntervals, getXAxisLabel, includeMissingValues, stratification]);\n\n // Fast lookup table: color -> all caseIds having that stratification color.\n const caseIdsByColor = useMemo(() => {\n const buckets: { [color: string]: string[] } = {};\n const colorMap = stratification?.caseIdColors ?? {};\n\n Object.entries(colorMap).forEach(([caseId, color]) => {\n if (!buckets[color]) {\n buckets[color] = [];\n }\n buckets[color].push(caseId);\n });\n\n return buckets;\n }, [stratification]);\n\n // Fast O(1) lookup: all caseIds for a hovered stratification area (series).\n const caseIdsBySeriesIndex = useMemo(() => {\n if (!seriesData.series?.length) {\n return [] as string[][];\n }\n\n return (seriesData.series as Array<{ color?: string }>).map((series) => {\n const seriesColor = series.color;\n return typeof seriesColor === 'string' ? (caseIdsByColor[seriesColor] ?? []) : [];\n });\n }, [caseIdsByColor, seriesData]);\n\n const getCaseIdsForPoint = useCallback((seriesIndex: number, dataIndex: number): string[] => {\n if (!seriesData.series || seriesIndex < 0 || dataIndex < 0) {\n return [];\n }\n const series = (seriesData.series as Array<{ data?: unknown[] }>)?.[seriesIndex];\n const point = (series?.data as Array<[unknown, unknown, string]>)?.[dataIndex];\n if (point?.[2] && isString(point[2])) {\n return JSON.parse(point[2]) as string[];\n }\n return [];\n }, [seriesData]);\n\n const expandToStratificationColorCaseIds = useCallback((candidateCaseIds: string[]): string[] => {\n if (!candidateCaseIds.length) {\n return [];\n }\n\n const colorMap = stratification?.caseIdColors;\n if (!colorMap) {\n return candidateCaseIds;\n }\n\n const referenceCaseId = candidateCaseIds.find(caseId => !!colorMap[caseId]);\n if (!referenceCaseId) {\n return candidateCaseIds;\n }\n\n const referenceColor = colorMap[referenceCaseId];\n return caseIdsByColor[referenceColor] ?? candidateCaseIds;\n }, [caseIdsByColor, stratification]);\n\n const getOptions = useCallback(() => {\n return {\n color: StratificationUtil.getEchartsColors(stratification, theme),\n grid: {\n bottom: 64,\n left: 48,\n right: 8,\n top: 16,\n },\n series: seriesData.series,\n tooltip: {\n formatter: (params) => {\n const typedParams = params as Array<{ marker?: string; name: string; seriesIndex: number; seriesName: string; value: number[] }>;\n if (!typedParams?.length) {\n return '';\n }\n\n const header = typedParams[0].name;\n const hoveredSeriesIndex = hoveredSeriesIndexRef.current;\n const lines = typedParams.map(param => {\n const line = `${param.marker ?? ''}${param.seriesName} (${Number(param.value[1]).toFixed(1)}%)`;\n if (hoveredSeriesIndex !== null && param.seriesIndex === hoveredSeriesIndex) {\n return `<b>${line}</b>`;\n }\n return line;\n });\n return [header, ...lines].join('<br/>');\n },\n show: true,\n trigger: 'axis',\n triggerOn: 'mousemove',\n },\n xAxis: {\n axisLabel: {\n height: 100,\n rotate: 45,\n },\n axisTick: {\n alignWithLabel: true,\n show: true,\n },\n data: xAxisIntervals.map(x => getXAxisLabel(x)),\n type: 'category',\n },\n yAxis: {\n max: seriesData.max,\n min: 0,\n minInterval: 1,\n type: 'value',\n },\n } satisfies EChartsOption;\n }, [stratification, theme, seriesData.series, seriesData.max, xAxisIntervals, getXAxisLabel]);\n\n const setHighlightedSeries = useCallback((seriesIndex: null | number) => {\n const instance = chartInstanceRef.current;\n if (!instance) {\n return;\n }\n\n instance.dispatchAction({\n type: 'downplay',\n });\n\n if (typeof seriesIndex === 'number' && seriesIndex >= 0) {\n instance.dispatchAction({\n seriesIndex,\n type: 'highlight',\n });\n }\n }, []);\n\n useEffect(() => {\n const unsubscribe = dashboardContext.highlightSubject.subscribe((highlighting) => {\n if (highlighting.origin === DASHBOARD_COMPONENT_NAME.EPI_CURVE) {\n return;\n }\n\n const instance = chartInstanceRef.current;\n if (!instance) {\n return;\n }\n\n if (!highlighting.caseIds.length) {\n instance.dispatchAction({\n type: 'downplay',\n });\n return;\n }\n\n const highlightTargets: Array<{ dataIndex: number; seriesIndex: number }> = [];\n seriesData.series?.forEach((serie, serieIndex) => {\n const serieData = (serie as { data: unknown[] }).data;\n serieData?.forEach((dataArray: unknown, dataIndex: number) => {\n const caseIds = JSON.parse((dataArray as [unknown, unknown, string])[2]) as string[];\n if (intersection(caseIds, highlighting.caseIds).length) {\n highlightTargets.push({\n dataIndex,\n seriesIndex: serieIndex,\n });\n }\n });\n });\n\n instance.dispatchAction({\n type: 'downplay',\n });\n\n highlightTargets.forEach((target) => {\n instance.dispatchAction({\n dataIndex: target.dataIndex,\n seriesIndex: target.seriesIndex,\n type: 'highlight',\n });\n });\n });\n\n return () => {\n unsubscribe();\n };\n }, [dashboardContext, seriesData]);\n\n const onInternalChartReady = useCallback((chart: EChartsType) => {\n chartInstanceRef.current = chart;\n onChartReady?.(chart);\n }, [onChartReady]);\n\n const onEvents = useMemo<EChartsReactProps['onEvents']>(() => {\n const getCaseIdsFromItemEvent = (event: unknown): string[] => {\n const eventData = event as {\n data?: [unknown, unknown, string];\n dataIndex?: number;\n seriesIndex?: number;\n };\n\n if (typeof eventData.seriesIndex === 'number' && eventData.seriesIndex >= 0) {\n return caseIdsBySeriesIndex[eventData.seriesIndex] ?? [];\n }\n\n const caseIdsFromData = eventData?.data?.[2];\n if (isString(caseIdsFromData)) {\n return expandToStratificationColorCaseIds(JSON.parse(caseIdsFromData) as string[]);\n }\n\n if (typeof eventData.seriesIndex === 'number'\n && typeof eventData.dataIndex === 'number'\n && eventData.seriesIndex >= 0\n && eventData.dataIndex >= 0) {\n return expandToStratificationColorCaseIds(getCaseIdsForPoint(eventData.seriesIndex, eventData.dataIndex));\n }\n\n return [];\n };\n\n return {\n globalout: () => {\n hoveredSeriesIndexRef.current = null;\n setHighlightedSeries(null);\n onCaseIdsChange?.([]);\n },\n mouseout: () => {\n hoveredSeriesIndexRef.current = null;\n setHighlightedSeries(null);\n onCaseIdsChange?.([]);\n },\n mouseover: (event: unknown) => {\n const eventData = event as { seriesIndex?: number };\n hoveredSeriesIndexRef.current = typeof eventData.seriesIndex === 'number' ? eventData.seriesIndex : null;\n setHighlightedSeries(hoveredSeriesIndexRef.current);\n const caseIds = getCaseIdsFromItemEvent(event);\n if (caseIds.length) {\n onCaseIdsChange?.(caseIds);\n }\n },\n mouseup: (event: unknown) => {\n const mouseEvent = (event as { event?: { event?: MouseEvent } })?.event?.event;\n onPointMouseUp?.({\n caseIds: getCaseIdsFromItemEvent(event),\n focussedDate: (event as { name?: string })?.name,\n mouseEvent,\n });\n },\n updateAxisPointer: (event: unknown) => {\n const axisEvent = event as {\n seriesDataIndices?: Array<{ seriesIndex?: number }>;\n };\n const hoveredSeriesIndex = axisEvent.seriesDataIndices?.[0]?.seriesIndex;\n if (typeof hoveredSeriesIndex === 'number') {\n hoveredSeriesIndexRef.current = hoveredSeriesIndex;\n }\n setHighlightedSeries(hoveredSeriesIndexRef.current);\n },\n };\n }, [caseIdsBySeriesIndex, expandToStratificationColorCaseIds, getCaseIdsForPoint, onCaseIdsChange, onPointMouseUp, setHighlightedSeries]);\n\n return (\n <EChartsReact\n echarts={echarts}\n notMerge\n onChartReady={onInternalChartReady}\n onEvents={onEvents}\n option={getOptions()}\n ref={chartRef}\n style={{\n height: '100%',\n position: 'absolute',\n width: '100%',\n }}\n />\n );\n};\n","import {\n Box,\n ListItemIcon,\n ListItemText,\n MenuItem,\n} from '@mui/material';\nimport LeaderboardIcon from '@mui/icons-material/Leaderboard';\nimport AreaChartIcon from '@mui/icons-material/AreaChart';\nimport {\n dispose,\n getInstanceByDom,\n init,\n use as registerECharts,\n} from 'echarts/core';\nimport {\n DataZoomComponent,\n GridComponent,\n TooltipComponent,\n} from 'echarts/components';\nimport {\n BarChart,\n LineChart,\n} from 'echarts/charts';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport type EChartsReact from 'echarts-for-react';\nimport type { ReactElement } from 'react';\nimport {\n use,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport isString from 'lodash/isString';\nimport round from 'lodash/round';\nimport type { EChartsType } from 'echarts';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport FilterAltIcon from '@mui/icons-material/FilterAlt';\nimport {\n endOfISOWeek,\n endOfQuarter,\n endOfYear,\n lastDayOfMonth,\n parse,\n startOfISOWeek,\n startOfMonth,\n startOfQuarter,\n startOfYear,\n} from 'date-fns';\nimport type { CaseDbCol } from '@gen-epix/api-casedb';\nimport { CaseDbDimType } from '@gen-epix/api-casedb';\nimport type { MenuItemData } from '@gen-epix/ui/models/nestedMenu';\nimport { DATE_FORMAT } from '@gen-epix/ui-core/constants/date';\n\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { CaseTypeUtil } from '../../../utils/CaseTypeUtil';\nimport { EpiCurveUtil } from '../../../utils/EpiCurveUtil';\nimport type { ContextMenuConfigWithPosition } from '../ContextMenu';\nimport { ContextMenu } from '../ContextMenu';\nimport { WidgetUnavailable } from '../WidgetUnavailable';\nimport { EventBusService } from '../../../classes/services/EventBusService';\nimport { CaseDbDownloadUtil } from '../../../utils/CaseDbDownloadUtil';\nimport { DashboardUtil } from '../../../utils/DashboardUtil';\nimport { DashboardWidget } from '../Dashboard';\nimport { DASHBOARD_COMPONENT_NAME } from '../../../constants/dashboard';\nimport { UserProfileStoreContext } from '../../../stores/userProfileStore/userProfileStoreContext';\nimport { DashboardContext } from '../Dashboard/context/DashboardContext';\nimport type {\n DashboardEpiCurveSettings,\n EpiCurveWidgetData,\n} from '../../../models/dashboard';\n\nimport { EpiCurveBarChart } from './EpiCurveBarChart';\nimport { EpiCurveStackedAreaChart } from './EpiCurveStackedAreaChart';\n\nconst echartsCore = {\n dispose,\n getInstanceByDom,\n init,\n};\n\nregisterECharts([TooltipComponent, GridComponent, DataZoomComponent, BarChart, LineChart, CanvasRenderer]);\n\nexport type ChartType = 'area' | 'bar';\n\nexport const EpiCurveWidget = () => {\n const { t } = useTranslation();\n const [contextMenuConfig, setContextMenuConfig] = useState<ContextMenuConfigWithPosition | null>(null);\n const [chartType, setChartType] = useState<ChartType>('bar');\n const chartRef = useRef<EChartsReact>(null);\n const dashboardContext = use(DashboardContext);\n const userProfileStore = use(UserProfileStoreContext);\n\n const dashboardStore = use(DashboardStoreContext);\n const stratification = useStore(dashboardStore, (state) => state.stratification);\n const isDataLoading = useStore(dashboardStore, (state) => state.isDataLoading);\n const sortedData = useStore(dashboardStore, (state) => state.sortedData);\n const completeCaseType = useStore(dashboardStore, (state) => state.completeCaseType);\n const updateWidgetData = useStore(dashboardStore, (state) => state.updateWidgetData);\n const epiCurveWidgetData = useStore(dashboardStore, (state) => state.getWidgetData<EpiCurveWidgetData>(DASHBOARD_COMPONENT_NAME.EPI_CURVE));\n const setFilterValue = useStore(dashboardStore, (state) => state.setFilterValue);\n const filterDimensions = useStore(dashboardStore, (state) => state.filterDimensions);\n const timeDims = useMemo(() => CaseTypeUtil.getDims(completeCaseType, [CaseDbDimType.TIME]), [completeCaseType]);\n const isIncludeMissingValuesInAreaChartEnabled = useStore(userProfileStore, (state) => (state.dashboardWidgetSettings[DASHBOARD_COMPONENT_NAME.EPI_CURVE] as DashboardEpiCurveSettings).isIncludeMissingValuesInAreaChartEnabled);\n const [focussedDate, setFocussedDate] = useState<string>(null);\n const [col, setCol] = useState<CaseDbCol>(null);\n const colLabel = col?.label ?? '';\n\n const onEpiContextMenuClose = useCallback(() => {\n setContextMenuConfig(null);\n setFocussedDate(null);\n }, []);\n\n const lineListCaseCount = useMemo(() => {\n return DashboardUtil.getCaseCount(sortedData);\n }, [sortedData]);\n\n\n // Auto-switch to bar chart if stratification is disabled while showing area chart\n useEffect(() => {\n if (!stratification && chartType === 'area') {\n setChartType('bar');\n }\n }, [stratification, chartType]);\n\n const primaryMenu = useMemo<MenuItemData[]>(() => {\n return [\n {\n active: chartType === 'bar',\n callback: () => {\n setChartType('bar');\n },\n label: t`Bar chart`,\n leftIcon: <LeaderboardIcon />,\n },\n {\n active: chartType === 'area',\n callback: () => {\n setChartType('area');\n },\n disabled: !stratification,\n label: t`Normalized stacked area chart`,\n leftIcon: <AreaChartIcon />,\n },\n ];\n }, [t, chartType, stratification]);\n\n const titleMenu = useMemo<MenuItemData>(() => {\n let label: string;\n if (col) {\n label = t('Epi curve: {{label}}', { label: col.label });\n } else {\n label = t`Epi curve`;\n }\n\n const menu: MenuItemData = {\n disabled: !timeDims.length,\n items: [],\n label,\n tooltip: col ? completeCaseType.ref_cols[col.ref_col_id].description : undefined,\n };\n\n completeCaseType.ordered_dim_ids.map(x => completeCaseType.dims[x]).filter(dim => {\n const refDim = completeCaseType.ref_dims[dim.ref_dim_id];\n return refDim.dim_type === CaseDbDimType.TIME;\n }).forEach((dim) => {\n if (menu.items.length) {\n menu.items.at(-1).divider = true;\n }\n completeCaseType.ordered_col_ids_by_dim[dim.id].map(id => completeCaseType.cols[id]).forEach((c) => {\n menu.items.push({\n active: !!(c.id === col?.id),\n callback: () => {\n updateWidgetData<EpiCurveWidgetData>(DASHBOARD_COMPONENT_NAME.EPI_CURVE, { columnId: c.id });\n setCol(c);\n },\n label: c.label,\n tooltip: c.description,\n });\n });\n });\n\n return menu;\n }, [col, completeCaseType, t, timeDims.length, updateWidgetData]);\n\n useEffect(() => {\n if (col) {\n return;\n }\n if (!timeDims.length) {\n return;\n }\n if (epiCurveWidgetData.columnId) {\n setCol(CaseTypeUtil.getCols(completeCaseType).find(c => c.id === epiCurveWidgetData.columnId));\n } else if (sortedData.length) {\n setCol(EpiCurveUtil.getPreferredTimeColumn(\n completeCaseType,\n sortedData,\n CaseTypeUtil.getCols(completeCaseType, completeCaseType.case_date_dim_id),\n ));\n }\n }, [col, completeCaseType, epiCurveWidgetData.columnId, timeDims, sortedData]);\n\n const items = useMemo(() => {\n if (!col) {\n return [];\n }\n return EpiCurveUtil.getSortedItems(completeCaseType, sortedData, [col]);\n }, [col, sortedData, completeCaseType]);\n\n const epiCurveCaseCount = useMemo(() => {\n return items.reduce((prev, current) => {\n return prev + current.value;\n }, 0) ?? 0;\n }, [items]);\n\n const getXAxisLabel = useCallback((value: Date): string => {\n if (!col) {\n return null;\n }\n\n return EpiCurveUtil.getXAxisLabel(completeCaseType.ref_cols[col.ref_col_id].col_type, value);\n }, [col, completeCaseType.ref_cols]);\n\n const xAxisIntervals = useMemo<Date[]>(() => {\n if (!col) {\n return [];\n }\n return EpiCurveUtil.getXAxisIntervals(completeCaseType.ref_cols[col.ref_col_id].col_type, items);\n }, [col, completeCaseType.ref_cols, items]);\n\n const onChartCaseIdsChange = useCallback((caseIds: string[]) => {\n dashboardContext.highlight({\n caseIds,\n origin: DASHBOARD_COMPONENT_NAME.EPI_CURVE,\n });\n }, [dashboardContext]);\n\n const onChartPointMouseUp = useCallback((payload: { caseIds: string[]; focussedDate: string; mouseEvent: MouseEvent }) => {\n setFocussedDate(payload.focussedDate);\n setContextMenuConfig({\n caseIds: payload.caseIds,\n mouseEvent: payload.mouseEvent,\n position: {\n left: payload.mouseEvent?.clientX,\n top: payload.mouseEvent?.clientY,\n },\n });\n }, []);\n\n const onChartReady = useCallback((chart: EChartsType) => {\n const dom = chart.getDom();\n dom?.setAttribute('aria-label', t('Epidemiological curve showing the number of cases over time ({{label}})', { label: colLabel }));\n dom?.setAttribute('role', 'img');\n }, [colLabel, t]);\n\n const onShowOnlySelectedDateMenuItemClick = useCallback(async (onMenuClose: () => void) => {\n if (!isString(focussedDate) || !col?.id) {\n onMenuClose();\n return;\n }\n const dateDimension = filterDimensions.find(filterDimension => filterDimension.filterIds.includes(col.id));\n const dateColumnId = dateDimension.preferredFilterId;\n\n let fromDate: Date;\n let toDate: Date;\n\n if (focussedDate.match(/^\\d{4}$/)) {\n const date = parse(focussedDate, DATE_FORMAT.YEAR, new Date());\n fromDate = startOfYear(date);\n toDate = endOfYear(date);\n // year\n } else if (focussedDate.match(/^\\d{4}-\\d{2}$/)) {\n // month\n const date = parse(focussedDate, DATE_FORMAT.YEAR_MONTH, new Date());\n fromDate = startOfMonth(date);\n toDate = lastDayOfMonth(date);\n } else if (focussedDate.match(/^\\d{4}-\\d{2}-\\d{2}$/)) {\n // full date\n const date = parse(focussedDate, DATE_FORMAT.DATE, new Date());\n fromDate = date;\n toDate = date;\n } else if (focussedDate.match(/^\\d{4}-W\\d{2}$/)) {\n // week\n const date = parse(focussedDate, DATE_FORMAT.YEAR_WEEK, new Date(), {\n useAdditionalWeekYearTokens: true,\n });\n fromDate = startOfISOWeek(date);\n toDate = endOfISOWeek(date);\n } else if (focussedDate.match(/^\\d{4}-Q\\d$/)) {\n // quarter\n const date = parse(focussedDate, DATE_FORMAT.YEAR_QUARTER, new Date());\n fromDate = startOfQuarter(date);\n toDate = endOfQuarter(date);\n }\n\n if (fromDate && toDate) {\n await setFilterValue(dateColumnId, [fromDate, toDate]);\n }\n\n onMenuClose();\n }, [focussedDate, col, filterDimensions, setFilterValue]);\n\n const getEpiContextMenuExtraItems = useCallback((onMenuClose: () => void): ReactElement => {\n if (!focussedDate) {\n return null;\n }\n return (\n <MenuItem\n divider\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={async () => await onShowOnlySelectedDateMenuItemClick(onMenuClose)}\n >\n <ListItemIcon>\n <FilterAltIcon fontSize={'small'} />\n </ListItemIcon>\n <ListItemText>\n {t('Filter (show only {{date}})', { date: focussedDate })}\n </ListItemText>\n </MenuItem>\n );\n }, [focussedDate, onShowOnlySelectedDateMenuItemClick, t]);\n\n const missingCasesCount = lineListCaseCount - epiCurveCaseCount;\n const missingCasesPercentage = missingCasesCount > 0 ? round(missingCasesCount / lineListCaseCount * 100, 1) : 0;\n const canShowWidget = epiCurveCaseCount > 0 && timeDims.length > 0;\n\n const widgetUnavailableReason = useMemo<ReactElement | string>(() => {\n if (canShowWidget) {\n return;\n }\n if (!timeDims.length) {\n return t`No time column found.`;\n }\n if (!lineListCaseCount) {\n return t`No cases found.`;\n }\n if (!col) {\n return t`No time column selected.`;\n }\n if (!epiCurveCaseCount) {\n return t`No cases with valid date- / time information found for the selected column.`;\n }\n return null;\n }, [canShowWidget, col, epiCurveCaseCount, lineListCaseCount, t, timeDims.length]);\n\n\n useEffect(() => {\n const emitDownloadOptions = () => {\n EventBusService.getInstance().emit('onDownloadOptionsChanged', {\n disabled: !canShowWidget,\n items: [\n {\n callback: () => CaseDbDownloadUtil.downloadEchartsImage(t`Epi curve`, chartRef.current.getEchartsInstance(), 'png', completeCaseType, t),\n label: t`Save as PNG`,\n },\n {\n callback: () => CaseDbDownloadUtil.downloadEchartsImage(t`Epi curve`, chartRef.current.getEchartsInstance(), 'jpeg', completeCaseType, t),\n label: t`Save as JPEG`,\n },\n ],\n zone: DASHBOARD_COMPONENT_NAME.EPI_CURVE,\n zoneLabel: t`Epi curve`,\n });\n };\n emitDownloadOptions();\n const eventBusManager = EventBusService.getInstance();\n eventBusManager.addEventListener('onDownloadOptionsRequested', emitDownloadOptions);\n return () => {\n eventBusManager.emit('onDownloadOptionsChanged', {\n items: null,\n zone: DASHBOARD_COMPONENT_NAME.EPI_CURVE,\n zoneLabel: t`Epi curve`,\n });\n eventBusManager.removeEventListener('onDownloadOptionsRequested', emitDownloadOptions);\n };\n }, [completeCaseType, canShowWidget, t]);\n\n return (\n <DashboardWidget\n expandDisabled={!canShowWidget}\n isLoading={isDataLoading}\n primaryMenu={primaryMenu}\n title={titleMenu}\n warningMessage={canShowWidget && epiCurveCaseCount > 0 && missingCasesCount > 0 ? t('Missing cases: {{missingCasesCount}} ({{missingCasesPercentage}}%)', { missingCasesCount, missingCasesPercentage }) : undefined}\n widgetName={DASHBOARD_COMPONENT_NAME.EPI_CURVE}\n >\n {!canShowWidget && (\n <WidgetUnavailable\n reason={widgetUnavailableReason}\n widgetLabel={t`epi curve`}\n />\n )}\n {canShowWidget && (\n <Box\n sx={{\n height: '100%',\n position: 'relative',\n }}\n >\n {items?.length > 0 && chartType === 'bar' && (\n <EpiCurveBarChart\n chartRef={chartRef}\n echarts={echartsCore}\n getXAxisLabel={getXAxisLabel}\n items={items}\n onCaseIdsChange={onChartCaseIdsChange}\n onChartReady={onChartReady}\n onPointMouseUp={onChartPointMouseUp}\n stratification={stratification}\n xAxisIntervals={xAxisIntervals}\n />\n )}\n {items?.length > 0 && chartType === 'area' && (\n <EpiCurveStackedAreaChart\n chartRef={chartRef}\n echarts={echartsCore}\n getXAxisLabel={getXAxisLabel}\n includeMissingValues={isIncludeMissingValuesInAreaChartEnabled}\n items={items}\n onCaseIdsChange={onChartCaseIdsChange}\n onChartReady={onChartReady}\n onPointMouseUp={onChartPointMouseUp}\n stratification={stratification}\n xAxisIntervals={xAxisIntervals}\n />\n )}\n <ContextMenu\n config={contextMenuConfig}\n getExtraItems={getEpiContextMenuExtraItems}\n onMenuClose={onEpiContextMenuClose}\n />\n </Box>\n )}\n </DashboardWidget>\n );\n};\n"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}
1
+ {"version":3,"file":"EpiCurveWidget.js","names":[],"sources":["../../../../node_modules/.pnpm/date-fns@4.4.0/node_modules/date-fns/endOfWeek.js","../../../../node_modules/.pnpm/date-fns@4.4.0/node_modules/date-fns/endOfISOWeek.js","../../../../node_modules/.pnpm/date-fns@4.4.0/node_modules/date-fns/lastDayOfMonth.js","../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isString.js","../../src/components/ui/EpiCurveWidget/EpiCurveBarChart.tsx","../../src/components/ui/EpiCurveWidget/EpiCurveStackedAreaChart.tsx","../../src/components/ui/EpiCurveWidget/EpiCurveWidget.tsx"],"sourcesContent":["import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfWeek} function options.\n */\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a week\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport function endOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date, options?.in);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n\n _date.setDate(_date.getDate() + diff);\n _date.setHours(23, 59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfWeek;\n","import { endOfWeek } from \"./endOfWeek.js\";\n\n/**\n * The {@link endOfISOWeek} function options.\n */\n\n/**\n * @name endOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the end of an ISO week for the given date.\n *\n * @description\n * Return the end of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of an ISO week\n *\n * @example\n * // The end of an ISO week for 2 September 2014 11:55:00:\n * const result = endOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport function endOfISOWeek(date, options) {\n return endOfWeek(date, { ...options, weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default endOfISOWeek;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link lastDayOfMonth} function options.\n */\n\n/**\n * @name lastDayOfMonth\n * @category Month Helpers\n * @summary Return the last day of a month for the given date.\n *\n * @description\n * Return the last day of a month for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The last day of a month\n *\n * @example\n * // The last day of a month for 2 September 2014 11:55:00:\n * const result = lastDayOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport function lastDayOfMonth(date, options) {\n const _date = toDate(date, options?.in);\n const month = _date.getMonth();\n _date.setFullYear(_date.getFullYear(), month + 1, 0);\n _date.setHours(0, 0, 0, 0);\n return toDate(_date, options?.in);\n}\n\n// Fallback for modularized imports:\nexport default lastDayOfMonth;\n","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","import type { EChartsReactProps } from 'echarts-for-react';\nimport EChartsReact from 'echarts-for-react';\nimport type {\n EChartsOption,\n EChartsType,\n} from 'echarts';\nimport {\n use,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport type { Ref } from 'react';\nimport isString from 'lodash/isString';\nimport intersection from 'lodash/intersection';\nimport { useTheme } from '@mui/material';\n\nimport { EpiCurveUtil } from '../../../utils/EpiCurveUtil';\nimport type { EpiCurveChartItem } from '../../../utils/EpiCurveUtil';\nimport type { Stratification } from '../../../models/stratification';\nimport { DashboardContext } from '../Dashboard/context/DashboardContext';\nimport { DASHBOARD_COMPONENT_NAME } from '../../../constants/dashboard';\n\nexport interface EpiCurveBarChartProps {\n chartRef: Ref<EChartsReact>;\n echarts: unknown;\n getXAxisLabel: (value: Date) => string;\n items: EpiCurveChartItem[];\n onCaseIdsChange?: (caseIds: string[]) => void;\n onChartReady?: (chart: EChartsType) => void;\n onPointMouseUp?: (payload: { caseIds: string[]; focussedDate: string; mouseEvent: MouseEvent }) => void;\n stratification?: Stratification;\n xAxisIntervals: Date[];\n}\n\nexport const EpiCurveBarChart = ({\n chartRef,\n echarts,\n getXAxisLabel,\n items,\n onCaseIdsChange,\n onChartReady,\n onPointMouseUp,\n stratification,\n xAxisIntervals,\n}: EpiCurveBarChartProps) => {\n const theme = useTheme();\n const chartInstanceRef = useRef<EChartsType | null>(null);\n const dashboardContext = use(DashboardContext);\n\n // Calculate series data only when rendering\n const seriesData = useMemo(() => EpiCurveUtil.getBarChartSeriesData(items, xAxisIntervals, getXAxisLabel, stratification, theme), [items, xAxisIntervals, getXAxisLabel, stratification, theme]);\n\n useEffect(() => {\n const unsubscribe = dashboardContext.highlightSubject.subscribe((highlighting) => {\n if (highlighting.origin === DASHBOARD_COMPONENT_NAME.EPI_CURVE) {\n return;\n }\n\n const instance = chartInstanceRef.current;\n if (!instance) {\n return;\n }\n\n if (!highlighting.caseIds.length) {\n instance.dispatchAction({\n type: 'downplay',\n });\n return;\n }\n\n const highlightTargets: Array<{ dataIndex: number; seriesIndex: number }> = [];\n seriesData.series?.forEach((serie, serieIndex) => {\n const serieData = (serie as { data: unknown[] }).data;\n serieData?.forEach((dataArray: unknown, dataIndex: number) => {\n const caseIds = JSON.parse((dataArray as [unknown, unknown, string])[2]) as string[];\n if (intersection(caseIds, highlighting.caseIds).length) {\n highlightTargets.push({\n dataIndex,\n seriesIndex: serieIndex,\n });\n }\n });\n });\n\n instance.dispatchAction({\n type: 'downplay',\n });\n\n highlightTargets.forEach((target) => {\n instance.dispatchAction({\n dataIndex: target.dataIndex,\n seriesIndex: target.seriesIndex,\n type: 'highlight',\n });\n });\n });\n\n return () => {\n unsubscribe();\n };\n }, [dashboardContext, seriesData]);\n\n const onInternalChartReady = useCallback((chart: EChartsType) => {\n chartInstanceRef.current = chart;\n onChartReady?.(chart);\n }, [onChartReady]);\n\n const getOptions = useCallback(() => {\n return {\n grid: {\n bottom: 64,\n left: 48,\n right: 8,\n top: 16,\n },\n series: seriesData.series,\n tooltip: {\n formatter: (params) => {\n const typedParams = params as { name: string; seriesName: string; value: number[] };\n\n // For bar chart, show count\n if (stratification?.legendaItems?.length) {\n return `${typedParams.name} - ${typedParams.seriesName} (n=${typedParams.value[1]})`;\n }\n return `${typedParams.name} (n=${typedParams.value[1]})`;\n },\n show: true,\n trigger: 'item',\n triggerOn: 'mousemove',\n },\n xAxis: {\n axisLabel: {\n height: 100,\n rotate: 45,\n },\n axisTick: {\n alignWithLabel: true,\n show: true,\n },\n data: xAxisIntervals.map(x => getXAxisLabel(x)),\n type: 'category',\n },\n yAxis: {\n max: seriesData.max,\n min: 0,\n minInterval: 1,\n type: 'value',\n },\n } satisfies EChartsOption;\n }, [stratification, seriesData.series, seriesData.max, xAxisIntervals, getXAxisLabel]);\n\n const onEvents = useMemo<EChartsReactProps['onEvents']>(() => {\n const getCaseIdsFromEvent = (event: unknown): string[] => {\n const caseIds = (event as { data?: [unknown, unknown, string] })?.data?.[2];\n if (isString(caseIds)) {\n return JSON.parse(caseIds) as string[];\n }\n return [];\n };\n\n return {\n mouseout: () => {\n onCaseIdsChange?.([]);\n },\n mouseover: (event: unknown) => {\n onCaseIdsChange?.(getCaseIdsFromEvent(event));\n },\n mouseup: (event: unknown) => {\n const mouseEvent = (event as { event?: { event?: MouseEvent } })?.event?.event;\n onPointMouseUp?.({\n caseIds: getCaseIdsFromEvent(event),\n focussedDate: (event as { name?: string })?.name,\n mouseEvent,\n });\n },\n };\n }, [onCaseIdsChange, onPointMouseUp]);\n\n return (\n <EChartsReact\n echarts={echarts}\n notMerge\n onChartReady={onInternalChartReady}\n onEvents={onEvents}\n option={getOptions()}\n ref={chartRef}\n style={{\n height: '100%',\n position: 'absolute',\n width: '100%',\n }}\n />\n );\n};\n","import type { EChartsReactProps } from 'echarts-for-react';\nimport EChartsReact from 'echarts-for-react';\nimport type {\n EChartsOption,\n EChartsType,\n} from 'echarts';\nimport {\n use,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport type { Ref } from 'react';\nimport isString from 'lodash/isString';\nimport intersection from 'lodash/intersection';\nimport { useTheme } from '@mui/material';\n\nimport { EpiCurveUtil } from '../../../utils/EpiCurveUtil';\nimport type { EpiCurveChartItem } from '../../../utils/EpiCurveUtil';\nimport type { Stratification } from '../../../models/stratification';\nimport { StratificationUtil } from '../../../utils/StratificationUtil';\nimport { DashboardContext } from '../Dashboard/context/DashboardContext';\nimport { DASHBOARD_COMPONENT_NAME } from '../../../constants/dashboard';\n\nexport interface EpiCurveStackedAreaChartProps {\n chartRef: Ref<EChartsReact>;\n echarts: unknown;\n getXAxisLabel: (value: Date) => string;\n includeMissingValues: boolean;\n items: EpiCurveChartItem[];\n onCaseIdsChange?: (caseIds: string[]) => void;\n onChartReady?: (chart: EChartsType) => void;\n onPointMouseUp?: (payload: { caseIds: string[]; focussedDate: string; mouseEvent: MouseEvent }) => void;\n stratification?: Stratification;\n xAxisIntervals: Date[];\n}\n\nexport const EpiCurveStackedAreaChart = ({\n chartRef,\n echarts,\n getXAxisLabel,\n includeMissingValues,\n items,\n onCaseIdsChange,\n onChartReady,\n onPointMouseUp,\n stratification,\n xAxisIntervals,\n}: EpiCurveStackedAreaChartProps) => {\n const theme = useTheme();\n const hoveredSeriesIndexRef = useRef<null | number>(null);\n const chartInstanceRef = useRef<EChartsType | null>(null);\n const dashboardContext = use(DashboardContext);\n\n // Calculate series data only when rendering\n const seriesData = useMemo(() =>\n EpiCurveUtil.getAreaChartSeriesData(items, xAxisIntervals, getXAxisLabel, includeMissingValues, stratification),\n [items, xAxisIntervals, getXAxisLabel, includeMissingValues, stratification]);\n\n // Fast lookup table: color -> all caseIds having that stratification color.\n const caseIdsByColor = useMemo(() => {\n const buckets: { [color: string]: string[] } = {};\n const colorMap = stratification?.caseIdColors ?? {};\n\n Object.entries(colorMap).forEach(([caseId, color]) => {\n if (!buckets[color]) {\n buckets[color] = [];\n }\n buckets[color].push(caseId);\n });\n\n return buckets;\n }, [stratification]);\n\n // Fast O(1) lookup: all caseIds for a hovered stratification area (series).\n const caseIdsBySeriesIndex = useMemo(() => {\n if (!seriesData.series?.length) {\n return [] as string[][];\n }\n\n return (seriesData.series as Array<{ color?: string }>).map((series) => {\n const seriesColor = series.color;\n return typeof seriesColor === 'string' ? (caseIdsByColor[seriesColor] ?? []) : [];\n });\n }, [caseIdsByColor, seriesData]);\n\n const getCaseIdsForPoint = useCallback((seriesIndex: number, dataIndex: number): string[] => {\n if (!seriesData.series || seriesIndex < 0 || dataIndex < 0) {\n return [];\n }\n const series = (seriesData.series as Array<{ data?: unknown[] }>)?.[seriesIndex];\n const point = (series?.data as Array<[unknown, unknown, string]>)?.[dataIndex];\n if (point?.[2] && isString(point[2])) {\n return JSON.parse(point[2]) as string[];\n }\n return [];\n }, [seriesData]);\n\n const expandToStratificationColorCaseIds = useCallback((candidateCaseIds: string[]): string[] => {\n if (!candidateCaseIds.length) {\n return [];\n }\n\n const colorMap = stratification?.caseIdColors;\n if (!colorMap) {\n return candidateCaseIds;\n }\n\n const referenceCaseId = candidateCaseIds.find(caseId => !!colorMap[caseId]);\n if (!referenceCaseId) {\n return candidateCaseIds;\n }\n\n const referenceColor = colorMap[referenceCaseId];\n return caseIdsByColor[referenceColor] ?? candidateCaseIds;\n }, [caseIdsByColor, stratification]);\n\n const getOptions = useCallback(() => {\n return {\n color: StratificationUtil.getEchartsColors(stratification, theme),\n grid: {\n bottom: 64,\n left: 48,\n right: 8,\n top: 16,\n },\n series: seriesData.series,\n tooltip: {\n formatter: (params) => {\n const typedParams = params as Array<{ marker?: string; name: string; seriesIndex: number; seriesName: string; value: number[] }>;\n if (!typedParams?.length) {\n return '';\n }\n\n const header = typedParams[0].name;\n const hoveredSeriesIndex = hoveredSeriesIndexRef.current;\n const lines = typedParams.map(param => {\n const line = `${param.marker ?? ''}${param.seriesName} (${Number(param.value[1]).toFixed(1)}%)`;\n if (hoveredSeriesIndex !== null && param.seriesIndex === hoveredSeriesIndex) {\n return `<b>${line}</b>`;\n }\n return line;\n });\n return [header, ...lines].join('<br/>');\n },\n show: true,\n trigger: 'axis',\n triggerOn: 'mousemove',\n },\n xAxis: {\n axisLabel: {\n height: 100,\n rotate: 45,\n },\n axisTick: {\n alignWithLabel: true,\n show: true,\n },\n data: xAxisIntervals.map(x => getXAxisLabel(x)),\n type: 'category',\n },\n yAxis: {\n max: seriesData.max,\n min: 0,\n minInterval: 1,\n type: 'value',\n },\n } satisfies EChartsOption;\n }, [stratification, theme, seriesData.series, seriesData.max, xAxisIntervals, getXAxisLabel]);\n\n const setHighlightedSeries = useCallback((seriesIndex: null | number) => {\n const instance = chartInstanceRef.current;\n if (!instance) {\n return;\n }\n\n instance.dispatchAction({\n type: 'downplay',\n });\n\n if (typeof seriesIndex === 'number' && seriesIndex >= 0) {\n instance.dispatchAction({\n seriesIndex,\n type: 'highlight',\n });\n }\n }, []);\n\n useEffect(() => {\n const unsubscribe = dashboardContext.highlightSubject.subscribe((highlighting) => {\n if (highlighting.origin === DASHBOARD_COMPONENT_NAME.EPI_CURVE) {\n return;\n }\n\n const instance = chartInstanceRef.current;\n if (!instance) {\n return;\n }\n\n if (!highlighting.caseIds.length) {\n instance.dispatchAction({\n type: 'downplay',\n });\n return;\n }\n\n const highlightTargets: Array<{ dataIndex: number; seriesIndex: number }> = [];\n seriesData.series?.forEach((serie, serieIndex) => {\n const serieData = (serie as { data: unknown[] }).data;\n serieData?.forEach((dataArray: unknown, dataIndex: number) => {\n const caseIds = JSON.parse((dataArray as [unknown, unknown, string])[2]) as string[];\n if (intersection(caseIds, highlighting.caseIds).length) {\n highlightTargets.push({\n dataIndex,\n seriesIndex: serieIndex,\n });\n }\n });\n });\n\n instance.dispatchAction({\n type: 'downplay',\n });\n\n highlightTargets.forEach((target) => {\n instance.dispatchAction({\n dataIndex: target.dataIndex,\n seriesIndex: target.seriesIndex,\n type: 'highlight',\n });\n });\n });\n\n return () => {\n unsubscribe();\n };\n }, [dashboardContext, seriesData]);\n\n const onInternalChartReady = useCallback((chart: EChartsType) => {\n chartInstanceRef.current = chart;\n onChartReady?.(chart);\n }, [onChartReady]);\n\n const onEvents = useMemo<EChartsReactProps['onEvents']>(() => {\n const getCaseIdsFromItemEvent = (event: unknown): string[] => {\n const eventData = event as {\n data?: [unknown, unknown, string];\n dataIndex?: number;\n seriesIndex?: number;\n };\n\n if (typeof eventData.seriesIndex === 'number' && eventData.seriesIndex >= 0) {\n return caseIdsBySeriesIndex[eventData.seriesIndex] ?? [];\n }\n\n const caseIdsFromData = eventData?.data?.[2];\n if (isString(caseIdsFromData)) {\n return expandToStratificationColorCaseIds(JSON.parse(caseIdsFromData) as string[]);\n }\n\n if (typeof eventData.seriesIndex === 'number'\n && typeof eventData.dataIndex === 'number'\n && eventData.seriesIndex >= 0\n && eventData.dataIndex >= 0) {\n return expandToStratificationColorCaseIds(getCaseIdsForPoint(eventData.seriesIndex, eventData.dataIndex));\n }\n\n return [];\n };\n\n return {\n globalout: () => {\n hoveredSeriesIndexRef.current = null;\n setHighlightedSeries(null);\n onCaseIdsChange?.([]);\n },\n mouseout: () => {\n hoveredSeriesIndexRef.current = null;\n setHighlightedSeries(null);\n onCaseIdsChange?.([]);\n },\n mouseover: (event: unknown) => {\n const eventData = event as { seriesIndex?: number };\n hoveredSeriesIndexRef.current = typeof eventData.seriesIndex === 'number' ? eventData.seriesIndex : null;\n setHighlightedSeries(hoveredSeriesIndexRef.current);\n const caseIds = getCaseIdsFromItemEvent(event);\n if (caseIds.length) {\n onCaseIdsChange?.(caseIds);\n }\n },\n mouseup: (event: unknown) => {\n const mouseEvent = (event as { event?: { event?: MouseEvent } })?.event?.event;\n onPointMouseUp?.({\n caseIds: getCaseIdsFromItemEvent(event),\n focussedDate: (event as { name?: string })?.name,\n mouseEvent,\n });\n },\n updateAxisPointer: (event: unknown) => {\n const axisEvent = event as {\n seriesDataIndices?: Array<{ seriesIndex?: number }>;\n };\n const hoveredSeriesIndex = axisEvent.seriesDataIndices?.[0]?.seriesIndex;\n if (typeof hoveredSeriesIndex === 'number') {\n hoveredSeriesIndexRef.current = hoveredSeriesIndex;\n }\n setHighlightedSeries(hoveredSeriesIndexRef.current);\n },\n };\n }, [caseIdsBySeriesIndex, expandToStratificationColorCaseIds, getCaseIdsForPoint, onCaseIdsChange, onPointMouseUp, setHighlightedSeries]);\n\n return (\n <EChartsReact\n echarts={echarts}\n notMerge\n onChartReady={onInternalChartReady}\n onEvents={onEvents}\n option={getOptions()}\n ref={chartRef}\n style={{\n height: '100%',\n position: 'absolute',\n width: '100%',\n }}\n />\n );\n};\n","import {\n Box,\n ListItemIcon,\n ListItemText,\n MenuItem,\n} from '@mui/material';\nimport LeaderboardIcon from '@mui/icons-material/Leaderboard';\nimport AreaChartIcon from '@mui/icons-material/AreaChart';\nimport {\n dispose,\n getInstanceByDom,\n init,\n use as registerECharts,\n} from 'echarts/core';\nimport {\n DataZoomComponent,\n GridComponent,\n TooltipComponent,\n} from 'echarts/components';\nimport {\n BarChart,\n LineChart,\n} from 'echarts/charts';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport type EChartsReact from 'echarts-for-react';\nimport type { ReactElement } from 'react';\nimport {\n use,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport isString from 'lodash/isString';\nimport round from 'lodash/round';\nimport type { EChartsType } from 'echarts';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport FilterAltIcon from '@mui/icons-material/FilterAlt';\nimport {\n endOfISOWeek,\n endOfQuarter,\n endOfYear,\n lastDayOfMonth,\n parse,\n startOfISOWeek,\n startOfMonth,\n startOfQuarter,\n startOfYear,\n} from 'date-fns';\nimport type { CaseDbCol } from '@gen-epix/api-casedb';\nimport { CaseDbDimType } from '@gen-epix/api-casedb';\nimport type { MenuItemData } from '@gen-epix/ui-core-components/models/nestedMenu';\nimport { DATE_FORMAT } from '@gen-epix/ui-core/constants/date';\n\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { CaseTypeUtil } from '../../../utils/CaseTypeUtil';\nimport { EpiCurveUtil } from '../../../utils/EpiCurveUtil';\nimport type { ContextMenuConfigWithPosition } from '../ContextMenu';\nimport { ContextMenu } from '../ContextMenu';\nimport { WidgetUnavailable } from '../WidgetUnavailable';\nimport { EventBusService } from '../../../classes/services/EventBusService';\nimport { CaseDbDownloadUtil } from '../../../utils/CaseDbDownloadUtil';\nimport { DashboardUtil } from '../../../utils/DashboardUtil';\nimport { DashboardWidget } from '../Dashboard';\nimport { DASHBOARD_COMPONENT_NAME } from '../../../constants/dashboard';\nimport { UserProfileStoreContext } from '../../../stores/userProfileStore/userProfileStoreContext';\nimport { DashboardContext } from '../Dashboard/context/DashboardContext';\nimport type {\n DashboardEpiCurveSettings,\n EpiCurveWidgetData,\n} from '../../../models/dashboard';\n\nimport { EpiCurveBarChart } from './EpiCurveBarChart';\nimport { EpiCurveStackedAreaChart } from './EpiCurveStackedAreaChart';\n\nconst echartsCore = {\n dispose,\n getInstanceByDom,\n init,\n};\n\nregisterECharts([TooltipComponent, GridComponent, DataZoomComponent, BarChart, LineChart, CanvasRenderer]);\n\nexport type ChartType = 'area' | 'bar';\n\nexport const EpiCurveWidget = () => {\n const { t } = useTranslation();\n const [contextMenuConfig, setContextMenuConfig] = useState<ContextMenuConfigWithPosition | null>(null);\n const [chartType, setChartType] = useState<ChartType>('bar');\n const chartRef = useRef<EChartsReact>(null);\n const dashboardContext = use(DashboardContext);\n const userProfileStore = use(UserProfileStoreContext);\n\n const dashboardStore = use(DashboardStoreContext);\n const stratification = useStore(dashboardStore, (state) => state.stratification);\n const isDataLoading = useStore(dashboardStore, (state) => state.isDataLoading);\n const sortedData = useStore(dashboardStore, (state) => state.sortedData);\n const completeCaseType = useStore(dashboardStore, (state) => state.completeCaseType);\n const updateWidgetData = useStore(dashboardStore, (state) => state.updateWidgetData);\n const epiCurveWidgetData = useStore(dashboardStore, (state) => state.getWidgetData<EpiCurveWidgetData>(DASHBOARD_COMPONENT_NAME.EPI_CURVE));\n const setFilterValue = useStore(dashboardStore, (state) => state.setFilterValue);\n const filterDimensions = useStore(dashboardStore, (state) => state.filterDimensions);\n const timeDims = useMemo(() => CaseTypeUtil.getDims(completeCaseType, [CaseDbDimType.TIME]), [completeCaseType]);\n const isIncludeMissingValuesInAreaChartEnabled = useStore(userProfileStore, (state) => (state.dashboardWidgetSettings[DASHBOARD_COMPONENT_NAME.EPI_CURVE] as DashboardEpiCurveSettings).isIncludeMissingValuesInAreaChartEnabled);\n const [focussedDate, setFocussedDate] = useState<string>(null);\n const [col, setCol] = useState<CaseDbCol>(null);\n const colLabel = col?.label ?? '';\n\n const onEpiContextMenuClose = useCallback(() => {\n setContextMenuConfig(null);\n setFocussedDate(null);\n }, []);\n\n const lineListCaseCount = useMemo(() => {\n return DashboardUtil.getCaseCount(sortedData);\n }, [sortedData]);\n\n\n // Auto-switch to bar chart if stratification is disabled while showing area chart\n useEffect(() => {\n if (!stratification && chartType === 'area') {\n setChartType('bar');\n }\n }, [stratification, chartType]);\n\n const primaryMenu = useMemo<MenuItemData[]>(() => {\n return [\n {\n active: chartType === 'bar',\n callback: () => {\n setChartType('bar');\n },\n label: t`Bar chart`,\n leftIcon: <LeaderboardIcon />,\n },\n {\n active: chartType === 'area',\n callback: () => {\n setChartType('area');\n },\n disabled: !stratification,\n label: t`Normalized stacked area chart`,\n leftIcon: <AreaChartIcon />,\n },\n ];\n }, [t, chartType, stratification]);\n\n const titleMenu = useMemo<MenuItemData>(() => {\n let label: string;\n if (col) {\n label = t('Epi curve: {{label}}', { label: col.label });\n } else {\n label = t`Epi curve`;\n }\n\n const menu: MenuItemData = {\n disabled: !timeDims.length,\n items: [],\n label,\n tooltip: col ? completeCaseType.ref_cols[col.ref_col_id].description : undefined,\n };\n\n completeCaseType.ordered_dim_ids.map(x => completeCaseType.dims[x]).filter(dim => {\n const refDim = completeCaseType.ref_dims[dim.ref_dim_id];\n return refDim.dim_type === CaseDbDimType.TIME;\n }).forEach((dim) => {\n if (menu.items.length) {\n menu.items.at(-1).divider = true;\n }\n completeCaseType.ordered_col_ids_by_dim[dim.id].map(id => completeCaseType.cols[id]).forEach((c) => {\n menu.items.push({\n active: !!(c.id === col?.id),\n callback: () => {\n updateWidgetData<EpiCurveWidgetData>(DASHBOARD_COMPONENT_NAME.EPI_CURVE, { columnId: c.id });\n setCol(c);\n },\n label: c.label,\n tooltip: c.description,\n });\n });\n });\n\n return menu;\n }, [col, completeCaseType, t, timeDims.length, updateWidgetData]);\n\n useEffect(() => {\n if (col) {\n return;\n }\n if (!timeDims.length) {\n return;\n }\n if (epiCurveWidgetData.columnId) {\n setCol(CaseTypeUtil.getCols(completeCaseType).find(c => c.id === epiCurveWidgetData.columnId));\n } else if (sortedData.length) {\n setCol(EpiCurveUtil.getPreferredTimeColumn(\n completeCaseType,\n sortedData,\n CaseTypeUtil.getCols(completeCaseType, completeCaseType.case_date_dim_id),\n ));\n }\n }, [col, completeCaseType, epiCurveWidgetData.columnId, timeDims, sortedData]);\n\n const items = useMemo(() => {\n if (!col) {\n return [];\n }\n return EpiCurveUtil.getSortedItems(completeCaseType, sortedData, [col]);\n }, [col, sortedData, completeCaseType]);\n\n const epiCurveCaseCount = useMemo(() => {\n return items.reduce((prev, current) => {\n return prev + current.value;\n }, 0) ?? 0;\n }, [items]);\n\n const getXAxisLabel = useCallback((value: Date): string => {\n if (!col) {\n return null;\n }\n\n return EpiCurveUtil.getXAxisLabel(completeCaseType.ref_cols[col.ref_col_id].col_type, value);\n }, [col, completeCaseType.ref_cols]);\n\n const xAxisIntervals = useMemo<Date[]>(() => {\n if (!col) {\n return [];\n }\n return EpiCurveUtil.getXAxisIntervals(completeCaseType.ref_cols[col.ref_col_id].col_type, items);\n }, [col, completeCaseType.ref_cols, items]);\n\n const onChartCaseIdsChange = useCallback((caseIds: string[]) => {\n dashboardContext.highlight({\n caseIds,\n origin: DASHBOARD_COMPONENT_NAME.EPI_CURVE,\n });\n }, [dashboardContext]);\n\n const onChartPointMouseUp = useCallback((payload: { caseIds: string[]; focussedDate: string; mouseEvent: MouseEvent }) => {\n setFocussedDate(payload.focussedDate);\n setContextMenuConfig({\n caseIds: payload.caseIds,\n mouseEvent: payload.mouseEvent,\n position: {\n left: payload.mouseEvent?.clientX,\n top: payload.mouseEvent?.clientY,\n },\n });\n }, []);\n\n const onChartReady = useCallback((chart: EChartsType) => {\n const dom = chart.getDom();\n dom?.setAttribute('aria-label', t('Epidemiological curve showing the number of cases over time ({{label}})', { label: colLabel }));\n dom?.setAttribute('role', 'img');\n }, [colLabel, t]);\n\n const onShowOnlySelectedDateMenuItemClick = useCallback(async (onMenuClose: () => void) => {\n if (!isString(focussedDate) || !col?.id) {\n onMenuClose();\n return;\n }\n const dateDimension = filterDimensions.find(filterDimension => filterDimension.filterIds.includes(col.id));\n const dateColumnId = dateDimension.preferredFilterId;\n\n let fromDate: Date;\n let toDate: Date;\n\n if (focussedDate.match(/^\\d{4}$/)) {\n const date = parse(focussedDate, DATE_FORMAT.YEAR, new Date());\n fromDate = startOfYear(date);\n toDate = endOfYear(date);\n // year\n } else if (focussedDate.match(/^\\d{4}-\\d{2}$/)) {\n // month\n const date = parse(focussedDate, DATE_FORMAT.YEAR_MONTH, new Date());\n fromDate = startOfMonth(date);\n toDate = lastDayOfMonth(date);\n } else if (focussedDate.match(/^\\d{4}-\\d{2}-\\d{2}$/)) {\n // full date\n const date = parse(focussedDate, DATE_FORMAT.DATE, new Date());\n fromDate = date;\n toDate = date;\n } else if (focussedDate.match(/^\\d{4}-W\\d{2}$/)) {\n // week\n const date = parse(focussedDate, DATE_FORMAT.YEAR_WEEK, new Date(), {\n useAdditionalWeekYearTokens: true,\n });\n fromDate = startOfISOWeek(date);\n toDate = endOfISOWeek(date);\n } else if (focussedDate.match(/^\\d{4}-Q\\d$/)) {\n // quarter\n const date = parse(focussedDate, DATE_FORMAT.YEAR_QUARTER, new Date());\n fromDate = startOfQuarter(date);\n toDate = endOfQuarter(date);\n }\n\n if (fromDate && toDate) {\n await setFilterValue(dateColumnId, [fromDate, toDate]);\n }\n\n onMenuClose();\n }, [focussedDate, col, filterDimensions, setFilterValue]);\n\n const getEpiContextMenuExtraItems = useCallback((onMenuClose: () => void): ReactElement => {\n if (!focussedDate) {\n return null;\n }\n return (\n <MenuItem\n divider\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={async () => await onShowOnlySelectedDateMenuItemClick(onMenuClose)}\n >\n <ListItemIcon>\n <FilterAltIcon fontSize={'small'} />\n </ListItemIcon>\n <ListItemText>\n {t('Filter (show only {{date}})', { date: focussedDate })}\n </ListItemText>\n </MenuItem>\n );\n }, [focussedDate, onShowOnlySelectedDateMenuItemClick, t]);\n\n const missingCasesCount = lineListCaseCount - epiCurveCaseCount;\n const missingCasesPercentage = missingCasesCount > 0 ? round(missingCasesCount / lineListCaseCount * 100, 1) : 0;\n const canShowWidget = epiCurveCaseCount > 0 && timeDims.length > 0;\n\n const widgetUnavailableReason = useMemo<ReactElement | string>(() => {\n if (canShowWidget) {\n return;\n }\n if (!timeDims.length) {\n return t`No time column found.`;\n }\n if (!lineListCaseCount) {\n return t`No cases found.`;\n }\n if (!col) {\n return t`No time column selected.`;\n }\n if (!epiCurveCaseCount) {\n return t`No cases with valid date- / time information found for the selected column.`;\n }\n return null;\n }, [canShowWidget, col, epiCurveCaseCount, lineListCaseCount, t, timeDims.length]);\n\n\n useEffect(() => {\n const emitDownloadOptions = () => {\n EventBusService.getInstance().emit('onDownloadOptionsChanged', {\n disabled: !canShowWidget,\n items: [\n {\n callback: () => CaseDbDownloadUtil.downloadEchartsImage(t`Epi curve`, chartRef.current.getEchartsInstance(), 'png', completeCaseType, t),\n label: t`Save as PNG`,\n },\n {\n callback: () => CaseDbDownloadUtil.downloadEchartsImage(t`Epi curve`, chartRef.current.getEchartsInstance(), 'jpeg', completeCaseType, t),\n label: t`Save as JPEG`,\n },\n ],\n zone: DASHBOARD_COMPONENT_NAME.EPI_CURVE,\n zoneLabel: t`Epi curve`,\n });\n };\n emitDownloadOptions();\n const eventBusManager = EventBusService.getInstance();\n eventBusManager.addEventListener('onDownloadOptionsRequested', emitDownloadOptions);\n return () => {\n eventBusManager.emit('onDownloadOptionsChanged', {\n items: null,\n zone: DASHBOARD_COMPONENT_NAME.EPI_CURVE,\n zoneLabel: t`Epi curve`,\n });\n eventBusManager.removeEventListener('onDownloadOptionsRequested', emitDownloadOptions);\n };\n }, [completeCaseType, canShowWidget, t]);\n\n return (\n <DashboardWidget\n expandDisabled={!canShowWidget}\n isLoading={isDataLoading}\n primaryMenu={primaryMenu}\n title={titleMenu}\n warningMessage={canShowWidget && epiCurveCaseCount > 0 && missingCasesCount > 0 ? t('Missing cases: {{missingCasesCount}} ({{missingCasesPercentage}}%)', { missingCasesCount, missingCasesPercentage }) : undefined}\n widgetName={DASHBOARD_COMPONENT_NAME.EPI_CURVE}\n >\n {!canShowWidget && (\n <WidgetUnavailable\n reason={widgetUnavailableReason}\n widgetLabel={t`epi curve`}\n />\n )}\n {canShowWidget && (\n <Box\n sx={{\n height: '100%',\n position: 'relative',\n }}\n >\n {items?.length > 0 && chartType === 'bar' && (\n <EpiCurveBarChart\n chartRef={chartRef}\n echarts={echartsCore}\n getXAxisLabel={getXAxisLabel}\n items={items}\n onCaseIdsChange={onChartCaseIdsChange}\n onChartReady={onChartReady}\n onPointMouseUp={onChartPointMouseUp}\n stratification={stratification}\n xAxisIntervals={xAxisIntervals}\n />\n )}\n {items?.length > 0 && chartType === 'area' && (\n <EpiCurveStackedAreaChart\n chartRef={chartRef}\n echarts={echartsCore}\n getXAxisLabel={getXAxisLabel}\n includeMissingValues={isIncludeMissingValuesInAreaChartEnabled}\n items={items}\n onCaseIdsChange={onChartCaseIdsChange}\n onChartReady={onChartReady}\n onPointMouseUp={onChartPointMouseUp}\n stratification={stratification}\n xAxisIntervals={xAxisIntervals}\n />\n )}\n <ContextMenu\n config={contextMenuConfig}\n getExtraItems={getEpiContextMenuExtraItems}\n onMenuClose={onEpiContextMenuClose}\n />\n </Box>\n )}\n </DashboardWidget>\n );\n};\n"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  import { a as e, i as t, n, o as r, t as i } from "./toDate.js";
2
- import { a, d as o, f as s, i as c, l, n as u, o as d, p as f, r as p, s as m, t as h, u as ee } from "./protectedTokens.js";
2
+ import { a, c as o, d as s, f as c, i as l, l as u, n as d, o as f, p, r as m, s as h, t as ee } from "./protectedTokens.js";
3
3
  import { t as g } from "./parseISO.js";
4
4
  import { CaseTypeUtil as _, SELECTION_FILTER_GROUP as v, TREE_FILTER_GROUP as y } from "../utils/CaseTypeUtil/index.js";
5
5
  import { DataService as b } from "../classes/services/DataService/index.js";
6
6
  import { t as x } from "i18next";
7
7
  import { CaseDbColType as S, CaseDbDimType as C } from "@gen-epix/api-casedb";
8
- import { DATE_FORMAT as te } from "@gen-epix/ui-core/constants/date";
9
- import { DateFilter as ne, GeoFilter as re, MultiSelectFilter as w, NumberRangeFilter as T, TextFilter as E } from "@gen-epix/ui/classes/filters";
10
- import { DEFAULT_FILTER_GROUP as D, FILTER_MODE as O, FilterAbstract as k } from "@gen-epix/ui/classes/abstracts/FilterAbstract";
8
+ import { DATE_FORMAT as w } from "@gen-epix/ui-core/constants/date";
9
+ import { DateFilter as te, GeoFilter as ne, MultiSelectFilter as T, NumberRangeFilter as re, TextFilter as E } from "@gen-epix/ui-client-common/classes/filters";
10
+ import { DEFAULT_FILTER_GROUP as D, FILTER_MODE as O, FilterAbstract as k } from "@gen-epix/ui-client-common/classes/abstracts/FilterAbstract";
11
11
  //#region ../../node_modules/.pnpm/date-fns@4.4.0/node_modules/date-fns/addDays.js
12
12
  function A(e, t, r) {
13
13
  let a = i(e, r?.in);
@@ -15,32 +15,32 @@ function A(e, t, r) {
15
15
  }
16
16
  //#endregion
17
17
  //#region ../../node_modules/.pnpm/date-fns@4.4.0/node_modules/date-fns/getDefaultOptions.js
18
- function j() {
19
- return Object.assign({}, s());
18
+ function ie() {
19
+ return Object.assign({}, p());
20
20
  }
21
21
  //#endregion
22
22
  //#region ../../node_modules/.pnpm/date-fns@4.4.0/node_modules/date-fns/getISODay.js
23
- function M(e, t) {
23
+ function j(e, t) {
24
24
  let n = i(e, t?.in).getDay();
25
25
  return n === 0 ? 7 : n;
26
26
  }
27
27
  //#endregion
28
28
  //#region ../../node_modules/.pnpm/date-fns@4.4.0/node_modules/date-fns/transpose.js
29
- function N(e, t) {
30
- let r = P(t) ? new t(0) : n(t, 0);
29
+ function M(e, t) {
30
+ let r = N(t) ? new t(0) : n(t, 0);
31
31
  return r.setFullYear(e.getFullYear(), e.getMonth(), e.getDate()), r.setHours(e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds()), r;
32
32
  }
33
- function P(e) {
33
+ function N(e) {
34
34
  return typeof e == "function" && e.prototype?.constructor === e;
35
35
  }
36
36
  //#endregion
37
37
  //#region ../../node_modules/.pnpm/date-fns@4.4.0/node_modules/date-fns/parse/_lib/Setter.js
38
- var F = 10, I = class {
38
+ var P = 10, F = class {
39
39
  subPriority = 0;
40
40
  validate(e, t) {
41
41
  return !0;
42
42
  }
43
- }, ie = class extends I {
43
+ }, I = class extends F {
44
44
  constructor(e, t, n, r, i) {
45
45
  super(), this.value = e, this.validateValue = t, this.setValue = n, this.priority = r, i && (this.subPriority = i);
46
46
  }
@@ -50,20 +50,20 @@ var F = 10, I = class {
50
50
  set(e, t, n) {
51
51
  return this.setValue(e, t, this.value, n);
52
52
  }
53
- }, ae = class extends I {
54
- priority = F;
53
+ }, ae = class extends F {
54
+ priority = P;
55
55
  subPriority = -1;
56
56
  constructor(e, t) {
57
57
  super(), this.context = e || ((e) => n(t, e));
58
58
  }
59
59
  set(e, t) {
60
- return t.timestampIsSet ? e : n(e, N(e, this.context));
60
+ return t.timestampIsSet ? e : n(e, M(e, this.context));
61
61
  }
62
62
  }, L = class {
63
63
  run(e, t, n, r) {
64
64
  let i = this.parse(e, t, n, r);
65
65
  return i ? {
66
- setter: new ie(i.value, this.validate, this.set, this.priority, this.subPriority),
66
+ setter: new I(i.value, this.validate, this.set, this.priority, this.subPriority),
67
67
  rest: i.rest
68
68
  } : null;
69
69
  }
@@ -244,13 +244,13 @@ var se = class extends L {
244
244
  return t.isTwoDigitYear || t.year > 0;
245
245
  }
246
246
  set(e, t, n, r) {
247
- let i = d(e, r);
247
+ let i = f(e, r);
248
248
  if (n.isTwoDigitYear) {
249
249
  let t = q(n.year, i);
250
- return e.setFullYear(t, 0, r.firstWeekContainsDate), e.setHours(0, 0, 0, 0), o(e, r);
250
+ return e.setFullYear(t, 0, r.firstWeekContainsDate), e.setHours(0, 0, 0, 0), c(e, r);
251
251
  }
252
252
  let a = !("era" in t) || t.era === 1 ? n.year : 1 - n.year;
253
- return e.setFullYear(a, 0, r.firstWeekContainsDate), e.setHours(0, 0, 0, 0), o(e, r);
253
+ return e.setFullYear(a, 0, r.firstWeekContainsDate), e.setHours(0, 0, 0, 0), c(e, r);
254
254
  }
255
255
  incompatibleTokens = [
256
256
  "y",
@@ -274,7 +274,7 @@ var se = class extends L {
274
274
  }
275
275
  set(e, t, r) {
276
276
  let i = n(e, 0);
277
- return i.setFullYear(r, 0, 4), i.setHours(0, 0, 0, 0), l(i);
277
+ return i.setFullYear(r, 0, 4), i.setHours(0, 0, 0, 0), s(i);
278
278
  }
279
279
  incompatibleTokens = [
280
280
  "G",
@@ -544,7 +544,7 @@ var ge = class extends L {
544
544
  return t >= 1 && t <= 53;
545
545
  }
546
546
  set(e, t, n, r) {
547
- return o(he(e, n, r), r);
547
+ return c(he(e, n, r), r);
548
548
  }
549
549
  incompatibleTokens = [
550
550
  "y",
@@ -565,7 +565,7 @@ var ge = class extends L {
565
565
  //#endregion
566
566
  //#region ../../node_modules/.pnpm/date-fns@4.4.0/node_modules/date-fns/setISOWeek.js
567
567
  function _e(e, t, n) {
568
- let r = i(e, n?.in), a = m(r, n) - t;
568
+ let r = i(e, n?.in), a = h(r, n) - t;
569
569
  return r.setDate(r.getDate() - a * 7), r;
570
570
  }
571
571
  //#endregion
@@ -583,7 +583,7 @@ var ve = class extends L {
583
583
  return t >= 1 && t <= 53;
584
584
  }
585
585
  set(e, t, n) {
586
- return l(_e(e, n));
586
+ return s(_e(e, n));
587
587
  }
588
588
  incompatibleTokens = [
589
589
  "y",
@@ -696,8 +696,8 @@ var ve = class extends L {
696
696
  //#endregion
697
697
  //#region ../../node_modules/.pnpm/date-fns@4.4.0/node_modules/date-fns/setDay.js
698
698
  function Y(e, t, n) {
699
- let r = s(), a = n?.weekStartsOn ?? n?.locale?.options?.weekStartsOn ?? r.weekStartsOn ?? r.locale?.options?.weekStartsOn ?? 0, o = i(e, n?.in), c = o.getDay(), l = (t % 7 + 7) % 7, u = 7 - a;
700
- return A(o, t < 0 || t > 6 ? t - (c + u) % 7 : (l + u) % 7 - (c + u) % 7, n);
699
+ let r = p(), a = n?.weekStartsOn ?? n?.locale?.options?.weekStartsOn ?? r.weekStartsOn ?? r.locale?.options?.weekStartsOn ?? 0, o = i(e, n?.in), s = o.getDay(), c = (t % 7 + 7) % 7, l = 7 - a;
700
+ return A(o, t < 0 || t > 6 ? t - (s + l) % 7 : (c + l) % 7 - (s + l) % 7, n);
701
701
  }
702
702
  //#endregion
703
703
  //#region ../../node_modules/.pnpm/date-fns@4.4.0/node_modules/date-fns/parse/_lib/parsers/DayParser.js
@@ -902,7 +902,7 @@ var Ce = class extends L {
902
902
  //#region ../../node_modules/.pnpm/date-fns@4.4.0/node_modules/date-fns/setISODay.js
903
903
  function Ee(e, t, n) {
904
904
  let r = i(e, n?.in);
905
- return A(r, t - M(r, n), n);
905
+ return A(r, t - j(r, n), n);
906
906
  }
907
907
  //#endregion
908
908
  //#region ../../node_modules/.pnpm/date-fns@4.4.0/node_modules/date-fns/parse/_lib/parsers/ISODayParser.js
@@ -1238,7 +1238,7 @@ var De = class extends L {
1238
1238
  }
1239
1239
  }
1240
1240
  set(e, t, r) {
1241
- return t.timestampIsSet ? e : n(e, e.getTime() - f(e) - r);
1241
+ return t.timestampIsSet ? e : n(e, e.getTime() - u(e) - r);
1242
1242
  }
1243
1243
  incompatibleTokens = [
1244
1244
  "t",
@@ -1257,7 +1257,7 @@ var De = class extends L {
1257
1257
  }
1258
1258
  }
1259
1259
  set(e, t, r) {
1260
- return t.timestampIsSet ? e : n(e, e.getTime() - f(e) - r);
1260
+ return t.timestampIsSet ? e : n(e, e.getTime() - u(e) - r);
1261
1261
  }
1262
1262
  incompatibleTokens = [
1263
1263
  "t",
@@ -1316,22 +1316,22 @@ var De = class extends L {
1316
1316
  T: new Ve()
1317
1317
  }, Ue = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g, We = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g, X = /^'([^]*?)'?$/, Ge = /''/g, Ke = /\S/, qe = /[a-zA-Z]/;
1318
1318
  function Z(e, t, r, a) {
1319
- let o = () => n(a?.in || r, NaN), s = j(), l = a?.locale ?? s.locale ?? ee, d = a?.firstWeekContainsDate ?? a?.locale?.options?.firstWeekContainsDate ?? s.firstWeekContainsDate ?? s.locale?.options?.firstWeekContainsDate ?? 1, f = a?.weekStartsOn ?? a?.locale?.options?.weekStartsOn ?? s.weekStartsOn ?? s.locale?.options?.weekStartsOn ?? 0;
1320
- if (!t) return e ? o() : i(r, a?.in);
1321
- let m = {
1322
- firstWeekContainsDate: d,
1323
- weekStartsOn: f,
1324
- locale: l
1319
+ let s = () => n(a?.in || r, NaN), c = ie(), u = a?.locale ?? c.locale ?? o, f = a?.firstWeekContainsDate ?? a?.locale?.options?.firstWeekContainsDate ?? c.firstWeekContainsDate ?? c.locale?.options?.firstWeekContainsDate ?? 1, p = a?.weekStartsOn ?? a?.locale?.options?.weekStartsOn ?? c.weekStartsOn ?? c.locale?.options?.weekStartsOn ?? 0;
1320
+ if (!t) return e ? s() : i(r, a?.in);
1321
+ let h = {
1322
+ firstWeekContainsDate: f,
1323
+ weekStartsOn: p,
1324
+ locale: u
1325
1325
  }, g = [new ae(a?.in, r)], _ = t.match(We).map((e) => {
1326
1326
  let t = e[0];
1327
- if (t in c) {
1328
- let n = c[t];
1329
- return n(e, l.formatLong);
1327
+ if (t in l) {
1328
+ let n = l[t];
1329
+ return n(e, u.formatLong);
1330
1330
  }
1331
1331
  return e;
1332
1332
  }).join("").match(Ue), v = [];
1333
1333
  for (let n of _) {
1334
- !a?.useAdditionalWeekYearTokens && u(n) && p(n, t, e), !a?.useAdditionalDayOfYearTokens && h(n) && p(n, t, e);
1334
+ !a?.useAdditionalWeekYearTokens && d(n) && m(n, t, e), !a?.useAdditionalDayOfYearTokens && ee(n) && m(n, t, e);
1335
1335
  let r = n[0], i = He[r];
1336
1336
  if (i) {
1337
1337
  let { incompatibleTokens: t } = i;
@@ -1343,22 +1343,22 @@ function Z(e, t, r, a) {
1343
1343
  token: r,
1344
1344
  fullToken: n
1345
1345
  });
1346
- let a = i.run(e, n, l.match, m);
1347
- if (!a) return o();
1346
+ let a = i.run(e, n, u.match, h);
1347
+ if (!a) return s();
1348
1348
  g.push(a.setter), e = a.rest;
1349
1349
  } else {
1350
1350
  if (r.match(qe)) throw RangeError("Format string contains an unescaped latin alphabet character `" + r + "`");
1351
1351
  if (n === "''" ? n = "'" : r === "'" && (n = Je(n)), e.indexOf(n) === 0) e = e.slice(n.length);
1352
- else return o();
1352
+ else return s();
1353
1353
  }
1354
1354
  }
1355
- if (e.length > 0 && Ke.test(e)) return o();
1355
+ if (e.length > 0 && Ke.test(e)) return s();
1356
1356
  let y = g.map((e) => e.priority).sort((e, t) => t - e).filter((e, t, n) => n.indexOf(e) === t).map((e) => g.filter((t) => t.priority === e).sort((e, t) => t.subPriority - e.subPriority)).map((e) => e[0]), b = i(r, a?.in);
1357
- if (isNaN(+b)) return o();
1357
+ if (isNaN(+b)) return s();
1358
1358
  let x = {};
1359
1359
  for (let e of y) {
1360
- if (!e.validate(b, m)) return o();
1361
- let t = e.set(b, x, m);
1360
+ if (!e.validate(b, h)) return s();
1361
+ let t = e.set(b, x, h);
1362
1362
  Array.isArray(t) ? (b = t[0], Object.assign(x, t[1])) : b = t;
1363
1363
  }
1364
1364
  return b;
@@ -1403,7 +1403,7 @@ var Q = class extends k {
1403
1403
  label: `${e.code} (${e.name})`,
1404
1404
  value: e.id
1405
1405
  }));
1406
- return new w({
1406
+ return new T({
1407
1407
  filterDimensionId: n,
1408
1408
  filterMode: O.BACKEND,
1409
1409
  filterPriority: D,
@@ -1451,70 +1451,72 @@ var Q = class extends k {
1451
1451
  let i = t.dims[r], a = t.ref_dims[i.ref_dim_id];
1452
1452
  t.ordered_col_ids_by_dim[r].map((e) => t.cols[e]).forEach((i) => {
1453
1453
  let o = t.ref_cols[i.ref_col_id];
1454
- if (!e.colTypeBlackList.has(o.col_type)) if (a.dim_type === C.TIME) {
1455
- let t = new Date(1900, 0, 1);
1456
- n.push(new ne({
1457
- backendFilterType: o.col_type === S.TIME_DAY ? "DATE_RANGE" : "PARTIAL_DATE_RANGE",
1458
- dateParser: e.getDateParser(o),
1454
+ if (!e.colTypeBlackList.has(o.col_type)) {
1455
+ if (a.dim_type === C.TIME) {
1456
+ let t = new Date(1900, 0, 1);
1457
+ n.push(new te({
1458
+ backendFilterType: o.col_type === S.TIME_DAY ? "DATE_RANGE" : "PARTIAL_DATE_RANGE",
1459
+ dateParser: e.getDateParser(o),
1460
+ filterDimensionId: r,
1461
+ filterMode: O.BACKEND,
1462
+ filterPriority: D,
1463
+ id: i.id,
1464
+ label: i.label,
1465
+ maxDate: /* @__PURE__ */ new Date(),
1466
+ minDate: t
1467
+ }));
1468
+ } else if (a.dim_type === C.GEO) {
1469
+ let e = b.getInstance().data.regionSets[o.region_set_id], t = (b.getInstance().data.regionsByRegionSetId[o.region_set_id]?.map((t) => ({
1470
+ label: e.region_code_as_label ? t.code : t.name,
1471
+ value: t.id
1472
+ })) ?? []).sort((e, t) => e.label.localeCompare(t.label));
1473
+ n.push(new ne({
1474
+ filterDimensionId: r,
1475
+ filterMode: O.BACKEND,
1476
+ filterPriority: D,
1477
+ id: i.id,
1478
+ label: i.label,
1479
+ options: t
1480
+ }));
1481
+ } else if (a.dim_type === C.TEXT) n.push(e.createCategoricalFilter(i, r, t));
1482
+ else if (a.dim_type === C.NUMBER) [
1483
+ S.DECIMAL_0,
1484
+ S.DECIMAL_1,
1485
+ S.DECIMAL_2,
1486
+ S.DECIMAL_3,
1487
+ S.DECIMAL_4,
1488
+ S.DECIMAL_5,
1489
+ S.DECIMAL_6
1490
+ ].includes(o.col_type) ? n.push(new re({
1459
1491
  filterDimensionId: r,
1460
1492
  filterMode: O.BACKEND,
1461
1493
  filterPriority: D,
1462
1494
  id: i.id,
1463
1495
  label: i.label,
1464
- maxDate: /* @__PURE__ */ new Date(),
1465
- minDate: t
1466
- }));
1467
- } else if (a.dim_type === C.GEO) {
1468
- let e = b.getInstance().data.regionSets[o.region_set_id], t = (b.getInstance().data.regionsByRegionSetId[o.region_set_id]?.map((t) => ({
1469
- label: e.region_code_as_label ? t.code : t.name,
1470
- value: t.id
1471
- })) ?? []).sort((e, t) => e.label.localeCompare(t.label));
1472
- n.push(new re({
1496
+ max: i.max_value ?? Infinity,
1497
+ min: i.min_value ?? -Infinity
1498
+ })) : n.push(e.createCategoricalFilter(i, r, t));
1499
+ else if (a.dim_type === C.ORGANIZATION) {
1500
+ let e = b.getInstance().data.organizations.map((e) => ({
1501
+ label: e.name,
1502
+ value: e.id
1503
+ }));
1504
+ n.push(new T({
1505
+ filterDimensionId: r,
1506
+ filterMode: O.BACKEND,
1507
+ filterPriority: D,
1508
+ id: i.id,
1509
+ label: i.label,
1510
+ options: e
1511
+ }));
1512
+ } else n.push(new E({
1473
1513
  filterDimensionId: r,
1474
1514
  filterMode: O.BACKEND,
1475
1515
  filterPriority: D,
1476
1516
  id: i.id,
1477
- label: i.label,
1478
- options: t
1479
- }));
1480
- } else if (a.dim_type === C.TEXT) n.push(e.createCategoricalFilter(i, r, t));
1481
- else if (a.dim_type === C.NUMBER) [
1482
- S.DECIMAL_0,
1483
- S.DECIMAL_1,
1484
- S.DECIMAL_2,
1485
- S.DECIMAL_3,
1486
- S.DECIMAL_4,
1487
- S.DECIMAL_5,
1488
- S.DECIMAL_6
1489
- ].includes(o.col_type) ? n.push(new T({
1490
- filterDimensionId: r,
1491
- filterMode: O.BACKEND,
1492
- filterPriority: D,
1493
- id: i.id,
1494
- label: i.label,
1495
- max: i.max_value ?? Infinity,
1496
- min: i.min_value ?? -Infinity
1497
- })) : n.push(e.createCategoricalFilter(i, r, t));
1498
- else if (a.dim_type === C.ORGANIZATION) {
1499
- let e = b.getInstance().data.organizations.map((e) => ({
1500
- label: e.name,
1501
- value: e.id
1502
- }));
1503
- n.push(new w({
1504
- filterDimensionId: r,
1505
- filterMode: O.BACKEND,
1506
- filterPriority: D,
1507
- id: i.id,
1508
- label: i.label,
1509
- options: e
1517
+ label: i.label
1510
1518
  }));
1511
- } else n.push(new E({
1512
- filterDimensionId: r,
1513
- filterMode: O.BACKEND,
1514
- filterPriority: D,
1515
- id: i.id,
1516
- label: i.label
1517
- }));
1519
+ }
1518
1520
  });
1519
1521
  }), n;
1520
1522
  }
@@ -1528,7 +1530,7 @@ var Q = class extends k {
1528
1530
  });
1529
1531
  }
1530
1532
  static getDateParser(e) {
1531
- return e.col_type === S.TIME_QUARTER ? (e) => Z(e, te.YEAR_QUARTER, /* @__PURE__ */ new Date()) : (e) => g(e);
1533
+ return e.col_type === S.TIME_QUARTER ? (e) => Z(e, w.YEAR_QUARTER, /* @__PURE__ */ new Date()) : (e) => g(e);
1532
1534
  }
1533
1535
  };
1534
1536
  //#endregion