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":"SelectChallengeTeam.js","names":[],"sources":["../../../src/components/ChallengeTeamWizard/SelectChallengeTeam.tsx"],"sourcesContent":["import React from 'react'\nimport { Box, Button, Typography } from '@mui/material'\nimport ChallengeTeamTable from './ChallengeTeamTable'\nimport { Stack } from '@mui/system'\nimport AddCircleTwoToneIcon from '@mui/icons-material/AddCircleTwoTone'\n\nconst PARTICIPATION_CRITERIA =\n 'To participate in a challenge, you need to create a new Team or join an existing one. \\\n By default, the participant who creates a team is the \"Team Captain\" and has the ability to invite and remove members. \\\n All team members will need a Synapse account so that they can login and accept the team invitation.'\n\ntype SelectChallengeTeamProps = {\n challengeId: string\n onCreateTeam: () => void\n selectedTeamId?: string\n onSelectTeam: (teamId?: string) => void\n}\n\nexport const SelectChallengeTeam = ({\n challengeId,\n onCreateTeam,\n selectedTeamId,\n onSelectTeam,\n}: SelectChallengeTeamProps): React.ReactNode => {\n return (\n <Stack spacing={2}>\n <Typography variant=\"body1\" sx={{ lineHeight: '20px' }}>\n {PARTICIPATION_CRITERIA}\n </Typography>\n <Box sx={{ height: 270 }}>\n <ChallengeTeamTable\n challengeId={challengeId}\n selectedTeamId={selectedTeamId}\n onSelectTeam={onSelectTeam}\n />\n </Box>\n <Box>\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={onCreateTeam}\n startIcon={<AddCircleTwoToneIcon />}\n >\n Create New Team\n </Button>\n </Box>\n </Stack>\n )\n}\n"],"mappings":";;;;;;;AAMA,IAAM,IACJ,0TAWW,KAAuB,EAClC,gBACA,iBACA,mBACA,sBAGE,kBAAC,GAAD;CAAO,SAAS;WAAhB;EACE,kBAAC,GAAD;GAAY,SAAQ;GAAQ,IAAI,EAAE,YAAY,OAAO;aAClD;EACS,CAAA;EACZ,kBAAC,GAAD;GAAK,IAAI,EAAE,QAAQ,IAAI;aACrB,kBAAC,GAAD;IACe;IACG;IACF;GACf,CAAA;EACE,CAAA;EACL,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;GACE,OAAM;GACN,SAAQ;GACR,SAAS;GACT,WAAW,kBAAC,GAAD,CAAuB,CAAA;aACnC;EAEO,CAAA,EACL,CAAA;CACA"}
1
+ {"version":3,"file":"SelectChallengeTeam.js","names":[],"sources":["../../../src/components/ChallengeTeamWizard/SelectChallengeTeam.tsx"],"sourcesContent":["import React from 'react'\nimport { Box, Button, Typography } from '@mui/material'\nimport ChallengeTeamTable from './ChallengeTeamTable'\nimport { Stack } from '@mui/system'\nimport AddCircleTwoToneIcon from '@mui/icons-material/AddCircleTwoTone'\n\nconst PARTICIPATION_CRITERIA =\n 'To participate in a challenge, you need to create a new Team or join an existing one. ' +\n 'By default, the participant who creates a team is the \"Team Captain\" and has the ability to invite and remove members. ' +\n 'All team members will need a Synapse account so that they can login and accept the team invitation.'\n\ntype SelectChallengeTeamProps = {\n challengeId: string\n onCreateTeam: () => void\n selectedTeamId?: string\n onSelectTeam: (teamId?: string) => void\n}\n\nexport const SelectChallengeTeam = ({\n challengeId,\n onCreateTeam,\n selectedTeamId,\n onSelectTeam,\n}: SelectChallengeTeamProps): React.ReactNode => {\n return (\n <Stack spacing={2}>\n <Typography variant=\"body1\" sx={{ lineHeight: '20px' }}>\n {PARTICIPATION_CRITERIA}\n </Typography>\n <Box sx={{ height: 270 }}>\n <ChallengeTeamTable\n challengeId={challengeId}\n selectedTeamId={selectedTeamId}\n onSelectTeam={onSelectTeam}\n />\n </Box>\n <Box>\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={onCreateTeam}\n startIcon={<AddCircleTwoToneIcon />}\n >\n Create New Team\n </Button>\n </Box>\n </Stack>\n )\n}\n"],"mappings":";;;;;;;AAMA,IAAM,IACJ,sTAWW,KAAuB,EAClC,gBACA,iBACA,mBACA,sBAGE,kBAAC,GAAD;CAAO,SAAS;WAAhB;EACE,kBAAC,GAAD;GAAY,SAAQ;GAAQ,IAAI,EAAE,YAAY,OAAO;aAClD;EACS,CAAA;EACZ,kBAAC,GAAD;GAAK,IAAI,EAAE,QAAQ,IAAI;aACrB,kBAAC,GAAD;IACe;IACG;IACF;GACf,CAAA;EACE,CAAA;EACL,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;GACE,OAAM;GACN,SAAQ;GACR,SAAS;GACT,WAAW,kBAAC,GAAD,CAAuB,CAAA;aACnC;EAEO,CAAA,EACL,CAAA;CACA"}
@@ -1,7 +1,7 @@
1
1
  //#region src/components/CitationPopover/CitationPopoverUtils.ts
2
2
  var e = (e, t, n) => {
3
- let r = `${e.replace(/\s+/g, "_")}`, i = document.createElement("a");
4
- i.href = n, i.setAttribute("download", `${r}.${t}`), document.body.appendChild(i), i.click(), document.body.removeChild(i);
3
+ let r = `${e.replaceAll(/\s+/g, "_")}`, i = document.createElement("a");
4
+ i.href = n, i.setAttribute("download", `${r}.${t}`), document.body.appendChild(i), i.click(), i.remove();
5
5
  };
6
6
  //#endregion
7
7
  export { e as createLinkAndDownload };
