synapse-react-client 4.0.46 → 4.0.47

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 (559) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/aridhia-queries/useSubmitAridhiaDar.js +2 -2
  3. package/dist/aridhia-queries/useSubmitAridhiaDar.js.map +1 -1
  4. package/dist/components/AccessTokenPage/CreateAccessTokenModal.js +1 -1
  5. package/dist/components/AccessTokenPage/CreateAccessTokenModal.js.map +1 -1
  6. package/dist/components/AccountLevelBadges/AccountLevelBadges.js +1 -1
  7. package/dist/components/AccountLevelBadges/AccountLevelBadges.js.map +1 -1
  8. package/dist/components/AclEditor/AclEditor.test-utils.js +3 -5
  9. package/dist/components/AclEditor/AclEditor.test-utils.js.map +1 -1
  10. package/dist/components/Aridhia/AridhiaAccessStatus.d.ts.map +1 -1
  11. package/dist/components/Aridhia/AridhiaAccessStatus.js +43 -30
  12. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  13. package/dist/components/Aridhia/AridhiaDarStatusPopover.d.ts +6 -2
  14. package/dist/components/Aridhia/AridhiaDarStatusPopover.d.ts.map +1 -1
  15. package/dist/components/Aridhia/AridhiaDarStatusPopover.js +101 -31
  16. package/dist/components/Aridhia/AridhiaDarStatusPopover.js.map +1 -1
  17. package/dist/components/Aridhia/aridhiaAccessStatusUtils.d.ts +11 -9
  18. package/dist/components/Aridhia/aridhiaAccessStatusUtils.d.ts.map +1 -1
  19. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js +24 -13
  20. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js.map +1 -1
  21. package/dist/components/Authentication/LastLoginInfo.js +2 -2
  22. package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
  23. package/dist/components/Authentication/RecoveryCodeForm.js +1 -1
  24. package/dist/components/Authentication/RecoveryCodeForm.js.map +1 -1
  25. package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
  26. package/dist/components/Authentication/TOTPForm.d.ts.map +1 -1
  27. package/dist/components/Authentication/TOTPForm.js +3 -3
  28. package/dist/components/Authentication/TOTPForm.js.map +1 -1
  29. package/dist/components/Authentication/index.d.ts +6 -6
  30. package/dist/components/Authentication/index.d.ts.map +1 -1
  31. package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js +1 -1
  32. package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js.map +1 -1
  33. package/dist/components/CardContainer/CardContainer.js +7 -7
  34. package/dist/components/CardContainer/CardContainer.js.map +1 -1
  35. package/dist/components/ChallengeRequirementsModal/ChallengeRequirementsModal.js +1 -1
  36. package/dist/components/ChallengeRequirementsModal/ChallengeRequirementsModal.js.map +1 -1
  37. package/dist/components/ChallengeSubmission/ChallengeSubmission.d.ts.map +1 -1
  38. package/dist/components/ChallengeSubmission/ChallengeSubmission.js +1 -1
  39. package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
  40. package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js +1 -1
  41. package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js.map +1 -1
  42. package/dist/components/CitationPopover/CitationPopoverUtils.js +2 -2
  43. package/dist/components/CitationPopover/CitationPopoverUtils.js.map +1 -1
  44. package/dist/components/CohortBuilder/CohortBuilder.css +1 -0
  45. package/dist/components/CohortBuilder/CohortBuilder.d.ts +35 -0
  46. package/dist/components/CohortBuilder/CohortBuilder.d.ts.map +1 -0
  47. package/dist/components/CohortBuilder/CohortBuilder.js +108 -0
  48. package/dist/components/CohortBuilder/CohortBuilder.js.map +1 -0
  49. package/dist/components/CohortBuilder/CohortBuilder.module.js +10 -0
  50. package/dist/components/CohortBuilder/CohortBuilder.module.js.map +1 -0
  51. package/dist/components/CohortBuilder/CohortBuilder.module.scss +20 -0
  52. package/dist/components/CohortBuilder/CohortFilesPanel.d.ts +16 -0
  53. package/dist/components/CohortBuilder/CohortFilesPanel.d.ts.map +1 -0
  54. package/dist/components/CohortBuilder/CohortFilesPanel.js +124 -0
  55. package/dist/components/CohortBuilder/CohortFilesPanel.js.map +1 -0
  56. package/dist/components/CohortBuilder/cohortHandOff.d.ts +25 -0
  57. package/dist/components/CohortBuilder/cohortHandOff.d.ts.map +1 -0
  58. package/dist/components/CohortBuilder/cohortHandOff.js +26 -0
  59. package/dist/components/CohortBuilder/cohortHandOff.js.map +1 -0
  60. package/dist/components/ColumnFilter/ColumnFilter.d.ts.map +1 -1
  61. package/dist/components/ColumnFilter/ColumnFilter.js +14 -13
  62. package/dist/components/ColumnFilter/ColumnFilter.js.map +1 -1
  63. package/dist/components/DataExplorer/DataExplorer.d.ts.map +1 -1
  64. package/dist/components/DataExplorer/DataExplorer.js.map +1 -1
  65. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts +11 -2
  66. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts.map +1 -1
  67. package/dist/components/DataGrid/columns/AutocompleteColumn.js +115 -109
  68. package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
  69. package/dist/components/DataGrid/columns/NumberColumn.js +1 -1
  70. package/dist/components/DataGrid/columns/NumberColumn.js.map +1 -1
  71. package/dist/components/DataGrid/columns/NumberOrEnumColumn.d.ts +20 -0
  72. package/dist/components/DataGrid/columns/NumberOrEnumColumn.d.ts.map +1 -0
  73. package/dist/components/DataGrid/columns/NumberOrEnumColumn.js +18 -0
  74. package/dist/components/DataGrid/columns/NumberOrEnumColumn.js.map +1 -0
  75. package/dist/components/DataGrid/components/contextMenu.js +3 -3
  76. package/dist/components/DataGrid/components/contextMenu.js.map +1 -1
  77. package/dist/components/DataGrid/hooks/useGridUndoRedo.d.ts.map +1 -1
  78. package/dist/components/DataGrid/hooks/useGridUndoRedo.js +9 -7
  79. package/dist/components/DataGrid/hooks/useGridUndoRedo.js.map +1 -1
  80. package/dist/components/DataGrid/hooks/useStack.d.ts +1 -1
  81. package/dist/components/DataGrid/hooks/useStack.js +2 -2
  82. package/dist/components/DataGrid/hooks/useStack.js.map +1 -1
  83. package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
  84. package/dist/components/DataGrid/utils/columnFactory.js +47 -42
  85. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  86. package/dist/components/DataGrid/utils/extractColumnValidationMessages.js +7 -7
  87. package/dist/components/DataGrid/utils/extractColumnValidationMessages.js.map +1 -1
  88. package/dist/components/DataGrid/utils/json-rx/JsonRx.js +2 -2
  89. package/dist/components/DataGrid/utils/json-rx/JsonRx.js.map +1 -1
  90. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +1 -1
  91. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  92. package/dist/components/DownloadCart/MeetAccessRequirementCard.js +1 -1
  93. package/dist/components/DownloadCart/MeetAccessRequirementCard.js.map +1 -1
  94. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js +5 -5
  95. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
  96. package/dist/components/EntityFinder/details/view/DetailsView.d.ts.map +1 -1
  97. package/dist/components/EntityFinder/details/view/DetailsView.js +4 -4
  98. package/dist/components/EntityFinder/details/view/DetailsView.js.map +1 -1
  99. package/dist/components/EntityHeaderTable/EntityHeaderTable.js +4 -4
  100. package/dist/components/EntityHeaderTable/Filter.d.ts.map +1 -1
  101. package/dist/components/EntityHeaderTable/Filter.js +1 -1
  102. package/dist/components/EntityHeaderTable/Filter.js.map +1 -1
  103. package/dist/components/Evaluation/EvaluationRoundEditor.js.map +1 -1
  104. package/dist/components/FeaturedDataTabs/FacetPlotsCard.d.ts.map +1 -1
  105. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js +80 -84
  106. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  107. package/dist/components/FormTemplateEditor/FormStructurePanel.js +7 -7
  108. package/dist/components/FormTemplateEditor/StepCard.js +9 -9
  109. package/dist/components/FormTemplateEditor/schemaFieldUtils.js +2 -2
  110. package/dist/components/FormTemplateEditor/schemaFieldUtils.js.map +1 -1
  111. package/dist/components/FullTextSearch/FullTextSearch.js +8 -8
  112. package/dist/components/GenericCard/CardUtils.js.map +1 -1
  113. package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js +1 -1
  114. package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js.map +1 -1
  115. package/dist/components/GenericCard/DuoTermTags/duoTerms.js +1 -1
  116. package/dist/components/GenericCard/DuoTermTags/duoTerms.js.map +1 -1
  117. package/dist/components/GenericCard/TableRowGenericCard.js +37 -37
  118. package/dist/components/GoalsV3/GoalsV3.js +1 -1
  119. package/dist/components/GoalsV3/GoalsV3.js.map +1 -1
  120. package/dist/components/HexGrid/HexGrid.d.ts +3 -1
  121. package/dist/components/HexGrid/HexGrid.d.ts.map +1 -1
  122. package/dist/components/HexGrid/HexGrid.js +14 -13
  123. package/dist/components/HexGrid/HexGrid.js.map +1 -1
  124. package/dist/components/IconSvg/index.d.ts +1 -1
  125. package/dist/components/IconSvg/index.d.ts.map +1 -1
  126. package/dist/components/IconSvg/index.js.map +1 -1
  127. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.d.ts.map +1 -1
  128. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js +3 -3
  129. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js.map +1 -1
  130. package/dist/components/Markdown/MarkdownEditor.js +1 -1
  131. package/dist/components/Markdown/MarkdownEditor.js.map +1 -1
  132. package/dist/components/Markdown/widget/index.d.ts +1 -1
  133. package/dist/components/Markdown/widget/index.d.ts.map +1 -1
  134. package/dist/components/ModalDownload/ModalDownload.d.ts.map +1 -1
  135. package/dist/components/ModalDownload/ModalDownload.js +2 -1
  136. package/dist/components/ModalDownload/ModalDownload.js.map +1 -1
  137. package/dist/components/Plot/BarPlot.js +1 -1
  138. package/dist/components/Plot/BarPlot.js.map +1 -1
  139. package/dist/components/Plot/PlotPanelHeader.d.ts +3 -2
  140. package/dist/components/Plot/PlotPanelHeader.d.ts.map +1 -1
  141. package/dist/components/Plot/PlotPanelHeader.js.map +1 -1
  142. package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js +1 -1
  143. package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js.map +1 -1
  144. package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js +1 -1
  145. package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js.map +1 -1
  146. package/dist/components/ProvenanceGraph/ProvenanceGraph.d.ts.map +1 -1
  147. package/dist/components/ProvenanceGraph/ProvenanceGraph.js +3 -3
  148. package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
  149. package/dist/components/QueryBuilder/FilterConditionRow.d.ts.map +1 -1
  150. package/dist/components/QueryBuilder/FilterConditionRow.js +28 -27
  151. package/dist/components/QueryBuilder/FilterConditionRow.js.map +1 -1
  152. package/dist/components/QueryBuilder/FilterGroupNode.d.ts.map +1 -1
  153. package/dist/components/QueryBuilder/FilterGroupNode.js +91 -75
  154. package/dist/components/QueryBuilder/FilterGroupNode.js.map +1 -1
  155. package/dist/components/QueryBuilder/QueryBuilderControls.css +1 -1
  156. package/dist/components/QueryBuilder/QueryBuilderControls.d.ts.map +1 -1
  157. package/dist/components/QueryBuilder/QueryBuilderControls.js +91 -79
  158. package/dist/components/QueryBuilder/QueryBuilderControls.js.map +1 -1
  159. package/dist/components/QueryBuilder/QueryBuilderControls.module.js +11 -11
  160. package/dist/components/QueryBuilder/QueryBuilderControls.module.js.map +1 -1
  161. package/dist/components/QueryBuilder/QueryBuilderControls.module.scss +2 -0
  162. package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts +2 -0
  163. package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts.map +1 -1
  164. package/dist/components/QueryBuilder/QueryBuilderInternalContext.js.map +1 -1
  165. package/dist/components/QueryBuilder/queryBuilderLimits.d.ts +18 -0
  166. package/dist/components/QueryBuilder/queryBuilderLimits.d.ts.map +1 -0
  167. package/dist/components/QueryBuilder/queryBuilderLimits.js +38 -0
  168. package/dist/components/QueryBuilder/queryBuilderLimits.js.map +1 -0
  169. package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts +0 -8
  170. package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts.map +1 -1
  171. package/dist/components/QueryBuilder/queryBuilderMetadata.js +6 -9
  172. package/dist/components/QueryBuilder/queryBuilderMetadata.js.map +1 -1
  173. package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts +5 -4
  174. package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts.map +1 -1
  175. package/dist/components/QueryBuilder/queryBuilderTranslation.js +58 -33
  176. package/dist/components/QueryBuilder/queryBuilderTranslation.js.map +1 -1
  177. package/dist/components/QueryBuilder/useQBCombinedSql.d.ts.map +1 -1
  178. package/dist/components/QueryBuilder/useQBCombinedSql.js +4 -4
  179. package/dist/components/QueryBuilder/useQBCombinedSql.js.map +1 -1
  180. package/dist/components/QueryBuilder/useQBValueDisplayName.d.ts.map +1 -1
  181. package/dist/components/QueryBuilder/useQBValueDisplayName.js +5 -5
  182. package/dist/components/QueryBuilder/useQBValueDisplayName.js.map +1 -1
  183. package/dist/components/QuerySortSelector.js +5 -5
  184. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js +21 -21
  185. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
  186. package/dist/components/QueryWrapper/AggregateQueryErrorNotice.d.ts +20 -0
  187. package/dist/components/QueryWrapper/AggregateQueryErrorNotice.d.ts.map +1 -0
  188. package/dist/components/QueryWrapper/AggregateQueryErrorNotice.js +50 -0
  189. package/dist/components/QueryWrapper/AggregateQueryErrorNotice.js.map +1 -0
  190. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.d.ts +5 -3
  191. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.d.ts.map +1 -1
  192. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js +7 -3
  193. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js.map +1 -1
  194. package/dist/components/QueryWrapper/downloadListFiles.d.ts +25 -0
  195. package/dist/components/QueryWrapper/downloadListFiles.d.ts.map +1 -0
  196. package/dist/components/QueryWrapper/downloadListFiles.js +39 -0
  197. package/dist/components/QueryWrapper/downloadListFiles.js.map +1 -0
  198. package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.d.ts +16 -0
  199. package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.d.ts.map +1 -0
  200. package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.js +50 -0
  201. package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.js.map +1 -0
  202. package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.d.ts +4 -1
  203. package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.d.ts.map +1 -1
  204. package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js +15 -28
  205. package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js.map +1 -1
  206. package/dist/components/QueryWrapper/useOnQueryDataChange.d.ts.map +1 -1
  207. package/dist/components/QueryWrapper/useOnQueryDataChange.js +7 -6
  208. package/dist/components/QueryWrapper/useOnQueryDataChange.js.map +1 -1
  209. package/dist/components/QueryWrapperErrorBoundary.d.ts +3 -1
  210. package/dist/components/QueryWrapperErrorBoundary.d.ts.map +1 -1
  211. package/dist/components/QueryWrapperErrorBoundary.js +26 -21
  212. package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
  213. package/dist/components/QueryWrapperPlotNav/LastUpdatedOn.js +7 -7
  214. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +2 -2
  215. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
  216. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +34 -32
  217. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  218. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js +7 -7
  219. package/dist/components/QueryWrapperPlotNav/UseRowSet.d.ts.map +1 -1
  220. package/dist/components/QueryWrapperPlotNav/UseRowSet.js +12 -12
  221. package/dist/components/QueryWrapperPlotNav/UseRowSet.js.map +1 -1
  222. package/dist/components/RowDataTable/CategorizedRowDataTable.css +1 -0
  223. package/dist/components/RowDataTable/CategorizedRowDataTable.d.ts +33 -0
  224. package/dist/components/RowDataTable/CategorizedRowDataTable.d.ts.map +1 -0
  225. package/dist/components/RowDataTable/CategorizedRowDataTable.js +64 -0
  226. package/dist/components/RowDataTable/CategorizedRowDataTable.js.map +1 -0
  227. package/dist/components/RowDataTable/CategorizedRowDataTable.module.js +8 -0
  228. package/dist/components/RowDataTable/CategorizedRowDataTable.module.js.map +1 -0
  229. package/dist/components/RowDataTable/CategorizedRowDataTable.module.scss +18 -0
  230. package/dist/components/RowDataTable/RowDataTable.d.ts +13 -0
  231. package/dist/components/RowDataTable/RowDataTable.d.ts.map +1 -1
  232. package/dist/components/RowDataTable/RowDataTable.js +25 -8
  233. package/dist/components/RowDataTable/RowDataTable.js.map +1 -1
  234. package/dist/components/RssFeedCards/RssFeedCards.js +1 -1
  235. package/dist/components/RssFeedCards/RssFeedCards.js.map +1 -1
  236. package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.d.ts.map +1 -1
  237. package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.js +2 -2
  238. package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.js.map +1 -1
  239. package/dist/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.js +1 -1
  240. package/dist/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.js.map +1 -1
  241. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts +17 -9
  242. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
  243. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +39 -30
  244. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
  245. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js +24 -24
  246. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  247. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js +8 -8
  248. package/dist/components/SynapseChat/SynapseChatMessage.js +1 -1
  249. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  250. package/dist/components/SynapseForm/NavButtons.js.map +1 -1
  251. package/dist/components/SynapseForm/StepsSideNav.js.map +1 -1
  252. package/dist/components/SynapseSearchPageResults/HighlightedTypography.js +1 -1
  253. package/dist/components/SynapseSearchPageResults/HighlightedTypography.js.map +1 -1
  254. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.d.ts.map +1 -1
  255. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js +3 -3
  256. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js.map +1 -1
  257. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.d.ts.map +1 -1
  258. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +38 -44
  259. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  260. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js +4 -4
  261. package/dist/components/SynapseTable/SqlEditor.js +7 -7
  262. package/dist/components/SynapseTable/SynapseTable.js +8 -8
  263. package/dist/components/SynapseTable/SynapseTable.js.map +1 -1
  264. package/dist/components/SynapseTable/SynapseTableRenderers.d.ts.map +1 -1
  265. package/dist/components/SynapseTable/SynapseTableRenderers.js +73 -72
  266. package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
  267. package/dist/components/SynapseTable/SynapseTableUtils.js +1 -1
  268. package/dist/components/SynapseTable/SynapseTableUtils.js.map +1 -1
  269. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts.map +1 -1
  270. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js +44 -45
  271. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
  272. package/dist/components/SynapseTable/datasets/DatasetEditorVersionCell.js +1 -1
  273. package/dist/components/SynapseTable/datasets/DatasetEditorVersionCell.js.map +1 -1
  274. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.d.ts.map +1 -1
  275. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +142 -142
  276. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  277. package/dist/components/SynapseTable/export/ExportToAnalysisPlatformDialog.js +4 -4
  278. package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js +12 -12
  279. package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js.map +1 -1
  280. package/dist/components/SynapseTable/table-top/ColumnSelection.js +6 -6
  281. package/dist/components/SynapseTable/table-top/DownloadOptions.d.ts +0 -1
  282. package/dist/components/SynapseTable/table-top/DownloadOptions.d.ts.map +1 -1
  283. package/dist/components/SynapseTable/table-top/DownloadOptions.js +64 -57
  284. package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
  285. package/dist/components/SynapseTable/usePrefetchTableData.d.ts.map +1 -1
  286. package/dist/components/SynapseTable/usePrefetchTableData.js +3 -3
  287. package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
  288. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +1 -1
  289. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  290. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorTestUtils.js +1 -1
  291. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorTestUtils.js.map +1 -1
  292. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js +2 -2
  293. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  294. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +60 -60
  295. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  296. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js +1 -1
  297. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js.map +1 -1
  298. package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js +1 -1
  299. package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js.map +1 -1
  300. package/dist/components/TanStackTable/StyledTanStackTable.d.ts.map +1 -1
  301. package/dist/components/TanStackTable/StyledTanStackTable.js +1 -4
  302. package/dist/components/TanStackTable/StyledTanStackTable.js.map +1 -1
  303. package/dist/components/TermsAndConditions/TermsAndConditions.js.map +1 -1
  304. package/dist/components/TotalQueryResults.js +14 -14
  305. package/dist/components/Webhook/WebhookDashboard.d.ts.map +1 -1
  306. package/dist/components/Webhook/WebhookDashboard.js +2 -2
  307. package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
  308. package/dist/components/download_list/DownloadConfirmationUtils.d.ts +5 -1
  309. package/dist/components/download_list/DownloadConfirmationUtils.d.ts.map +1 -1
  310. package/dist/components/download_list/DownloadConfirmationUtils.js +2 -2
  311. package/dist/components/download_list/DownloadConfirmationUtils.js.map +1 -1
  312. package/dist/components/error/ErrorBanner.d.ts.map +1 -1
  313. package/dist/components/error/ErrorBanner.js +49 -46
  314. package/dist/components/error/ErrorBanner.js.map +1 -1
  315. package/dist/components/file/upload/MultiFileUploadProgress.js +5 -5
  316. package/dist/components/row_renderers/Dataset.d.ts.map +1 -1
  317. package/dist/components/row_renderers/Dataset.js +6 -6
  318. package/dist/components/row_renderers/Dataset.js.map +1 -1
  319. package/dist/components/row_renderers/Funder.js +1 -1
  320. package/dist/components/row_renderers/Funder.js.map +1 -1
  321. package/dist/components/widgets/ElementWithTooltip.d.ts +6 -1
  322. package/dist/components/widgets/ElementWithTooltip.d.ts.map +1 -1
  323. package/dist/components/widgets/ElementWithTooltip.js +22 -14
  324. package/dist/components/widgets/ElementWithTooltip.js.map +1 -1
  325. package/dist/components/widgets/RangeSlider/RangeSlider.d.ts.map +1 -1
  326. package/dist/components/widgets/RangeSlider/RangeSlider.js +1 -1
  327. package/dist/components/widgets/RangeSlider/RangeSlider.js.map +1 -1
  328. package/dist/components/widgets/SynapseImage.js +1 -1
  329. package/dist/components/widgets/SynapseImage.js.map +1 -1
  330. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts +16 -5
  331. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts.map +1 -1
  332. package/dist/components/widgets/facet-nav/FacetNavPanel.js +115 -102
  333. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  334. package/dist/components/widgets/facet-nav/FacetPlotLegendList.d.ts.map +1 -1
  335. package/dist/components/widgets/facet-nav/FacetPlotLegendList.js +4 -2
  336. package/dist/components/widgets/facet-nav/FacetPlotLegendList.js.map +1 -1
  337. package/dist/components/widgets/facet-nav/FacetPlotLegendTable.js +1 -1
  338. package/dist/components/widgets/facet-nav/FacetPlotLegendTable.js.map +1 -1
  339. package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.d.ts +2 -0
  340. package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.d.ts.map +1 -1
  341. package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.js.map +1 -1
  342. package/dist/components/widgets/facet-nav/PlotsContainer.d.ts +7 -0
  343. package/dist/components/widgets/facet-nav/PlotsContainer.d.ts.map +1 -1
  344. package/dist/components/widgets/facet-nav/PlotsContainer.js +47 -45
  345. package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
  346. package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js +4 -4
  347. package/dist/components/widgets/facet-nav/useFacetPlots.d.ts +3 -2
  348. package/dist/components/widgets/facet-nav/useFacetPlots.d.ts.map +1 -1
  349. package/dist/components/widgets/facet-nav/useFacetPlots.js +16 -15
  350. package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
  351. package/dist/components/widgets/query-filter/CombinedRangeFacetFilter.js +4 -4
  352. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts +2 -2
  353. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts.map +1 -1
  354. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js +62 -60
  355. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
  356. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.d.ts +2 -0
  357. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.d.ts.map +1 -1
  358. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js +10 -10
  359. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js.map +1 -1
  360. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.d.ts +1 -0
  361. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.d.ts.map +1 -1
  362. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js +2 -1
  363. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js.map +1 -1
  364. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.d.ts +3 -2
  365. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.d.ts.map +1 -1
  366. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.js.map +1 -1
  367. package/dist/components/widgets/query-filter/FacetFilterControls.d.ts +3 -2
  368. package/dist/components/widgets/query-filter/FacetFilterControls.d.ts.map +1 -1
  369. package/dist/components/widgets/query-filter/FacetFilterControls.js +63 -62
  370. package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
  371. package/dist/components/widgets/query-filter/JsonColumnFacetFilters.d.ts.map +1 -1
  372. package/dist/components/widgets/query-filter/JsonColumnFacetFilters.js +30 -29
  373. package/dist/components/widgets/query-filter/JsonColumnFacetFilters.js.map +1 -1
  374. package/dist/components/widgets/query-filter/RangeFacetFilter.js +5 -5
  375. package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.d.ts +53 -0
  376. package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.d.ts.map +1 -0
  377. package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.js +391 -0
  378. package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.js.map +1 -0
  379. package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.d.ts +41 -0
  380. package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.d.ts.map +1 -0
  381. package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.js +379 -0
  382. package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.js.map +1 -0
  383. package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.d.ts +26 -0
  384. package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.d.ts.map +1 -0
  385. package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.js +112 -0
  386. package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.js.map +1 -0
  387. package/dist/mocks/mockAnnotationColumns.d.ts.map +1 -1
  388. package/dist/mocks/mockAnnotationColumns.js +1 -1
  389. package/dist/mocks/mockAnnotationColumns.js.map +1 -1
  390. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts +9 -0
  391. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts.map +1 -1
  392. package/dist/mocks/msw/handlers/aridhiaHandlers.js +24 -15
  393. package/dist/mocks/msw/handlers/aridhiaHandlers.js.map +1 -1
  394. package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts +21 -2
  395. package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts.map +1 -1
  396. package/dist/mocks/msw/handlers/asyncJobHandlers.js +30 -22
  397. package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
  398. package/dist/mocks/msw/handlers/cohortBuilderHandlers.d.ts +27 -0
  399. package/dist/mocks/msw/handlers/cohortBuilderHandlers.d.ts.map +1 -0
  400. package/dist/mocks/msw/handlers/cohortBuilderHandlers.js +158 -0
  401. package/dist/mocks/msw/handlers/cohortBuilderHandlers.js.map +1 -0
  402. package/dist/mocks/msw/handlers/subscriptionHandlers.js +1 -1
  403. package/dist/mocks/msw/handlers/subscriptionHandlers.js.map +1 -1
  404. package/dist/mocks/msw/handlers/userProfileHandlers.d.ts.map +1 -1
  405. package/dist/mocks/msw/handlers/userProfileHandlers.js +2 -2
  406. package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
  407. package/dist/mocks/query/mockColumnCategoryTable.d.ts +19 -0
  408. package/dist/mocks/query/mockColumnCategoryTable.d.ts.map +1 -0
  409. package/dist/mocks/query/mockColumnCategoryTable.js +188 -0
  410. package/dist/mocks/query/mockColumnCategoryTable.js.map +1 -0
  411. package/dist/stories/ColorPaletteInspector.d.ts.map +1 -1
  412. package/dist/stories/ColorPaletteInspector.js +2 -2
  413. package/dist/stories/ColorPaletteInspector.js.map +1 -1
  414. package/dist/style/components/facet_nav/_facet-nav-panel.scss +8 -0
  415. package/dist/style/main.css +1 -1
  416. package/dist/synapse-queries/auth/useOIDC.js +2 -2
  417. package/dist/synapse-queries/auth/useOIDC.js.map +1 -1
  418. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js +2 -2
  419. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js.map +1 -1
  420. package/dist/synapse-queries/challenge/useChallenge.js +2 -2
  421. package/dist/synapse-queries/challenge/useChallenge.js.map +1 -1
  422. package/dist/synapse-queries/chat/useChat.js +8 -8
  423. package/dist/synapse-queries/chat/useChat.js.map +1 -1
  424. package/dist/synapse-queries/curation/task/useCurationTask.js +10 -10
  425. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  426. package/dist/synapse-queries/dataaccess/useAccessRequirements.js +24 -24
  427. package/dist/synapse-queries/dataaccess/useAccessRequirements.js.map +1 -1
  428. package/dist/synapse-queries/dataaccess/useDataAccessSubmission.js +4 -4
  429. package/dist/synapse-queries/dataaccess/useDataAccessSubmission.js.map +1 -1
  430. package/dist/synapse-queries/dataaccess/useEDuc.js +6 -6
  431. package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
  432. package/dist/synapse-queries/dataaccess/useFormTemplate.js +4 -4
  433. package/dist/synapse-queries/dataaccess/useFormTemplate.js.map +1 -1
  434. package/dist/synapse-queries/download/index.js +2 -2
  435. package/dist/synapse-queries/download/useDownloadList.d.ts +5 -0
  436. package/dist/synapse-queries/download/useDownloadList.d.ts.map +1 -1
  437. package/dist/synapse-queries/download/useDownloadList.js +14 -13
  438. package/dist/synapse-queries/download/useDownloadList.js.map +1 -1
  439. package/dist/synapse-queries/entity/useEntity.d.ts.map +1 -1
  440. package/dist/synapse-queries/entity/useEntity.js +20 -20
  441. package/dist/synapse-queries/entity/useEntity.js.map +1 -1
  442. package/dist/synapse-queries/entity/useExportToADWorkbench.d.ts.map +1 -1
  443. package/dist/synapse-queries/entity/useExportToADWorkbench.js +2 -1
  444. package/dist/synapse-queries/entity/useExportToADWorkbench.js.map +1 -1
  445. package/dist/synapse-queries/entity/useExportToCavatica.d.ts.map +1 -1
  446. package/dist/synapse-queries/entity/useExportToCavatica.js +3 -2
  447. package/dist/synapse-queries/entity/useExportToCavatica.js.map +1 -1
  448. package/dist/synapse-queries/entity/useExportToPluto.d.ts.map +1 -1
  449. package/dist/synapse-queries/entity/useExportToPluto.js +2 -1
  450. package/dist/synapse-queries/entity/useExportToPluto.js.map +1 -1
  451. package/dist/synapse-queries/entity/useGetQueryResultBundle.d.ts.map +1 -1
  452. package/dist/synapse-queries/entity/useGetQueryResultBundle.js +4 -7
  453. package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
  454. package/dist/synapse-queries/forum/useReply.js +6 -6
  455. package/dist/synapse-queries/forum/useReply.js.map +1 -1
  456. package/dist/synapse-queries/forum/useThread.js +14 -14
  457. package/dist/synapse-queries/forum/useThread.js.map +1 -1
  458. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js +1 -1
  459. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
  460. package/dist/synapse-queries/grid/useGridSession.js +4 -4
  461. package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
  462. package/dist/synapse-queries/index.js +177 -176
  463. package/dist/synapse-queries/oauth/useOAuthClient.js +9 -9
  464. package/dist/synapse-queries/oauth/useOAuthClient.js.map +1 -1
  465. package/dist/synapse-queries/portal/usePortal.js +7 -7
  466. package/dist/synapse-queries/portal/usePortal.js.map +1 -1
  467. package/dist/synapse-queries/subscription/useSubscription.js +4 -4
  468. package/dist/synapse-queries/subscription/useSubscription.js.map +1 -1
  469. package/dist/synapse-queries/table/useTableUpdateTransaction.js +2 -2
  470. package/dist/synapse-queries/table/useTableUpdateTransaction.js.map +1 -1
  471. package/dist/synapse-queries/team/useTeam.js +2 -2
  472. package/dist/synapse-queries/team/useTeam.js.map +1 -1
  473. package/dist/synapse-queries/team/useTeamList.d.ts.map +1 -1
  474. package/dist/synapse-queries/team/useTeamList.js +3 -3
  475. package/dist/synapse-queries/team/useTeamList.js.map +1 -1
  476. package/dist/synapse-queries/team/useTeamMembers.js +8 -8
  477. package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
  478. package/dist/synapse-queries/termsOfService/useTermsOfService.js +2 -2
  479. package/dist/synapse-queries/termsOfService/useTermsOfService.js.map +1 -1
  480. package/dist/synapse-queries/trash/useTrashCan.js +4 -4
  481. package/dist/synapse-queries/trash/useTrashCan.js.map +1 -1
  482. package/dist/synapse-queries/user/useCertificationQuiz.js +2 -2
  483. package/dist/synapse-queries/user/useCertificationQuiz.js.map +1 -1
  484. package/dist/synapse-queries/user/useFavorites.js +4 -4
  485. package/dist/synapse-queries/user/useFavorites.js.map +1 -1
  486. package/dist/synapse-queries/user/useRevokeCertification.js +2 -2
  487. package/dist/synapse-queries/user/useRevokeCertification.js.map +1 -1
  488. package/dist/synapse-queries/wiki/useWiki.js +10 -10
  489. package/dist/synapse-queries/wiki/useWiki.js.map +1 -1
  490. package/dist/tsconfig.build.tsbuildinfo +1 -1
  491. package/dist/utils/ContentTypeUtils.js +4 -4
  492. package/dist/utils/ContentTypeUtils.js.map +1 -1
  493. package/dist/utils/PermissionLevelToAccessType.js +1 -1
  494. package/dist/utils/PermissionLevelToAccessType.js.map +1 -1
  495. package/dist/utils/analytics/useGoogleAnalytics.js +1 -1
  496. package/dist/utils/analytics/useGoogleAnalytics.js.map +1 -1
  497. package/dist/utils/context/DocumentMetadataContext.js +1 -1
  498. package/dist/utils/context/DocumentMetadataContext.js.map +1 -1
  499. package/dist/utils/functions/AccessControlListUtils.d.ts.map +1 -1
  500. package/dist/utils/functions/AccessControlListUtils.js +3 -3
  501. package/dist/utils/functions/AccessControlListUtils.js.map +1 -1
  502. package/dist/utils/functions/ArrayUtils.js +2 -2
  503. package/dist/utils/functions/ArrayUtils.js.map +1 -1
  504. package/dist/utils/functions/FileHandleUtils.js +1 -1
  505. package/dist/utils/functions/FileHandleUtils.js.map +1 -1
  506. package/dist/utils/functions/RegularExpressions.js +1 -1
  507. package/dist/utils/functions/RegularExpressions.js.map +1 -1
  508. package/dist/utils/functions/StringUtils.d.ts.map +1 -1
  509. package/dist/utils/functions/StringUtils.js +1 -2
  510. package/dist/utils/functions/StringUtils.js.map +1 -1
  511. package/dist/utils/functions/deepLinkingUtils.js +2 -2
  512. package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
  513. package/dist/utils/functions/enumerationFacet.d.ts +26 -0
  514. package/dist/utils/functions/enumerationFacet.d.ts.map +1 -0
  515. package/dist/utils/functions/enumerationFacet.js +27 -0
  516. package/dist/utils/functions/enumerationFacet.js.map +1 -0
  517. package/dist/utils/functions/facetCountUtils.d.ts +12 -0
  518. package/dist/utils/functions/facetCountUtils.d.ts.map +1 -0
  519. package/dist/utils/functions/facetCountUtils.js +9 -0
  520. package/dist/utils/functions/facetCountUtils.js.map +1 -0
  521. package/dist/utils/functions/getEndpoint.js.map +1 -1
  522. package/dist/utils/functions/getUserData.js +1 -1
  523. package/dist/utils/functions/getUserData.js.map +1 -1
  524. package/dist/utils/functions/queryUtils.d.ts +1 -1
  525. package/dist/utils/functions/queryUtils.d.ts.map +1 -1
  526. package/dist/utils/functions/queryUtils.js +26 -22
  527. package/dist/utils/functions/queryUtils.js.map +1 -1
  528. package/dist/utils/functions/testDownloadSpeed.d.ts.map +1 -1
  529. package/dist/utils/functions/testDownloadSpeed.js +17 -26
  530. package/dist/utils/functions/testDownloadSpeed.js.map +1 -1
  531. package/dist/utils/functions/unCamelCase.js +1 -1
  532. package/dist/utils/functions/unCamelCase.js.map +1 -1
  533. package/dist/utils/hooks/useGetInfoFromIds.js +5 -5
  534. package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
  535. package/dist/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.js +1 -1
  536. package/dist/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.js.map +1 -1
  537. package/dist/utils/hooks/useLogin.d.ts.map +1 -1
  538. package/dist/utils/hooks/useLogin.js +5 -5
  539. package/dist/utils/hooks/useLogin.js.map +1 -1
  540. package/dist/utils/hooks/useUploadFileEntity/useCreateFolderPath.js.map +1 -1
  541. package/dist/utils/jsonschema/collectTopLevelProperties.d.ts +6 -0
  542. package/dist/utils/jsonschema/collectTopLevelProperties.d.ts.map +1 -1
  543. package/dist/utils/jsonschema/collectTopLevelProperties.js +1 -1
  544. package/dist/utils/jsonschema/collectTopLevelProperties.js.map +1 -1
  545. package/dist/utils/jsonschema/getNumberOrEnumInfo.d.ts +22 -0
  546. package/dist/utils/jsonschema/getNumberOrEnumInfo.d.ts.map +1 -0
  547. package/dist/utils/jsonschema/getNumberOrEnumInfo.js +39 -0
  548. package/dist/utils/jsonschema/getNumberOrEnumInfo.js.map +1 -0
  549. package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.d.ts +1 -0
  550. package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.d.ts.map +1 -1
  551. package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.js +1 -1
  552. package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.js.map +1 -1
  553. package/dist/utils/jsonschema/getSchemaPropertyInfo.d.ts +5 -0
  554. package/dist/utils/jsonschema/getSchemaPropertyInfo.d.ts.map +1 -1
  555. package/dist/utils/jsonschema/getSchemaPropertyInfo.js +30 -15
  556. package/dist/utils/jsonschema/getSchemaPropertyInfo.js.map +1 -1
  557. package/dist/utils/jsonschema/submissionContext.js +2 -2
  558. package/dist/utils/jsonschema/submissionContext.js.map +1 -1
  559. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"ElementWithTooltip.js","names":[],"sources":["../../../src/components/widgets/ElementWithTooltip.tsx"],"sourcesContent":["import React from 'react'\nimport { Menu, Tooltip } from '@mui/material'\nimport {\n ComponentElement,\n CSSProperties,\n MouseEvent,\n PropsWithChildren,\n ReactNode,\n useState,\n} from 'react'\nimport IconSvg, { IconSvgProps } from '../IconSvg/IconSvg'\nimport { Icon } from '../row_renderers/utils'\nimport { TOOLTIP_DELAY_SHOW } from '../SynapseTable/SynapseTableConstants'\n\ntype CustomImageProps = {\n svgImg: ComponentElement<any, any>\n altText: string\n}\n\nexport type TooltipVisualProps = {\n delayShow: number\n place: 'top' | 'right' | 'bottom' | 'left'\n type: 'dark' | 'success' | 'warning' | 'error' | 'info' | 'light'\n effect: 'float' | 'solid'\n border?: boolean\n}\n\nconst DEFAULT_TOOLTIP_VISUAL_PROPS: Partial<TooltipVisualProps> = {\n place: 'top',\n}\n\n/*****************************************\n * The control needs to either have a child element or needs to have an image supplied\n * If the child element is supplied the control renders the child applying additional properties\n * If the image is supplied the control renders a clickable image\n * If there are no children and callback Fn is not supplied it is assumed to be a a dropdown trigger\n */\n\ntype ElementWithTooltipProps = PropsWithChildren<{\n image?: IconSvgProps | CustomImageProps\n imageColor?: string\n tooltipText: string\n callbackFn?: () => void\n className?: string\n tooltipVisualProps?: Partial<TooltipVisualProps>\n darkTheme?: boolean\n size?: string\n icon?: ReactNode\n /** The items to show in the menu -- NOTE: this cannot be a Fragment!\n * @see https://stackoverflow.com/questions/75083605/mui-the-menu-component-doesnt-accept-a-fragment-as-a-child-consider-providing\n */\n menuItems?: React.ReactNode\n}>\n\nfunction getTooltipTriggerContents(\n image: IconSvgProps | CustomImageProps,\n imageColor: string | undefined,\n size: CSSProperties['width'] | undefined,\n) {\n if ('svgImg' in image) {\n return image.svgImg\n } else {\n return <IconSvg {...image} sx={{ color: imageColor, width: size }} />\n }\n}\n\nexport const ElementWithTooltip = ({\n image,\n callbackFn,\n tooltipText,\n className = '',\n imageColor,\n tooltipVisualProps = DEFAULT_TOOLTIP_VISUAL_PROPS,\n children,\n darkTheme,\n size,\n icon,\n menuItems,\n}: ElementWithTooltipProps): React.ReactNode => {\n const { place } = tooltipVisualProps\n const iconComponent = icon ? (\n typeof icon === 'string' ? (\n <Icon type={icon}></Icon>\n ) : (\n icon\n )\n ) : undefined\n const tooltipTriggerContents = iconComponent\n ? iconComponent\n : image\n ? getTooltipTriggerContents(image, imageColor, size)\n : children || <></>\n\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n const open = Boolean(anchorEl)\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget)\n }\n const handleClose = () => {\n setAnchorEl(null)\n }\n //if there is no callbackFn - assume it's a toggle\n\n let tooltipTrigger: ReactNode\n if (!children) {\n tooltipTrigger = (\n <button\n tabIndex={0}\n className={`ElementWithTooltip SRC-hand-cursor SRC-grey-background-hover ${className} ${\n darkTheme ? 'dark-theme' : ''\n } `}\n onClick={e => {\n if (callbackFn) {\n callbackFn()\n } else {\n // open dropdown menu\n handleClick(e)\n }\n }}\n aria-label={tooltipText}\n >\n {tooltipTriggerContents}\n </button>\n )\n } else {\n tooltipTrigger = <div className=\"SRC-hand-cursor\">{children}</div>\n }\n\n return (\n <>\n <Tooltip\n title={tooltipText}\n enterNextDelay={TOOLTIP_DELAY_SHOW}\n placement={place}\n data-testid=\"ElementTooltip\"\n >\n {tooltipTrigger}\n </Tooltip>\n {menuItems && (\n <Menu anchorEl={anchorEl} open={open} onClose={handleClose}>\n {menuItems}\n </Menu>\n )}\n </>\n )\n}\n"],"mappings":";;;;;;;;AA2BA,IAAM,IAA4D,EAChE,OAAO,MACT;AAyBA,SAAS,EACP,GACA,GACA,GACA;CAIE,OAHE,YAAY,IACP,EAAM,SAEN,kBAAC,GAAD;EAAS,GAAI;EAAO,IAAI;GAAE,OAAO;GAAY,OAAO;EAAK;CAAI,CAAA;AAExE;AAEA,IAAa,KAAsB,EACjC,UACA,eACA,gBACA,eAAY,IACZ,eACA,wBAAqB,GACrB,aACA,cACA,SACA,SACA,mBAC8C;CAC9C,IAAM,EAAE,aAAU,GAQZ,KAPgB,IACpB,OAAO,KAAS,WACd,kBAAC,GAAD,EAAM,MAAM,EAAY,CAAA,IAExB,IAEA,KAAA,OAGA,IACE,EAA0B,GAAO,GAAY,CAAI,IACjD,KAAY,kBAAA,GAAA,CAAI,CAAA,IAEhB,CAAC,GAAU,KAAe,EAA6B,IAAI,GAC3D,IAAO,EAAQ,GACf,KAAe,MAAyC;EAC5D,EAAY,EAAM,aAAa;CACjC,GACM,UAAoB;EACxB,EAAY,IAAI;CAClB,GAGI;CAyBJ,OAxBA,AACE,IADG,IAqBc,kBAAC,OAAD;EAAK,WAAU;EAAmB;CAAc,CAAA,IAnB/D,kBAAC,UAAD;EACE,UAAU;EACV,WAAW,gEAAgE,EAAU,GACnF,IAAY,eAAe,GAC5B;EACD,UAAS,MAAK;GACZ,AAAI,IACF,EAAW,IAGX,EAAY,CAAC;EAEjB;EACA,cAAY;YAEX;CACK,CAAA,GAOV,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;EACE,OAAO;EACP,gBAAA;EACA,WAAW;EACX,eAAY;YAEX;CACM,CAAA,GACR,KACC,kBAAC,GAAD;EAAgB;EAAgB;EAAM,SAAS;YAC5C;CACG,CAAA,CAER,EAAA,CAAA;AAEN"}
1
+ {"version":3,"file":"ElementWithTooltip.js","names":[],"sources":["../../../src/components/widgets/ElementWithTooltip.tsx"],"sourcesContent":["import React from 'react'\nimport { Menu, Tooltip } from '@mui/material'\nimport {\n ComponentElement,\n CSSProperties,\n KeyboardEvent,\n MouseEvent,\n PropsWithChildren,\n ReactNode,\n useState,\n} from 'react'\nimport IconSvg, { IconSvgProps } from '../IconSvg/IconSvg'\nimport { Icon } from '../row_renderers/utils'\nimport { TOOLTIP_DELAY_SHOW } from '../SynapseTable/SynapseTableConstants'\n\ntype CustomImageProps = {\n svgImg: ComponentElement<any, any>\n altText: string\n}\n\nexport type TooltipVisualProps = {\n delayShow: number\n place: 'top' | 'right' | 'bottom' | 'left'\n type: 'dark' | 'success' | 'warning' | 'error' | 'info' | 'light'\n effect: 'float' | 'solid'\n border?: boolean\n}\n\nconst DEFAULT_TOOLTIP_VISUAL_PROPS: Partial<TooltipVisualProps> = {\n place: 'top',\n}\n\n/*****************************************\n * The control needs to either have a child element or needs to have an image supplied\n * If the child element is supplied the control renders the child applying additional properties\n * If the image is supplied the control renders a clickable image\n * If there are no children and callback Fn is not supplied it is assumed to be a a dropdown trigger\n */\n\ntype ElementWithTooltipProps = PropsWithChildren<{\n image?: IconSvgProps | CustomImageProps\n imageColor?: string\n tooltipText: string\n callbackFn?: () => void\n className?: string\n tooltipVisualProps?: Partial<TooltipVisualProps>\n darkTheme?: boolean\n size?: string\n icon?: ReactNode\n /** The items to show in the menu -- NOTE: this cannot be a Fragment!\n * @see https://stackoverflow.com/questions/75083605/mui-the-menu-component-doesnt-accept-a-fragment-as-a-child-consider-providing\n */\n menuItems?: React.ReactNode\n /**\n * When true, choosing a menu item closes the menu. Leave unset for menus whose items toggle state in place, so\n * several can be toggled in a row.\n */\n closeMenuOnClick?: boolean\n}>\n\nfunction getTooltipTriggerContents(\n image: IconSvgProps | CustomImageProps,\n imageColor: string | undefined,\n size: CSSProperties['width'] | undefined,\n) {\n if ('svgImg' in image) {\n return image.svgImg\n } else {\n return <IconSvg {...image} sx={{ color: imageColor, width: size }} />\n }\n}\n\nexport const ElementWithTooltip = ({\n image,\n callbackFn,\n tooltipText,\n className = '',\n imageColor,\n tooltipVisualProps = DEFAULT_TOOLTIP_VISUAL_PROPS,\n children,\n darkTheme,\n size,\n icon,\n menuItems,\n closeMenuOnClick = false,\n}: ElementWithTooltipProps): React.ReactNode => {\n const { place } = tooltipVisualProps\n const iconComponent = icon ? (\n typeof icon === 'string' ? (\n <Icon type={icon}></Icon>\n ) : (\n icon\n )\n ) : undefined\n const tooltipTriggerContents = iconComponent\n ? iconComponent\n : image\n ? getTooltipTriggerContents(image, imageColor, size)\n : children || <></>\n\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n const open = Boolean(anchorEl)\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget)\n }\n const handleClose = () => {\n setAnchorEl(null)\n }\n const closeAfterKeyboardChoice = (\n event: KeyboardEvent<HTMLUListElement>,\n key: string,\n ) => {\n const target = event.target as HTMLElement\n if (\n event.key === key &&\n target.closest('[role=\"menuitem\"]:not([aria-disabled=\"true\"])')\n ) {\n handleClose()\n }\n }\n //if there is no callbackFn - assume it's a toggle\n\n let tooltipTrigger: ReactNode\n if (!children) {\n tooltipTrigger = (\n <button\n tabIndex={0}\n className={`ElementWithTooltip SRC-hand-cursor SRC-grey-background-hover ${className} ${\n darkTheme ? 'dark-theme' : ''\n } `}\n onClick={e => {\n if (callbackFn) {\n callbackFn()\n } else {\n // open dropdown menu\n handleClick(e)\n }\n }}\n aria-label={tooltipText}\n >\n {tooltipTriggerContents}\n </button>\n )\n } else {\n tooltipTrigger = <div className=\"SRC-hand-cursor\">{children}</div>\n }\n\n return (\n <>\n <Tooltip\n title={tooltipText}\n enterNextDelay={TOOLTIP_DELAY_SHOW}\n placement={place}\n data-testid=\"ElementTooltip\"\n >\n {tooltipTrigger}\n </Tooltip>\n {menuItems && (\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n slotProps={{\n list: closeMenuOnClick\n ? {\n onClick: handleClose,\n // A menu item runs its action on Enter (key down) or Space (key up) without a click reaching the list.\n onKeyDown: (event: KeyboardEvent<HTMLUListElement>) =>\n closeAfterKeyboardChoice(event, 'Enter'),\n onKeyUp: (event: KeyboardEvent<HTMLUListElement>) =>\n closeAfterKeyboardChoice(event, ' '),\n }\n : undefined,\n }}\n >\n {menuItems}\n </Menu>\n )}\n </>\n )\n}\n"],"mappings":";;;;;;;;AA4BA,IAAM,IAA4D,EAChE,OAAO,MACT;AA8BA,SAAS,EACP,GACA,GACA,GACA;CAIE,OAHE,YAAY,IACP,EAAM,SAEN,kBAAC,GAAD;EAAS,GAAI;EAAO,IAAI;GAAE,OAAO;GAAY,OAAO;EAAK;CAAI,CAAA;AAExE;AAEA,IAAa,KAAsB,EACjC,UACA,eACA,gBACA,eAAY,IACZ,eACA,wBAAqB,GACrB,aACA,cACA,SACA,SACA,cACA,sBAAmB,SAC2B;CAC9C,IAAM,EAAE,aAAU,GAQZ,KAPgB,IACpB,OAAO,KAAS,WACd,kBAAC,GAAD,EAAM,MAAM,EAAY,CAAA,IAExB,IAEA,KAAA,OAGA,IACE,EAA0B,GAAO,GAAY,CAAI,IACjD,KAAY,kBAAA,GAAA,CAAI,CAAA,IAEhB,CAAC,GAAU,KAAe,EAA6B,IAAI,GAC3D,IAAO,EAAQ,GACf,KAAe,MAAyC;EAC5D,EAAY,EAAM,aAAa;CACjC,GACM,UAAoB;EACxB,EAAY,IAAI;CAClB,GACM,KACJ,GACA,MACG;EACH,IAAM,IAAS,EAAM;EACrB,AACE,EAAM,QAAQ,KACd,EAAO,QAAQ,mDAA+C,KAE9D,EAAY;CAEhB,GAGI;CAyBJ,OAxBA,AACE,IADG,IAqBc,kBAAC,OAAD;EAAK,WAAU;EAAmB;CAAc,CAAA,IAnB/D,kBAAC,UAAD;EACE,UAAU;EACV,WAAW,gEAAgE,EAAU,GACnF,IAAY,eAAe,GAC5B;EACD,UAAS,MAAK;GACZ,AAAI,IACF,EAAW,IAGX,EAAY,CAAC;EAEjB;EACA,cAAY;YAEX;CACK,CAAA,GAOV,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;EACE,OAAO;EACP,gBAAA;EACA,WAAW;EACX,eAAY;YAEX;CACM,CAAA,GACR,KACC,kBAAC,GAAD;EACY;EACJ;EACN,SAAS;EACT,WAAW,EACT,MAAM,IACF;GACE,SAAS;GAET,YAAY,MACV,EAAyB,GAAO,OAAO;GACzC,UAAU,MACR,EAAyB,GAAO,GAAG;EACvC,IACA,KAAA,EACN;YAEC;CACG,CAAA,CAER,EAAA,CAAA;AAEN"}
@@ -1 +1 @@
1
- {"version":3,"file":"RangeSlider.d.ts","sourceRoot":"","sources":["../../../../src/components/widgets/RangeSlider/RangeSlider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,iBAAiB,EAAY,MAAM,OAAO,CAAA;AAUnD,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;IAC/C,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,aAAa,EAAE,WAAW,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;IACxC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;CAC/C,CAAC,CAAA;AAoBF,iBAAS,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CA4D3C;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"RangeSlider.d.ts","sourceRoot":"","sources":["../../../../src/components/widgets/RangeSlider/RangeSlider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,iBAAiB,EAAY,MAAM,OAAO,CAAA;AAUnD,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;IAC/C,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,aAAa,EAAE,WAAW,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;IACxC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;CAC/C,CAAC,CAAA;AAoBF,iBAAS,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CA2D3C;AAED,eAAe,WAAW,CAAA"}
@@ -15,7 +15,7 @@ function l(e, t) {
15
15
  return [e.min ? Number(e.min) : Number(t[0]), e.max ? Number(e.max) : Number(t[1])];
16
16
  }
17
17
  function u(i) {
18
- let { onApplyClicked: u, onChange: d, step: f } = i, p = (e) => e.map((e) => Number(e)), [m, h] = e(() => l(i.initialValues, i.domain)), g = p(i.domain), _ = (e) => {
18
+ let { onApplyClicked: u, onChange: d, step: f } = i, p = (e) => e.map(Number), [m, h] = e(() => l(i.initialValues, i.domain)), g = p(i.domain), _ = (e) => {
19
19
  h([...e]), d && d({
20
20
  min: e[0],
21
21
  max: e[1]
@@ -1 +1 @@
1
- {"version":3,"file":"RangeSlider.js","names":[],"sources":["../../../../src/components/widgets/RangeSlider/RangeSlider.tsx"],"sourcesContent":["import { RangeValues } from '../Range'\nimport { PropsWithChildren, useState } from 'react'\nimport {\n Box,\n Button,\n Slider,\n SliderValueLabelProps,\n Tooltip,\n Typography,\n} from '@mui/material'\n\nexport type RangeSliderProps = PropsWithChildren<{\n domain: string[]\n initialValues: RangeValues\n step: number\n onChange?: (values: RangeValues) => void\n onApplyClicked?: (values: RangeValues) => void\n}>\n\nfunction ValueLabelComponent(props: SliderValueLabelProps) {\n const { children, value } = props\n\n return (\n <Tooltip enterTouchDelay={0} placement=\"top\" title={value}>\n {children}\n </Tooltip>\n )\n}\n\nfunction getInitialValues(initialValues: RangeValues, domain: string[]) {\n const result = [\n initialValues.min ? Number(initialValues.min) : Number(domain[0]),\n initialValues.max ? Number(initialValues.max) : Number(domain[1]),\n ]\n return result\n}\n\nfunction RangeSlider(props: RangeSliderProps) {\n const { onApplyClicked, onChange, step } = props\n const stringArrToNumArr = (inputArr: string[]) =>\n inputArr.map(value => Number(value))\n\n const [values, setValues] = useState<number[]>(() =>\n getInitialValues(props.initialValues, props.domain),\n )\n\n const numDomain = stringArrToNumArr(props.domain)\n\n const handleSliderChange = (values: readonly number[]) => {\n setValues([...values])\n if (onChange) {\n onChange({ min: values[0], max: values[1] })\n }\n }\n\n return (\n <Box sx={{ ml: 1 }}>\n <Typography variant=\"smallText1\">\n {values[0]} - {values[1]}\n </Typography>\n <Box\n sx={{\n display: 'flex',\n gap: 3,\n ml: 1,\n }}\n >\n <Slider\n marks={[\n { value: numDomain[0], label: props.domain[0] },\n { value: numDomain[1], label: props.domain[1] },\n ]}\n min={numDomain[0]}\n max={numDomain[1]}\n value={values}\n onChange={(_, newValues) => handleSliderChange(newValues)}\n step={step}\n valueLabelDisplay=\"auto\"\n slots={{\n valueLabel: ValueLabelComponent,\n }}\n />\n {onApplyClicked && (\n <Box>\n <Button\n size=\"small\"\n variant=\"outlined\"\n onClick={() => onApplyClicked({ min: values[0], max: values[1] })}\n sx={{ fontSize: 16 }}\n >\n Apply\n </Button>\n </Box>\n )}\n </Box>\n </Box>\n )\n}\n\nexport default RangeSlider\n"],"mappings":";;;;AAmBA,SAAS,EAAoB,GAA8B;CACzD,IAAM,EAAE,aAAU,aAAU;CAE5B,OACE,kBAAC,GAAD;EAAS,iBAAiB;EAAG,WAAU;EAAM,OAAO;EACjD;CACM,CAAA;AAEb;AAEA,SAAS,EAAiB,GAA4B,GAAkB;CAKtE,OAAO,CAHL,EAAc,MAAM,OAAO,EAAc,GAAG,IAAI,OAAO,EAAO,EAAE,GAChE,EAAc,MAAM,OAAO,EAAc,GAAG,IAAI,OAAO,EAAO,EAAE,CAE3D;AACT;AAEA,SAAS,EAAY,GAAyB;CAC5C,IAAM,EAAE,mBAAgB,aAAU,YAAS,GACrC,KAAqB,MACzB,EAAS,KAAI,MAAS,OAAO,CAAK,CAAC,GAE/B,CAAC,GAAQ,KAAa,QAC1B,EAAiB,EAAM,eAAe,EAAM,MAAM,CACpD,GAEM,IAAY,EAAkB,EAAM,MAAM,GAE1C,KAAsB,MAA8B;EAExD,AADA,EAAU,CAAC,GAAG,CAAM,CAAC,GACjB,KACF,EAAS;GAAE,KAAK,EAAO;GAAI,KAAK,EAAO;EAAG,CAAC;CAE/C;CAEA,OACE,kBAAC,GAAD;EAAK,IAAI,EAAE,IAAI,EAAE;YAAjB,CACE,kBAAC,GAAD;GAAY,SAAQ;aAApB;IACG,EAAO;IAAG;IAAI,EAAO;GACZ;MACZ,kBAAC,GAAD;GACE,IAAI;IACF,SAAS;IACT,KAAK;IACL,IAAI;GACN;aALF,CAOE,kBAAC,GAAD;IACE,OAAO,CACL;KAAE,OAAO,EAAU;KAAI,OAAO,EAAM,OAAO;IAAG,GAC9C;KAAE,OAAO,EAAU;KAAI,OAAO,EAAM,OAAO;IAAG,CAChD;IACA,KAAK,EAAU;IACf,KAAK,EAAU;IACf,OAAO;IACP,WAAW,GAAG,MAAc,EAAmB,CAAS;IAClD;IACN,mBAAkB;IAClB,OAAO,EACL,YAAY,EACd;GACD,CAAA,GACA,KACC,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;IACE,MAAK;IACL,SAAQ;IACR,eAAe,EAAe;KAAE,KAAK,EAAO;KAAI,KAAK,EAAO;IAAG,CAAC;IAChE,IAAI,EAAE,UAAU,GAAG;cACpB;GAEO,CAAA,EACL,CAAA,CAEJ;IACF;;AAET"}
1
+ {"version":3,"file":"RangeSlider.js","names":[],"sources":["../../../../src/components/widgets/RangeSlider/RangeSlider.tsx"],"sourcesContent":["import { RangeValues } from '../Range'\nimport { PropsWithChildren, useState } from 'react'\nimport {\n Box,\n Button,\n Slider,\n SliderValueLabelProps,\n Tooltip,\n Typography,\n} from '@mui/material'\n\nexport type RangeSliderProps = PropsWithChildren<{\n domain: string[]\n initialValues: RangeValues\n step: number\n onChange?: (values: RangeValues) => void\n onApplyClicked?: (values: RangeValues) => void\n}>\n\nfunction ValueLabelComponent(props: SliderValueLabelProps) {\n const { children, value } = props\n\n return (\n <Tooltip enterTouchDelay={0} placement=\"top\" title={value}>\n {children}\n </Tooltip>\n )\n}\n\nfunction getInitialValues(initialValues: RangeValues, domain: string[]) {\n const result = [\n initialValues.min ? Number(initialValues.min) : Number(domain[0]),\n initialValues.max ? Number(initialValues.max) : Number(domain[1]),\n ]\n return result\n}\n\nfunction RangeSlider(props: RangeSliderProps) {\n const { onApplyClicked, onChange, step } = props\n const stringArrToNumArr = (inputArr: string[]) => inputArr.map(Number)\n\n const [values, setValues] = useState<number[]>(() =>\n getInitialValues(props.initialValues, props.domain),\n )\n\n const numDomain = stringArrToNumArr(props.domain)\n\n const handleSliderChange = (values: readonly number[]) => {\n setValues([...values])\n if (onChange) {\n onChange({ min: values[0], max: values[1] })\n }\n }\n\n return (\n <Box sx={{ ml: 1 }}>\n <Typography variant=\"smallText1\">\n {values[0]} - {values[1]}\n </Typography>\n <Box\n sx={{\n display: 'flex',\n gap: 3,\n ml: 1,\n }}\n >\n <Slider\n marks={[\n { value: numDomain[0], label: props.domain[0] },\n { value: numDomain[1], label: props.domain[1] },\n ]}\n min={numDomain[0]}\n max={numDomain[1]}\n value={values}\n onChange={(_, newValues) => handleSliderChange(newValues)}\n step={step}\n valueLabelDisplay=\"auto\"\n slots={{\n valueLabel: ValueLabelComponent,\n }}\n />\n {onApplyClicked && (\n <Box>\n <Button\n size=\"small\"\n variant=\"outlined\"\n onClick={() => onApplyClicked({ min: values[0], max: values[1] })}\n sx={{ fontSize: 16 }}\n >\n Apply\n </Button>\n </Box>\n )}\n </Box>\n </Box>\n )\n}\n\nexport default RangeSlider\n"],"mappings":";;;;AAmBA,SAAS,EAAoB,GAA8B;CACzD,IAAM,EAAE,aAAU,aAAU;CAE5B,OACE,kBAAC,GAAD;EAAS,iBAAiB;EAAG,WAAU;EAAM,OAAO;EACjD;CACM,CAAA;AAEb;AAEA,SAAS,EAAiB,GAA4B,GAAkB;CAKtE,OAAO,CAHL,EAAc,MAAM,OAAO,EAAc,GAAG,IAAI,OAAO,EAAO,EAAE,GAChE,EAAc,MAAM,OAAO,EAAc,GAAG,IAAI,OAAO,EAAO,EAAE,CAE3D;AACT;AAEA,SAAS,EAAY,GAAyB;CAC5C,IAAM,EAAE,mBAAgB,aAAU,YAAS,GACrC,KAAqB,MAAuB,EAAS,IAAI,MAAM,GAE/D,CAAC,GAAQ,KAAa,QAC1B,EAAiB,EAAM,eAAe,EAAM,MAAM,CACpD,GAEM,IAAY,EAAkB,EAAM,MAAM,GAE1C,KAAsB,MAA8B;EAExD,AADA,EAAU,CAAC,GAAG,CAAM,CAAC,GACjB,KACF,EAAS;GAAE,KAAK,EAAO;GAAI,KAAK,EAAO;EAAG,CAAC;CAE/C;CAEA,OACE,kBAAC,GAAD;EAAK,IAAI,EAAE,IAAI,EAAE;YAAjB,CACE,kBAAC,GAAD;GAAY,SAAQ;aAApB;IACG,EAAO;IAAG;IAAI,EAAO;GACZ;MACZ,kBAAC,GAAD;GACE,IAAI;IACF,SAAS;IACT,KAAK;IACL,IAAI;GACN;aALF,CAOE,kBAAC,GAAD;IACE,OAAO,CACL;KAAE,OAAO,EAAU;KAAI,OAAO,EAAM,OAAO;IAAG,GAC9C;KAAE,OAAO,EAAU;KAAI,OAAO,EAAM,OAAO;IAAG,CAChD;IACA,KAAK,EAAU;IACf,KAAK,EAAU;IACf,OAAO;IACP,WAAW,GAAG,MAAc,EAAmB,CAAS;IAClD;IACN,mBAAkB;IAClB,OAAO,EACL,YAAY,EACd;GACD,CAAA,GACA,KACC,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;IACE,MAAK;IACL,SAAQ;IACR,eAAe,EAAe;KAAE,KAAK,EAAO;KAAI,KAAK,EAAO;IAAG,CAAC;IAChE,IAAI,EAAE,UAAU,GAAG;cACpB;GAEO,CAAA,EACL,CAAA,CAEJ;IACF;;AAET"}
@@ -14,7 +14,7 @@ function s(s) {
14
14
  fileHandleId: m.dataFileHandleId
15
15
  };
16
16
  if (u && f && d) {
17
- let { id: e } = d.filter((e) => e.fileName === f)[0];
17
+ let { id: e } = d.find((e) => e.fileName === f);
18
18
  return {
19
19
  associateObjectId: u,
20
20
  associateObjectType: a.WikiAttachment,
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseImage.js","names":[],"sources":["../../../src/components/widgets/SynapseImage.tsx"],"sourcesContent":["import { ImageFileHandle } from '@/components/widgets/ImageFileHandle'\nimport { useGetEntity } from '@/synapse-queries/index'\nimport {\n FileEntity,\n FileHandle,\n FileHandleAssociateType,\n FileHandleAssociation,\n} from '@sage-bionetworks/synapse-types'\nimport classNames from 'classnames'\nimport { CSSProperties, useMemo } from 'react'\n\nexport type SynapseImageProps = {\n wikiId?: string\n synapseId?: string\n version?: number\n fileName?: string\n fileResults?: FileHandle[]\n params: {\n align: string\n scale: string\n // this should be treated as a boolean, but the actual type that will come through\n // is a string which I don't want to mis-represent\n responsive: string\n altText: string\n }\n}\n\nfunction SynapseImage(props: SynapseImageProps) {\n const { synapseId, version, wikiId, fileResults, fileName, params } = props\n\n const { data: fileEntity } = useGetEntity<FileEntity>(\n synapseId || '',\n version,\n {\n enabled: Boolean(synapseId),\n },\n )\n\n const fileHandleAssociation: FileHandleAssociation | undefined =\n useMemo(() => {\n if (synapseId && fileEntity) {\n return {\n associateObjectId: synapseId,\n associateObjectType: FileHandleAssociateType.FileEntity,\n fileHandleId: fileEntity.dataFileHandleId,\n }\n } else if (wikiId && fileName && fileResults) {\n const { id } = fileResults.filter(el => el.fileName === fileName)[0]\n return {\n associateObjectId: wikiId,\n associateObjectType: FileHandleAssociateType.WikiAttachment,\n fileHandleId: id,\n }\n }\n return undefined\n }, [fileEntity, fileName, fileResults, synapseId, wikiId])\n\n const { align = '', altText = 'synapse image' } = params\n\n let scale = 'auto'\n if (params.scale && params.scale !== '100') {\n scale = `${Number(params.scale)}%`\n }\n\n const alignLowerCase = align.toLowerCase()\n let className = ''\n if (alignLowerCase === 'left') {\n className = 'floatLeft'\n }\n if (alignLowerCase === 'right') {\n className = 'floatright'\n }\n if (alignLowerCase === 'center') {\n className = 'align-center'\n }\n const style: CSSProperties = {\n maxWidth: scale,\n height: 'auto',\n }\n\n if (!fileHandleAssociation) {\n return <></>\n }\n\n return (\n <ImageFileHandle\n fileHandleAssociation={fileHandleAssociation}\n imgProps={{\n alt: altText,\n className: classNames('img-fluid', className),\n style,\n }}\n />\n )\n}\nexport default SynapseImage\n"],"mappings":";;;;;;;;AA2BA,SAAS,EAAa,GAA0B;CAC9C,IAAM,EAAE,cAAW,YAAS,WAAQ,gBAAa,aAAU,cAAW,GAEhE,EAAE,MAAM,MAAe,EAC3B,KAAa,IACb,GACA,EACE,SAAS,EAAQ,EACnB,CACF,GAEM,IACJ,QAAc;EACZ,IAAI,KAAa,GACf,OAAO;GACL,mBAAmB;GACnB,qBAAqB,EAAwB;GAC7C,cAAc,EAAW;EAC3B;EACK,IAAI,KAAU,KAAY,GAAa;GAC5C,IAAM,EAAE,UAAO,EAAY,QAAO,MAAM,EAAG,aAAa,CAAQ,EAAE;GAClE,OAAO;IACL,mBAAmB;IACnB,qBAAqB,EAAwB;IAC7C,cAAc;GAChB;EACF;CAEF,GAAG;EAAC;EAAY;EAAU;EAAa;EAAW;CAAM,CAAC,GAErD,EAAE,WAAQ,IAAI,aAAU,oBAAoB,GAE9C,IAAQ;CACZ,AAAI,EAAO,SAAS,EAAO,UAAU,UACnC,IAAQ,GAAG,OAAO,EAAO,KAAK,EAAE;CAGlC,IAAM,IAAiB,EAAM,YAAY,GACrC,IAAY;CAOhB,AANI,MAAmB,WACrB,IAAY,cAEV,MAAmB,YACrB,IAAY,eAEV,MAAmB,aACrB,IAAY;CAEd,IAAM,IAAuB;EAC3B,UAAU;EACV,QAAQ;CACV;CAMA,OAJK,IAKH,kBAAC,GAAD;EACyB;EACvB,UAAU;GACR,KAAK;GACL,WAAW,EAAW,aAAa,CAAS;GAC5C;EACF;CACD,CAAA,IAXM,kBAAA,GAAA,CAAI,CAAA;AAaf"}
1
+ {"version":3,"file":"SynapseImage.js","names":[],"sources":["../../../src/components/widgets/SynapseImage.tsx"],"sourcesContent":["import { ImageFileHandle } from '@/components/widgets/ImageFileHandle'\nimport { useGetEntity } from '@/synapse-queries/index'\nimport {\n FileEntity,\n FileHandle,\n FileHandleAssociateType,\n FileHandleAssociation,\n} from '@sage-bionetworks/synapse-types'\nimport classNames from 'classnames'\nimport { CSSProperties, useMemo } from 'react'\n\nexport type SynapseImageProps = {\n wikiId?: string\n synapseId?: string\n version?: number\n fileName?: string\n fileResults?: FileHandle[]\n params: {\n align: string\n scale: string\n // this should be treated as a boolean, but the actual type that will come through\n // is a string which I don't want to mis-represent\n responsive: string\n altText: string\n }\n}\n\nfunction SynapseImage(props: SynapseImageProps) {\n const { synapseId, version, wikiId, fileResults, fileName, params } = props\n\n const { data: fileEntity } = useGetEntity<FileEntity>(\n synapseId || '',\n version,\n {\n enabled: Boolean(synapseId),\n },\n )\n\n const fileHandleAssociation: FileHandleAssociation | undefined =\n useMemo(() => {\n if (synapseId && fileEntity) {\n return {\n associateObjectId: synapseId,\n associateObjectType: FileHandleAssociateType.FileEntity,\n fileHandleId: fileEntity.dataFileHandleId,\n }\n } else if (wikiId && fileName && fileResults) {\n const { id } = fileResults.find(el => el.fileName === fileName)!\n return {\n associateObjectId: wikiId,\n associateObjectType: FileHandleAssociateType.WikiAttachment,\n fileHandleId: id,\n }\n }\n return undefined\n }, [fileEntity, fileName, fileResults, synapseId, wikiId])\n\n const { align = '', altText = 'synapse image' } = params\n\n let scale = 'auto'\n if (params.scale && params.scale !== '100') {\n scale = `${Number(params.scale)}%`\n }\n\n const alignLowerCase = align.toLowerCase()\n let className = ''\n if (alignLowerCase === 'left') {\n className = 'floatLeft'\n }\n if (alignLowerCase === 'right') {\n className = 'floatright'\n }\n if (alignLowerCase === 'center') {\n className = 'align-center'\n }\n const style: CSSProperties = {\n maxWidth: scale,\n height: 'auto',\n }\n\n if (!fileHandleAssociation) {\n return <></>\n }\n\n return (\n <ImageFileHandle\n fileHandleAssociation={fileHandleAssociation}\n imgProps={{\n alt: altText,\n className: classNames('img-fluid', className),\n style,\n }}\n />\n )\n}\nexport default SynapseImage\n"],"mappings":";;;;;;;;AA2BA,SAAS,EAAa,GAA0B;CAC9C,IAAM,EAAE,cAAW,YAAS,WAAQ,gBAAa,aAAU,cAAW,GAEhE,EAAE,MAAM,MAAe,EAC3B,KAAa,IACb,GACA,EACE,SAAS,EAAQ,EACnB,CACF,GAEM,IACJ,QAAc;EACZ,IAAI,KAAa,GACf,OAAO;GACL,mBAAmB;GACnB,qBAAqB,EAAwB;GAC7C,cAAc,EAAW;EAC3B;EACK,IAAI,KAAU,KAAY,GAAa;GAC5C,IAAM,EAAE,UAAO,EAAY,MAAK,MAAM,EAAG,aAAa,CAAQ;GAC9D,OAAO;IACL,mBAAmB;IACnB,qBAAqB,EAAwB;IAC7C,cAAc;GAChB;EACF;CAEF,GAAG;EAAC;EAAY;EAAU;EAAa;EAAW;CAAM,CAAC,GAErD,EAAE,WAAQ,IAAI,aAAU,oBAAoB,GAE9C,IAAQ;CACZ,AAAI,EAAO,SAAS,EAAO,UAAU,UACnC,IAAQ,GAAG,OAAO,EAAO,KAAK,EAAE;CAGlC,IAAM,IAAiB,EAAM,YAAY,GACrC,IAAY;CAOhB,AANI,MAAmB,WACrB,IAAY,cAEV,MAAmB,YACrB,IAAY,eAEV,MAAmB,aACrB,IAAY;CAEd,IAAM,IAAuB;EAC3B,UAAU;EACV,QAAQ;CACV;CAMA,OAJK,IAKH,kBAAC,GAAD;EACyB;EACvB,UAAU;GACR,KAAK;GACL,WAAW,EAAW,aAAa,CAAS;GAC5C;EACF;CACD,CAAA,IAXM,kBAAA,GAAA,CAAI,CAAA;AAaf"}
@@ -1,32 +1,43 @@
1
- import { ColumnTypeEnum, FacetColumnRequest, FacetColumnResultValueCount, FacetColumnResultValues } from '@sage-bionetworks/synapse-types';
1
+ import { EnumerationFacet } from '@/utils/functions/enumerationFacet';
2
+ import { ColumnTypeEnum, FacetColumnRequest, FacetColumnResultValueCount } from '@sage-bionetworks/synapse-types';
2
3
  import type Plotly from 'plotly.js-basic-dist';
3
4
  import { FacetWithLabel } from './FacetPlotLegendUtils';
4
5
  export type FacetNavPanelProps = {
5
- applyChangesToGraphSlice: (facet: FacetColumnResultValues, value: FacetColumnResultValueCount | undefined, isSelected: boolean) => void;
6
+ applyChangesToGraphSlice: (facet: EnumerationFacet, value: FacetColumnResultValueCount | undefined, isSelected: boolean) => void;
6
7
  applyChangesToFacetFilter: (facets: FacetColumnRequest[]) => void;
7
8
  index: number;
8
- facetToPlot: FacetColumnResultValues;
9
+ facetToPlot: EnumerationFacet;
9
10
  plotType: PlotType;
10
11
  onSetPlotType: (plotType: PlotType) => void;
11
12
  onHide: () => void;
12
13
  isModalView: boolean;
13
14
  onCloseModal?: () => void;
15
+ /**
16
+ * When true, the plot cannot change the query: clicking a slice or bar does nothing, and the
17
+ * filter dropdowns are hidden. Presentation controls (expand, chart type, hide) still work.
18
+ */
19
+ disableFiltering?: boolean;
14
20
  };
15
21
  export declare const MAX_PLOT_HEIGHT_PX = 150;
16
22
  export declare const MAX_EXPANDED_PLOT_HEIGHT_PX = 300;
17
- export type PlotType = 'PIE' | 'BAR' | 'STACKED_HORIZONTAL_BAR';
23
+ export type PlotType = 'PIE' | 'BAR' | 'HORIZONTAL_BAR' | 'STACKED_HORIZONTAL_BAR';
18
24
  export type GraphData = {
19
25
  data: Plotly.Data[];
20
26
  labels: FacetWithLabel[];
21
27
  colors: string[];
22
28
  };
23
- export declare function extractPlotDataArray(facetToPlot: FacetColumnResultValues, columnType: ColumnTypeEnum | undefined, index: number, plotType: PlotType, accessToken?: string): Promise<{
29
+ /**
30
+ * @param facetPostProcessingApplied the QueryResultBundle's `facetPostProcessingApplied`. When set, counts are shown as
31
+ * approximate (see `formatFacetValueCount`) and pie percentages are omitted.
32
+ */
33
+ export declare function extractPlotDataArray(facetToPlot: EnumerationFacet, columnType: ColumnTypeEnum | undefined, index: number, plotType: PlotType, accessToken?: string, facetPostProcessingApplied?: boolean): Promise<{
24
34
  data: Plotly.Data[];
25
35
  labels: {
26
36
  facet: FacetColumnResultValueCount;
27
37
  label: string;
28
38
  truncatedLabel: string;
29
39
  count: number;
40
+ countText: string;
30
41
  }[];
31
42
  colors: string[];
32
43
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"FacetNavPanel.d.ts","sourceRoot":"","sources":["../../../../src/components/widgets/facet-nav/FacetNavPanel.tsx"],"names":[],"mappings":"AAcA,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,2BAA2B,EAC3B,uBAAuB,EACxB,MAAM,iCAAiC,CAAA;AAExC,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAW9C,OAAO,EAAE,cAAc,EAAY,MAAM,wBAAwB,CAAA;AAGjE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,wBAAwB,EAAE,CACxB,KAAK,EAAE,uBAAuB,EAC9B,KAAK,EAAE,2BAA2B,GAAG,SAAS,EAC9C,UAAU,EAAE,OAAO,KAChB,IAAI,CAAA;IACT,yBAAyB,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,IAAI,CAAA;IACjE,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,uBAAuB,CAAA;IACpC,QAAQ,EAAE,QAAQ,CAAA;IAClB,aAAa,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC3C,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;CAC1B,CAAA;AAGD,eAAO,MAAM,kBAAkB,MAAM,CAAA;AACrC,eAAO,MAAM,2BAA2B,MAAM,CAAA;AAG9C,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,wBAAwB,CAAA;AAE/D,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAA;IACnB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,uBAAuB,EACpC,UAAU,EAAE,cAAc,GAAG,SAAS,EACtC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,EAClB,WAAW,CAAC,EAAE,MAAM;;;;;;;;;GA+JrB;AAsBD,wBAAgB,YAAY,CAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA8BnC;AAED,iBAAS,aAAa,CAAC,KAAK,EAAE,kBAAkB,2CAqN/C;AAED,eAAe,aAAa,CAAA"}
1
+ {"version":3,"file":"FacetNavPanel.d.ts","sourceRoot":"","sources":["../../../../src/components/widgets/facet-nav/FacetNavPanel.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AACrE,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,2BAA2B,EAC5B,MAAM,iCAAiC,CAAA;AAExC,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAW9C,OAAO,EAAE,cAAc,EAAY,MAAM,wBAAwB,CAAA;AAGjE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,wBAAwB,EAAE,CACxB,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,2BAA2B,GAAG,SAAS,EAC9C,UAAU,EAAE,OAAO,KAChB,IAAI,CAAA;IACT,yBAAyB,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,IAAI,CAAA;IACjE,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,gBAAgB,CAAA;IAC7B,QAAQ,EAAE,QAAQ,CAAA;IAClB,aAAa,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC3C,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAGD,eAAO,MAAM,kBAAkB,MAAM,CAAA;AACrC,eAAO,MAAM,2BAA2B,MAAM,CAAA;AAI9C,MAAM,MAAM,QAAQ,GAChB,KAAK,GACL,KAAK,GACL,gBAAgB,GAChB,wBAAwB,CAAA;AAE5B,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAA;IACnB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,gBAAgB,EAC7B,UAAU,EAAE,cAAc,GAAG,SAAS,EACtC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,EAClB,WAAW,CAAC,EAAE,MAAM,EACpB,0BAA0B,CAAC,EAAE,OAAO;;;;;;;;;;GA4KrC;AAsBD,wBAAgB,YAAY,CAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA+BnC;AAED,iBAAS,aAAa,CAAC,KAAK,EAAE,kBAAkB,2CAwO/C;AAED,eAAe,aAAa,CAAA"}
@@ -1,80 +1,83 @@
1
1
  import { FRIENDLY_VALUE_NOT_SET as e, VALUE_NOT_SET as t } from "../../../utils/SynapseConstants.js";
2
2
  import n from "../../../synapse-client/index.js";
3
- import { useSynapseContext as r } from "../../../utils/context/SynapseContext.js";
4
- import i from "../../LoadingScreen/LoadingScreen.js";
3
+ import { useQueryVisualizationContext as r } from "../../QueryVisualizationWrapper/QueryVisualizationContext.js";
4
+ import { useSynapseContext as i } from "../../../utils/context/SynapseContext.js";
5
+ import a from "../../LoadingScreen/LoadingScreen.js";
5
6
  import "../../../utils/index.js";
6
- import { getCorrespondingColumnForFacet as a } from "../../../utils/functions/queryUtils.js";
7
- import { ConfirmationDialog as o } from "../../ConfirmationDialog/ConfirmationDialog.js";
8
- import { StyledFormControl as s } from "../../styled/StyledFormControl.js";
9
- import { useGetQueryMetadata as c } from "../../QueryWrapper/useGetQueryMetadata.js";
10
- import { useQueryVisualizationContext as l } from "../../QueryVisualizationWrapper/QueryVisualizationContext.js";
7
+ import { getCorrespondingColumnForFacet as o } from "../../../utils/functions/queryUtils.js";
8
+ import { ConfirmationDialog as s } from "../../ConfirmationDialog/ConfirmationDialog.js";
9
+ import { StyledFormControl as c } from "../../styled/StyledFormControl.js";
10
+ import { useGetQueryMetadata as l } from "../../QueryWrapper/useGetQueryMetadata.js";
11
11
  import "../../QueryVisualizationWrapper/index.js";
12
- import { EnumFacetFilter as u } from "../query-filter/EnumFacetFilter/EnumFacetFilter.js";
13
- import { Plot as d } from "../../Plot/Plot.js";
14
- import { getContrastColorPalette as f } from "../../ColorGradient/ColorGradient.js";
15
- import p from "../../Plot/PlotPanelHeader.js";
16
- import { FacetPlotLegendList as m } from "./FacetPlotLegendList.js";
17
- import { truncate as h } from "./FacetPlotLegendUtils.js";
18
- import { useId as g, useMemo as _, useState as v } from "react";
19
- import { Box as y, InputLabel as b, MenuItem as x, Select as S, Stack as C, Tooltip as w } from "@mui/material";
20
- import { Fragment as T, jsx as E, jsxs as D } from "react/jsx-runtime";
21
- import { ColumnTypeEnum as O } from "@sage-bionetworks/synapse-types";
22
- import { useQuery as k } from "@tanstack/react-query";
23
- import A from "@mui/icons-material/InfoOutlined";
24
- import { useMeasure as j } from "@react-hookz/web";
12
+ import { formatFacetValueCount as u } from "../../../utils/functions/facetCountUtils.js";
13
+ import { EnumFacetFilter as d } from "../query-filter/EnumFacetFilter/EnumFacetFilter.js";
14
+ import { Plot as f } from "../../Plot/Plot.js";
15
+ import { getContrastColorPalette as p } from "../../ColorGradient/ColorGradient.js";
16
+ import m from "../../Plot/PlotPanelHeader.js";
17
+ import { FacetPlotLegendList as h } from "./FacetPlotLegendList.js";
18
+ import { truncate as g } from "./FacetPlotLegendUtils.js";
19
+ import { useId as _, useMemo as v, useState as y } from "react";
20
+ import { Box as b, InputLabel as x, MenuItem as S, Select as C, Stack as w, Tooltip as T } from "@mui/material";
21
+ import { Fragment as E, jsx as D, jsxs as O } from "react/jsx-runtime";
22
+ import { ColumnTypeEnum as k } from "@sage-bionetworks/synapse-types";
23
+ import { useQuery as A } from "@tanstack/react-query";
24
+ import j from "@mui/icons-material/InfoOutlined";
25
+ import { useMeasure as ee } from "@react-hookz/web";
25
26
  //#region src/components/widgets/facet-nav/FacetNavPanel.tsx
26
27
  var M = 19, N = 150, P = 300;
27
- async function F(r, i, a, o, s) {
28
- let c = f("odd", 0, r.facetValues.length), l = async (r, i, a) => {
29
- let o = /* @__PURE__ */ new Map();
30
- o.set(t, e);
31
- let s = r.map((e) => e.value).filter((e) => e !== t);
32
- if (i === O.ENTITYID || i === O.ENTITYID_LIST) {
33
- let e = await n.getEntityHeadersByIds(s, a);
34
- for (let t of e.results) o.set(t.id, t.name);
35
- } else if (i === O.USERID || i === O.USERID_LIST) {
36
- let e = await n.getGroupHeadersBatch(s, a);
37
- for (let t of e.children) o.set(t.ownerId, t.userName);
28
+ async function F(r, i, a, o, s, c) {
29
+ let l = p("odd", 0, r.facetValues.length), d = async (i, a, o) => {
30
+ let s = /* @__PURE__ */ new Map();
31
+ s.set(t, e);
32
+ let l = i.map((e) => e.value).filter((e) => e !== t);
33
+ if (a === k.ENTITYID || a === k.ENTITYID_LIST) {
34
+ let e = await n.getEntityHeadersByIds(l, o);
35
+ for (let t of e.results) s.set(t.id, t.name);
36
+ } else if (a === k.USERID || a === k.USERID_LIST) {
37
+ let e = await n.getGroupHeadersBatch(l, o);
38
+ for (let t of e.children) s.set(t.ownerId, t.userName);
38
39
  }
39
- return r.map((e) => ({
40
+ return i.map((e) => ({
40
41
  facet: e,
41
- label: u(e, !1, o),
42
- truncatedLabel: u(e, !0, o),
43
- count: e.count
42
+ label: f(e, !1, s),
43
+ truncatedLabel: f(e, !0, s),
44
+ count: e.count,
45
+ countText: u(e.count, r, c)
44
46
  }));
45
- }, u = (e, t, n) => {
47
+ }, f = (e, t, n) => {
46
48
  let r = n.get(e.value) ?? e.value;
47
- return t && (r = h(r, M)), r;
48
- }, d = await l(r.facetValues, i, s), p = d.map((e) => e.truncatedLabel), m = r.facetValues.some((e) => e.isSelected), g = m ? r.facetValues.map((e, t) => e.isSelected ? c[t] : c[t].replace("rgb(", "rgba(").replace(")", ", 0.25)")) : c, _ = r.facetValues.map((e) => e.count), v;
49
- o === "BAR" ? v = r.facetValues.map((e) => d.find((t) => t.facet === e)?.label ?? e.value) : o === "STACKED_HORIZONTAL_BAR" && (v = _);
50
- let y;
51
- o === "BAR" ? y = r.facetValues.map((e) => e.count) : o === "STACKED_HORIZONTAL_BAR" && (y = Array(v?.length).fill("Proportional"));
52
- let b = {
53
- values: o === "PIE" ? _ : void 0,
54
- labels: d.map((e) => e.label),
55
- text: p,
56
- x: v,
57
- y,
58
- orientation: o === "STACKED_HORIZONTAL_BAR" ? "h" : "v",
49
+ return t && (r = g(r, M)), r;
50
+ }, m = await d(r.facetValues, i, s), h = m.map((e) => e.truncatedLabel), _ = r.facetValues.some((e) => e.isSelected), v = _ ? r.facetValues.map((e, t) => e.isSelected ? l[t] : l[t].replace("rgb(", "rgba(").replace(")", ", 0.25)")) : l, y = r.facetValues.map((e) => e.count), b = r.facetValues.map((e) => m.find((t) => t.facet === e)?.label ?? e.value), x, S;
51
+ o === "BAR" ? (x = b, S = y) : o === "HORIZONTAL_BAR" ? (x = y, S = b) : o === "STACKED_HORIZONTAL_BAR" && (x = y, S = Array(x.length).fill("Proportional"));
52
+ let C = "%{value}";
53
+ o === "PIE" ? C = "%{value} (%{percent})" : o === "HORIZONTAL_BAR" && (C = "%{x}");
54
+ let w = c ? "%{customdata}" : C, T = {
55
+ values: o === "PIE" ? y : void 0,
56
+ labels: m.map((e) => e.label),
57
+ text: h,
58
+ customdata: c ? m.map((e) => e.countText) : void 0,
59
+ x,
60
+ y: S,
61
+ orientation: o === "STACKED_HORIZONTAL_BAR" || o === "HORIZONTAL_BAR" ? "h" : "v",
59
62
  facetEnumerationValues: r.facetValues.map((e) => e.value),
60
63
  name: r.columnName,
61
- textposition: o === "STACKED_HORIZONTAL_BAR" || o === "BAR" ? "none" : "inside",
62
- hovertemplate: o === "PIE" ? "<b>%{text}</b><br>%{value} (%{percent})<br><extra></extra>" : "<b>%{text}: </b><br>%{value} <br><extra></extra>",
64
+ textposition: o === "PIE" ? "inside" : "none",
65
+ hovertemplate: `<b>%{text}: </b><br>${w} <br><extra></extra>`,
63
66
  textinfo: "none",
64
67
  type: o === "PIE" ? "pie" : "bar",
65
68
  pull: o === "PIE" ? r.facetValues.map((e) => e.isSelected ? .1 : 0) : void 0,
66
- selectedpoints: m ? r.facetValues.map((e, t) => e.isSelected ? t : -1).filter((e) => e !== -1) : void 0,
69
+ selectedpoints: _ ? r.facetValues.map((e, t) => e.isSelected ? t : -1).filter((e) => e !== -1) : void 0,
67
70
  selected: { marker: { opacity: 1 } },
68
71
  unselected: { marker: { opacity: .25 } },
69
72
  marker: {
70
- colors: o === "PIE" ? g : void 0,
71
- color: o === "PIE" ? void 0 : g
73
+ colors: o === "PIE" ? v : void 0,
74
+ color: o === "PIE" ? void 0 : v
72
75
  }
73
76
  };
74
77
  return {
75
- data: [b],
76
- labels: d,
77
- colors: o === "PIE" ? b.marker?.colors : b.marker?.color
78
+ data: [T],
79
+ labels: m,
80
+ colors: o === "PIE" ? T.marker?.colors : T.marker?.color
78
81
  };
79
82
  }
80
83
  var I = (e, t, n) => {
@@ -88,6 +91,7 @@ function L(e, t, n) {
88
91
  let r = 1;
89
92
  switch (t) {
90
93
  case "BAR":
94
+ case "HORIZONTAL_BAR":
91
95
  r = .8;
92
96
  break;
93
97
  case "PIE":
@@ -109,7 +113,7 @@ function L(e, t, n) {
109
113
  };
110
114
  }
111
115
  function R(e) {
112
- let { onHide: t, isModalView: n, applyChangesToGraphSlice: f, index: h, facetToPlot: O, plotType: M, onSetPlotType: N } = e, { accessToken: P } = r(), { data: z, isLoading: B } = c(), [V, H] = j(), { getColumnDisplayName: U } = l(), W = V?.width ? Math.round(V.width) : void 0, [G, K] = v(!1), q = U(O.columnName, O.jsonPath), J = _(() => a(O, z?.columnModels ?? []), [z?.columnModels, O]), Y = J?.columnType, X = _(() => ({
116
+ let { onHide: t, isModalView: n, applyChangesToGraphSlice: u, index: p, facetToPlot: g, plotType: k, onSetPlotType: M, disableFiltering: N = !1 } = e, { accessToken: P } = i(), { data: z, isLoading: B } = l(), [V, H] = ee(), { getColumnDisplayName: U } = r(), W = V?.width ? Math.round(V.width) : void 0, [G, K] = y(!1), q = U(g.columnName, g.jsonPath), J = v(() => o(g, z?.columnModels ?? []), [z?.columnModels, g]), Y = J?.columnType, X = v(() => ({
113
117
  showlegend: !1,
114
118
  annotations: [],
115
119
  margin: {
@@ -120,114 +124,123 @@ function R(e) {
120
124
  pad: 0
121
125
  },
122
126
  yaxis: {
123
- visible: M === "BAR",
127
+ visible: k === "BAR" || n && k === "HORIZONTAL_BAR",
128
+ autorange: k === "HORIZONTAL_BAR" ? "reversed" : void 0,
124
129
  showgrid: !1,
125
130
  automargin: !0
126
131
  },
127
132
  xaxis: {
128
- visible: n && M === "BAR",
133
+ visible: n && k === "BAR" || k === "HORIZONTAL_BAR",
129
134
  showgrid: !1,
130
135
  automargin: !0
131
136
  }
132
- }), [n, M]), { data: Z } = k({
137
+ }), [n, k]), { data: Z } = A({
133
138
  queryKey: [
134
139
  "extractPlotDataArray",
135
- O,
140
+ g,
136
141
  Y,
137
- h,
138
- M,
139
- P
142
+ p,
143
+ k,
144
+ P,
145
+ z?.facetPostProcessingApplied
140
146
  ],
141
- queryFn: () => F(O, Y, h, M, P),
142
- enabled: !!O
143
- }), Q = g(), $ = g(), ee = /* @__PURE__ */ D(s, {
147
+ queryFn: () => F(g, Y, p, k, P, z?.facetPostProcessingApplied),
148
+ enabled: !!g
149
+ }), Q = _(), $ = _(), te = /* @__PURE__ */ O(c, {
144
150
  fullWidth: !0,
145
- children: [/* @__PURE__ */ E(b, {
151
+ children: [/* @__PURE__ */ D(x, {
146
152
  id: Q,
147
153
  children: "Chart Type"
148
- }), /* @__PURE__ */ D(S, {
154
+ }), /* @__PURE__ */ O(C, {
149
155
  labelId: Q,
150
156
  label: "Chart Type",
151
- value: M,
157
+ value: k,
152
158
  onChange: (e) => {
153
- N(e.target.value);
159
+ M(e.target.value);
154
160
  },
155
- children: [/* @__PURE__ */ E(x, {
156
- value: "BAR",
157
- children: "Bar Chart"
158
- }), /* @__PURE__ */ E(x, {
159
- value: "PIE",
160
- children: "Pie Chart"
161
- })]
161
+ children: [
162
+ /* @__PURE__ */ D(S, {
163
+ value: "BAR",
164
+ children: "Bar Chart"
165
+ }),
166
+ /* @__PURE__ */ D(S, {
167
+ value: "HORIZONTAL_BAR",
168
+ children: "Horizontal Bar Chart"
169
+ }),
170
+ /* @__PURE__ */ D(S, {
171
+ value: "PIE",
172
+ children: "Pie Chart"
173
+ })
174
+ ]
162
175
  })]
163
176
  });
164
- return !z && B || !O || !J ? /* @__PURE__ */ E("div", {
177
+ return !z && B || !g || !J ? /* @__PURE__ */ D("div", {
165
178
  className: "SRC-loadingContainer SRC-centerContentColumn",
166
- children: i
167
- }) : /* @__PURE__ */ D(T, { children: [/* @__PURE__ */ E(o, {
179
+ children: a
180
+ }) : /* @__PURE__ */ O(E, { children: [/* @__PURE__ */ D(s, {
168
181
  open: G,
169
182
  onCancel: () => K(!1),
170
183
  title: q ?? "",
171
- content: /* @__PURE__ */ E(R, {
184
+ content: /* @__PURE__ */ D(R, {
172
185
  ...e,
173
186
  isModalView: !0
174
187
  }),
175
188
  hasCancelButton: !1,
176
- confirmButtonProps: { children: "Apply Filters" },
189
+ confirmButtonProps: { children: N ? "Close" : "Apply Filters" },
177
190
  onConfirm: () => K(!1),
178
191
  maxWidth: "md"
179
- }), /* @__PURE__ */ D("div", {
192
+ }), /* @__PURE__ */ O("div", {
180
193
  role: "figure",
181
194
  className: `FacetNavPanel${n ? "--expanded" : ""}`,
182
195
  children: [
183
- !n && /* @__PURE__ */ E(p, {
196
+ !n && /* @__PURE__ */ D(m, {
184
197
  data: z,
185
198
  isLoading: B,
186
199
  title: q,
187
- facetToPlot: O,
200
+ facetToPlot: N ? void 0 : g,
188
201
  onHide: t,
189
202
  setShowModal: K
190
203
  }),
191
- n && /* @__PURE__ */ D(C, {
204
+ n && /* @__PURE__ */ O(w, {
192
205
  sx: { gap: 2 },
193
- children: [/* @__PURE__ */ D(s, { children: [/* @__PURE__ */ D(b, {
206
+ children: [!N && /* @__PURE__ */ O(c, { children: [/* @__PURE__ */ O(x, {
194
207
  id: $,
195
208
  sx: {
196
209
  display: "flex",
197
210
  alignItems: "center",
198
211
  gap: .5
199
212
  },
200
- children: [/* @__PURE__ */ E("span", { children: "Filter All Data By" }), /* @__PURE__ */ E(w, {
213
+ children: [/* @__PURE__ */ D("span", { children: "Filter All Data By" }), /* @__PURE__ */ D(T, {
201
214
  title: "Selecting items in this dropdown will affect all facets on the Explore page.",
202
- children: /* @__PURE__ */ E(A, { className: "SRC-hand-cursor SRC-secondary-text-color" })
215
+ children: /* @__PURE__ */ D(j, { className: "SRC-hand-cursor SRC-secondary-text-color" })
203
216
  })]
204
- }), /* @__PURE__ */ E(u, {
217
+ }), /* @__PURE__ */ D(d, {
205
218
  labelId: $,
206
- facet: O,
219
+ facet: g,
207
220
  containerAs: "Dropdown",
208
221
  dropdownType: "SelectBox"
209
- })] }), ee]
222
+ })] }), te]
210
223
  }),
211
- /* @__PURE__ */ D(y, {
224
+ /* @__PURE__ */ O(b, {
212
225
  sx: {
213
226
  display: "grid",
214
227
  gridTemplateColumns: "50% 50%",
215
228
  alignItems: "center"
216
229
  },
217
230
  role: "graphics-object",
218
- className: "FacetNavPanel__body",
219
- children: [/* @__PURE__ */ E("div", {
231
+ className: `FacetNavPanel__body${N ? " FacetNavPanel__body--filteringDisabled" : ""}`,
232
+ children: [/* @__PURE__ */ D("div", {
220
233
  ref: H,
221
- children: W !== void 0 && /* @__PURE__ */ E(d, {
234
+ children: W !== void 0 && /* @__PURE__ */ D(f, {
222
235
  layout: X,
223
236
  data: Z?.data ?? [],
224
- style: L(W, M, n ? 300 : 150),
237
+ style: L(W, k, n ? 300 : 150),
225
238
  config: { displayModeBar: !1 },
226
- onClick: (e) => I(e, O, f)
227
- }, `${O.columnName}-${O.jsonPath}-${M}-${W}`)
228
- }), /* @__PURE__ */ E(y, {
239
+ onClick: N ? void 0 : (e) => I(e, g, u)
240
+ }, `${g.columnName}-${g.jsonPath}-${k}-${W}`)
241
+ }), /* @__PURE__ */ D(b, {
229
242
  sx: { alignSelf: "center" },
230
- children: /* @__PURE__ */ E(m, {
243
+ children: /* @__PURE__ */ D(h, {
231
244
  labels: Z?.labels,
232
245
  colors: Z?.colors,
233
246
  isExpanded: n
@@ -1 +1 @@
1
- {"version":3,"file":"FacetNavPanel.js","names":[],"sources":["../../../../src/components/widgets/facet-nav/FacetNavPanel.tsx"],"sourcesContent":["import StyledFormControl from '@/components/styled/StyledFormControl'\nimport SynapseClient from '@/synapse-client'\nimport { SynapseConstants } from '@/utils'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { getCorrespondingColumnForFacet } from '@/utils/functions/queryUtils'\nimport InfoOutlined from '@mui/icons-material/InfoOutlined'\nimport {\n Box,\n InputLabel,\n MenuItem,\n Select,\n Stack,\n Tooltip,\n} from '@mui/material'\nimport {\n ColumnTypeEnum,\n FacetColumnRequest,\n FacetColumnResultValueCount,\n FacetColumnResultValues,\n} from '@sage-bionetworks/synapse-types'\nimport { useQuery } from '@tanstack/react-query'\nimport type Plotly from 'plotly.js-basic-dist'\nimport { useId, useMemo, useState } from 'react'\nimport { getContrastColorPalette } from '../../ColorGradient/ColorGradient'\nimport { ConfirmationDialog } from '../../ConfirmationDialog/ConfirmationDialog'\nimport loadingScreen from '../../LoadingScreen/LoadingScreen'\nimport Plot from '../../Plot/Plot'\nimport PlotPanelHeader from '../../Plot/PlotPanelHeader'\nimport { useQueryVisualizationContext } from '../../QueryVisualizationWrapper'\nimport { useGetQueryMetadata } from '../../QueryWrapper/useGetQueryMetadata'\nimport { EnumFacetFilter } from '../query-filter/EnumFacetFilter/EnumFacetFilter'\nimport { FacetPlotLegendList } from './FacetPlotLegendList'\nimport { FacetWithLabel, truncate } from './FacetPlotLegendUtils'\nimport { useMeasure } from '@react-hookz/web'\n\nexport type FacetNavPanelProps = {\n applyChangesToGraphSlice: (\n facet: FacetColumnResultValues,\n value: FacetColumnResultValueCount | undefined,\n isSelected: boolean,\n ) => void\n applyChangesToFacetFilter: (facets: FacetColumnRequest[]) => void\n index: number\n facetToPlot: FacetColumnResultValues\n plotType: PlotType\n onSetPlotType: (plotType: PlotType) => void\n onHide: () => void\n isModalView: boolean\n onCloseModal?: () => void\n}\n\nconst maxLabelLength: number = 19\nexport const MAX_PLOT_HEIGHT_PX = 150\nexport const MAX_EXPANDED_PLOT_HEIGHT_PX = 300\n\n// STACKED_HORIZONTAL_BAR corresponds to a bar chart where we just want to show the proportion (like a pie chart)\nexport type PlotType = 'PIE' | 'BAR' | 'STACKED_HORIZONTAL_BAR'\n\nexport type GraphData = {\n data: Plotly.Data[]\n labels: FacetWithLabel[]\n colors: string[]\n}\n\nexport async function extractPlotDataArray(\n facetToPlot: FacetColumnResultValues,\n columnType: ColumnTypeEnum | undefined,\n index: number,\n plotType: PlotType,\n accessToken?: string,\n) {\n const colorPalette = getContrastColorPalette(\n // Use only the odd palette, using the same offset for all plots until palettes are improved.\n // See PORTALS-2916\n 'odd', // index % 2 === 0 ? 'even' : 'odd',\n 0, // Math.floor(index / 2),\n facetToPlot.facetValues.length,\n )\n\n const getLabels = async (\n facetValues: FacetColumnResultValueCount[],\n columnType?: ColumnTypeEnum,\n accessToken?: string,\n ) => {\n const map = new Map<string, string>()\n map.set(\n SynapseConstants.VALUE_NOT_SET,\n SynapseConstants.FRIENDLY_VALUE_NOT_SET,\n )\n // Filter out empties\n const filteredValues = facetValues\n .map(value => value.value)\n .filter(val => val !== SynapseConstants.VALUE_NOT_SET)\n if (\n columnType === ColumnTypeEnum.ENTITYID ||\n columnType === ColumnTypeEnum.ENTITYID_LIST\n ) {\n // TODO: Pagination\n const response = await SynapseClient.getEntityHeadersByIds(\n filteredValues,\n accessToken,\n )\n for (const header of response.results) {\n map.set(header.id, header.name)\n }\n } else if (\n columnType === ColumnTypeEnum.USERID ||\n columnType === ColumnTypeEnum.USERID_LIST\n ) {\n const response = await SynapseClient.getGroupHeadersBatch(\n filteredValues,\n accessToken,\n )\n for (const header of response.children) {\n map.set(header.ownerId, header.userName)\n }\n }\n\n return facetValues.map(facetValue => ({\n facet: facetValue,\n label: getLabel(facetValue, false, map),\n truncatedLabel: getLabel(facetValue, true, map),\n count: facetValue.count,\n }))\n }\n\n const getLabel = (\n facetValue: FacetColumnResultValueCount,\n truncateFlag: boolean,\n labelMap: Map<string, string>,\n ): string => {\n let label = labelMap.get(facetValue.value) ?? facetValue.value\n if (truncateFlag) {\n label = truncate(label, maxLabelLength)!\n }\n return label\n }\n\n const labels = await getLabels(\n facetToPlot.facetValues,\n columnType,\n accessToken,\n )\n const text = labels.map(el => el.truncatedLabel)\n\n const anyFacetsSelected = facetToPlot.facetValues.some(\n value => value.isSelected,\n )\n const selectionAwareColorPalette = anyFacetsSelected\n ? facetToPlot.facetValues.map((facetValue, index) =>\n facetValue.isSelected\n ? colorPalette[index]\n : colorPalette[index]\n .replace('rgb(', 'rgba(')\n .replace(')', ', 0.25)'),\n )\n : colorPalette\n const counts: Plotly.Datum[] = facetToPlot.facetValues.map(\n facet => facet.count,\n )\n let x: Plotly.Datum[] | Plotly.Datum[][] | Plotly.TypedArray | undefined\n\n if (plotType === 'BAR') {\n x = facetToPlot.facetValues.map(\n facet =>\n labels.find(label => label.facet === facet)?.label ?? facet.value,\n )\n } else if (plotType === 'STACKED_HORIZONTAL_BAR') {\n x = counts\n }\n\n let y: Plotly.Datum[] | Plotly.Datum[][] | Plotly.TypedArray | undefined\n if (plotType === 'BAR') {\n y = facetToPlot.facetValues.map(facet => facet.count)\n } else if (plotType === 'STACKED_HORIZONTAL_BAR') {\n y = Array(x?.length).fill('Proportional') // single value for every x value\n }\n\n const singleChartData: Plotly.Data = {\n values: plotType === 'PIE' ? counts : undefined,\n labels: labels.map(el => el.label),\n text,\n x,\n y,\n orientation: plotType === 'STACKED_HORIZONTAL_BAR' ? 'h' : 'v',\n // @ts-expect-error\n facetEnumerationValues: facetToPlot.facetValues.map(\n facetValue => facetValue.value,\n ),\n name: facetToPlot.columnName,\n textposition:\n plotType === 'STACKED_HORIZONTAL_BAR' || plotType === 'BAR'\n ? 'none'\n : 'inside',\n hovertemplate:\n plotType === 'PIE'\n ? '<b>%{text}</b><br>%{value} (%{percent})<br><extra></extra>'\n : '<b>%{text}: </b><br>%{value} <br><extra></extra>',\n textinfo: 'none',\n type: plotType === 'PIE' ? 'pie' : 'bar',\n pull:\n plotType === 'PIE'\n ? facetToPlot.facetValues.map(facetValue =>\n facetValue.isSelected ? 0.1 : 0,\n )\n : undefined,\n selectedpoints: anyFacetsSelected\n ? facetToPlot.facetValues\n .map((facetValue, index) => (facetValue.isSelected ? index : -1))\n .filter(index => index !== -1)\n : undefined,\n selected: { marker: { opacity: 1 } },\n unselected: { marker: { opacity: 0.25 } },\n\n marker: {\n colors: plotType === 'PIE' ? selectionAwareColorPalette : undefined,\n color: plotType === 'PIE' ? undefined : selectionAwareColorPalette,\n },\n }\n const result = {\n data: [singleChartData],\n labels,\n colors:\n plotType === 'PIE'\n ? ((singleChartData as any).marker?.colors as string[])\n : ((singleChartData as any).marker?.color as string[]),\n }\n return result\n}\n\nconst applyFacetFilter = (\n event: Plotly.PlotMouseEvent,\n allFacetValues: FacetColumnResultValues,\n callbackApplyFn: FacetNavPanelProps['applyChangesToGraphSlice'],\n) => {\n if (event.points?.[0]) {\n const plotPointData: any = event.points[0]\n const facetValueClickedValue =\n plotPointData.data.facetEnumerationValues[plotPointData.pointNumber]\n const facetValueClicked = allFacetValues.facetValues.find(\n facet => facet.value === facetValueClickedValue,\n )\n callbackApplyFn(\n allFacetValues,\n facetValueClicked,\n !facetValueClicked!.isSelected,\n )\n }\n}\n\nexport function getPlotStyle(\n parentWidth: number | null | undefined,\n plotType: PlotType,\n maxHeight: number,\n): { width: string; height: string } {\n if (parentWidth != undefined) {\n let quotient = 1\n switch (plotType) {\n case 'BAR':\n quotient = 0.8\n break\n case 'PIE':\n quotient = 0.6\n break\n case 'STACKED_HORIZONTAL_BAR':\n quotient = 1\n break\n }\n const width = parentWidth ? parentWidth * quotient : 200\n let height = plotType === 'PIE' ? width : width / 3\n // max height of .PlotsContainer row col* is 200px, so the effective plot height max is around 150 unless it's expanded\n if (height > maxHeight) {\n height = maxHeight\n }\n return {\n width: `${width}px`,\n height: `${height}px`,\n }\n }\n //else parent width is undefined\n return {\n width: '100%',\n height: `${maxHeight}px`,\n }\n}\n\nfunction FacetNavPanel(props: FacetNavPanelProps) {\n const {\n onHide,\n isModalView,\n applyChangesToGraphSlice,\n index,\n facetToPlot,\n plotType,\n onSetPlotType,\n } = props\n const { accessToken } = useSynapseContext()\n const { data: queryMetadata, isLoading: isLoadingQueryMetadata } =\n useGetQueryMetadata()\n\n const [plotContainerMeasurements, plotContainerRef] =\n useMeasure<HTMLDivElement>()\n const { getColumnDisplayName } = useQueryVisualizationContext()\n\n // Wait for a non-zero measured width before rendering the plot.\n // Round width to avoid rebuilds from small pixel fluctuations.\n const plotWidth = plotContainerMeasurements?.width\n ? Math.round(plotContainerMeasurements.width)\n : undefined\n\n const [showModal, setShowModal] = useState(false)\n\n const plotTitle = getColumnDisplayName(\n facetToPlot.columnName,\n facetToPlot.jsonPath,\n )\n\n const columnModel = useMemo(\n () =>\n getCorrespondingColumnForFacet(\n facetToPlot,\n queryMetadata?.columnModels ?? [],\n ),\n [queryMetadata?.columnModels, facetToPlot],\n )\n const columnType = columnModel?.columnType as ColumnTypeEnum\n\n // Plotly.js mutates the layout object it receives, so each component instance\n // must have its own layout object. Sharing a single object across instances\n // (e.g. when the expand modal mounts a second FacetNavPanel) causes Plotly's\n // mutations on one chart to silently corrupt the other. Use useMemo to\n // produce a fresh layout object per instance — do NOT hoist this to module scope.\n const plotLayout = useMemo<Partial<Plotly.Layout>>(\n () => ({\n showlegend: false,\n annotations: [],\n margin: { l: 0, r: 0, b: 0, t: 0, pad: 0 },\n yaxis: {\n visible: plotType === 'BAR',\n showgrid: false,\n automargin: true,\n },\n xaxis: {\n // Show category labels on the x-axis for vertical bar charts in modal view\n visible: isModalView && plotType === 'BAR',\n showgrid: false,\n automargin: true,\n },\n }),\n [isModalView, plotType],\n )\n\n const { data: plotData } = useQuery({\n queryKey: [\n 'extractPlotDataArray',\n facetToPlot,\n columnType,\n index,\n plotType,\n accessToken,\n ],\n\n queryFn: () =>\n extractPlotDataArray(\n facetToPlot,\n columnType,\n index,\n plotType,\n accessToken,\n ),\n\n enabled: !!facetToPlot,\n })\n\n const chartSelectionInputLabelId = useId()\n const filterByInputLabelId = useId()\n\n /* rendering functions */\n const chartSelectionToggle = (\n <StyledFormControl fullWidth>\n <InputLabel id={chartSelectionInputLabelId}>Chart Type</InputLabel>\n <Select\n labelId={chartSelectionInputLabelId}\n label=\"Chart Type\"\n value={plotType}\n onChange={e => {\n onSetPlotType(e.target.value as PlotType)\n }}\n >\n <MenuItem value={'BAR'}>Bar Chart</MenuItem>\n <MenuItem value={'PIE'}>Pie Chart</MenuItem>\n </Select>\n </StyledFormControl>\n )\n\n if (\n (!queryMetadata && isLoadingQueryMetadata) ||\n !facetToPlot ||\n !columnModel\n ) {\n return (\n <div className=\"SRC-loadingContainer SRC-centerContentColumn\">\n {loadingScreen}\n </div>\n )\n } else {\n return (\n <>\n <ConfirmationDialog\n open={showModal}\n onCancel={() => setShowModal(false)}\n title={plotTitle ?? ''}\n content={<FacetNavPanel {...props} isModalView={true} />}\n hasCancelButton={false}\n confirmButtonProps={{ children: 'Apply Filters' }}\n onConfirm={() => setShowModal(false)}\n maxWidth={'md'}\n />\n <div\n role=\"figure\"\n className={`FacetNavPanel${isModalView ? '--expanded' : ''}`}\n >\n {!isModalView && (\n <PlotPanelHeader\n data={queryMetadata}\n isLoading={isLoadingQueryMetadata}\n title={plotTitle}\n facetToPlot={facetToPlot}\n onHide={onHide}\n setShowModal={setShowModal}\n />\n )}\n {isModalView && (\n <Stack\n sx={{\n gap: 2,\n }}\n >\n <StyledFormControl>\n <InputLabel\n id={filterByInputLabelId}\n sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}\n >\n <span>Filter All Data By</span>\n <Tooltip title=\"Selecting items in this dropdown will affect all facets on the Explore page.\">\n <InfoOutlined className=\"SRC-hand-cursor SRC-secondary-text-color\" />\n </Tooltip>\n </InputLabel>\n <EnumFacetFilter\n labelId={filterByInputLabelId}\n facet={facetToPlot}\n containerAs=\"Dropdown\"\n dropdownType=\"SelectBox\"\n />\n </StyledFormControl>\n {chartSelectionToggle}\n </Stack>\n )}\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: '50% 50%',\n alignItems: 'center',\n }}\n role=\"graphics-object\"\n className=\"FacetNavPanel__body\"\n >\n <div ref={plotContainerRef}>\n {plotWidth !== undefined && (\n <Plot\n key={`${facetToPlot.columnName}-${facetToPlot.jsonPath}-${plotType}-${plotWidth}`}\n layout={plotLayout}\n data={plotData?.data ?? []}\n style={getPlotStyle(\n plotWidth,\n plotType,\n isModalView\n ? MAX_EXPANDED_PLOT_HEIGHT_PX\n : MAX_PLOT_HEIGHT_PX,\n )}\n config={{ displayModeBar: false }}\n onClick={evt =>\n applyFacetFilter(evt, facetToPlot, applyChangesToGraphSlice)\n }\n />\n )}\n </div>\n <Box sx={{ alignSelf: 'center' }}>\n <FacetPlotLegendList\n labels={plotData?.labels}\n colors={plotData?.colors}\n isExpanded={isModalView}\n />\n </Box>\n </Box>\n </div>\n </>\n )\n }\n}\n\nexport default FacetNavPanel\n"],"mappings":"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"}
1
+ {"version":3,"file":"FacetNavPanel.js","names":[],"sources":["../../../../src/components/widgets/facet-nav/FacetNavPanel.tsx"],"sourcesContent":["import StyledFormControl from '@/components/styled/StyledFormControl'\nimport SynapseClient from '@/synapse-client'\nimport { SynapseConstants } from '@/utils'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { formatFacetValueCount } from '@/utils/functions/facetCountUtils'\nimport { getCorrespondingColumnForFacet } from '@/utils/functions/queryUtils'\nimport InfoOutlined from '@mui/icons-material/InfoOutlined'\nimport {\n Box,\n InputLabel,\n MenuItem,\n Select,\n Stack,\n Tooltip,\n} from '@mui/material'\nimport { EnumerationFacet } from '@/utils/functions/enumerationFacet'\nimport {\n ColumnTypeEnum,\n FacetColumnRequest,\n FacetColumnResultValueCount,\n} from '@sage-bionetworks/synapse-types'\nimport { useQuery } from '@tanstack/react-query'\nimport type Plotly from 'plotly.js-basic-dist'\nimport { useId, useMemo, useState } from 'react'\nimport { getContrastColorPalette } from '../../ColorGradient/ColorGradient'\nimport { ConfirmationDialog } from '../../ConfirmationDialog/ConfirmationDialog'\nimport loadingScreen from '../../LoadingScreen/LoadingScreen'\nimport Plot from '../../Plot/Plot'\nimport PlotPanelHeader from '../../Plot/PlotPanelHeader'\nimport { useQueryVisualizationContext } from '../../QueryVisualizationWrapper'\nimport { useGetQueryMetadata } from '../../QueryWrapper/useGetQueryMetadata'\nimport { EnumFacetFilter } from '../query-filter/EnumFacetFilter/EnumFacetFilter'\nimport { FacetPlotLegendList } from './FacetPlotLegendList'\nimport { FacetWithLabel, truncate } from './FacetPlotLegendUtils'\nimport { useMeasure } from '@react-hookz/web'\n\nexport type FacetNavPanelProps = {\n applyChangesToGraphSlice: (\n facet: EnumerationFacet,\n value: FacetColumnResultValueCount | undefined,\n isSelected: boolean,\n ) => void\n applyChangesToFacetFilter: (facets: FacetColumnRequest[]) => void\n index: number\n facetToPlot: EnumerationFacet\n plotType: PlotType\n onSetPlotType: (plotType: PlotType) => void\n onHide: () => void\n isModalView: boolean\n onCloseModal?: () => void\n /**\n * When true, the plot cannot change the query: clicking a slice or bar does nothing, and the\n * filter dropdowns are hidden. Presentation controls (expand, chart type, hide) still work.\n */\n disableFiltering?: boolean\n}\n\nconst maxLabelLength: number = 19\nexport const MAX_PLOT_HEIGHT_PX = 150\nexport const MAX_EXPANDED_PLOT_HEIGHT_PX = 300\n\n// STACKED_HORIZONTAL_BAR corresponds to a bar chart where we just want to show the proportion (like a pie chart)\n// HORIZONTAL_BAR has one horizontal bar per value, with the first value at the top\nexport type PlotType =\n | 'PIE'\n | 'BAR'\n | 'HORIZONTAL_BAR'\n | 'STACKED_HORIZONTAL_BAR'\n\nexport type GraphData = {\n data: Plotly.Data[]\n labels: FacetWithLabel[]\n colors: string[]\n}\n\n/**\n * @param facetPostProcessingApplied the QueryResultBundle's `facetPostProcessingApplied`. When set, counts are shown as\n * approximate (see `formatFacetValueCount`) and pie percentages are omitted.\n */\nexport async function extractPlotDataArray(\n facetToPlot: EnumerationFacet,\n columnType: ColumnTypeEnum | undefined,\n index: number,\n plotType: PlotType,\n accessToken?: string,\n facetPostProcessingApplied?: boolean,\n) {\n const colorPalette = getContrastColorPalette(\n // Use only the odd palette, using the same offset for all plots until palettes are improved.\n // See PORTALS-2916\n 'odd', // index % 2 === 0 ? 'even' : 'odd',\n 0, // Math.floor(index / 2),\n facetToPlot.facetValues.length,\n )\n\n const getLabels = async (\n facetValues: FacetColumnResultValueCount[],\n columnType?: ColumnTypeEnum,\n accessToken?: string,\n ) => {\n const map = new Map<string, string>()\n map.set(\n SynapseConstants.VALUE_NOT_SET,\n SynapseConstants.FRIENDLY_VALUE_NOT_SET,\n )\n // Filter out empties\n const filteredValues = facetValues\n .map(value => value.value)\n .filter(val => val !== SynapseConstants.VALUE_NOT_SET)\n if (\n columnType === ColumnTypeEnum.ENTITYID ||\n columnType === ColumnTypeEnum.ENTITYID_LIST\n ) {\n // TODO: Pagination\n const response = await SynapseClient.getEntityHeadersByIds(\n filteredValues,\n accessToken,\n )\n for (const header of response.results) {\n map.set(header.id, header.name)\n }\n } else if (\n columnType === ColumnTypeEnum.USERID ||\n columnType === ColumnTypeEnum.USERID_LIST\n ) {\n const response = await SynapseClient.getGroupHeadersBatch(\n filteredValues,\n accessToken,\n )\n for (const header of response.children) {\n map.set(header.ownerId, header.userName)\n }\n }\n\n return facetValues.map(facetValue => ({\n facet: facetValue,\n label: getLabel(facetValue, false, map),\n truncatedLabel: getLabel(facetValue, true, map),\n count: facetValue.count,\n countText: formatFacetValueCount(\n facetValue.count,\n facetToPlot,\n facetPostProcessingApplied,\n ),\n }))\n }\n\n const getLabel = (\n facetValue: FacetColumnResultValueCount,\n truncateFlag: boolean,\n labelMap: Map<string, string>,\n ): string => {\n let label = labelMap.get(facetValue.value) ?? facetValue.value\n if (truncateFlag) {\n label = truncate(label, maxLabelLength)!\n }\n return label\n }\n\n const labels = await getLabels(\n facetToPlot.facetValues,\n columnType,\n accessToken,\n )\n const text = labels.map(el => el.truncatedLabel)\n\n const anyFacetsSelected = facetToPlot.facetValues.some(\n value => value.isSelected,\n )\n const selectionAwareColorPalette = anyFacetsSelected\n ? facetToPlot.facetValues.map((facetValue, index) =>\n facetValue.isSelected\n ? colorPalette[index]\n : colorPalette[index]\n .replace('rgb(', 'rgba(')\n .replace(')', ', 0.25)'),\n )\n : colorPalette\n const counts: Plotly.Datum[] = facetToPlot.facetValues.map(\n facet => facet.count,\n )\n const valueLabels = facetToPlot.facetValues.map(\n facet => labels.find(label => label.facet === facet)?.label ?? facet.value,\n )\n let x: Plotly.Datum[] | Plotly.Datum[][] | Plotly.TypedArray | undefined\n let y: Plotly.Datum[] | Plotly.Datum[][] | Plotly.TypedArray | undefined\n if (plotType === 'BAR') {\n x = valueLabels\n y = counts\n } else if (plotType === 'HORIZONTAL_BAR') {\n x = counts\n y = valueLabels\n } else if (plotType === 'STACKED_HORIZONTAL_BAR') {\n x = counts\n y = new Array(x.length).fill('Proportional') // single value for every x value\n }\n\n // Approximate counts are hovered as their display text, without a misleading exact value or percentage.\n let exactHoverCount = '%{value}'\n if (plotType === 'PIE') {\n exactHoverCount = '%{value} (%{percent})'\n } else if (plotType === 'HORIZONTAL_BAR') {\n exactHoverCount = '%{x}'\n }\n const hoverCount = facetPostProcessingApplied\n ? '%{customdata}'\n : exactHoverCount\n const singleChartData: Plotly.Data = {\n values: plotType === 'PIE' ? counts : undefined,\n labels: labels.map(el => el.label),\n text,\n customdata: facetPostProcessingApplied\n ? labels.map(el => el.countText)\n : undefined,\n x,\n y,\n orientation:\n plotType === 'STACKED_HORIZONTAL_BAR' || plotType === 'HORIZONTAL_BAR'\n ? 'h'\n : 'v',\n // @ts-expect-error\n facetEnumerationValues: facetToPlot.facetValues.map(\n facetValue => facetValue.value,\n ),\n name: facetToPlot.columnName,\n textposition: plotType === 'PIE' ? 'inside' : 'none',\n hovertemplate: `<b>%{text}: </b><br>${hoverCount} <br><extra></extra>`,\n textinfo: 'none',\n type: plotType === 'PIE' ? 'pie' : 'bar',\n pull:\n plotType === 'PIE'\n ? facetToPlot.facetValues.map(facetValue =>\n facetValue.isSelected ? 0.1 : 0,\n )\n : undefined,\n selectedpoints: anyFacetsSelected\n ? facetToPlot.facetValues\n .map((facetValue, index) => (facetValue.isSelected ? index : -1))\n .filter(index => index !== -1)\n : undefined,\n selected: { marker: { opacity: 1 } },\n unselected: { marker: { opacity: 0.25 } },\n\n marker: {\n colors: plotType === 'PIE' ? selectionAwareColorPalette : undefined,\n color: plotType === 'PIE' ? undefined : selectionAwareColorPalette,\n },\n }\n const result = {\n data: [singleChartData],\n labels,\n colors:\n plotType === 'PIE'\n ? ((singleChartData as any).marker?.colors as string[])\n : ((singleChartData as any).marker?.color as string[]),\n }\n return result\n}\n\nconst applyFacetFilter = (\n event: Plotly.PlotMouseEvent,\n allFacetValues: EnumerationFacet,\n callbackApplyFn: FacetNavPanelProps['applyChangesToGraphSlice'],\n) => {\n if (event.points?.[0]) {\n const plotPointData: any = event.points[0]\n const facetValueClickedValue =\n plotPointData.data.facetEnumerationValues[plotPointData.pointNumber]\n const facetValueClicked = allFacetValues.facetValues.find(\n facet => facet.value === facetValueClickedValue,\n )\n callbackApplyFn(\n allFacetValues,\n facetValueClicked,\n !facetValueClicked!.isSelected,\n )\n }\n}\n\nexport function getPlotStyle(\n parentWidth: number | null | undefined,\n plotType: PlotType,\n maxHeight: number,\n): { width: string; height: string } {\n if (parentWidth != undefined) {\n let quotient = 1\n switch (plotType) {\n case 'BAR':\n case 'HORIZONTAL_BAR':\n quotient = 0.8\n break\n case 'PIE':\n quotient = 0.6\n break\n case 'STACKED_HORIZONTAL_BAR':\n quotient = 1\n break\n }\n const width = parentWidth ? parentWidth * quotient : 200\n let height = plotType === 'PIE' ? width : width / 3\n // max height of .PlotsContainer row col* is 200px, so the effective plot height max is around 150 unless it's expanded\n if (height > maxHeight) {\n height = maxHeight\n }\n return {\n width: `${width}px`,\n height: `${height}px`,\n }\n }\n //else parent width is undefined\n return {\n width: '100%',\n height: `${maxHeight}px`,\n }\n}\n\nfunction FacetNavPanel(props: FacetNavPanelProps) {\n const {\n onHide,\n isModalView,\n applyChangesToGraphSlice,\n index,\n facetToPlot,\n plotType,\n onSetPlotType,\n disableFiltering = false,\n } = props\n const { accessToken } = useSynapseContext()\n const { data: queryMetadata, isLoading: isLoadingQueryMetadata } =\n useGetQueryMetadata()\n\n const [plotContainerMeasurements, plotContainerRef] =\n useMeasure<HTMLDivElement>()\n const { getColumnDisplayName } = useQueryVisualizationContext()\n\n // Wait for a non-zero measured width before rendering the plot.\n // Round width to avoid rebuilds from small pixel fluctuations.\n const plotWidth = plotContainerMeasurements?.width\n ? Math.round(plotContainerMeasurements.width)\n : undefined\n\n const [showModal, setShowModal] = useState(false)\n\n const plotTitle = getColumnDisplayName(\n facetToPlot.columnName,\n facetToPlot.jsonPath,\n )\n\n const columnModel = useMemo(\n () =>\n getCorrespondingColumnForFacet(\n facetToPlot,\n queryMetadata?.columnModels ?? [],\n ),\n [queryMetadata?.columnModels, facetToPlot],\n )\n const columnType = columnModel?.columnType as ColumnTypeEnum\n\n // Plotly.js mutates the layout object it receives, so each component instance\n // must have its own layout object. Sharing a single object across instances\n // (e.g. when the expand modal mounts a second FacetNavPanel) causes Plotly's\n // mutations on one chart to silently corrupt the other. Use useMemo to\n // produce a fresh layout object per instance — do NOT hoist this to module scope.\n const plotLayout = useMemo<Partial<Plotly.Layout>>(\n () => ({\n showlegend: false,\n annotations: [],\n margin: { l: 0, r: 0, b: 0, t: 0, pad: 0 },\n yaxis: {\n // Show category labels on the y-axis for horizontal bar charts in modal view\n visible:\n plotType === 'BAR' || (isModalView && plotType === 'HORIZONTAL_BAR'),\n autorange: plotType === 'HORIZONTAL_BAR' ? 'reversed' : undefined,\n showgrid: false,\n automargin: true,\n },\n xaxis: {\n // Show category labels on the x-axis for vertical bar charts in modal view\n visible:\n (isModalView && plotType === 'BAR') || plotType === 'HORIZONTAL_BAR',\n showgrid: false,\n automargin: true,\n },\n }),\n [isModalView, plotType],\n )\n\n const { data: plotData } = useQuery({\n queryKey: [\n 'extractPlotDataArray',\n facetToPlot,\n columnType,\n index,\n plotType,\n accessToken,\n queryMetadata?.facetPostProcessingApplied,\n ],\n\n queryFn: () =>\n extractPlotDataArray(\n facetToPlot,\n columnType,\n index,\n plotType,\n accessToken,\n queryMetadata?.facetPostProcessingApplied,\n ),\n\n enabled: !!facetToPlot,\n })\n\n const chartSelectionInputLabelId = useId()\n const filterByInputLabelId = useId()\n\n /* rendering functions */\n const chartSelectionToggle = (\n <StyledFormControl fullWidth>\n <InputLabel id={chartSelectionInputLabelId}>Chart Type</InputLabel>\n <Select\n labelId={chartSelectionInputLabelId}\n label=\"Chart Type\"\n value={plotType}\n onChange={e => {\n onSetPlotType(e.target.value as PlotType)\n }}\n >\n <MenuItem value={'BAR'}>Bar Chart</MenuItem>\n <MenuItem value={'HORIZONTAL_BAR'}>Horizontal Bar Chart</MenuItem>\n <MenuItem value={'PIE'}>Pie Chart</MenuItem>\n </Select>\n </StyledFormControl>\n )\n\n if (\n (!queryMetadata && isLoadingQueryMetadata) ||\n !facetToPlot ||\n !columnModel\n ) {\n return (\n <div className=\"SRC-loadingContainer SRC-centerContentColumn\">\n {loadingScreen}\n </div>\n )\n } else {\n return (\n <>\n <ConfirmationDialog\n open={showModal}\n onCancel={() => setShowModal(false)}\n title={plotTitle ?? ''}\n content={<FacetNavPanel {...props} isModalView={true} />}\n hasCancelButton={false}\n confirmButtonProps={{\n children: disableFiltering ? 'Close' : 'Apply Filters',\n }}\n onConfirm={() => setShowModal(false)}\n maxWidth={'md'}\n />\n <div\n role=\"figure\"\n className={`FacetNavPanel${isModalView ? '--expanded' : ''}`}\n >\n {!isModalView && (\n <PlotPanelHeader\n data={queryMetadata}\n isLoading={isLoadingQueryMetadata}\n title={plotTitle}\n facetToPlot={disableFiltering ? undefined : facetToPlot}\n onHide={onHide}\n setShowModal={setShowModal}\n />\n )}\n {isModalView && (\n <Stack\n sx={{\n gap: 2,\n }}\n >\n {!disableFiltering && (\n <StyledFormControl>\n <InputLabel\n id={filterByInputLabelId}\n sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}\n >\n <span>Filter All Data By</span>\n <Tooltip title=\"Selecting items in this dropdown will affect all facets on the Explore page.\">\n <InfoOutlined className=\"SRC-hand-cursor SRC-secondary-text-color\" />\n </Tooltip>\n </InputLabel>\n <EnumFacetFilter\n labelId={filterByInputLabelId}\n facet={facetToPlot}\n containerAs=\"Dropdown\"\n dropdownType=\"SelectBox\"\n />\n </StyledFormControl>\n )}\n {chartSelectionToggle}\n </Stack>\n )}\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: '50% 50%',\n alignItems: 'center',\n }}\n role=\"graphics-object\"\n className={`FacetNavPanel__body${disableFiltering ? ' FacetNavPanel__body--filteringDisabled' : ''}`}\n >\n <div ref={plotContainerRef}>\n {plotWidth !== undefined && (\n <Plot\n key={`${facetToPlot.columnName}-${facetToPlot.jsonPath}-${plotType}-${plotWidth}`}\n layout={plotLayout}\n data={plotData?.data ?? []}\n style={getPlotStyle(\n plotWidth,\n plotType,\n isModalView\n ? MAX_EXPANDED_PLOT_HEIGHT_PX\n : MAX_PLOT_HEIGHT_PX,\n )}\n config={{ displayModeBar: false }}\n onClick={\n disableFiltering\n ? undefined\n : evt =>\n applyFacetFilter(\n evt,\n facetToPlot,\n applyChangesToGraphSlice,\n )\n }\n />\n )}\n </div>\n <Box sx={{ alignSelf: 'center' }}>\n <FacetPlotLegendList\n labels={plotData?.labels}\n colors={plotData?.colors}\n isExpanded={isModalView}\n />\n </Box>\n </Box>\n </div>\n </>\n )\n }\n}\n\nexport default FacetNavPanel\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FacetPlotLegendList.d.ts","sourceRoot":"","sources":["../../../../src/components/widgets/facet-nav/FacetPlotLegendList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,oBAAoB,2CAiE9D"}
1
+ {"version":3,"file":"FacetPlotLegendList.d.ts","sourceRoot":"","sources":["../../../../src/components/widgets/facet-nav/FacetPlotLegendList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,oBAAoB,2CAsE9D"}