@@ -1 +1 @@
1
- {"version":3,"file":"CitationPopoverUtils.js","names":[],"sources":["../../../src/components/CitationPopover/CitationPopoverUtils.ts"],"sourcesContent":["export const createLinkAndDownload = (\n title: string,\n fileExtension: string,\n url: string,\n) => {\n const citationTitle = `${title.replace(/\\s+/g, '_')}`\n const link = document.createElement('a')\n link.href = url\n link.setAttribute('download', `${citationTitle}.${fileExtension}`)\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n}\n"],"mappings":";AAAA,IAAa,KACX,GACA,GACA,MACG;CACH,IAAM,IAAgB,GAAG,EAAM,QAAQ,QAAQ,GAAG,KAC5C,IAAO,SAAS,cAAc,GAAG;CAKvC,AAJA,EAAK,OAAO,GACZ,EAAK,aAAa,YAAY,GAAG,EAAc,GAAG,GAAe,GACjE,SAAS,KAAK,YAAY,CAAI,GAC9B,EAAK,MAAM,GACX,SAAS,KAAK,YAAY,CAAI;AAChC"}
1
+ {"version":3,"file":"CitationPopoverUtils.js","names":[],"sources":["../../../src/components/CitationPopover/CitationPopoverUtils.ts"],"sourcesContent":["export const createLinkAndDownload = (\n title: string,\n fileExtension: string,\n url: string,\n) => {\n const citationTitle = `${title.replaceAll(/\\s+/g, '_')}`\n const link = document.createElement('a')\n link.href = url\n link.setAttribute('download', `${citationTitle}.${fileExtension}`)\n document.body.appendChild(link)\n link.click()\n link.remove()\n}\n"],"mappings":";AAAA,IAAa,KACX,GACA,GACA,MACG;CACH,IAAM,IAAgB,GAAG,EAAM,WAAW,QAAQ,GAAG,KAC/C,IAAO,SAAS,cAAc,GAAG;CAKvC,AAJA,EAAK,OAAO,GACZ,EAAK,aAAa,YAAY,GAAG,EAAc,GAAG,GAAe,GACjE,SAAS,KAAK,YAAY,CAAI,GAC9B,EAAK,MAAM,GACX,EAAK,OAAO;AACd"}
@@ -0,0 +1 @@
1
+ ._root_11y3o_1{flex-direction:column;gap:16px;display:flex}._notices_11y3o_7{flex-direction:column;gap:8px;display:flex}._count_11y3o_13{font-weight:700}._state_11y3o_17{text-align:center;padding:32px 0}
@@ -0,0 +1,35 @@
1
+ import { AggregateDataConfiguration } from '@sage-bionetworks/synapse-client';
2
+ import { ReactNode } from 'react';
3
+ /**
4
+ * The Cohort Builder only requests the count and facet statistics: it never shows participant rows, and the server
5
+ * rejects participant row requests from callers with aggregate-only access.
6
+ */
7
+ export declare const COHORT_BUILDER_PART_MASK: number;
8
+ export declare const DEFAULT_COHORT_BUILDER_AUDIT_NOTICE = "Queries you run in the Cohort Builder are logged to protect participant privacy.";
9
+ export declare const COHORT_BUILDER_ZERO_COUNT_TEXT = "No data for the selected cohort";
10
+ export declare const COHORT_BUILDER_PREVIEW_NOTICE = "Previewing the results that users with aggregate-only access see.";
11
+ export type CohortBuilderProps = {
12
+ /** The participant VirtualTable: one row per participant. */
13
+ participantsTableId: string;
14
+ /**
15
+ * The Files/Datasets VirtualTable. When set, the files and datasets of the cohort are listed below its plots, using
16
+ * the cohort as a request-scoped cohort.
17
+ */
18
+ filesTableId?: string;
19
+ /** Faceted columns to plot, in order. Defaults to every faceted column. */
20
+ facetsToPlot?: string[];
21
+ /** Mapping from column name to the name shown for the column. */
22
+ columnAliases?: Record<string, string>;
23
+ /** The singular noun for one row of the participant table. Defaults to "participant". */
24
+ unitDescription?: string;
25
+ /** Lets a data manager preview the results that users with aggregate-only access see. */
26
+ aggregateDataPreview?: AggregateDataConfiguration;
27
+ /** Notice that queries are logged. Defaults to {@link DEFAULT_COHORT_BUILDER_AUDIT_NOTICE}. */
28
+ auditNotice?: ReactNode;
29
+ };
30
+ /**
31
+ * Builds a cohort of participants with the Query Builder and shows the cohort's participant count and facet plots,
32
+ * and optionally its files and datasets. Participant rows are never requested. Signed-out users are asked to sign in.
33
+ */
34
+ export declare function CohortBuilder(props: CohortBuilderProps): import("react/jsx-runtime").JSX.Element;
35
+ //# sourceMappingURL=CohortBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CohortBuilder.d.ts","sourceRoot":"","sources":["../../../src/components/CohortBuilder/CohortBuilder.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAA;AAG7E,OAAO,EAAE,SAAS,EAA+B,MAAM,OAAO,CAAA;AAc9D;;;GAGG;AACH,eAAO,MAAM,wBAAwB,QAIX,CAAA;AAE1B,eAAO,MAAM,mCAAmC,qFACoC,CAAA;AAEpF,eAAO,MAAM,8BAA8B,oCAAoC,CAAA;AAE/E,eAAO,MAAM,6BAA6B,sEAC2B,CAAA;AAErE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,6DAA6D;IAC7D,mBAAmB,EAAE,MAAM,CAAA;IAC3B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,yFAAyF;IACzF,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,yFAAyF;IACzF,oBAAoB,CAAC,EAAE,0BAA0B,CAAA;IACjD,+FAA+F;IAC/F,WAAW,CAAC,EAAE,SAAS,CAAA;CACxB,CAAA;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,2CAgEtD"}
@@ -0,0 +1,108 @@
1
+ import "../../utils/SynapseConstants.js";
2
+ import { useQueryVisualizationContext as e } from "../QueryVisualizationWrapper/QueryVisualizationContext.js";
3
+ import { SignInPrompt as t, SynapseErrorBoundary as n } from "../error/ErrorBanner.js";
4
+ import { useSynapseContext as r } from "../../utils/context/SynapseContext.js";
5
+ import { useSuspenseGetQueryMetadata as i } from "../QueryWrapper/useGetQueryMetadata.js";
6
+ import { QueryVisualizationWrapper as a } from "../QueryVisualizationWrapper/QueryVisualizationWrapper.js";
7
+ import { QueryWrapper as o } from "../QueryWrapper/QueryWrapper.js";
8
+ import { QueryWrapperErrorBoundary as s } from "../QueryWrapperErrorBoundary.js";
9
+ import c from "../QueryWrapper/QueryWrapperLoadingScreen.js";
10
+ import l from "../widgets/facet-nav/PlotsContainer.js";
11
+ import { QueryBuilderControls as u } from "../QueryBuilder/QueryBuilderControls.js";
12
+ import d from "./CohortBuilder.module.js";
13
+ import { CohortFilesPanel as f } from "./CohortFilesPanel.js";
14
+ import { Suspense as p, useMemo as m, useState as h } from "react";
15
+ import { Alert as g, Typography as _ } from "@mui/material";
16
+ import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
17
+ import x from "pluralize";
18
+ //#region src/components/CohortBuilder/CohortBuilder.tsx
19
+ var S = 54, C = "Queries you run in the Cohort Builder are logged to protect participant privacy.", w = "No data for the selected cohort", T = "Previewing the results that users with aggregate-only access see.";
20
+ function E(e) {
21
+ let { participantsTableId: n, filesTableId: i, facetsToPlot: l, columnAliases: u, unitDescription: f = "participant", aggregateDataPreview: h, auditNotice: v = C } = e, { isAuthenticated: x } = r(), w = m(() => ({
22
+ concreteType: "org.sagebionetworks.repo.model.table.QueryBundleRequest",
23
+ entityId: n,
24
+ partMask: S,
25
+ query: { sql: `SELECT * FROM ${n}` },
26
+ aggregateDataPreview: h
27
+ }), [n, h]);
28
+ return x ? /* @__PURE__ */ y(o, {
29
+ initQueryRequest: w,
30
+ children: /* @__PURE__ */ y(a, {
31
+ unitDescription: f,
32
+ columnAliases: u,
33
+ defaultShowPlots: !0,
34
+ children: /* @__PURE__ */ b("div", {
35
+ className: d.root,
36
+ children: [
37
+ /* @__PURE__ */ b("div", {
38
+ className: d.notices,
39
+ children: [/* @__PURE__ */ y(g, {
40
+ severity: "info",
41
+ children: v
42
+ }), h && /* @__PURE__ */ y(g, {
43
+ severity: "warning",
44
+ children: "Previewing the results that users with aggregate-only access see."
45
+ })]
46
+ }),
47
+ /* @__PURE__ */ y(D, {}),
48
+ /* @__PURE__ */ y(s, { children: /* @__PURE__ */ y(p, {
49
+ fallback: /* @__PURE__ */ y(c, {}),
50
+ children: /* @__PURE__ */ y(O, {
51
+ facetsToPlot: l,
52
+ participantsTableId: n,
53
+ filesTableId: i
54
+ })
55
+ }) })
56
+ ]
57
+ })
58
+ })
59
+ }, JSON.stringify(w)) : /* @__PURE__ */ y(_, {
60
+ variant: "body1",
61
+ className: d.state,
62
+ children: /* @__PURE__ */ y(t, {})
63
+ });
64
+ }
65
+ function D() {
66
+ let [e, t] = h(null);
67
+ return /* @__PURE__ */ y(n, { children: /* @__PURE__ */ y(p, {
68
+ fallback: null,
69
+ children: /* @__PURE__ */ y(u, {
70
+ tree: e,
71
+ onTreeChange: t,
72
+ onlyFacetedColumns: !0
73
+ })
74
+ }) });
75
+ }
76
+ function O(t) {
77
+ let { facetsToPlot: n, participantsTableId: r, filesTableId: a } = t, { data: o } = i(), { unitDescription: s } = e(), c = o.queryCount ?? 0;
78
+ return c === 0 ? /* @__PURE__ */ y(_, {
79
+ variant: "headline3",
80
+ component: "p",
81
+ className: d.state,
82
+ children: w
83
+ }) : /* @__PURE__ */ b(v, { children: [
84
+ /* @__PURE__ */ b(_, {
85
+ variant: "headline3",
86
+ component: "p",
87
+ className: d.count,
88
+ children: [
89
+ c.toLocaleString(),
90
+ " ",
91
+ x(s, c)
92
+ ]
93
+ }),
94
+ /* @__PURE__ */ y(l, {
95
+ facetsToPlot: n,
96
+ defaultPlotType: "HORIZONTAL_BAR",
97
+ disableFiltering: !0
98
+ }),
99
+ a && /* @__PURE__ */ y(f, {
100
+ filesTableId: a,
101
+ participantsTableId: r
102
+ })
103
+ ] });
104
+ }
105
+ //#endregion
106
+ export { S as COHORT_BUILDER_PART_MASK, T as COHORT_BUILDER_PREVIEW_NOTICE, w as COHORT_BUILDER_ZERO_COUNT_TEXT, E as CohortBuilder, C as DEFAULT_COHORT_BUILDER_AUDIT_NOTICE };
107
+
108
+ //# sourceMappingURL=CohortBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CohortBuilder.js","names":[],"sources":["../../../src/components/CohortBuilder/CohortBuilder.tsx"],"sourcesContent":["import { useSynapseContext } from '@/utils/context/SynapseContext'\nimport {\n BUNDLE_MASK_QUERY_COLUMN_MODELS,\n BUNDLE_MASK_QUERY_COUNT,\n BUNDLE_MASK_QUERY_FACETS,\n BUNDLE_MASK_QUERY_SELECT_COLUMNS,\n} from '@/utils/SynapseConstants'\nimport { Alert, Typography } from '@mui/material'\nimport { AggregateDataConfiguration } from '@sage-bionetworks/synapse-client'\nimport { QueryBundleRequest } from '@sage-bionetworks/synapse-types'\nimport pluralize from 'pluralize'\nimport { ReactNode, Suspense, useMemo, useState } from 'react'\nimport { SignInPrompt, SynapseErrorBoundary } from '../error/ErrorBanner'\nimport { QueryBuilderControls } from '../QueryBuilder/QueryBuilderControls'\nimport { QBGroup } from '../QueryBuilder/QueryBuilderTypes'\nimport { useQueryVisualizationContext } from '../QueryVisualizationWrapper/QueryVisualizationContext'\nimport { QueryVisualizationWrapper } from '../QueryVisualizationWrapper/QueryVisualizationWrapper'\nimport { QueryWrapper } from '../QueryWrapper/QueryWrapper'\nimport QueryWrapperLoadingScreen from '../QueryWrapper/QueryWrapperLoadingScreen'\nimport { useSuspenseGetQueryMetadata } from '../QueryWrapper/useGetQueryMetadata'\nimport { QueryWrapperErrorBoundary } from '../QueryWrapperErrorBoundary'\nimport PlotsContainer from '../widgets/facet-nav/PlotsContainer'\nimport styles from './CohortBuilder.module.scss'\nimport { CohortFilesPanel } from './CohortFilesPanel'\n\n/**\n * The Cohort Builder only requests the count and facet statistics: it never shows participant rows, and the server\n * rejects participant row requests from callers with aggregate-only access.\n */\nexport const COHORT_BUILDER_PART_MASK =\n BUNDLE_MASK_QUERY_COUNT |\n BUNDLE_MASK_QUERY_SELECT_COLUMNS |\n BUNDLE_MASK_QUERY_COLUMN_MODELS |\n BUNDLE_MASK_QUERY_FACETS\n\nexport const DEFAULT_COHORT_BUILDER_AUDIT_NOTICE =\n 'Queries you run in the Cohort Builder are logged to protect participant privacy.'\n\nexport const COHORT_BUILDER_ZERO_COUNT_TEXT = 'No data for the selected cohort'\n\nexport const COHORT_BUILDER_PREVIEW_NOTICE =\n 'Previewing the results that users with aggregate-only access see.'\n\nexport type CohortBuilderProps = {\n /** The participant VirtualTable: one row per participant. */\n participantsTableId: string\n /**\n * The Files/Datasets VirtualTable. When set, the files and datasets of the cohort are listed below its plots, using\n * the cohort as a request-scoped cohort.\n */\n filesTableId?: string\n /** Faceted columns to plot, in order. Defaults to every faceted column. */\n facetsToPlot?: string[]\n /** Mapping from column name to the name shown for the column. */\n columnAliases?: Record<string, string>\n /** The singular noun for one row of the participant table. Defaults to \"participant\". */\n unitDescription?: string\n /** Lets a data manager preview the results that users with aggregate-only access see. */\n aggregateDataPreview?: AggregateDataConfiguration\n /** Notice that queries are logged. Defaults to {@link DEFAULT_COHORT_BUILDER_AUDIT_NOTICE}. */\n auditNotice?: ReactNode\n}\n\n/**\n * Builds a cohort of participants with the Query Builder and shows the cohort's participant count and facet plots,\n * and optionally its files and datasets. Participant rows are never requested. Signed-out users are asked to sign in.\n */\nexport function CohortBuilder(props: CohortBuilderProps) {\n const {\n participantsTableId,\n filesTableId,\n facetsToPlot,\n columnAliases,\n unitDescription = 'participant',\n aggregateDataPreview,\n auditNotice = DEFAULT_COHORT_BUILDER_AUDIT_NOTICE,\n } = props\n const { isAuthenticated } = useSynapseContext()\n\n const initQueryRequest: QueryBundleRequest = useMemo(\n () => ({\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId: participantsTableId,\n partMask: COHORT_BUILDER_PART_MASK,\n query: { sql: `SELECT * FROM ${participantsTableId}` },\n aggregateDataPreview,\n }),\n [participantsTableId, aggregateDataPreview],\n )\n\n if (!isAuthenticated) {\n return (\n <Typography variant=\"body1\" className={styles.state}>\n <SignInPrompt />\n </Typography>\n )\n }\n\n return (\n // Keyed on the request so that new props reset the query and the Query Builder tree.\n <QueryWrapper\n key={JSON.stringify(initQueryRequest)}\n initQueryRequest={initQueryRequest}\n >\n <QueryVisualizationWrapper\n unitDescription={unitDescription}\n columnAliases={columnAliases}\n defaultShowPlots\n >\n <div className={styles.root}>\n <div className={styles.notices}>\n <Alert severity=\"info\">{auditNotice}</Alert>\n {aggregateDataPreview && (\n <Alert severity=\"warning\">{COHORT_BUILDER_PREVIEW_NOTICE}</Alert>\n )}\n </div>\n <CohortQueryBuilder />\n {/* Only the results are replaced by an error or withheld-result notice, so the cohort stays editable. */}\n <QueryWrapperErrorBoundary>\n <Suspense fallback={<QueryWrapperLoadingScreen />}>\n <CohortResults\n facetsToPlot={facetsToPlot}\n participantsTableId={participantsTableId}\n filesTableId={filesTableId}\n />\n </Suspense>\n </QueryWrapperErrorBoundary>\n </div>\n </QueryVisualizationWrapper>\n </QueryWrapper>\n )\n}\n\nfunction CohortQueryBuilder() {\n const [tree, setTree] = useState<QBGroup | null>(null)\n return (\n <SynapseErrorBoundary>\n <Suspense fallback={null}>\n <QueryBuilderControls\n tree={tree}\n onTreeChange={setTree}\n onlyFacetedColumns\n />\n </Suspense>\n </SynapseErrorBoundary>\n )\n}\n\nfunction CohortResults(props: {\n facetsToPlot?: string[]\n participantsTableId: string\n filesTableId?: string\n}) {\n const { facetsToPlot, participantsTableId, filesTableId } = props\n const { data: queryMetadata } = useSuspenseGetQueryMetadata()\n const { unitDescription } = useQueryVisualizationContext()\n const count = queryMetadata.queryCount ?? 0\n\n if (count === 0) {\n return (\n <Typography variant=\"headline3\" component=\"p\" className={styles.state}>\n {COHORT_BUILDER_ZERO_COUNT_TEXT}\n </Typography>\n )\n }\n return (\n <>\n <Typography variant=\"headline3\" component=\"p\" className={styles.count}>\n {count.toLocaleString()} {pluralize(unitDescription, count)}\n </Typography>\n {/* The Query Builder is the only way to change the cohort. */}\n <PlotsContainer\n facetsToPlot={facetsToPlot}\n defaultPlotType=\"HORIZONTAL_BAR\"\n disableFiltering\n />\n {filesTableId && (\n <CohortFilesPanel\n filesTableId={filesTableId}\n participantsTableId={participantsTableId}\n />\n )}\n </>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AA6BA,IAAa,IAAA,IAMA,IACX,oFAEW,IAAiC,mCAEjC,IACX;AA0BF,SAAgB,EAAc,GAA2B;CACvD,IAAM,EACJ,wBACA,iBACA,iBACA,kBACA,qBAAkB,eAClB,yBACA,iBAAc,MACZ,GACE,EAAE,uBAAoB,EAAkB,GAExC,IAAuC,SACpC;EACL,cAAc;EACd,UAAU;EACV,UAAU;EACV,OAAO,EAAE,KAAK,iBAAiB,IAAsB;EACrD;CACF,IACA,CAAC,GAAqB,CAAoB,CAC5C;CAUA,OARK,IAUH,kBAAC,GAAD;EAEoB;YAElB,kBAAC,GAAD;GACmB;GACF;GACf,kBAAA;aAEA,kBAAC,OAAD;IAAK,WAAW,EAAO;cAAvB;KACE,kBAAC,OAAD;MAAK,WAAW,EAAO;gBAAvB,CACE,kBAAC,GAAD;OAAO,UAAS;iBAAQ;MAAmB,CAAA,GAC1C,KACC,kBAAC,GAAD;OAAO,UAAS;;MAAgD,CAAA,CAE/D;;KACL,kBAAC,GAAD,CAAqB,CAAA;KAErB,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAU,UAAU,kBAAC,GAAD,CAA4B,CAAA;gBAC9C,kBAAC,GAAD;OACgB;OACO;OACP;MACf,CAAA;KACO,CAAA,EACe,CAAA;IACxB;;EACoB,CAAA;CACf,GA5BP,KAAK,UAAU,CAAgB,CA4BxB,IArCZ,kBAAC,GAAD;EAAY,SAAQ;EAAQ,WAAW,EAAO;YAC5C,kBAAC,GAAD,CAAe,CAAA;CACL,CAAA;AAqClB;AAEA,SAAS,IAAqB;CAC5B,IAAM,CAAC,GAAM,KAAW,EAAyB,IAAI;CACrD,OACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;EAAU,UAAU;YAClB,kBAAC,GAAD;GACQ;GACN,cAAc;GACd,oBAAA;EACD,CAAA;CACO,CAAA,EACU,CAAA;AAE1B;AAEA,SAAS,EAAc,GAIpB;CACD,IAAM,EAAE,iBAAc,wBAAqB,oBAAiB,GACtD,EAAE,MAAM,MAAkB,EAA4B,GACtD,EAAE,uBAAoB,EAA6B,GACnD,IAAQ,EAAc,cAAc;CAS1C,OAPI,MAAU,IAEV,kBAAC,GAAD;EAAY,SAAQ;EAAY,WAAU;EAAI,WAAW,EAAO;YAC7D;CACS,CAAA,IAId,kBAAA,GAAA,EAAA,UAAA;EACE,kBAAC,GAAD;GAAY,SAAQ;GAAY,WAAU;GAAI,WAAW,EAAO;aAAhE;IACG,EAAM,eAAe;IAAE;IAAE,EAAU,GAAiB,CAAK;GAChD;;EAEZ,kBAAC,GAAD;GACgB;GACd,iBAAgB;GAChB,kBAAA;EACD,CAAA;EACA,KACC,kBAAC,GAAD;GACgB;GACO;EACtB,CAAA;CAEH,EAAA,CAAA;AAEN"}
@@ -0,0 +1,10 @@
1
+ import './CohortBuilder.css';var e = {
2
+ root: "_root_11y3o_1",
3
+ notices: "_notices_11y3o_7",
4
+ count: "_count_11y3o_13",
5
+ state: "_state_11y3o_17"
6
+ };
7
+ //#endregion
8
+ export { e as default };
9
+
10
+ //# sourceMappingURL=CohortBuilder.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CohortBuilder.module.js","names":[],"sources":["../../../src/components/CohortBuilder/CohortBuilder.module.scss"],"sourcesContent":[".root {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.notices {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.count {\n font-weight: 700;\n}\n\n.state {\n text-align: center;\n padding: 32px 0;\n}\n"],"mappings":""}
@@ -0,0 +1,20 @@
1
+ .root {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: 16px;
5
+ }
6
+
7
+ .notices {
8
+ display: flex;
9
+ flex-direction: column;
10
+ gap: 8px;
11
+ }
12
+
13
+ .count {
14
+ font-weight: 700;
15
+ }
16
+
17
+ .state {
18
+ text-align: center;
19
+ padding: 32px 0;
20
+ }
@@ -0,0 +1,16 @@
1
+ export declare const COHORT_FILES_PART_MASK: number;
2
+ export declare const COHORT_FILES_TITLE = "Files and datasets";
3
+ export declare const COHORT_FILES_ZERO_COUNT_TEXT = "No files or datasets for the selected cohort";
4
+ export declare const COHORT_TOO_LARGE_TEXT: string;
5
+ export type CohortFilesPanelProps = {
6
+ /** The Files/Datasets VirtualTable: one row per file or dataset, grouped from the participant ⋈ file/dataset rows. */
7
+ filesTableId: string;
8
+ /** The participant VirtualTable that the cohort is selected from. */
9
+ participantsTableId: string;
10
+ };
11
+ /**
12
+ * Lists the files and datasets of the participant cohort in the enclosing QueryWrapper (the participant query). The
13
+ * cohort is sent as a request-scoped cohort, so participant identifiers never reach the browser.
14
+ */
15
+ export declare function CohortFilesPanel(props: CohortFilesPanelProps): import("react/jsx-runtime").JSX.Element;
16
+ //# sourceMappingURL=CohortFilesPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CohortFilesPanel.d.ts","sourceRoot":"","sources":["../../../src/components/CohortBuilder/CohortFilesPanel.tsx"],"names":[],"mappings":"AAgCA,eAAO,MAAM,sBAAsB,QAMT,CAAA;AAE1B,eAAO,MAAM,kBAAkB,uBAAuB,CAAA;AACtD,eAAO,MAAM,4BAA4B,iDACO,CAAA;AAChD,eAAO,MAAM,qBAAqB,QAA6I,CAAA;AAG/K,MAAM,MAAM,qBAAqB,GAAG;IAClC,sHAAsH;IACtH,YAAY,EAAE,MAAM,CAAA;IACpB,qEAAqE;IACrE,mBAAmB,EAAE,MAAM,CAAA;CAC5B,CAAA;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAiE5D"}
@@ -0,0 +1,124 @@
1
+ import "../../utils/SynapseConstants.js";
2
+ import { useQueryVisualizationContext as e } from "../QueryVisualizationWrapper/QueryVisualizationContext.js";
3
+ import { AggregateQueryErrorNotice as t, getAggregateQueryError as n } from "../QueryWrapper/AggregateQueryErrorNotice.js";
4
+ import { ErrorBanner as r, SynapseErrorBoundary as i } from "../error/ErrorBanner.js";
5
+ import a from "../download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js";
6
+ import { useQueryContext as o } from "../QueryContext/QueryContext.js";
7
+ import { useSuspenseGetQueryMetadata as s } from "../QueryWrapper/useGetQueryMetadata.js";
8
+ import { QueryVisualizationWrapper as c } from "../QueryVisualizationWrapper/QueryVisualizationWrapper.js";
9
+ import { QueryWrapper as l } from "../QueryWrapper/QueryWrapper.js";
10
+ import u from "../QueryWrapper/QueryWrapperLoadingScreen.js";
11
+ import { RowSetView as d } from "../QueryWrapperPlotNav/RowSetView.js";
12
+ import { useGetAddToDownloadListRequestForCurrentQuery as f } from "../QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js";
13
+ import p from "../SynapseTable/TopLevelControls/TopLevelControls.js";
14
+ import { MAX_COHORT_PARTICIPANTS as m, buildCohortHandOff as h } from "./cohortHandOff.js";
15
+ import g from "./CohortBuilder.module.js";
16
+ import { Suspense as _, useId as v, useMemo as y } from "react";
17
+ import { Typography as b } from "@mui/material";
18
+ import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
19
+ import { SynapseClientError as w } from "@sage-bionetworks/synapse-client/util/SynapseClientError";
20
+ import { ErrorBoundary as T } from "react-error-boundary";
21
+ //#region src/components/CohortBuilder/CohortFilesPanel.tsx
22
+ var E = 63, D = "Files and datasets", O = "No files or datasets for the selected cohort", k = `This cohort is too large to list its files and datasets. Narrow it to ${m.toLocaleString()} participants or fewer.`, A = "files and datasets";
23
+ function j(e) {
24
+ let { filesTableId: t, participantsTableId: n } = e, r = v(), { getCurrentQueryRequest: i } = o(), { data: a } = s(), d = y(() => h(i().query, n), [i, n]), f = y(() => ({
25
+ concreteType: "org.sagebionetworks.repo.model.table.QueryBundleRequest",
26
+ entityId: t,
27
+ partMask: E,
28
+ aggregateDataPreview: i().aggregateDataPreview,
29
+ query: {
30
+ sql: `SELECT * FROM ${t}`,
31
+ limit: 25,
32
+ cohorts: d ? [d.cohort] : void 0,
33
+ additionalFilters: d ? [d.filter] : void 0
34
+ }
35
+ }), [
36
+ t,
37
+ i,
38
+ d
39
+ ]), p = d !== void 0 && (a.queryCount ?? 0) > 1e4;
40
+ return /* @__PURE__ */ C("section", {
41
+ "aria-labelledby": r,
42
+ children: [/* @__PURE__ */ S(b, {
43
+ variant: "headline2",
44
+ id: r,
45
+ children: D
46
+ }), p ? /* @__PURE__ */ S(b, {
47
+ variant: "body1",
48
+ className: g.state,
49
+ children: k
50
+ }) : /* @__PURE__ */ S(l, {
51
+ initQueryRequest: f,
52
+ isRowSelectionVisible: !0,
53
+ children: /* @__PURE__ */ S(c, {
54
+ unitDescription: "file",
55
+ hideSearchBarControl: !0,
56
+ hideCopyToClipboard: !0,
57
+ children: /* @__PURE__ */ S(N, { children: /* @__PURE__ */ S(_, {
58
+ fallback: /* @__PURE__ */ S(u, {}),
59
+ children: /* @__PURE__ */ S(P, {})
60
+ }) })
61
+ })
62
+ }, JSON.stringify(f))]
63
+ });
64
+ }
65
+ function M({ error: e }) {
66
+ if (e instanceof w && e.errorResponse && "errorCode" in e.errorResponse && e.errorResponse.errorCode === "COHORT_TOO_LARGE") return /* @__PURE__ */ S(b, {
67
+ variant: "body1",
68
+ className: g.state,
69
+ children: k
70
+ });
71
+ let i = n(e);
72
+ return i ? /* @__PURE__ */ S(t, {
73
+ error: i,
74
+ pluralUnitDescription: A
75
+ }) : /* @__PURE__ */ S(r, { error: e });
76
+ }
77
+ function N(e) {
78
+ let { currentQueryRequest: t } = o();
79
+ return /* @__PURE__ */ S(T, {
80
+ FallbackComponent: M,
81
+ resetKeys: [t],
82
+ children: e.children
83
+ });
84
+ }
85
+ function P() {
86
+ let { data: e } = s(), t = e.queryCount ?? 0;
87
+ return t === 0 ? /* @__PURE__ */ S(b, {
88
+ variant: "body1",
89
+ className: g.state,
90
+ children: O
91
+ }) : /* @__PURE__ */ C(x, { children: [
92
+ /* @__PURE__ */ C(b, {
93
+ variant: "body1",
94
+ className: g.count,
95
+ children: [
96
+ t.toLocaleString(),
97
+ " ",
98
+ t === 1 ? "file or dataset" : A
99
+ ]
100
+ }),
101
+ /* @__PURE__ */ S(i, { children: /* @__PURE__ */ S(p, {
102
+ hideQueryCount: !0,
103
+ hideFacetFilterControl: !0,
104
+ hideVisualizationsControl: !0,
105
+ hideProgrammaticOptionsMenuItem: !0
106
+ }) }),
107
+ /* @__PURE__ */ S(F, {}),
108
+ /* @__PURE__ */ S(d, {
109
+ tableConfiguration: {},
110
+ hideDownload: !0
111
+ })
112
+ ] });
113
+ }
114
+ function F() {
115
+ let { showDownloadConfirmation: t, setShowDownloadConfirmation: n } = e(), r = f();
116
+ return t ? /* @__PURE__ */ S(a, {
117
+ addToDownloadListRequest: r,
118
+ onClose: () => n(!1)
119
+ }) : null;
120
+ }
121
+ //#endregion
122
+ export { E as COHORT_FILES_PART_MASK, D as COHORT_FILES_TITLE, O as COHORT_FILES_ZERO_COUNT_TEXT, k as COHORT_TOO_LARGE_TEXT, j as CohortFilesPanel };
123
+
124
+ //# sourceMappingURL=CohortFilesPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CohortFilesPanel.js","names":[],"sources":["../../../src/components/CohortBuilder/CohortFilesPanel.tsx"],"sourcesContent":["import {\n BUNDLE_MASK_QUERY_COLUMN_MODELS,\n BUNDLE_MASK_QUERY_COUNT,\n BUNDLE_MASK_QUERY_FACETS,\n BUNDLE_MASK_QUERY_MAX_ROWS_PER_PAGE,\n BUNDLE_MASK_QUERY_RESULTS,\n BUNDLE_MASK_QUERY_SELECT_COLUMNS,\n DEFAULT_PAGE_SIZE,\n} from '@/utils/SynapseConstants'\nimport { Typography } from '@mui/material'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport { QueryBundleRequest } from '@sage-bionetworks/synapse-types'\nimport { PropsWithChildren, Suspense, useId, useMemo } from 'react'\nimport { ErrorBoundary, FallbackProps } from 'react-error-boundary'\nimport AddToDownloadListConfirmationAlert from '../download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert'\nimport { ErrorBanner, SynapseErrorBoundary } from '../error/ErrorBanner'\nimport { useQueryContext } from '../QueryContext/QueryContext'\nimport { useQueryVisualizationContext } from '../QueryVisualizationWrapper/QueryVisualizationContext'\nimport { QueryVisualizationWrapper } from '../QueryVisualizationWrapper/QueryVisualizationWrapper'\nimport {\n AggregateQueryErrorNotice,\n getAggregateQueryError,\n} from '../QueryWrapper/AggregateQueryErrorNotice'\nimport { QueryWrapper } from '../QueryWrapper/QueryWrapper'\nimport QueryWrapperLoadingScreen from '../QueryWrapper/QueryWrapperLoadingScreen'\nimport { useGetAddToDownloadListRequestForCurrentQuery } from '../QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery'\nimport { useSuspenseGetQueryMetadata } from '../QueryWrapper/useGetQueryMetadata'\nimport { RowSetView } from '../QueryWrapperPlotNav/RowSetView'\nimport TopLevelControls from '../SynapseTable/TopLevelControls/TopLevelControls'\nimport styles from './CohortBuilder.module.scss'\nimport { buildCohortHandOff, MAX_COHORT_PARTICIPANTS } from './cohortHandOff'\n\nexport const COHORT_FILES_PART_MASK =\n BUNDLE_MASK_QUERY_RESULTS |\n BUNDLE_MASK_QUERY_COUNT |\n BUNDLE_MASK_QUERY_SELECT_COLUMNS |\n BUNDLE_MASK_QUERY_MAX_ROWS_PER_PAGE |\n BUNDLE_MASK_QUERY_COLUMN_MODELS |\n BUNDLE_MASK_QUERY_FACETS\n\nexport const COHORT_FILES_TITLE = 'Files and datasets'\nexport const COHORT_FILES_ZERO_COUNT_TEXT =\n 'No files or datasets for the selected cohort'\nexport const COHORT_TOO_LARGE_TEXT = `This cohort is too large to list its files and datasets. Narrow it to ${MAX_COHORT_PARTICIPANTS.toLocaleString()} participants or fewer.`\nconst FILES_AND_DATASETS = 'files and datasets'\n\nexport type CohortFilesPanelProps = {\n /** The Files/Datasets VirtualTable: one row per file or dataset, grouped from the participant ⋈ file/dataset rows. */\n filesTableId: string\n /** The participant VirtualTable that the cohort is selected from. */\n participantsTableId: string\n}\n\n/**\n * Lists the files and datasets of the participant cohort in the enclosing QueryWrapper (the participant query). The\n * cohort is sent as a request-scoped cohort, so participant identifiers never reach the browser.\n */\nexport function CohortFilesPanel(props: CohortFilesPanelProps) {\n const { filesTableId, participantsTableId } = props\n const titleId = useId()\n const { getCurrentQueryRequest } = useQueryContext()\n const { data: participantMetadata } = useSuspenseGetQueryMetadata()\n\n const handOff = useMemo(\n () =>\n buildCohortHandOff(getCurrentQueryRequest().query, participantsTableId),\n [getCurrentQueryRequest, participantsTableId],\n )\n const filesRequest: QueryBundleRequest = useMemo(\n () => ({\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId: filesTableId,\n partMask: COHORT_FILES_PART_MASK,\n // A data manager previewing aggregate-only results previews the files query the same way.\n aggregateDataPreview: getCurrentQueryRequest().aggregateDataPreview,\n query: {\n sql: `SELECT * FROM ${filesTableId}`,\n limit: DEFAULT_PAGE_SIZE,\n cohorts: handOff ? [handOff.cohort] : undefined,\n additionalFilters: handOff ? [handOff.filter] : undefined,\n },\n }),\n [filesTableId, getCurrentQueryRequest, handOff],\n )\n\n // The participant count is exact, so a cohort the server would reject as too large is not sent.\n const isCohortTooLarge =\n handOff !== undefined &&\n (participantMetadata.queryCount ?? 0) > MAX_COHORT_PARTICIPANTS\n\n return (\n <section aria-labelledby={titleId}>\n <Typography variant=\"headline2\" id={titleId}>\n {COHORT_FILES_TITLE}\n </Typography>\n {isCohortTooLarge ? (\n <Typography variant=\"body1\" className={styles.state}>\n {COHORT_TOO_LARGE_TEXT}\n </Typography>\n ) : (\n // Keyed on the request so a new cohort resets the files query, its paging, its filters and the row selection.\n <QueryWrapper\n key={JSON.stringify(filesRequest)}\n initQueryRequest={filesRequest}\n isRowSelectionVisible\n >\n {/* The files query is derived from the cohort, so it can't be searched, shared as a link, or re-run from SQL. */}\n <QueryVisualizationWrapper\n unitDescription=\"file\"\n hideSearchBarControl\n hideCopyToClipboard\n >\n <CohortFilesErrorBoundary>\n <Suspense fallback={<QueryWrapperLoadingScreen />}>\n <CohortFilesResults />\n </Suspense>\n </CohortFilesErrorBoundary>\n </QueryVisualizationWrapper>\n </QueryWrapper>\n )}\n </section>\n )\n}\n\nfunction CohortFilesErrorFallback({ error }: FallbackProps) {\n if (\n error instanceof SynapseClientError &&\n error.errorResponse &&\n 'errorCode' in error.errorResponse &&\n error.errorResponse.errorCode === 'COHORT_TOO_LARGE'\n ) {\n return (\n <Typography variant=\"body1\" className={styles.state}>\n {COHORT_TOO_LARGE_TEXT}\n </Typography>\n )\n }\n // A participant cohort that passed its own threshold can still match fewer files and datasets than the threshold.\n const aggregateQueryError = getAggregateQueryError(error)\n if (aggregateQueryError) {\n return (\n <AggregateQueryErrorNotice\n error={aggregateQueryError}\n pluralUnitDescription={FILES_AND_DATASETS}\n />\n )\n }\n return <ErrorBanner error={error} />\n}\n\n/** Resets when the files query changes, e.g. when a table column filter is applied. */\nfunction CohortFilesErrorBoundary(props: PropsWithChildren) {\n const { currentQueryRequest } = useQueryContext()\n return (\n <ErrorBoundary\n FallbackComponent={CohortFilesErrorFallback}\n resetKeys={[currentQueryRequest]}\n >\n {props.children}\n </ErrorBoundary>\n )\n}\n\nfunction CohortFilesResults() {\n const { data: filesMetadata } = useSuspenseGetQueryMetadata()\n const count = filesMetadata.queryCount ?? 0\n if (count === 0) {\n return (\n <Typography variant=\"body1\" className={styles.state}>\n {COHORT_FILES_ZERO_COUNT_TEXT}\n </Typography>\n )\n }\n return (\n <>\n <Typography variant=\"body1\" className={styles.count}>\n {count.toLocaleString()}{' '}\n {count === 1 ? 'file or dataset' : FILES_AND_DATASETS}\n </Typography>\n <SynapseErrorBoundary>\n {/* Programmatic options are hidden: their code carries only the SQL, which can't express the cohort. */}\n <TopLevelControls\n hideQueryCount\n hideFacetFilterControl\n hideVisualizationsControl\n hideProgrammaticOptionsMenuItem\n />\n </SynapseErrorBoundary>\n <CohortFilesDownloadConfirmation />\n <RowSetView tableConfiguration={{}} hideDownload />\n </>\n )\n}\n\n/** Adds the files of the cohort's files query, which carries the cohort, to the Download List. */\nfunction CohortFilesDownloadConfirmation() {\n const { showDownloadConfirmation, setShowDownloadConfirmation } =\n useQueryVisualizationContext()\n const addToDownloadListRequest =\n useGetAddToDownloadListRequestForCurrentQuery()\n if (!showDownloadConfirmation) {\n return null\n }\n return (\n <AddToDownloadListConfirmationAlert\n addToDownloadListRequest={addToDownloadListRequest}\n onClose={() => setShowDownloadConfirmation(false)}\n />\n )\n}\n"],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { CohortDefinition, ColumnCohortFilter, Query } from '@sage-bionetworks/synapse-types';
2
+ /** Name of the request-scoped cohort that carries the participant cohort into the Files/Datasets query. */
3
+ export declare const COHORT_NAME = "c1";
4
+ /**
5
+ * The participant identifier: a column of the participant VirtualTable and of the Files/Datasets VirtualTable's
6
+ * source. For callers with aggregate-only access it must be a quasi-identifier of that source.
7
+ */
8
+ export declare const COHORT_PARTICIPANT_ID_COLUMN_NAME = "individualId";
9
+ /**
10
+ * The most participants a cohort can hold: the stack default of `org.sagebionetworks.table.query.cohort.max.values`.
11
+ * The server rejects a larger cohort with COHORT_TOO_LARGE.
12
+ */
13
+ export declare const MAX_COHORT_PARTICIPANTS = 10000;
14
+ export type CohortHandOff = {
15
+ cohort: CohortDefinition;
16
+ /** References the cohort as a defining condition, so it applies to the rows the Files/Datasets VirtualTable groups. */
17
+ filter: ColumnCohortFilter;
18
+ };
19
+ /**
20
+ * Builds the cohort that carries the participant query's filters into the Files/Datasets query, and the filter that
21
+ * references it. Returns undefined when the participant query has no filters, because the cohort would be every
22
+ * participant. Sort, limit and offset are never copied: the server rejects them in a cohort query.
23
+ */
24
+ export declare function buildCohortHandOff(participantQuery: Query, participantsTableId: string): CohortHandOff | undefined;
25
+ //# sourceMappingURL=cohortHandOff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cohortHandOff.d.ts","sourceRoot":"","sources":["../../../src/components/CohortBuilder/cohortHandOff.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,EACN,MAAM,iCAAiC,CAAA;AAExC,2GAA2G;AAC3G,eAAO,MAAM,WAAW,OAAO,CAAA;AAE/B;;;GAGG;AACH,eAAO,MAAM,iCAAiC,iBAAiB,CAAA;AAE/D;;;GAGG;AACH,eAAO,MAAM,uBAAuB,QAAS,CAAA;AAE7C,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,gBAAgB,CAAA;IACxB,uHAAuH;IACvH,MAAM,EAAE,kBAAkB,CAAA;CAC3B,CAAA;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,gBAAgB,EAAE,KAAK,EACvB,mBAAmB,EAAE,MAAM,GAC1B,aAAa,GAAG,SAAS,CAqB3B"}
@@ -0,0 +1,26 @@
1
+ import { COLUMN_COHORT_FILTER_CONCRETE_TYPE_VALUE as e } from "@sage-bionetworks/synapse-types";
2
+ //#region src/components/CohortBuilder/cohortHandOff.ts
3
+ var t = "c1", n = "individualId", r = 1e4;
4
+ function i(t, r) {
5
+ let { additionalFilters: i, selectedFacets: a } = t;
6
+ if (!(!i?.length && !a?.length)) return {
7
+ cohort: {
8
+ name: "c1",
9
+ query: {
10
+ sql: `SELECT ${n} FROM ${r}`,
11
+ additionalFilters: i,
12
+ selectedFacets: a
13
+ }
14
+ },
15
+ filter: {
16
+ concreteType: e,
17
+ columnName: n,
18
+ cohortName: "c1",
19
+ isDefiningCondition: !0
20
+ }
21
+ };
22
+ }
23
+ //#endregion
24
+ export { t as COHORT_NAME, n as COHORT_PARTICIPANT_ID_COLUMN_NAME, r as MAX_COHORT_PARTICIPANTS, i as buildCohortHandOff };
25
+
26
+ //# sourceMappingURL=cohortHandOff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cohortHandOff.js","names":[],"sources":["../../../src/components/CohortBuilder/cohortHandOff.ts"],"sourcesContent":["import {\n COLUMN_COHORT_FILTER_CONCRETE_TYPE_VALUE,\n CohortDefinition,\n ColumnCohortFilter,\n Query,\n} from '@sage-bionetworks/synapse-types'\n\n/** Name of the request-scoped cohort that carries the participant cohort into the Files/Datasets query. */\nexport const COHORT_NAME = 'c1'\n\n/**\n * The participant identifier: a column of the participant VirtualTable and of the Files/Datasets VirtualTable's\n * source. For callers with aggregate-only access it must be a quasi-identifier of that source.\n */\nexport const COHORT_PARTICIPANT_ID_COLUMN_NAME = 'individualId'\n\n/**\n * The most participants a cohort can hold: the stack default of `org.sagebionetworks.table.query.cohort.max.values`.\n * The server rejects a larger cohort with COHORT_TOO_LARGE.\n */\nexport const MAX_COHORT_PARTICIPANTS = 10_000\n\nexport type CohortHandOff = {\n cohort: CohortDefinition\n /** References the cohort as a defining condition, so it applies to the rows the Files/Datasets VirtualTable groups. */\n filter: ColumnCohortFilter\n}\n\n/**\n * Builds the cohort that carries the participant query's filters into the Files/Datasets query, and the filter that\n * references it. Returns undefined when the participant query has no filters, because the cohort would be every\n * participant. Sort, limit and offset are never copied: the server rejects them in a cohort query.\n */\nexport function buildCohortHandOff(\n participantQuery: Query,\n participantsTableId: string,\n): CohortHandOff | undefined {\n const { additionalFilters, selectedFacets } = participantQuery\n if (!additionalFilters?.length && !selectedFacets?.length) {\n return undefined\n }\n return {\n cohort: {\n name: COHORT_NAME,\n query: {\n sql: `SELECT ${COHORT_PARTICIPANT_ID_COLUMN_NAME} FROM ${participantsTableId}`,\n additionalFilters,\n selectedFacets,\n },\n },\n filter: {\n concreteType: COLUMN_COHORT_FILTER_CONCRETE_TYPE_VALUE,\n columnName: COHORT_PARTICIPANT_ID_COLUMN_NAME,\n cohortName: COHORT_NAME,\n isDefiningCondition: true,\n },\n }\n}\n"],"mappings":";;AAQA,IAAa,IAAc,MAMd,IAAoC,gBAMpC,IAA0B;AAavC,SAAgB,EACd,GACA,GAC2B;CAC3B,IAAM,EAAE,sBAAmB,sBAAmB;CAC1C,OAAC,GAAmB,UAAU,CAAC,GAAgB,SAGnD,OAAO;EACL,QAAQ;GACN,MAAA;GACA,OAAO;IACL,KAAK,UAAU,EAAkC,QAAQ;IACzD;IACA;GACF;EACF;EACA,QAAQ;GACN,cAAc;GACd,YAAY;GACZ,YAAA;GACA,qBAAqB;EACvB;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnFilter.d.ts","sourceRoot":"","sources":["../../../src/components/ColumnFilter/ColumnFilter.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAc/C,MAAM,MAAM,WAAW,GAAG;IACxB,+BAA+B,EAAE,qBAAqB,CAAA;CACvD,CAAA;AAED,iBAAS,YAAY,CAAC,KAAK,EAAE,WAAW,2CAoDvC;AAED,eAAe,YAAY,CAAA"}
1
+ {"version":3,"file":"ColumnFilter.d.ts","sourceRoot":"","sources":["../../../src/components/ColumnFilter/ColumnFilter.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAY/C,MAAM,MAAM,WAAW,GAAG;IACxB,+BAA+B,EAAE,qBAAqB,CAAA;CACvD,CAAA;AAED,iBAAS,YAAY,CAAC,KAAK,EAAE,WAAW,2CAoDvC;AAED,eAAe,YAAY,CAAA"}
@@ -1,25 +1,26 @@
1
- import { facetObjectMatchesDefinition as e, getCorrespondingSelectedFacet as t } from "../../utils/functions/queryUtils.js";
2
- import { useQueryContext as n } from "../QueryContext/QueryContext.js";
3
- import { useGetQueryMetadata as r } from "../QueryWrapper/useGetQueryMetadata.js";
4
- import { Autocomplete as i, TextField as a } from "@mui/material";
5
- import { jsx as o } from "react/jsx-runtime";
1
+ import { getEnumerationFacets as e } from "../../utils/functions/enumerationFacet.js";
2
+ import { facetObjectMatchesDefinition as t, getCorrespondingSelectedFacet as n } from "../../utils/functions/queryUtils.js";
3
+ import { useQueryContext as r } from "../QueryContext/QueryContext.js";
4
+ import { useGetQueryMetadata as i } from "../QueryWrapper/useGetQueryMetadata.js";
5
+ import { Autocomplete as a, TextField as o } from "@mui/material";
6
+ import { jsx as s } from "react/jsx-runtime";
6
7
  //#region src/components/ColumnFilter/ColumnFilter.tsx
7
- function s(s) {
8
- let { getCurrentQueryRequest: c, addValueToSelectedFacet: l, removeSelectedFacet: u } = n(), { data: d } = r(), { topLevelEnumeratedFacetToFilter: f } = s, p = c(), m = (d?.facets ?? []).find((t) => e(t, f))?.facetValues.map(({ value: e }) => e) ?? [], h = t(f, p.query.selectedFacets)?.facetValues || [];
9
- return /* @__PURE__ */ o("div", { children: m.length > 0 && /* @__PURE__ */ o(i, {
8
+ function c(c) {
9
+ let { getCurrentQueryRequest: l, addValueToSelectedFacet: u, removeSelectedFacet: d } = r(), { data: f } = i(), { topLevelEnumeratedFacetToFilter: p } = c, m = l(), h = e(f?.facets).find((e) => t(e, p))?.facetValues.map(({ value: e }) => e) ?? [], g = n(p, m.query.selectedFacets)?.facetValues || [];
10
+ return /* @__PURE__ */ s("div", { children: h.length > 0 && /* @__PURE__ */ s(a, {
10
11
  multiple: !0,
11
- options: m,
12
- value: h,
12
+ options: h,
13
+ value: g,
13
14
  onChange: (e, t) => {
14
- u(f), t.forEach((e) => l(f, e));
15
+ d(p), t.forEach((e) => u(p, e));
15
16
  },
16
- renderInput: (e) => /* @__PURE__ */ o(a, {
17
+ renderInput: (e) => /* @__PURE__ */ s(o, {
17
18
  ...e,
18
19
  placeholder: "Select Filter(s)"
19
20
  })
20
21
  }) });
21
22
  }
22
23
  //#endregion
23
- export { s as default };
24
+ export { c as default };
24
25
 
25
26
  //# sourceMappingURL=ColumnFilter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnFilter.js","names":[],"sources":["../../../src/components/ColumnFilter/ColumnFilter.tsx"],"sourcesContent":["import { UniqueFacetIdentifier } from '@/utils'\nimport {\n facetObjectMatchesDefinition,\n getCorrespondingSelectedFacet,\n} from '@/utils/functions/queryUtils'\nimport { Autocomplete, TextField } from '@mui/material'\nimport {\n FacetColumnResultValues,\n FacetColumnValuesRequest,\n} from '@sage-bionetworks/synapse-types'\nimport { SyntheticEvent } from 'react'\nimport { useQueryContext } from '../QueryContext/QueryContext'\nimport { useGetQueryMetadata } from '../QueryWrapper/useGetQueryMetadata'\n\nexport type FilterProps = {\n topLevelEnumeratedFacetToFilter: UniqueFacetIdentifier\n}\n\nfunction ColumnFilter(props: FilterProps) {\n const queryContext = useQueryContext()\n const {\n getCurrentQueryRequest,\n addValueToSelectedFacet,\n removeSelectedFacet,\n } = queryContext\n const { data: queryMetadata } = useGetQueryMetadata()\n const { topLevelEnumeratedFacetToFilter } = props\n\n const currentQuery = getCurrentQueryRequest()\n\n const activeFacet = (queryMetadata?.facets ?? []).find(facet =>\n facetObjectMatchesDefinition(facet, topLevelEnumeratedFacetToFilter),\n ) as FacetColumnResultValues | undefined\n\n // Map the facet values to format for MUI Autocomplete options\n const filterOptions = activeFacet?.facetValues.map(({ value }) => value) ?? []\n\n const selectedFacetFromQuery = getCorrespondingSelectedFacet(\n topLevelEnumeratedFacetToFilter,\n currentQuery.query.selectedFacets,\n ) as FacetColumnValuesRequest | undefined\n\n const selectedValues = selectedFacetFromQuery?.facetValues || []\n\n const onChange = (\n event: SyntheticEvent,\n values: string[], // New value for the selected options\n ) => {\n removeSelectedFacet(topLevelEnumeratedFacetToFilter)\n\n values.forEach(value =>\n addValueToSelectedFacet(topLevelEnumeratedFacetToFilter, value),\n )\n }\n\n return (\n <div>\n {filterOptions.length > 0 && (\n <Autocomplete\n multiple\n options={filterOptions}\n value={selectedValues}\n onChange={onChange}\n renderInput={params => (\n <TextField {...params} placeholder=\"Select Filter(s)\" />\n )}\n />\n )}\n </div>\n )\n}\n\nexport default ColumnFilter\n"],"mappings":";;;;;;AAkBA,SAAS,EAAa,GAAoB;CAExC,IAAM,EACJ,2BACA,4BACA,2BAJmB,EAKjB,GACE,EAAE,MAAM,MAAkB,EAAoB,GAC9C,EAAE,uCAAoC,GAEtC,IAAe,EAAuB,GAOtC,KALe,GAAe,UAAU,CAAC,GAAG,MAAK,MACrD,EAA6B,GAAO,CAA+B,CAI/C,GAAa,YAAY,KAAK,EAAE,eAAY,CAAK,KAAK,CAAC,GAOvE,IALyB,EAC7B,GACA,EAAa,MAAM,cAGE,GAAwB,eAAe,CAAC;CAa/D,OACE,kBAAC,OAAD,EAAA,UACG,EAAc,SAAS,KACtB,kBAAC,GAAD;EACE,UAAA;EACA,SAAS;EACT,OAAO;EACG,WAjBhB,GACA,MACG;GAGH,AAFA,EAAoB,CAA+B,GAEnD,EAAO,SAAQ,MACb,EAAwB,GAAiC,CAAK,CAChE;EACF;EAUQ,cAAa,MACX,kBAAC,GAAD;GAAW,GAAI;GAAQ,aAAY;EAAoB,CAAA;CAE1D,CAAA,EAEA,CAAA;AAET"}
1
+ {"version":3,"file":"ColumnFilter.js","names":[],"sources":["../../../src/components/ColumnFilter/ColumnFilter.tsx"],"sourcesContent":["import { UniqueFacetIdentifier } from '@/utils'\nimport {\n facetObjectMatchesDefinition,\n getCorrespondingSelectedFacet,\n} from '@/utils/functions/queryUtils'\nimport { getEnumerationFacets } from '@/utils/functions/enumerationFacet'\nimport { Autocomplete, TextField } from '@mui/material'\nimport { FacetColumnValuesRequest } from '@sage-bionetworks/synapse-types'\nimport { SyntheticEvent } from 'react'\nimport { useQueryContext } from '../QueryContext/QueryContext'\nimport { useGetQueryMetadata } from '../QueryWrapper/useGetQueryMetadata'\n\nexport type FilterProps = {\n topLevelEnumeratedFacetToFilter: UniqueFacetIdentifier\n}\n\nfunction ColumnFilter(props: FilterProps) {\n const queryContext = useQueryContext()\n const {\n getCurrentQueryRequest,\n addValueToSelectedFacet,\n removeSelectedFacet,\n } = queryContext\n const { data: queryMetadata } = useGetQueryMetadata()\n const { topLevelEnumeratedFacetToFilter } = props\n\n const currentQuery = getCurrentQueryRequest()\n\n const activeFacet = getEnumerationFacets(queryMetadata?.facets).find(facet =>\n facetObjectMatchesDefinition(facet, topLevelEnumeratedFacetToFilter),\n )\n\n // Map the facet values to format for MUI Autocomplete options\n const filterOptions = activeFacet?.facetValues.map(({ value }) => value) ?? []\n\n const selectedFacetFromQuery = getCorrespondingSelectedFacet(\n topLevelEnumeratedFacetToFilter,\n currentQuery.query.selectedFacets,\n ) as FacetColumnValuesRequest | undefined\n\n const selectedValues = selectedFacetFromQuery?.facetValues || []\n\n const onChange = (\n event: SyntheticEvent,\n values: string[], // New value for the selected options\n ) => {\n removeSelectedFacet(topLevelEnumeratedFacetToFilter)\n\n values.forEach(value =>\n addValueToSelectedFacet(topLevelEnumeratedFacetToFilter, value),\n )\n }\n\n return (\n <div>\n {filterOptions.length > 0 && (\n <Autocomplete\n multiple\n options={filterOptions}\n value={selectedValues}\n onChange={onChange}\n renderInput={params => (\n <TextField {...params} placeholder=\"Select Filter(s)\" />\n )}\n />\n )}\n </div>\n )\n}\n\nexport default ColumnFilter\n"],"mappings":";;;;;;;AAgBA,SAAS,EAAa,GAAoB;CAExC,IAAM,EACJ,2BACA,4BACA,2BAJmB,EAKjB,GACE,EAAE,MAAM,MAAkB,EAAoB,GAC9C,EAAE,uCAAoC,GAEtC,IAAe,EAAuB,GAOtC,IALc,EAAqB,GAAe,MAAM,EAAE,MAAK,MACnE,EAA6B,GAAO,CAA+B,CAI/C,GAAa,YAAY,KAAK,EAAE,eAAY,CAAK,KAAK,CAAC,GAOvE,IALyB,EAC7B,GACA,EAAa,MAAM,cAGE,GAAwB,eAAe,CAAC;CAa/D,OACE,kBAAC,OAAD,EAAA,UACG,EAAc,SAAS,KACtB,kBAAC,GAAD;EACE,UAAA;EACA,SAAS;EACT,OAAO;EACG,WAjBhB,GACA,MACG;GAGH,AAFA,EAAoB,CAA+B,GAEnD,EAAO,SAAQ,MACb,EAAwB,GAAiC,CAAK,CAChE;EACF;EAUQ,cAAa,MACX,kBAAC,GAAD;GAAW,GAAI;GAAQ,aAAY;EAAoB,CAAA;CAE1D,CAAA,EAEA,CAAA;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"DataExplorer.d.ts","sourceRoot":"","sources":["../../../src/components/DataExplorer/DataExplorer.tsx"],"names":[],"mappings":"AAwBA,KAAK,iBAAiB,GAAG;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAUD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,GAAG,EACH,KAAK,EACL,QAAQ,EACR,UAAU,EACV,UAAU,EACV,WAAW,EACX,eAAe,EACf,QAAQ,GACT,EAAE,iBAAiB,2CA2MnB"}
1
+ {"version":3,"file":"DataExplorer.d.ts","sourceRoot":"","sources":["../../../src/components/DataExplorer/DataExplorer.tsx"],"names":[],"mappings":"AAqBA,KAAK,iBAAiB,GAAG;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAUD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,GAAG,EACH,KAAK,EACL,QAAQ,EACR,UAAU,EACV,UAAU,EACV,WAAW,EACX,eAAe,EACf,QAAQ,GACT,EAAE,iBAAiB,2CAyMnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"DataExplorer.js","names":[],"sources":["../../../src/components/DataExplorer/DataExplorer.tsx"],"sourcesContent":["import {\n Button,\n Typography,\n Stack,\n useTheme,\n useMediaQuery,\n} from '@mui/material'\nimport { useEffect, useMemo, useState } from 'react'\nimport styles from './DataExplorer.module.scss'\nimport { useSmartLink } from '../SmartLink/useSmartLink'\nimport { parseEntityIdFromSqlStatement } from '@/utils/functions'\nimport {\n QueryBundleRequest,\n FacetColumnResultValues,\n} from '@sage-bionetworks/synapse-types'\nimport { SynapseConstants } from '@/utils'\nimport useGetQueryResultBundle from '@/synapse-queries/entity/useGetQueryResultBundle'\nimport { getFieldIndex } from '@/utils/functions/queryUtils'\nimport { generateEncodedPathAndQueryForSelectedFacetURL } from '../QueryWrapper'\nimport ImageFromSynapseTable from '../ImageFromSynapseTable'\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward'\nimport { getFacets } from '../widgets/facet-nav/useFacetPlots'\nimport { orderBy } from 'lodash-es'\n\ntype DataExplorerProps = {\n title?: React.ReactNode\n subtitle?: React.ReactNode\n buttonText?: string\n buttonLink?: string\n sql: string\n explorePath?: string\n exploreQuerySql?: string\n facetSql?: string\n}\n\nenum ExpectedColumns {\n DATATYPE = 'datatype',\n ICON = 'icon',\n HEX_COLOR = 'hexColor',\n ORDER = 'order',\n COLUMN_NAME = 'columnName',\n}\n\n/**\n * DataExplorer\n *\n * A reusable component that renders a list of data types/categories with associated icons.\n * It drives navigation by linking each row to a pre-filtered exploration view.\n *\n * How it works:\n * 1. `sql`: Fetches a configuration table defining the display categories,\n * their display order, hex colors, and icons.\n * 2. `facetSql`: Fetches real-time counts for these categories from the actual\n * underlying data table.\n * 3. Links are dynamically built to point to a target path (`explorePath`) pre-filtered to the\n * clicked category.\n */\nexport default function DataExplorer({\n sql,\n title,\n subtitle,\n buttonText,\n buttonLink,\n explorePath,\n exploreQuerySql,\n facetSql,\n}: DataExplorerProps) {\n const hasTextSection = title || subtitle || buttonText\n const smartLinkProps = useSmartLink(buttonLink)\n const theme = useTheme()\n const isMobile = useMediaQuery(theme.breakpoints.down('sm'))\n\n const entityId = parseEntityIdFromSqlStatement(sql)\n const facetEntityId = parseEntityIdFromSqlStatement(facetSql ?? '')\n\n const queryBundleRequest: QueryBundleRequest = {\n partMask:\n SynapseConstants.BUNDLE_MASK_QUERY_SELECT_COLUMNS |\n SynapseConstants.BUNDLE_MASK_QUERY_RESULTS,\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId,\n query: {\n sql,\n },\n }\n\n const facetQueryRequest: QueryBundleRequest = {\n partMask: SynapseConstants.BUNDLE_MASK_QUERY_FACETS,\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId: facetEntityId,\n query: {\n sql: facetSql ?? '',\n },\n }\n\n const { data: queryResultBundle } =\n useGetQueryResultBundle(queryBundleRequest)\n\n const dataRows = useMemo(\n () => queryResultBundle?.queryResult?.queryResults.rows ?? [],\n [queryResultBundle],\n )\n\n const { data: facetQueryResultBundle } = useGetQueryResultBundle(\n facetQueryRequest,\n { enabled: Boolean(facetSql) },\n )\n\n const datatypeColIndex = getFieldIndex(\n ExpectedColumns.DATATYPE,\n queryResultBundle,\n )\n\n const iconColIndex = getFieldIndex(ExpectedColumns.ICON, queryResultBundle)\n\n const hexColorColIndex = getFieldIndex(\n ExpectedColumns.HEX_COLOR,\n queryResultBundle,\n )\n\n const orderColIndex = getFieldIndex(ExpectedColumns.ORDER, queryResultBundle)\n\n const columnNameColIndex = getFieldIndex(\n ExpectedColumns.COLUMN_NAME,\n queryResultBundle,\n )\n\n // Key rows by columnName + dataType to prevent collisions when the same dataType appears in multiple columns.\n const getRowKey = (dataType: string, columnName: string) =>\n columnName ? `${columnName}::${dataType}` : dataType\n\n const [rowUrls, setRowUrls] = useState<Record<string, string>>({})\n\n useEffect(() => {\n if (!explorePath || !exploreQuerySql) return\n Promise.all(\n dataRows.map(row => {\n const dataType = row.values[datatypeColIndex]?.trim() ?? ''\n const columnName = row.values[columnNameColIndex]?.trim() ?? ''\n const rowKey = getRowKey(dataType, columnName)\n if (!dataType || !columnName)\n return Promise.resolve([rowKey, explorePath] as const)\n return generateEncodedPathAndQueryForSelectedFacetURL(\n explorePath,\n exploreQuerySql,\n [{ facet: columnName, facetValue: dataType }],\n ).then(url => [rowKey, url] as const)\n }),\n ).then(entries => setRowUrls(Object.fromEntries(entries)))\n }, [\n dataRows,\n datatypeColIndex,\n columnNameColIndex,\n explorePath,\n exploreQuerySql,\n ])\n\n // Create a map of facet counts by column name and data type for quick lookup\n const facetCountsByColumn = useMemo(() => {\n const facets = getFacets(\n facetQueryResultBundle,\n ) as FacetColumnResultValues[]\n const map = new Map<string, Map<string, number>>()\n for (const facet of facets) {\n map.set(\n facet.columnName,\n new Map(facet.facetValues.map(fv => [fv.value, fv.count])),\n )\n }\n return map\n }, [facetQueryResultBundle])\n\n const getFacetCount = (dataType: string, columnName?: string) =>\n columnName ? facetCountsByColumn.get(columnName)?.get(dataType) : undefined\n\n // Sort by order column ascending, then by facet count descending\n const sortedRows = orderBy(\n dataRows,\n [\n row => Number(row.values[orderColIndex] ?? Number.MAX_SAFE_INTEGER),\n row =>\n getFacetCount(\n row.values[datatypeColIndex]?.trim() ?? '',\n row.values[columnNameColIndex]?.trim() ?? '',\n ) ?? 0,\n ],\n ['asc', 'desc'],\n )\n\n return (\n <div className={styles.dataExplorerContainer}>\n {hasTextSection && (\n <Stack className={styles.dataExplorerTextContainer}>\n {title && (\n <Typography\n variant=\"headline1\"\n className={styles.dataExplorerTitle}\n >\n {title}\n </Typography>\n )}\n {subtitle && (\n <Typography\n variant=\"body1\"\n component=\"div\"\n className={styles.dataExplorerSubtitle}\n >\n {subtitle}\n </Typography>\n )}\n {buttonText && (\n <Button\n variant=\"contained\"\n className={styles.dataExplorerButton}\n {...smartLinkProps}\n >\n {buttonText}\n </Button>\n )}\n </Stack>\n )}\n <div className={styles.dataContainer}>\n {sortedRows.map(row => {\n const dataType = row.values[datatypeColIndex]?.trim() ?? ''\n const hexColor = row.values[hexColorColIndex] ?? undefined\n const columnName = row.values[columnNameColIndex]?.trim() ?? ''\n const rowUrl = rowUrls[getRowKey(dataType, columnName)]\n const facetCount = getFacetCount(dataType, columnName)\n return (\n <a\n key={getRowKey(dataType, columnName)}\n className={styles.dataRow}\n href={rowUrl}\n >\n <div className={styles.dataRowInner}>\n <div className={styles.dataRowLeft}>\n <div\n className={styles.iconContainer}\n style={hexColor ? { backgroundColor: hexColor } : undefined}\n >\n <ImageFromSynapseTable\n tableId={entityId}\n fileHandleId={row.values[iconColIndex]}\n alt={dataType}\n style={{ width: 49, height: 49 }}\n />\n </div>\n <div className={styles.dataRowNamePill}>\n <Typography className={styles.dataRowTitle}>\n {dataType}\n </Typography>\n {facetCount && (\n <div className={styles.facetCount}>{facetCount}</div>\n )}\n </div>\n </div>\n {rowUrl && !isMobile && (\n <div className={styles.viewCta}>\n <span className={styles.viewCtaText}>View</span>\n <ArrowForwardIcon className={styles.viewCtaIcon} />\n </div>\n )}\n </div>\n </a>\n )\n })}\n </div>\n </div>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DataExplorer.js","names":[],"sources":["../../../src/components/DataExplorer/DataExplorer.tsx"],"sourcesContent":["import {\n Button,\n Typography,\n Stack,\n useTheme,\n useMediaQuery,\n} from '@mui/material'\nimport { useEffect, useMemo, useState } from 'react'\nimport styles from './DataExplorer.module.scss'\nimport { useSmartLink } from '../SmartLink/useSmartLink'\nimport { parseEntityIdFromSqlStatement } from '@/utils/functions'\nimport { QueryBundleRequest } from '@sage-bionetworks/synapse-types'\nimport { SynapseConstants } from '@/utils'\nimport useGetQueryResultBundle from '@/synapse-queries/entity/useGetQueryResultBundle'\nimport { getFieldIndex } from '@/utils/functions/queryUtils'\nimport { generateEncodedPathAndQueryForSelectedFacetURL } from '../QueryWrapper'\nimport ImageFromSynapseTable from '../ImageFromSynapseTable'\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward'\nimport { getFacets } from '../widgets/facet-nav/useFacetPlots'\nimport { orderBy } from 'lodash-es'\n\ntype DataExplorerProps = {\n title?: React.ReactNode\n subtitle?: React.ReactNode\n buttonText?: string\n buttonLink?: string\n sql: string\n explorePath?: string\n exploreQuerySql?: string\n facetSql?: string\n}\n\nenum ExpectedColumns {\n DATATYPE = 'datatype',\n ICON = 'icon',\n HEX_COLOR = 'hexColor',\n ORDER = 'order',\n COLUMN_NAME = 'columnName',\n}\n\n/**\n * DataExplorer\n *\n * A reusable component that renders a list of data types/categories with associated icons.\n * It drives navigation by linking each row to a pre-filtered exploration view.\n *\n * How it works:\n * 1. `sql`: Fetches a configuration table defining the display categories,\n * their display order, hex colors, and icons.\n * 2. `facetSql`: Fetches real-time counts for these categories from the actual\n * underlying data table.\n * 3. Links are dynamically built to point to a target path (`explorePath`) pre-filtered to the\n * clicked category.\n */\nexport default function DataExplorer({\n sql,\n title,\n subtitle,\n buttonText,\n buttonLink,\n explorePath,\n exploreQuerySql,\n facetSql,\n}: DataExplorerProps) {\n const hasTextSection = title || subtitle || buttonText\n const smartLinkProps = useSmartLink(buttonLink)\n const theme = useTheme()\n const isMobile = useMediaQuery(theme.breakpoints.down('sm'))\n\n const entityId = parseEntityIdFromSqlStatement(sql)\n const facetEntityId = parseEntityIdFromSqlStatement(facetSql ?? '')\n\n const queryBundleRequest: QueryBundleRequest = {\n partMask:\n SynapseConstants.BUNDLE_MASK_QUERY_SELECT_COLUMNS |\n SynapseConstants.BUNDLE_MASK_QUERY_RESULTS,\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId,\n query: {\n sql,\n },\n }\n\n const facetQueryRequest: QueryBundleRequest = {\n partMask: SynapseConstants.BUNDLE_MASK_QUERY_FACETS,\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId: facetEntityId,\n query: {\n sql: facetSql ?? '',\n },\n }\n\n const { data: queryResultBundle } =\n useGetQueryResultBundle(queryBundleRequest)\n\n const dataRows = useMemo(\n () => queryResultBundle?.queryResult?.queryResults.rows ?? [],\n [queryResultBundle],\n )\n\n const { data: facetQueryResultBundle } = useGetQueryResultBundle(\n facetQueryRequest,\n { enabled: Boolean(facetSql) },\n )\n\n const datatypeColIndex = getFieldIndex(\n ExpectedColumns.DATATYPE,\n queryResultBundle,\n )\n\n const iconColIndex = getFieldIndex(ExpectedColumns.ICON, queryResultBundle)\n\n const hexColorColIndex = getFieldIndex(\n ExpectedColumns.HEX_COLOR,\n queryResultBundle,\n )\n\n const orderColIndex = getFieldIndex(ExpectedColumns.ORDER, queryResultBundle)\n\n const columnNameColIndex = getFieldIndex(\n ExpectedColumns.COLUMN_NAME,\n queryResultBundle,\n )\n\n // Key rows by columnName + dataType to prevent collisions when the same dataType appears in multiple columns.\n const getRowKey = (dataType: string, columnName: string) =>\n columnName ? `${columnName}::${dataType}` : dataType\n\n const [rowUrls, setRowUrls] = useState<Record<string, string>>({})\n\n useEffect(() => {\n if (!explorePath || !exploreQuerySql) return\n Promise.all(\n dataRows.map(row => {\n const dataType = row.values[datatypeColIndex]?.trim() ?? ''\n const columnName = row.values[columnNameColIndex]?.trim() ?? ''\n const rowKey = getRowKey(dataType, columnName)\n if (!dataType || !columnName)\n return Promise.resolve([rowKey, explorePath] as const)\n return generateEncodedPathAndQueryForSelectedFacetURL(\n explorePath,\n exploreQuerySql,\n [{ facet: columnName, facetValue: dataType }],\n ).then(url => [rowKey, url] as const)\n }),\n ).then(entries => setRowUrls(Object.fromEntries(entries)))\n }, [\n dataRows,\n datatypeColIndex,\n columnNameColIndex,\n explorePath,\n exploreQuerySql,\n ])\n\n // Create a map of facet counts by column name and data type for quick lookup\n const facetCountsByColumn = useMemo(() => {\n const facets = getFacets(facetQueryResultBundle)\n const map = new Map<string, Map<string, number>>()\n for (const facet of facets) {\n map.set(\n facet.columnName,\n new Map(facet.facetValues.map(fv => [fv.value, fv.count])),\n )\n }\n return map\n }, [facetQueryResultBundle])\n\n const getFacetCount = (dataType: string, columnName?: string) =>\n columnName ? facetCountsByColumn.get(columnName)?.get(dataType) : undefined\n\n // Sort by order column ascending, then by facet count descending\n const sortedRows = orderBy(\n dataRows,\n [\n row => Number(row.values[orderColIndex] ?? Number.MAX_SAFE_INTEGER),\n row =>\n getFacetCount(\n row.values[datatypeColIndex]?.trim() ?? '',\n row.values[columnNameColIndex]?.trim() ?? '',\n ) ?? 0,\n ],\n ['asc', 'desc'],\n )\n\n return (\n <div className={styles.dataExplorerContainer}>\n {hasTextSection && (\n <Stack className={styles.dataExplorerTextContainer}>\n {title && (\n <Typography\n variant=\"headline1\"\n className={styles.dataExplorerTitle}\n >\n {title}\n </Typography>\n )}\n {subtitle && (\n <Typography\n variant=\"body1\"\n component=\"div\"\n className={styles.dataExplorerSubtitle}\n >\n {subtitle}\n </Typography>\n )}\n {buttonText && (\n <Button\n variant=\"contained\"\n className={styles.dataExplorerButton}\n {...smartLinkProps}\n >\n {buttonText}\n </Button>\n )}\n </Stack>\n )}\n <div className={styles.dataContainer}>\n {sortedRows.map(row => {\n const dataType = row.values[datatypeColIndex]?.trim() ?? ''\n const hexColor = row.values[hexColorColIndex] ?? undefined\n const columnName = row.values[columnNameColIndex]?.trim() ?? ''\n const rowUrl = rowUrls[getRowKey(dataType, columnName)]\n const facetCount = getFacetCount(dataType, columnName)\n return (\n <a\n key={getRowKey(dataType, columnName)}\n className={styles.dataRow}\n href={rowUrl}\n >\n <div className={styles.dataRowInner}>\n <div className={styles.dataRowLeft}>\n <div\n className={styles.iconContainer}\n style={hexColor ? { backgroundColor: hexColor } : undefined}\n >\n <ImageFromSynapseTable\n tableId={entityId}\n fileHandleId={row.values[iconColIndex]}\n alt={dataType}\n style={{ width: 49, height: 49 }}\n />\n </div>\n <div className={styles.dataRowNamePill}>\n <Typography className={styles.dataRowTitle}>\n {dataType}\n </Typography>\n {facetCount && (\n <div className={styles.facetCount}>{facetCount}</div>\n )}\n </div>\n </div>\n {rowUrl && !isMobile && (\n <div className={styles.viewCta}>\n <span className={styles.viewCtaText}>View</span>\n <ArrowForwardIcon className={styles.viewCtaIcon} />\n </div>\n )}\n </div>\n </a>\n )\n })}\n </div>\n </div>\n )\n}\n"],"mappings":"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"}