synapse-react-client 4.0.46 → 4.0.48

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 +4 -4
@@ -1,11 +1,12 @@
1
1
  import { isFilterGroup as e } from "../../utils/types/IsType.js";
2
- import { useQueryContext as t } from "../QueryContext/QueryContext.js";
2
+ import { useQueryVisualizationContext as t } from "../QueryVisualizationWrapper/QueryVisualizationContext.js";
3
+ import { useQueryContext as n } from "../QueryContext/QueryContext.js";
3
4
  import "../QueryContext/index.js";
4
- import { useQueryVisualizationContext as n } from "../QueryVisualizationWrapper/QueryVisualizationContext.js";
5
5
  import "../QueryVisualizationWrapper/index.js";
6
- import { addChildGroup as r, addConditionToGroup as i, clearGroup as a, defaultQBGroup as o, removeNode as s, updateCondition as c, updateGroup as l } from "./queryBuilderOperations.js";
7
- import { qbNodeToApiFilter as u } from "./queryBuilderTranslation.js";
8
- import { useQueryBuilderDrag as d } from "./queryBuilderDnd.js";
6
+ import { addChildGroup as r, addConditionToGroup as i, clearGroup as a, defaultQBGroup as o, removeNode as s, updateCondition as ee, updateGroup as te } from "./queryBuilderOperations.js";
7
+ import { qbNodeToApiFilter as ne } from "./queryBuilderTranslation.js";
8
+ import { useQueryBuilderDrag as c } from "./queryBuilderDnd.js";
9
+ import { FILTER_LIMIT_VIOLATION_MESSAGES as l, countQBLeafPredicates as u, findFilterLimitViolation as d } from "./queryBuilderLimits.js";
9
10
  import { useQBCombinedSql as f } from "./useQBCombinedSql.js";
10
11
  import { useQBFacetSourceMetadata as p } from "./useQBFacetSourceMetadata.js";
11
12
  import { useQBValueDisplayName as m } from "./useQBValueDisplayName.js";
@@ -13,131 +14,142 @@ import { QueryBuilderInternalContextProvider as h } from "./QueryBuilderInternal
13
14
  import { FilterGroupNode as g } from "./FilterGroupNode.js";
14
15
  import { qbTreeToReadable as _ } from "./qbTreeToReadable.js";
15
16
  import v from "./QueryBuilderControls.module.js";
16
- import { useCallback as y, useMemo as b, useState as x } from "react";
17
- import { Button as S, ToggleButton as C, ToggleButtonGroup as w } from "@mui/material";
18
- import { jsx as T, jsxs as E } from "react/jsx-runtime";
19
- import { DragDropProvider as D } from "@dnd-kit/react";
17
+ import { useCallback as y, useId as re, useMemo as b, useState as x } from "react";
18
+ import { Button as S, ToggleButton as C, ToggleButtonGroup as w, Typography as T } from "@mui/material";
19
+ import { jsx as E, jsxs as D } from "react/jsx-runtime";
20
+ import { DragDropProvider as ie } from "@dnd-kit/react";
20
21
  //#region src/components/QueryBuilder/QueryBuilderControls.tsx
21
22
  function O(O) {
22
- let { tree: k, onTreeChange: A, onlyFacetedColumns: j = !1 } = O, { columnModels: M, facetResults: N } = p(), { executeQueryRequest: P } = t(), F = k ?? o(), I = y(() => {
23
- let t = u(F);
24
- P((n) => {
25
- let r = (n.query.additionalFilters ?? []).filter((t) => !e(t)), i = t ? [...r, t] : r;
23
+ let { tree: ae, onTreeChange: k, onlyFacetedColumns: A = !1 } = O, { columnModels: j, facetResults: M } = p(), { executeQueryRequest: N, getCurrentQueryRequest: P } = n(), [F] = x(o), I = ae ?? F, L = b(() => ne(I), [I]), R = b(() => {
24
+ let t = (P().query.additionalFilters ?? []).filter((t) => !e(t));
25
+ return d(L ? [...t, L] : t);
26
+ }, [L, P]), z = re(), B = y(() => {
27
+ N((t) => {
28
+ let n = (t.query.additionalFilters ?? []).filter((t) => !e(t)), r = L ? [...n, L] : n;
26
29
  return {
27
- ...n,
30
+ ...t,
28
31
  query: {
29
- ...n.query,
30
- additionalFilters: i.length > 0 ? i : void 0
32
+ ...t.query,
33
+ additionalFilters: r.length > 0 ? r : void 0
31
34
  }
32
35
  };
33
36
  });
34
- }, [F, P]), { getColumnDisplayName: L } = n(), R = m(M, N), [z, B] = x("plain-english"), V = y((e) => {
35
- A(i(F, e, null, null));
36
- }, [F, A]), H = y((e) => {
37
- A(r(F, e));
38
- }, [F, A]), U = y((e) => {
39
- A(a(F, e));
40
- }, [F, A]), W = y((e, t) => {
41
- A(l(F, e, t));
42
- }, [F, A]), G = y((e) => {
43
- A(s(F, e));
44
- }, [F, A]), K = y((e, t) => {
45
- A(c(F, e, t));
46
- }, [F, A]), q = y((e) => {
47
- A(s(F, e));
48
- }, [F, A]), J = d(F, A), Y = b(() => ({
49
- columnModels: M,
50
- facetResults: N,
51
- onlyFacetedColumns: j,
52
- getColumnDisplayName: L,
53
- getValueDisplayName: R,
54
- addConditionAt: V,
55
- addChildGroupAt: H,
56
- clearGroupAt: U,
57
- updateGroupAt: W,
58
- removeGroupAt: G,
59
- updateConditionAt: K,
60
- removeConditionAt: q
37
+ }, [L, N]), { getColumnDisplayName: V } = t(), H = m(j, M), [U, W] = x("plain-english"), G = y((e) => {
38
+ k(i(I, e, null, null));
39
+ }, [I, k]), K = y((e) => {
40
+ k(r(I, e));
41
+ }, [I, k]), q = y((e) => {
42
+ k(a(I, e));
43
+ }, [I, k]), J = y((e, t) => {
44
+ k(te(I, e, t));
45
+ }, [I, k]), Y = y((e) => {
46
+ k(s(I, e));
47
+ }, [I, k]), X = y((e, t) => {
48
+ k(ee(I, e, t));
49
+ }, [I, k]), Z = y((e) => {
50
+ k(s(I, e));
51
+ }, [I, k]), oe = c(I, k), Q = u(I) >= 50, se = b(() => ({
52
+ columnModels: j,
53
+ facetResults: M,
54
+ onlyFacetedColumns: A,
55
+ isAtLeafPredicateLimit: Q,
56
+ getColumnDisplayName: V,
57
+ getValueDisplayName: H,
58
+ addConditionAt: G,
59
+ addChildGroupAt: K,
60
+ clearGroupAt: q,
61
+ updateGroupAt: J,
62
+ removeGroupAt: Y,
63
+ updateConditionAt: X,
64
+ removeConditionAt: Z
61
65
  }), [
62
- M,
63
- N,
64
66
  j,
65
- L,
66
- R,
67
+ M,
68
+ A,
69
+ Q,
67
70
  V,
68
71
  H,
69
- U,
70
- W,
71
72
  G,
72
73
  K,
73
- q
74
- ]), X = b(() => _(F, L, R), [
75
- F,
76
- L,
77
- R
78
- ]), { data: Z, isPending: Q, error: $ } = f(z === "sql" ? F : null);
79
- return /* @__PURE__ */ T(h, {
80
- value: Y,
81
- children: /* @__PURE__ */ T(D, {
82
- ...J,
83
- children: /* @__PURE__ */ E("div", {
74
+ q,
75
+ J,
76
+ Y,
77
+ X,
78
+ Z
79
+ ]), ce = b(() => _(I, V, H), [
80
+ I,
81
+ V,
82
+ H
83
+ ]), { data: le, isPending: ue, error: $ } = f(U === "sql" ? I : null);
84
+ return /* @__PURE__ */ E(h, {
85
+ value: se,
86
+ children: /* @__PURE__ */ E(ie, {
87
+ ...oe,
88
+ children: /* @__PURE__ */ D("div", {
84
89
  className: v.root,
85
90
  children: [
86
- /* @__PURE__ */ E("div", {
91
+ /* @__PURE__ */ D("div", {
87
92
  className: v.summaryBar,
88
- children: [/* @__PURE__ */ E("div", {
93
+ children: [/* @__PURE__ */ D("div", {
89
94
  className: v.summaryHeader,
90
- children: [/* @__PURE__ */ T("span", {
95
+ children: [/* @__PURE__ */ E("span", {
91
96
  className: v.summaryLabel,
92
97
  children: "Query Summary"
93
- }), /* @__PURE__ */ E(w, {
98
+ }), /* @__PURE__ */ D(w, {
94
99
  className: v.summaryModeToggle,
95
100
  size: "small",
96
101
  exclusive: !0,
97
- value: z,
102
+ value: U,
98
103
  onChange: (e, t) => {
99
- t != null && B(t);
104
+ t != null && W(t);
100
105
  },
101
106
  "aria-label": "Query summary display mode",
102
- children: [/* @__PURE__ */ T(C, {
107
+ children: [/* @__PURE__ */ E(C, {
103
108
  value: "plain-english",
104
109
  "aria-label": "Show summary",
105
110
  children: "Summary"
106
- }), /* @__PURE__ */ T(C, {
111
+ }), /* @__PURE__ */ E(C, {
107
112
  value: "sql",
108
113
  "aria-label": "Show SQL",
109
114
  children: "SQL"
110
115
  })]
111
116
  })]
112
- }), /* @__PURE__ */ T("div", {
117
+ }), /* @__PURE__ */ E("div", {
113
118
  className: v.summaryContent,
114
119
  "aria-live": "polite",
115
120
  "aria-atomic": "true",
116
- children: z === "plain-english" ? X : $ ? /* @__PURE__ */ E("span", {
121
+ children: U === "plain-english" ? ce : $ ? /* @__PURE__ */ D("span", {
117
122
  className: v.sqlError,
118
123
  children: ["Could not load SQL preview: ", $.message]
119
- }) : Q ? /* @__PURE__ */ T("span", {
124
+ }) : ue ? /* @__PURE__ */ E("span", {
120
125
  className: v.sqlPlaceholder,
121
126
  children: "Loading SQL…"
122
- }) : /* @__PURE__ */ T("code", {
127
+ }) : /* @__PURE__ */ E("code", {
123
128
  className: v.sqlText,
124
- children: Z
129
+ children: le
125
130
  })
126
131
  })]
127
132
  }),
128
- /* @__PURE__ */ T(g, {
129
- group: F,
133
+ /* @__PURE__ */ E(g, {
134
+ group: I,
130
135
  isRoot: !0
131
136
  }),
132
- /* @__PURE__ */ T("div", {
137
+ /* @__PURE__ */ D("div", {
133
138
  className: v.applyRow,
134
- children: /* @__PURE__ */ T(S, {
139
+ children: [R && /* @__PURE__ */ E(T, {
140
+ id: z,
141
+ variant: "smallText1",
142
+ color: "error",
143
+ children: l[R]
144
+ }), /* @__PURE__ */ E(S, {
135
145
  variant: "contained",
136
146
  color: "primary",
137
- onClick: I,
147
+ onClick: B,
138
148
  className: v.applyButton,
149
+ disabled: R !== void 0,
150
+ "aria-describedby": R ? z : void 0,
139
151
  children: "Update Results"
140
- })
152
+ })]
141
153
  })
142
154
  ]
143
155
  })
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBuilderControls.js","names":[],"sources":["../../../src/components/QueryBuilder/QueryBuilderControls.tsx"],"sourcesContent":["import { Button, ToggleButton, ToggleButtonGroup } from '@mui/material'\nimport { DragDropProvider } from '@dnd-kit/react'\nimport { useCallback, useMemo, useState } from 'react'\nimport { isFilterGroup } from '../../utils/types/IsType'\nimport { useQueryContext } from '../QueryContext'\nimport { useQueryVisualizationContext } from '../QueryVisualizationWrapper'\nimport { FilterGroupNode } from './FilterGroupNode'\nimport { useQueryBuilderDrag } from './queryBuilderDnd'\nimport { qbNodeToApiFilter } from './queryBuilderTranslation'\nimport { qbTreeToReadable } from './qbTreeToReadable'\nimport { QueryBuilderInternalContextProvider } from './QueryBuilderInternalContext'\nimport styles from './QueryBuilderControls.module.scss'\nimport {\n addChildGroup,\n addConditionToGroup,\n clearGroup,\n defaultQBGroup,\n removeNode,\n updateCondition,\n updateGroup,\n} from './queryBuilderOperations'\nimport { QBCondition, QBGroup } from './QueryBuilderTypes'\nimport { useQBCombinedSql } from './useQBCombinedSql'\nimport { useQBFacetSourceMetadata } from './useQBFacetSourceMetadata'\nimport { useQBValueDisplayName } from './useQBValueDisplayName'\n\nexport type QueryBuilderControlsProps = {\n /** The QB tree. When null, an empty default tree is rendered. */\n tree: QBGroup | null\n /** Called with the next tree after any dispatched edit. */\n onTreeChange: (next: QBGroup) => void\n /**\n * When true, the property picker only offers columns that have facet\n * metadata (Cohort Builder mode). Defaults to false.\n */\n onlyFacetedColumns?: boolean\n}\n\ntype SummaryMode = 'plain-english' | 'sql'\n\n/**\n * Top-level Query Builder panel. Uses `useQBFacetSourceMetadata()` — must be\n * rendered inside the Suspense boundary that already wraps\n * `QueryVisualizationWrapper` in `QueryWrapperPlotNav`. Facet metadata is\n * pulled from a companion query that strips the QB's own `FilterGroup` out\n * of `additionalFilters` so pill values remain stable while the user builds.\n */\nexport function QueryBuilderControls(props: QueryBuilderControlsProps) {\n const { tree, onTreeChange, onlyFacetedColumns = false } = props\n const { columnModels, facetResults } = useQBFacetSourceMetadata()\n const { executeQueryRequest } = useQueryContext()\n\n const activeTree = tree ?? defaultQBGroup()\n\n const onApply = useCallback(() => {\n const filterGroup = qbNodeToApiFilter(activeTree)\n executeQueryRequest(prev => {\n // Preserve any non-QB additionalFilters (e.g. lockedColumn constraints\n // introduced by portal detail pages) — Update Results only owns the\n // FilterGroup slot.\n const preserved = (prev.query.additionalFilters ?? []).filter(\n f => !isFilterGroup(f),\n )\n const next = filterGroup ? [...preserved, filterGroup] : preserved\n return {\n ...prev,\n query: {\n ...prev.query,\n additionalFilters: next.length > 0 ? next : undefined,\n },\n }\n })\n }, [activeTree, executeQueryRequest])\n\n const { getColumnDisplayName } = useQueryVisualizationContext()\n const getValueDisplayName = useQBValueDisplayName(columnModels, facetResults)\n\n const [summaryMode, setSummaryMode] = useState<SummaryMode>('plain-english')\n\n const addConditionAt = useCallback(\n (groupId: string) => {\n onTreeChange(addConditionToGroup(activeTree, groupId, null, null))\n },\n [activeTree, onTreeChange],\n )\n const addChildGroupAt = useCallback(\n (groupId: string) => {\n onTreeChange(addChildGroup(activeTree, groupId))\n },\n [activeTree, onTreeChange],\n )\n const clearGroupAt = useCallback(\n (groupId: string) => {\n onTreeChange(clearGroup(activeTree, groupId))\n },\n [activeTree, onTreeChange],\n )\n const updateGroupAt = useCallback(\n (\n groupId: string,\n patch: Partial<Omit<QBGroup, 'kind' | 'id' | 'children'>>,\n ) => {\n onTreeChange(updateGroup(activeTree, groupId, patch))\n },\n [activeTree, onTreeChange],\n )\n const removeGroupAt = useCallback(\n (groupId: string) => {\n onTreeChange(removeNode(activeTree, groupId))\n },\n [activeTree, onTreeChange],\n )\n const updateConditionAt = useCallback(\n (conditionId: string, patch: Partial<Omit<QBCondition, 'kind' | 'id'>>) => {\n onTreeChange(updateCondition(activeTree, conditionId, patch))\n },\n [activeTree, onTreeChange],\n )\n const removeConditionAt = useCallback(\n (conditionId: string) => {\n onTreeChange(removeNode(activeTree, conditionId))\n },\n [activeTree, onTreeChange],\n )\n const dragHandlers = useQueryBuilderDrag(activeTree, onTreeChange)\n\n const contextValue = useMemo(\n () => ({\n columnModels,\n facetResults,\n onlyFacetedColumns,\n getColumnDisplayName,\n getValueDisplayName,\n addConditionAt,\n addChildGroupAt,\n clearGroupAt,\n updateGroupAt,\n removeGroupAt,\n updateConditionAt,\n removeConditionAt,\n }),\n [\n columnModels,\n facetResults,\n onlyFacetedColumns,\n getColumnDisplayName,\n getValueDisplayName,\n addConditionAt,\n addChildGroupAt,\n clearGroupAt,\n updateGroupAt,\n removeGroupAt,\n updateConditionAt,\n removeConditionAt,\n ],\n )\n\n const readable = useMemo(\n () =>\n qbTreeToReadable(activeTree, getColumnDisplayName, getValueDisplayName),\n [activeTree, getColumnDisplayName, getValueDisplayName],\n )\n\n const {\n data: combinedSql,\n isPending: isSqlPending,\n error: sqlError,\n } = useQBCombinedSql(summaryMode === 'sql' ? activeTree : null)\n\n return (\n <QueryBuilderInternalContextProvider value={contextValue}>\n <DragDropProvider {...dragHandlers}>\n <div className={styles.root}>\n <div className={styles.summaryBar}>\n <div className={styles.summaryHeader}>\n <span className={styles.summaryLabel}>Query Summary</span>\n <ToggleButtonGroup\n className={styles.summaryModeToggle}\n size=\"small\"\n exclusive\n value={summaryMode}\n onChange={(_event, next: SummaryMode | null) => {\n if (next != null) setSummaryMode(next)\n }}\n aria-label=\"Query summary display mode\"\n >\n <ToggleButton value=\"plain-english\" aria-label=\"Show summary\">\n Summary\n </ToggleButton>\n <ToggleButton value=\"sql\" aria-label=\"Show SQL\">\n SQL\n </ToggleButton>\n </ToggleButtonGroup>\n </div>\n <div\n className={styles.summaryContent}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {summaryMode === 'plain-english' ? (\n readable\n ) : sqlError ? (\n <span className={styles.sqlError}>\n Could not load SQL preview: {sqlError.message}\n </span>\n ) : isSqlPending ? (\n <span className={styles.sqlPlaceholder}>Loading SQL…</span>\n ) : (\n <code className={styles.sqlText}>{combinedSql}</code>\n )}\n </div>\n </div>\n\n <FilterGroupNode group={activeTree} isRoot />\n\n <div className={styles.applyRow}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={onApply}\n className={styles.applyButton}\n >\n Update Results\n </Button>\n </div>\n </div>\n </DragDropProvider>\n </QueryBuilderInternalContextProvider>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"QueryBuilderControls.js","names":[],"sources":["../../../src/components/QueryBuilder/QueryBuilderControls.tsx"],"sourcesContent":["import {\n Button,\n ToggleButton,\n ToggleButtonGroup,\n Typography,\n} from '@mui/material'\nimport { DragDropProvider } from '@dnd-kit/react'\nimport { useCallback, useId, useMemo, useState } from 'react'\nimport { isFilterGroup } from '../../utils/types/IsType'\nimport { useQueryContext } from '../QueryContext'\nimport { useQueryVisualizationContext } from '../QueryVisualizationWrapper'\nimport { FilterGroupNode } from './FilterGroupNode'\nimport { useQueryBuilderDrag } from './queryBuilderDnd'\nimport { qbNodeToApiFilter } from './queryBuilderTranslation'\nimport { qbTreeToReadable } from './qbTreeToReadable'\nimport { QueryBuilderInternalContextProvider } from './QueryBuilderInternalContext'\nimport {\n countQBLeafPredicates,\n FILTER_LIMIT_VIOLATION_MESSAGES,\n findFilterLimitViolation,\n MAX_FILTER_LEAF_PREDICATES,\n} from './queryBuilderLimits'\nimport styles from './QueryBuilderControls.module.scss'\nimport {\n addChildGroup,\n addConditionToGroup,\n clearGroup,\n defaultQBGroup,\n removeNode,\n updateCondition,\n updateGroup,\n} from './queryBuilderOperations'\nimport { QBCondition, QBGroup } from './QueryBuilderTypes'\nimport { useQBCombinedSql } from './useQBCombinedSql'\nimport { useQBFacetSourceMetadata } from './useQBFacetSourceMetadata'\nimport { useQBValueDisplayName } from './useQBValueDisplayName'\n\nexport type QueryBuilderControlsProps = {\n /** The QB tree. When null, an empty default tree is rendered. */\n tree: QBGroup | null\n /** Called with the next tree after any dispatched edit. */\n onTreeChange: (next: QBGroup) => void\n /**\n * When true, the property picker only offers columns that have facet\n * metadata (Cohort Builder mode). Defaults to false.\n */\n onlyFacetedColumns?: boolean\n}\n\ntype SummaryMode = 'plain-english' | 'sql'\n\n/**\n * Top-level Query Builder panel. Uses `useQBFacetSourceMetadata()` — must be\n * rendered inside the Suspense boundary that already wraps\n * `QueryVisualizationWrapper` in `QueryWrapperPlotNav`. Facet metadata is\n * pulled from a companion query that strips the QB's own `FilterGroup` out\n * of `additionalFilters` so pill values remain stable while the user builds.\n */\nexport function QueryBuilderControls(props: QueryBuilderControlsProps) {\n const { tree, onTreeChange, onlyFacetedColumns = false } = props\n const { columnModels, facetResults } = useQBFacetSourceMetadata()\n const { executeQueryRequest, getCurrentQueryRequest } = useQueryContext()\n\n // Created once: defaultQBGroup() makes new node IDs, which would remount every row on each render.\n const [defaultTree] = useState(defaultQBGroup)\n const activeTree = tree ?? defaultTree\n const filterGroup = useMemo(() => qbNodeToApiFilter(activeTree), [activeTree])\n\n // Validate everything Update Results would send: non-QB filters count toward the server's limits too.\n const limitViolation = useMemo(() => {\n const preserved = (\n getCurrentQueryRequest().query.additionalFilters ?? []\n ).filter(f => !isFilterGroup(f))\n return findFilterLimitViolation(\n filterGroup ? [...preserved, filterGroup] : preserved,\n )\n }, [filterGroup, getCurrentQueryRequest])\n const limitViolationMessageId = useId()\n\n const onApply = useCallback(() => {\n executeQueryRequest(prev => {\n // Preserve any non-QB additionalFilters (e.g. lockedColumn constraints\n // introduced by portal detail pages) — Update Results only owns the\n // FilterGroup slot.\n const preserved = (prev.query.additionalFilters ?? []).filter(\n f => !isFilterGroup(f),\n )\n const next = filterGroup ? [...preserved, filterGroup] : preserved\n return {\n ...prev,\n query: {\n ...prev.query,\n additionalFilters: next.length > 0 ? next : undefined,\n },\n }\n })\n }, [filterGroup, executeQueryRequest])\n\n const { getColumnDisplayName } = useQueryVisualizationContext()\n const getValueDisplayName = useQBValueDisplayName(columnModels, facetResults)\n\n const [summaryMode, setSummaryMode] = useState<SummaryMode>('plain-english')\n\n const addConditionAt = useCallback(\n (groupId: string) => {\n onTreeChange(addConditionToGroup(activeTree, groupId, null, null))\n },\n [activeTree, onTreeChange],\n )\n const addChildGroupAt = useCallback(\n (groupId: string) => {\n onTreeChange(addChildGroup(activeTree, groupId))\n },\n [activeTree, onTreeChange],\n )\n const clearGroupAt = useCallback(\n (groupId: string) => {\n onTreeChange(clearGroup(activeTree, groupId))\n },\n [activeTree, onTreeChange],\n )\n const updateGroupAt = useCallback(\n (\n groupId: string,\n patch: Partial<Omit<QBGroup, 'kind' | 'id' | 'children'>>,\n ) => {\n onTreeChange(updateGroup(activeTree, groupId, patch))\n },\n [activeTree, onTreeChange],\n )\n const removeGroupAt = useCallback(\n (groupId: string) => {\n onTreeChange(removeNode(activeTree, groupId))\n },\n [activeTree, onTreeChange],\n )\n const updateConditionAt = useCallback(\n (conditionId: string, patch: Partial<Omit<QBCondition, 'kind' | 'id'>>) => {\n onTreeChange(updateCondition(activeTree, conditionId, patch))\n },\n [activeTree, onTreeChange],\n )\n const removeConditionAt = useCallback(\n (conditionId: string) => {\n onTreeChange(removeNode(activeTree, conditionId))\n },\n [activeTree, onTreeChange],\n )\n const dragHandlers = useQueryBuilderDrag(activeTree, onTreeChange)\n\n const isAtLeafPredicateLimit =\n countQBLeafPredicates(activeTree) >= MAX_FILTER_LEAF_PREDICATES\n\n const contextValue = useMemo(\n () => ({\n columnModels,\n facetResults,\n onlyFacetedColumns,\n isAtLeafPredicateLimit,\n getColumnDisplayName,\n getValueDisplayName,\n addConditionAt,\n addChildGroupAt,\n clearGroupAt,\n updateGroupAt,\n removeGroupAt,\n updateConditionAt,\n removeConditionAt,\n }),\n [\n columnModels,\n facetResults,\n onlyFacetedColumns,\n isAtLeafPredicateLimit,\n getColumnDisplayName,\n getValueDisplayName,\n addConditionAt,\n addChildGroupAt,\n clearGroupAt,\n updateGroupAt,\n removeGroupAt,\n updateConditionAt,\n removeConditionAt,\n ],\n )\n\n const readable = useMemo(\n () =>\n qbTreeToReadable(activeTree, getColumnDisplayName, getValueDisplayName),\n [activeTree, getColumnDisplayName, getValueDisplayName],\n )\n\n const {\n data: combinedSql,\n isPending: isSqlPending,\n error: sqlError,\n } = useQBCombinedSql(summaryMode === 'sql' ? activeTree : null)\n\n return (\n <QueryBuilderInternalContextProvider value={contextValue}>\n <DragDropProvider {...dragHandlers}>\n <div className={styles.root}>\n <div className={styles.summaryBar}>\n <div className={styles.summaryHeader}>\n <span className={styles.summaryLabel}>Query Summary</span>\n <ToggleButtonGroup\n className={styles.summaryModeToggle}\n size=\"small\"\n exclusive\n value={summaryMode}\n onChange={(_event, next: SummaryMode | null) => {\n if (next != null) setSummaryMode(next)\n }}\n aria-label=\"Query summary display mode\"\n >\n <ToggleButton value=\"plain-english\" aria-label=\"Show summary\">\n Summary\n </ToggleButton>\n <ToggleButton value=\"sql\" aria-label=\"Show SQL\">\n SQL\n </ToggleButton>\n </ToggleButtonGroup>\n </div>\n <div\n className={styles.summaryContent}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {summaryMode === 'plain-english' ? (\n readable\n ) : sqlError ? (\n <span className={styles.sqlError}>\n Could not load SQL preview: {sqlError.message}\n </span>\n ) : isSqlPending ? (\n <span className={styles.sqlPlaceholder}>Loading SQL…</span>\n ) : (\n <code className={styles.sqlText}>{combinedSql}</code>\n )}\n </div>\n </div>\n\n <FilterGroupNode group={activeTree} isRoot />\n\n <div className={styles.applyRow}>\n {limitViolation && (\n <Typography\n id={limitViolationMessageId}\n variant=\"smallText1\"\n color=\"error\"\n >\n {FILTER_LIMIT_VIOLATION_MESSAGES[limitViolation]}\n </Typography>\n )}\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={onApply}\n className={styles.applyButton}\n disabled={limitViolation !== undefined}\n aria-describedby={\n limitViolation ? limitViolationMessageId : undefined\n }\n >\n Update Results\n </Button>\n </div>\n </div>\n </DragDropProvider>\n </QueryBuilderInternalContextProvider>\n )\n}\n"],"mappings":"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"}
@@ -1,15 +1,15 @@
1
1
  import './QueryBuilderControls.css';var e = {
2
- root: "_root_x90xm_1",
3
- applyRow: "_applyRow_x90xm_11",
4
- applyButton: "_applyButton_x90xm_16",
5
- summaryBar: "_summaryBar_x90xm_20",
6
- summaryHeader: "_summaryHeader_x90xm_31",
7
- summaryLabel: "_summaryLabel_x90xm_38",
8
- summaryContent: "_summaryContent_x90xm_46",
9
- summaryModeToggle: "_summaryModeToggle_x90xm_52",
10
- sqlPlaceholder: "_sqlPlaceholder_x90xm_61",
11
- sqlText: "_sqlText_x90xm_66",
12
- sqlError: "_sqlError_x90xm_75"
2
+ root: "_root_1wpms_1",
3
+ applyRow: "_applyRow_1wpms_11",
4
+ applyButton: "_applyButton_1wpms_18",
5
+ summaryBar: "_summaryBar_1wpms_22",
6
+ summaryHeader: "_summaryHeader_1wpms_33",
7
+ summaryLabel: "_summaryLabel_1wpms_40",
8
+ summaryContent: "_summaryContent_1wpms_48",
9
+ summaryModeToggle: "_summaryModeToggle_1wpms_54",
10
+ sqlPlaceholder: "_sqlPlaceholder_1wpms_63",
11
+ sqlText: "_sqlText_1wpms_68",
12
+ sqlError: "_sqlError_1wpms_77"
13
13
  };
14
14
  //#endregion
15
15
  export { e as default };
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBuilderControls.module.js","names":[],"sources":["../../../src/components/QueryBuilder/QueryBuilderControls.module.scss"],"sourcesContent":[".root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n background: var(--synapse-background-color-gray-light);\n border: 1px solid var(--synapse-border-color-gray);\n border-radius: 4px;\n}\n\n.applyRow {\n display: flex;\n justify-content: flex-end;\n}\n\n.applyButton {\n text-transform: none;\n}\n\n.summaryBar {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 6px;\n padding: 8px 12px;\n background: white;\n border: 1px solid var(--synapse-border-color-gray);\n border-radius: 4px;\n}\n\n.summaryHeader {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n}\n\n.summaryLabel {\n font-weight: 700;\n text-transform: uppercase;\n font-size: 11px;\n letter-spacing: 0.5px;\n color: var(--synapse-gray-regular);\n}\n\n.summaryContent {\n font-size: 14px;\n line-height: 1.5;\n word-break: break-word;\n}\n\n.summaryModeToggle {\n flex-shrink: 0;\n\n :global(.MuiToggleButton-root) {\n text-transform: none;\n padding: 2px 12px;\n font-size: 12px;\n }\n}\n\n.sqlPlaceholder {\n color: var(--synapse-gray-deemphasized);\n font-style: italic;\n}\n\n.sqlText {\n display: block;\n font-family: var(--synapse-font-family-mono, monospace);\n font-size: 12px;\n white-space: pre-wrap;\n word-break: break-word;\n color: var(--synapse-gray-1000);\n}\n\n.sqlError {\n color: var(--synapse-error);\n font-size: 13px;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"QueryBuilderControls.module.js","names":[],"sources":["../../../src/components/QueryBuilder/QueryBuilderControls.module.scss"],"sourcesContent":[".root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n background: var(--synapse-background-color-gray-light);\n border: 1px solid var(--synapse-border-color-gray);\n border-radius: 4px;\n}\n\n.applyRow {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 12px;\n}\n\n.applyButton {\n text-transform: none;\n}\n\n.summaryBar {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 6px;\n padding: 8px 12px;\n background: white;\n border: 1px solid var(--synapse-border-color-gray);\n border-radius: 4px;\n}\n\n.summaryHeader {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n}\n\n.summaryLabel {\n font-weight: 700;\n text-transform: uppercase;\n font-size: 11px;\n letter-spacing: 0.5px;\n color: var(--synapse-gray-regular);\n}\n\n.summaryContent {\n font-size: 14px;\n line-height: 1.5;\n word-break: break-word;\n}\n\n.summaryModeToggle {\n flex-shrink: 0;\n\n :global(.MuiToggleButton-root) {\n text-transform: none;\n padding: 2px 12px;\n font-size: 12px;\n }\n}\n\n.sqlPlaceholder {\n color: var(--synapse-gray-deemphasized);\n font-style: italic;\n}\n\n.sqlText {\n display: block;\n font-family: var(--synapse-font-family-mono, monospace);\n font-size: 12px;\n white-space: pre-wrap;\n word-break: break-word;\n color: var(--synapse-gray-1000);\n}\n\n.sqlError {\n color: var(--synapse-error);\n font-size: 13px;\n}\n"],"mappings":""}
@@ -11,6 +11,8 @@
11
11
  .applyRow {
12
12
  display: flex;
13
13
  justify-content: flex-end;
14
+ align-items: center;
15
+ gap: 12px;
14
16
  }
15
17
 
16
18
  .applyButton {
@@ -18,6 +18,8 @@ export type QueryBuilderInternalContextType = {
18
18
  * metadata. Cohort Builder sets this true.
19
19
  */
20
20
  onlyFacetedColumns: boolean;
21
+ /** True when the tree already sends the maximum number of leaf predicates, so no condition can be added. */
22
+ isAtLeafPredicateLimit: boolean;
21
23
  /**
22
24
  * Returns the user-facing label for a column — resolves `columnAliases`
23
25
  * first, then falls back to `unCamelCase(name)`. Wired from
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBuilderInternalContext.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/QueryBuilderInternalContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAChF,OAAO,EAAiB,iBAAiB,EAAc,MAAM,OAAO,CAAA;AACpE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAE9D;;;;;GAKG;AACH,MAAM,MAAM,+BAA+B,GAAG;IAC5C,mEAAmE;IACnE,YAAY,EAAE,WAAW,EAAE,CAAA;IAC3B,0EAA0E;IAC1E,YAAY,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAC1C;;;OAGG;IACH,kBAAkB,EAAE,OAAO,CAAA;IAC3B;;;;OAIG;IACH,oBAAoB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAA;IACpD;;;;OAIG;IACH,mBAAmB,EAAE,oBAAoB,CAAA;IAGzC,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,aAAa,EAAE,CACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,KACtD,IAAI,CAAA;IACT,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAGxC,iBAAiB,EAAE,CACjB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,KAC7C,IAAI,CAAA;IACT,iBAAiB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;CACjD,CAAA;AAKD,MAAM,MAAM,wCAAwC,GAAG,iBAAiB,CAAC;IACvE,KAAK,EAAE,+BAA+B,CAAA;CACvC,CAAC,CAAA;AAEF,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,wCAAwC,2CAOhD;AAED,wBAAgB,8BAA8B,IAAI,+BAA+B,CAQhF"}
1
+ {"version":3,"file":"QueryBuilderInternalContext.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/QueryBuilderInternalContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAChF,OAAO,EAAiB,iBAAiB,EAAc,MAAM,OAAO,CAAA;AACpE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAE9D;;;;;GAKG;AACH,MAAM,MAAM,+BAA+B,GAAG;IAC5C,mEAAmE;IACnE,YAAY,EAAE,WAAW,EAAE,CAAA;IAC3B,0EAA0E;IAC1E,YAAY,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAC1C;;;OAGG;IACH,kBAAkB,EAAE,OAAO,CAAA;IAC3B,4GAA4G;IAC5G,sBAAsB,EAAE,OAAO,CAAA;IAC/B;;;;OAIG;IACH,oBAAoB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAA;IACpD;;;;OAIG;IACH,mBAAmB,EAAE,oBAAoB,CAAA;IAGzC,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,aAAa,EAAE,CACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,KACtD,IAAI,CAAA;IACT,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAGxC,iBAAiB,EAAE,CACjB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,KAC7C,IAAI,CAAA;IACT,iBAAiB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;CACjD,CAAA;AAKD,MAAM,MAAM,wCAAwC,GAAG,iBAAiB,CAAC;IACvE,KAAK,EAAE,+BAA+B,CAAA;CACvC,CAAC,CAAA;AAEF,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,wCAAwC,2CAOhD;AAED,wBAAgB,8BAA8B,IAAI,+BAA+B,CAQhF"}
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBuilderInternalContext.js","names":[],"sources":["../../../src/components/QueryBuilder/QueryBuilderInternalContext.tsx"],"sourcesContent":["import { ColumnModel, FacetColumnResult } from '@sage-bionetworks/synapse-types'\nimport { createContext, PropsWithChildren, useContext } from 'react'\nimport { QBCondition, QBGroup } from './QueryBuilderTypes'\nimport { QBValueDisplayNameFn } from './useQBValueDisplayName'\n\n/**\n * Internal-only context shared between `QueryBuilderControls`,\n * `FilterGroupNode`, and `FilterConditionRow`. Exposes the dispatch surface\n * for tree edits + the query metadata each row needs (column models, facet\n * results, and the Cohort Builder `onlyFacetedColumns` toggle).\n */\nexport type QueryBuilderInternalContextType = {\n /** All columns available in the query (unfiltered by faceting). */\n columnModels: ColumnModel[]\n /** Facet results keyed by column name (used to populate pill choices). */\n facetResults: readonly FacetColumnResult[]\n /**\n * When true, the property picker only offers columns that have facet\n * metadata. Cohort Builder sets this true.\n */\n onlyFacetedColumns: boolean\n /**\n * Returns the user-facing label for a column — resolves `columnAliases`\n * first, then falls back to `unCamelCase(name)`. Wired from\n * `QueryVisualizationContext.getColumnDisplayName` when available.\n */\n getColumnDisplayName: (columnName: string) => string\n /**\n * Returns the user-facing label for a value of the given column — resolves\n * Synapse IDs to entity/user/evaluation names, and the backend's\n * `VALUE_NOT_SET` sentinel to `Not Assigned`.\n */\n getValueDisplayName: QBValueDisplayNameFn\n\n // -- Group operations --\n addConditionAt: (groupId: string) => void\n addChildGroupAt: (groupId: string) => void\n clearGroupAt: (groupId: string) => void\n updateGroupAt: (\n groupId: string,\n patch: Partial<Omit<QBGroup, 'kind' | 'id' | 'children'>>,\n ) => void\n removeGroupAt: (groupId: string) => void\n\n // -- Condition operations --\n updateConditionAt: (\n conditionId: string,\n patch: Partial<Omit<QBCondition, 'kind' | 'id'>>,\n ) => void\n removeConditionAt: (conditionId: string) => void\n}\n\nconst QueryBuilderInternalContext =\n createContext<QueryBuilderInternalContextType | null>(null)\n\nexport type QueryBuilderInternalContextProviderProps = PropsWithChildren<{\n value: QueryBuilderInternalContextType\n}>\n\nexport function QueryBuilderInternalContextProvider(\n props: QueryBuilderInternalContextProviderProps,\n) {\n return (\n <QueryBuilderInternalContext.Provider value={props.value}>\n {props.children}\n </QueryBuilderInternalContext.Provider>\n )\n}\n\nexport function useQueryBuilderInternalContext(): QueryBuilderInternalContextType {\n const context = useContext(QueryBuilderInternalContext)\n if (context == null) {\n throw new Error(\n 'QueryBuilderInternalContext missing — must be rendered inside QueryBuilderControls',\n )\n }\n return context\n}\n"],"mappings":";;;AAoDA,IAAM,IACJ,EAAsD,IAAI;AAM5D,SAAgB,EACd,GACA;CACA,OACE,kBAAC,EAA4B,UAA7B;EAAsC,OAAO,EAAM;YAChD,EAAM;CAC6B,CAAA;AAE1C;AAEA,SAAgB,IAAkE;CAChF,IAAM,IAAU,EAAW,CAA2B;CACtD,IAAI,KAAW,MACb,MAAU,MACR,oFACF;CAEF,OAAO;AACT"}
1
+ {"version":3,"file":"QueryBuilderInternalContext.js","names":[],"sources":["../../../src/components/QueryBuilder/QueryBuilderInternalContext.tsx"],"sourcesContent":["import { ColumnModel, FacetColumnResult } from '@sage-bionetworks/synapse-types'\nimport { createContext, PropsWithChildren, useContext } from 'react'\nimport { QBCondition, QBGroup } from './QueryBuilderTypes'\nimport { QBValueDisplayNameFn } from './useQBValueDisplayName'\n\n/**\n * Internal-only context shared between `QueryBuilderControls`,\n * `FilterGroupNode`, and `FilterConditionRow`. Exposes the dispatch surface\n * for tree edits + the query metadata each row needs (column models, facet\n * results, and the Cohort Builder `onlyFacetedColumns` toggle).\n */\nexport type QueryBuilderInternalContextType = {\n /** All columns available in the query (unfiltered by faceting). */\n columnModels: ColumnModel[]\n /** Facet results keyed by column name (used to populate pill choices). */\n facetResults: readonly FacetColumnResult[]\n /**\n * When true, the property picker only offers columns that have facet\n * metadata. Cohort Builder sets this true.\n */\n onlyFacetedColumns: boolean\n /** True when the tree already sends the maximum number of leaf predicates, so no condition can be added. */\n isAtLeafPredicateLimit: boolean\n /**\n * Returns the user-facing label for a column — resolves `columnAliases`\n * first, then falls back to `unCamelCase(name)`. Wired from\n * `QueryVisualizationContext.getColumnDisplayName` when available.\n */\n getColumnDisplayName: (columnName: string) => string\n /**\n * Returns the user-facing label for a value of the given column — resolves\n * Synapse IDs to entity/user/evaluation names, and the backend's\n * `VALUE_NOT_SET` sentinel to `Not Assigned`.\n */\n getValueDisplayName: QBValueDisplayNameFn\n\n // -- Group operations --\n addConditionAt: (groupId: string) => void\n addChildGroupAt: (groupId: string) => void\n clearGroupAt: (groupId: string) => void\n updateGroupAt: (\n groupId: string,\n patch: Partial<Omit<QBGroup, 'kind' | 'id' | 'children'>>,\n ) => void\n removeGroupAt: (groupId: string) => void\n\n // -- Condition operations --\n updateConditionAt: (\n conditionId: string,\n patch: Partial<Omit<QBCondition, 'kind' | 'id'>>,\n ) => void\n removeConditionAt: (conditionId: string) => void\n}\n\nconst QueryBuilderInternalContext =\n createContext<QueryBuilderInternalContextType | null>(null)\n\nexport type QueryBuilderInternalContextProviderProps = PropsWithChildren<{\n value: QueryBuilderInternalContextType\n}>\n\nexport function QueryBuilderInternalContextProvider(\n props: QueryBuilderInternalContextProviderProps,\n) {\n return (\n <QueryBuilderInternalContext.Provider value={props.value}>\n {props.children}\n </QueryBuilderInternalContext.Provider>\n )\n}\n\nexport function useQueryBuilderInternalContext(): QueryBuilderInternalContextType {\n const context = useContext(QueryBuilderInternalContext)\n if (context == null) {\n throw new Error(\n 'QueryBuilderInternalContext missing — must be rendered inside QueryBuilderControls',\n )\n }\n return context\n}\n"],"mappings":";;;AAsDA,IAAM,IACJ,EAAsD,IAAI;AAM5D,SAAgB,EACd,GACA;CACA,OACE,kBAAC,EAA4B,UAA7B;EAAsC,OAAO,EAAM;YAChD,EAAM;CAC6B,CAAA;AAE1C;AAEA,SAAgB,IAAkE;CAChF,IAAM,IAAU,EAAW,CAA2B;CACtD,IAAI,KAAW,MACb,MAAU,MACR,oFACF;CAEF,OAAO;AACT"}
@@ -0,0 +1,18 @@
1
+ import { QueryFilter } from '@sage-bionetworks/synapse-types';
2
+ import { QBNode } from './QueryBuilderTypes';
3
+ export declare const MAX_FILTER_GROUP_DEPTH = 5;
4
+ export declare const MAX_FILTER_LEAF_PREDICATES = 50;
5
+ export declare const MAX_FILTER_GROUP_CHILDREN = 25;
6
+ export type FilterLimitViolation = 'depth' | 'leafPredicates' | 'groupChildren';
7
+ export declare const FILTER_LIMIT_VIOLATION_MESSAGES: Record<FilterLimitViolation, string>;
8
+ /**
9
+ * Returns the first limit that the given additionalFilters exceed, using the same rules as the server, or undefined
10
+ * if the filters are within all limits.
11
+ */
12
+ export declare function findFilterLimitViolation(additionalFilters: readonly QueryFilter[]): FilterLimitViolation | undefined;
13
+ /**
14
+ * Number of leaf predicates a Query Builder tree sends once every condition is complete: an `is_all_of` condition
15
+ * sends one predicate per value, and every other condition (including an incomplete one) sends one.
16
+ */
17
+ export declare function countQBLeafPredicates(node: QBNode): number;
18
+ //# sourceMappingURL=queryBuilderLimits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryBuilderLimits.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/queryBuilderLimits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAE7D,OAAO,EAAa,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAOvD,eAAO,MAAM,sBAAsB,IAAI,CAAA;AACvC,eAAO,MAAM,0BAA0B,KAAK,CAAA;AAC5C,eAAO,MAAM,yBAAyB,KAAK,CAAA;AAE3C,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,gBAAgB,GAAG,eAAe,CAAA;AAE/E,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAClD,oBAAoB,EACpB,MAAM,CAKP,CAAA;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,iBAAiB,EAAE,SAAS,WAAW,EAAE,GACxC,oBAAoB,GAAG,SAAS,CAelC;AA4BD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ1D"}
@@ -0,0 +1,38 @@
1
+ import { isFilterGroup as e } from "../../utils/types/IsType.js";
2
+ import { isQBGroup as t } from "./QueryBuilderTypes.js";
3
+ //#region src/components/QueryBuilder/queryBuilderLimits.ts
4
+ var n = 5, r = 50, i = 25, a = {
5
+ depth: "Groups can be nested at most 5 levels deep.",
6
+ leafPredicates: "A query can contain at most 50 conditions.",
7
+ groupChildren: "A group can contain at most 25 conditions or groups."
8
+ };
9
+ function o(e) {
10
+ if (e.length > 25) return "groupChildren";
11
+ let t = 0;
12
+ for (let n of e) {
13
+ let e = s(n, 1);
14
+ if (typeof e == "string") return e;
15
+ t += e;
16
+ }
17
+ return t > 50 ? "leafPredicates" : void 0;
18
+ }
19
+ function s(t, n) {
20
+ if (!e(t)) return 1;
21
+ if (n > 5) return "depth";
22
+ let r = t.children ?? [];
23
+ if (r.length > 25) return "groupChildren";
24
+ let i = 0;
25
+ for (let e of r) {
26
+ let t = s(e, n + 1);
27
+ if (typeof t == "string") return t;
28
+ i += t;
29
+ }
30
+ return i;
31
+ }
32
+ function c(e) {
33
+ return t(e) ? e.children.reduce((e, t) => e + c(t), 0) : e.op === "is_all_of" ? Math.max(e.values.length, 1) : 1;
34
+ }
35
+ //#endregion
36
+ export { a as FILTER_LIMIT_VIOLATION_MESSAGES, i as MAX_FILTER_GROUP_CHILDREN, n as MAX_FILTER_GROUP_DEPTH, r as MAX_FILTER_LEAF_PREDICATES, c as countQBLeafPredicates, o as findFilterLimitViolation };
37
+
38
+ //# sourceMappingURL=queryBuilderLimits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryBuilderLimits.js","names":[],"sources":["../../../src/components/QueryBuilder/queryBuilderLimits.ts"],"sourcesContent":["import { QueryFilter } from '@sage-bionetworks/synapse-types'\nimport { isFilterGroup } from '../../utils/types/IsType'\nimport { isQBGroup, QBNode } from './QueryBuilderTypes'\n\n/*\n * Server-side bounds on a query's additionalFilters tree (design doc §7.5; PLFM-9755). A FilterGroup placed directly\n * in additionalFilters is at depth 1, and the additionalFilters list itself counts as a group for the children limit.\n * The server rejects a query that exceeds any of them with HTTP 400.\n */\nexport const MAX_FILTER_GROUP_DEPTH = 5\nexport const MAX_FILTER_LEAF_PREDICATES = 50\nexport const MAX_FILTER_GROUP_CHILDREN = 25\n\nexport type FilterLimitViolation = 'depth' | 'leafPredicates' | 'groupChildren'\n\nexport const FILTER_LIMIT_VIOLATION_MESSAGES: Record<\n FilterLimitViolation,\n string\n> = {\n depth: `Groups can be nested at most ${MAX_FILTER_GROUP_DEPTH} levels deep.`,\n leafPredicates: `A query can contain at most ${MAX_FILTER_LEAF_PREDICATES} conditions.`,\n groupChildren: `A group can contain at most ${MAX_FILTER_GROUP_CHILDREN} conditions or groups.`,\n}\n\n/**\n * Returns the first limit that the given additionalFilters exceed, using the same rules as the server, or undefined\n * if the filters are within all limits.\n */\nexport function findFilterLimitViolation(\n additionalFilters: readonly QueryFilter[],\n): FilterLimitViolation | undefined {\n if (additionalFilters.length > MAX_FILTER_GROUP_CHILDREN) {\n return 'groupChildren'\n }\n let leafPredicateCount = 0\n for (const filter of additionalFilters) {\n const result = measureFilter(filter, 1)\n if (typeof result === 'string') {\n return result\n }\n leafPredicateCount += result\n }\n return leafPredicateCount > MAX_FILTER_LEAF_PREDICATES\n ? 'leafPredicates'\n : undefined\n}\n\n/** Returns the filter's leaf predicate count, or the first depth / children limit it exceeds. */\nfunction measureFilter(\n filter: QueryFilter,\n depth: number,\n): number | FilterLimitViolation {\n if (!isFilterGroup(filter)) {\n return 1\n }\n if (depth > MAX_FILTER_GROUP_DEPTH) {\n return 'depth'\n }\n const children = filter.children ?? []\n if (children.length > MAX_FILTER_GROUP_CHILDREN) {\n return 'groupChildren'\n }\n let leafPredicateCount = 0\n for (const child of children) {\n const result = measureFilter(child, depth + 1)\n if (typeof result === 'string') {\n return result\n }\n leafPredicateCount += result\n }\n return leafPredicateCount\n}\n\n/**\n * Number of leaf predicates a Query Builder tree sends once every condition is complete: an `is_all_of` condition\n * sends one predicate per value, and every other condition (including an incomplete one) sends one.\n */\nexport function countQBLeafPredicates(node: QBNode): number {\n if (isQBGroup(node)) {\n return node.children.reduce(\n (count, child) => count + countQBLeafPredicates(child),\n 0,\n )\n }\n return node.op === 'is_all_of' ? Math.max(node.values.length, 1) : 1\n}\n"],"mappings":";;;AASA,IAAa,IAAyB,GACzB,IAA6B,IAC7B,IAA4B,IAI5B,IAGT;CACF,OAAO;CACP,gBAAgB;CAChB,eAAe;AACjB;AAMA,SAAgB,EACd,GACkC;CAClC,IAAI,EAAkB,SAAA,IACpB,OAAO;CAET,IAAI,IAAqB;CACzB,KAAK,IAAM,KAAU,GAAmB;EACtC,IAAM,IAAS,EAAc,GAAQ,CAAC;EACtC,IAAI,OAAO,KAAW,UACpB,OAAO;EAET,KAAsB;CACxB;CACA,OAAO,IAAA,KACH,mBACA,KAAA;AACN;AAGA,SAAS,EACP,GACA,GAC+B;CAC/B,IAAI,CAAC,EAAc,CAAM,GACvB,OAAO;CAET,IAAI,IAAA,GACF,OAAO;CAET,IAAM,IAAW,EAAO,YAAY,CAAC;CACrC,IAAI,EAAS,SAAA,IACX,OAAO;CAET,IAAI,IAAqB;CACzB,KAAK,IAAM,KAAS,GAAU;EAC5B,IAAM,IAAS,EAAc,GAAO,IAAQ,CAAC;EAC7C,IAAI,OAAO,KAAW,UACpB,OAAO;EAET,KAAsB;CACxB;CACA,OAAO;AACT;AAMA,SAAgB,EAAsB,GAAsB;CAO1D,OANI,EAAU,CAAI,IACT,EAAK,SAAS,QAClB,GAAO,MAAU,IAAQ,EAAsB,CAAK,GACrD,CACF,IAEK,EAAK,OAAO,cAAc,KAAK,IAAI,EAAK,OAAO,QAAQ,CAAC,IAAI;AACrE"}
@@ -1,12 +1,4 @@
1
- /**
2
- * Column-kind classification and operator availability per kind. The QB uses
3
- * this both to populate the operator picker dropdown and to decide what shape
4
- * of value input to render.
5
- */
6
- import { FacetColumnResult, FacetColumnResultValues } from '@sage-bionetworks/synapse-types';
7
1
  import { QBConditionOp } from './QueryBuilderTypes';
8
- /** Narrows a facet result to the enumerated-values variant the QB can render. */
9
- export declare function isFacetColumnResultValues(facet: FacetColumnResult): facet is FacetColumnResultValues;
10
2
  /** Categorization of columns for the QB UI. Not a synapse-types concept. */
11
3
  export type QBColumnKind = 'enum' | 'list' | 'range' | 'boolean' | 'text' | 'unknown';
12
4
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"queryBuilderMetadata.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/queryBuilderMetadata.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,iCAAiC,CAAA;AAMxC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,iFAAiF;AACjF,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,iBAAiB,GACvB,KAAK,IAAI,uBAAuB,CAKlC;AAED,4EAA4E;AAC5E,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,MAAM,GACN,OAAO,GACP,SAAS,GACT,MAAM,GACN,SAAS,CAAA;AAEb;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,QAAQ,EAAE,OAAO,GAChB,YAAY,CA4Bd;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,EAAE,CAoCvE;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,CAoCpD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,OAAO,CAQT"}
1
+ {"version":3,"file":"queryBuilderMetadata.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/queryBuilderMetadata.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,4EAA4E;AAC5E,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,MAAM,GACN,OAAO,GACP,SAAS,GACT,MAAM,GACN,SAAS,CAAA;AAEb;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,QAAQ,EAAE,OAAO,GAChB,YAAY,CA4Bd;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,EAAE,CAoCvE;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,CAoCpD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,OAAO,CAQT"}
@@ -1,10 +1,7 @@
1
1
  import { FRIENDLY_VALUE_NOT_SET as e } from "../../utils/SynapseConstants.js";
2
2
  import { parseSynId as t } from "../../utils/functions/RegularExpressions.js";
3
3
  //#region src/components/QueryBuilder/queryBuilderMetadata.ts
4
- function n(e) {
5
- return e.concreteType === "org.sagebionetworks.repo.model.table.FacetColumnResultValues";
6
- }
7
- function r(e, t) {
4
+ function n(e, t) {
8
5
  if (e?.endsWith("_LIST")) return "list";
9
6
  if (t) return "enum";
10
7
  if (e == null) return "unknown";
@@ -25,7 +22,7 @@ function r(e, t) {
25
22
  default: return "text";
26
23
  }
27
24
  }
28
- function i(e) {
25
+ function r(e) {
29
26
  switch (e) {
30
27
  case "enum": return [
31
28
  "is_any_of",
@@ -66,7 +63,7 @@ function i(e) {
66
63
  default: return [];
67
64
  }
68
65
  }
69
- function a(e) {
66
+ function i(e) {
70
67
  switch (e) {
71
68
  case "is_any_of": return "is any of";
72
69
  case "is_all_of": return "is all of";
@@ -86,14 +83,14 @@ function a(e) {
86
83
  default: return e;
87
84
  }
88
85
  }
89
- function o(t) {
86
+ function a(t) {
90
87
  return t === "org.sagebionetworks.UNDEFINED_NULL_NOTSET" ? e : t;
91
88
  }
92
- function s(e, n, r) {
89
+ function o(e, n, r) {
93
90
  let i = r.trim().toLowerCase();
94
91
  return i === "" || n.toLowerCase().includes(i) || e.toLowerCase().includes(i) ? !0 : t(i)?.targetId === `syn${e}`;
95
92
  }
96
93
  //#endregion
97
- export { i as availableOpsForKind, r as classifyColumn, s as facetValueMatchesFilter, n as isFacetColumnResultValues, o as labelForFacetValue, a as labelForOp };
94
+ export { r as availableOpsForKind, n as classifyColumn, o as facetValueMatchesFilter, a as labelForFacetValue, i as labelForOp };
98
95
 
99
96
  //# sourceMappingURL=queryBuilderMetadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queryBuilderMetadata.js","names":[],"sources":["../../../src/components/QueryBuilder/queryBuilderMetadata.ts"],"sourcesContent":["/**\n * Column-kind classification and operator availability per kind. The QB uses\n * this both to populate the operator picker dropdown and to decide what shape\n * of value input to render.\n */\nimport {\n FacetColumnResult,\n FacetColumnResultValues,\n} from '@sage-bionetworks/synapse-types'\nimport { parseSynId } from '../../utils/functions/RegularExpressions'\nimport {\n FRIENDLY_VALUE_NOT_SET,\n VALUE_NOT_SET,\n} from '../../utils/SynapseConstants'\nimport { QBConditionOp } from './QueryBuilderTypes'\n\n/** Narrows a facet result to the enumerated-values variant the QB can render. */\nexport function isFacetColumnResultValues(\n facet: FacetColumnResult,\n): facet is FacetColumnResultValues {\n return (\n facet.concreteType ===\n 'org.sagebionetworks.repo.model.table.FacetColumnResultValues'\n )\n}\n\n/** Categorization of columns for the QB UI. Not a synapse-types concept. */\nexport type QBColumnKind =\n | 'enum'\n | 'list'\n | 'range'\n | 'boolean'\n | 'text'\n | 'unknown'\n\n/**\n * Classify a column into a QB kind based on its `ColumnTypeEnum` string and\n * whether the column has a facet in the query result. `hasFacet` distinguishes\n * a faceted single-value column (`enum`) from a plain single-value column\n * (`text`).\n */\nexport function classifyColumn(\n columnType: string | null,\n hasFacet: boolean,\n): QBColumnKind {\n // `_LIST` columns keep the `list` kind so `is_all_of` remains available.\n if (columnType?.endsWith('_LIST')) return 'list'\n // Any faceted column becomes an enum picker regardless of the raw column\n // type (even when the type is unknown, e.g. when the QB tree was hydrated\n // from `selectedFacets` without column-model context).\n if (hasFacet) return 'enum'\n if (columnType == null) return 'unknown'\n switch (columnType) {\n case 'BOOLEAN':\n return 'boolean'\n case 'INTEGER':\n case 'DOUBLE':\n case 'DATE':\n case 'DATE_TIME':\n return 'range'\n case 'STRING':\n case 'LARGETEXT':\n case 'LINK':\n case 'MEDIUMTEXT':\n case 'USERID':\n case 'ENTITYID':\n case 'EVALUATIONID':\n case 'SUBMISSIONID':\n return 'text'\n default:\n return 'text'\n }\n}\n\n/**\n * Ordered list of operators offered for a given column kind. Order controls\n * the operator picker dropdown ordering.\n */\nexport function availableOpsForKind(kind: QBColumnKind): QBConditionOp[] {\n switch (kind) {\n case 'enum':\n return ['is_any_of', 'has_value', 'no_value']\n case 'list':\n return ['is_any_of', 'is_all_of', 'has_value', 'no_value']\n case 'range':\n return [\n 'between',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'equal',\n 'not_equal',\n 'has_value',\n 'no_value',\n ]\n case 'boolean':\n return ['equal', 'has_value', 'no_value']\n case 'text':\n return [\n 'contains',\n 'starts_with',\n 'ends_with',\n 'is_exactly',\n 'has_value',\n 'no_value',\n ]\n case 'unknown':\n // No column picked yet; offer nothing until one is selected.\n return []\n default:\n kind satisfies never\n return []\n }\n}\n\n/** Human-readable label for an operator, shown in the operator picker. */\nexport function labelForOp(op: QBConditionOp): string {\n switch (op) {\n case 'is_any_of':\n return 'is any of'\n case 'is_all_of':\n return 'is all of'\n case 'between':\n return 'between'\n case 'gt':\n return '>'\n case 'gte':\n return '≥'\n case 'lt':\n return '<'\n case 'lte':\n return '≤'\n case 'equal':\n return 'equals'\n case 'not_equal':\n return 'does not equal'\n case 'has_value':\n return 'has value'\n case 'no_value':\n return 'has no value'\n case 'contains':\n return 'contains'\n case 'starts_with':\n return 'starts with'\n case 'ends_with':\n return 'ends with'\n case 'is_exactly':\n return 'is exactly'\n default:\n op satisfies never\n return op\n }\n}\n\n/**\n * Returns the user-facing label for a raw facet value. Backend sentinels like\n * `VALUE_NOT_SET` display as `Not Assigned`; every other value renders as-is.\n * The underlying value stored on the QB condition is unchanged.\n */\nexport function labelForFacetValue(value: string): string {\n return value === VALUE_NOT_SET ? FRIENDLY_VALUE_NOT_SET : value\n}\n\n/**\n * Does a facet value match the pill filter query? Matching considers both the\n * user-facing label and the underlying value, so a pill labeled with a\n * resolved entity or user name is still findable by the ID it stores.\n *\n * An empty query matches everything.\n */\nexport function facetValueMatchesFilter(\n value: string,\n label: string,\n query: string,\n): boolean {\n const normalizedQuery = query.trim().toLowerCase()\n if (normalizedQuery === '') return true\n if (label.toLowerCase().includes(normalizedQuery)) return true\n if (value.toLowerCase().includes(normalizedQuery)) return true\n // An entity ID pasted from elsewhere in Synapse carries a `syn` prefix (and\n // possibly a version suffix) that an ENTITYID column's stored value doesn't.\n return parseSynId(normalizedQuery)?.targetId === `syn${value}`\n}\n"],"mappings":";;;AAiBA,SAAgB,EACd,GACkC;CAClC,OACE,EAAM,iBACN;AAEJ;AAiBA,SAAgB,EACd,GACA,GACc;CAEd,IAAI,GAAY,SAAS,OAAO,GAAG,OAAO;CAI1C,IAAI,GAAU,OAAO;CACrB,IAAI,KAAc,MAAM,OAAO;CAC/B,QAAQ,GAAR;EACE,KAAK,WACH,OAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,aACH,OAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,gBACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAMA,SAAgB,EAAoB,GAAqC;CACvE,QAAQ,GAAR;EACE,KAAK,QACH,OAAO;GAAC;GAAa;GAAa;EAAU;EAC9C,KAAK,QACH,OAAO;GAAC;GAAa;GAAa;GAAa;EAAU;EAC3D,KAAK,SACH,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACF,KAAK,WACH,OAAO;GAAC;GAAS;GAAa;EAAU;EAC1C,KAAK,QACH,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;EACF;EACF,KAAK,WAEH,OAAO,CAAC;EACV,SAEE,OAAO,CAAC;CACZ;AACF;AAGA,SAAgB,EAAW,GAA2B;CACpD,QAAQ,GAAR;EACE,KAAK,aACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK,MACH,OAAO;EACT,KAAK,OACH,OAAO;EACT,KAAK,MACH,OAAO;EACT,KAAK,OACH,OAAO;EACT,KAAK,SACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,YACH,OAAO;EACT,KAAK,YACH,OAAO;EACT,KAAK,eACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,cACH,OAAO;EACT,SAEE,OAAO;CACX;AACF;AAOA,SAAgB,EAAmB,GAAuB;CACxD,OAAO,MAAA,8CAA0B,IAAyB;AAC5D;AASA,SAAgB,EACd,GACA,GACA,GACS;CACT,IAAM,IAAkB,EAAM,KAAK,EAAE,YAAY;CAMjD,OALI,MAAoB,MACpB,EAAM,YAAY,EAAE,SAAS,CAAe,KAC5C,EAAM,YAAY,EAAE,SAAS,CAAe,IAAU,KAGnD,EAAW,CAAe,GAAG,aAAa,MAAM;AACzD"}
1
+ {"version":3,"file":"queryBuilderMetadata.js","names":[],"sources":["../../../src/components/QueryBuilder/queryBuilderMetadata.ts"],"sourcesContent":["/**\n * Column-kind classification and operator availability per kind. The QB uses\n * this both to populate the operator picker dropdown and to decide what shape\n * of value input to render.\n */\nimport { parseSynId } from '../../utils/functions/RegularExpressions'\nimport {\n FRIENDLY_VALUE_NOT_SET,\n VALUE_NOT_SET,\n} from '../../utils/SynapseConstants'\nimport { QBConditionOp } from './QueryBuilderTypes'\n\n/** Categorization of columns for the QB UI. Not a synapse-types concept. */\nexport type QBColumnKind =\n | 'enum'\n | 'list'\n | 'range'\n | 'boolean'\n | 'text'\n | 'unknown'\n\n/**\n * Classify a column into a QB kind based on its `ColumnTypeEnum` string and\n * whether the column has a facet in the query result. `hasFacet` distinguishes\n * a faceted single-value column (`enum`) from a plain single-value column\n * (`text`).\n */\nexport function classifyColumn(\n columnType: string | null,\n hasFacet: boolean,\n): QBColumnKind {\n // `_LIST` columns keep the `list` kind so `is_all_of` remains available.\n if (columnType?.endsWith('_LIST')) return 'list'\n // Any faceted column becomes an enum picker regardless of the raw column\n // type (even when the type is unknown, e.g. when the QB tree was hydrated\n // from `selectedFacets` without column-model context).\n if (hasFacet) return 'enum'\n if (columnType == null) return 'unknown'\n switch (columnType) {\n case 'BOOLEAN':\n return 'boolean'\n case 'INTEGER':\n case 'DOUBLE':\n case 'DATE':\n case 'DATE_TIME':\n return 'range'\n case 'STRING':\n case 'LARGETEXT':\n case 'LINK':\n case 'MEDIUMTEXT':\n case 'USERID':\n case 'ENTITYID':\n case 'EVALUATIONID':\n case 'SUBMISSIONID':\n return 'text'\n default:\n return 'text'\n }\n}\n\n/**\n * Ordered list of operators offered for a given column kind. Order controls\n * the operator picker dropdown ordering.\n */\nexport function availableOpsForKind(kind: QBColumnKind): QBConditionOp[] {\n switch (kind) {\n case 'enum':\n return ['is_any_of', 'has_value', 'no_value']\n case 'list':\n return ['is_any_of', 'is_all_of', 'has_value', 'no_value']\n case 'range':\n return [\n 'between',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'equal',\n 'not_equal',\n 'has_value',\n 'no_value',\n ]\n case 'boolean':\n return ['equal', 'has_value', 'no_value']\n case 'text':\n return [\n 'contains',\n 'starts_with',\n 'ends_with',\n 'is_exactly',\n 'has_value',\n 'no_value',\n ]\n case 'unknown':\n // No column picked yet; offer nothing until one is selected.\n return []\n default:\n kind satisfies never\n return []\n }\n}\n\n/** Human-readable label for an operator, shown in the operator picker. */\nexport function labelForOp(op: QBConditionOp): string {\n switch (op) {\n case 'is_any_of':\n return 'is any of'\n case 'is_all_of':\n return 'is all of'\n case 'between':\n return 'between'\n case 'gt':\n return '>'\n case 'gte':\n return '≥'\n case 'lt':\n return '<'\n case 'lte':\n return '≤'\n case 'equal':\n return 'equals'\n case 'not_equal':\n return 'does not equal'\n case 'has_value':\n return 'has value'\n case 'no_value':\n return 'has no value'\n case 'contains':\n return 'contains'\n case 'starts_with':\n return 'starts with'\n case 'ends_with':\n return 'ends with'\n case 'is_exactly':\n return 'is exactly'\n default:\n op satisfies never\n return op\n }\n}\n\n/**\n * Returns the user-facing label for a raw facet value. Backend sentinels like\n * `VALUE_NOT_SET` display as `Not Assigned`; every other value renders as-is.\n * The underlying value stored on the QB condition is unchanged.\n */\nexport function labelForFacetValue(value: string): string {\n return value === VALUE_NOT_SET ? FRIENDLY_VALUE_NOT_SET : value\n}\n\n/**\n * Does a facet value match the pill filter query? Matching considers both the\n * user-facing label and the underlying value, so a pill labeled with a\n * resolved entity or user name is still findable by the ID it stores.\n *\n * An empty query matches everything.\n */\nexport function facetValueMatchesFilter(\n value: string,\n label: string,\n query: string,\n): boolean {\n const normalizedQuery = query.trim().toLowerCase()\n if (normalizedQuery === '') return true\n if (label.toLowerCase().includes(normalizedQuery)) return true\n if (value.toLowerCase().includes(normalizedQuery)) return true\n // An entity ID pasted from elsewhere in Synapse carries a `syn` prefix (and\n // possibly a version suffix) that an ENTITYID column's stored value doesn't.\n return parseSynId(normalizedQuery)?.targetId === `syn${value}`\n}\n"],"mappings":";;;AA2BA,SAAgB,EACd,GACA,GACc;CAEd,IAAI,GAAY,SAAS,OAAO,GAAG,OAAO;CAI1C,IAAI,GAAU,OAAO;CACrB,IAAI,KAAc,MAAM,OAAO;CAC/B,QAAQ,GAAR;EACE,KAAK,WACH,OAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,aACH,OAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,gBACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAMA,SAAgB,EAAoB,GAAqC;CACvE,QAAQ,GAAR;EACE,KAAK,QACH,OAAO;GAAC;GAAa;GAAa;EAAU;EAC9C,KAAK,QACH,OAAO;GAAC;GAAa;GAAa;GAAa;EAAU;EAC3D,KAAK,SACH,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACF,KAAK,WACH,OAAO;GAAC;GAAS;GAAa;EAAU;EAC1C,KAAK,QACH,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;EACF;EACF,KAAK,WAEH,OAAO,CAAC;EACV,SAEE,OAAO,CAAC;CACZ;AACF;AAGA,SAAgB,EAAW,GAA2B;CACpD,QAAQ,GAAR;EACE,KAAK,aACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK,MACH,OAAO;EACT,KAAK,OACH,OAAO;EACT,KAAK,MACH,OAAO;EACT,KAAK,OACH,OAAO;EACT,KAAK,SACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,YACH,OAAO;EACT,KAAK,YACH,OAAO;EACT,KAAK,eACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,cACH,OAAO;EACT,SAEE,OAAO;CACX;AACF;AAOA,SAAgB,EAAmB,GAAuB;CACxD,OAAO,MAAA,8CAA0B,IAAyB;AAC5D;AASA,SAAgB,EACd,GACA,GACA,GACS;CACT,IAAM,IAAkB,EAAM,KAAK,EAAE,YAAY;CAMjD,OALI,MAAoB,MACpB,EAAM,YAAY,EAAE,SAAS,CAAe,KAC5C,EAAM,YAAY,EAAE,SAAS,CAAe,IAAU,KAGnD,EAAW,CAAe,GAAG,aAAa,MAAM;AACzD"}
@@ -34,10 +34,11 @@ export declare function qbNodeToApiFilter(node: QBNode): QueryFilter | null;
34
34
  * query already contains a `FilterGroup` (see filterMode auto-detect) so the
35
35
  * QB tree can be reconstructed on mount.
36
36
  *
37
- * Some conversions are lossy — `HAS` always deserializes as `is_any_of` (we
38
- * can't distinguish it from an `is_all_of` at the API layer), and `EQUAL` on
39
- * text columns deserializes as `equal` (not `is_exactly`) because they share
40
- * the same wire representation. Users can adjust the operator picker.
37
+ * Some conversions are lossy — an AND group of single-value `HAS` predicates
38
+ * on one column (the shape `is_all_of` emits) deserializes as `is_all_of`, any
39
+ * other `HAS` as `is_any_of`, and `EQUAL` on text columns deserializes as
40
+ * `equal` (not `is_exactly`) because they share the same wire representation.
41
+ * Users can adjust the operator picker.
41
42
  */
42
43
  export declare function apiFilterToQBNode(filter: QueryFilter): QBNode | null;
43
44
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"queryBuilderTranslation.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/queryBuilderTranslation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAKX,kBAAkB,EAGlB,WAAW,EACZ,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAQxC,OAAO,EAA0B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAY7E,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAE/D;AAMD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG;IACpD,EAAE,EAAE,UAAU,GAAG,aAAa,GAAG,WAAW,GAAG,YAAY,CAAA;IAC3D,IAAI,EAAE,MAAM,CAAA;CACb,CAUA;AAMD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAelE;AAwLD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAgCpE;AA8DD;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,YAAY,CAAC,kBAAkB,EAAE,CAAC,EAClD,YAAY,CAAC,EAAE,YAAY,CAAC,WAAW,EAAE,CAAC,GACzC,OAAO,CAkBT"}
1
+ {"version":3,"file":"queryBuilderTranslation.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/queryBuilderTranslation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAKX,kBAAkB,EAGlB,WAAW,EACZ,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAQxC,OAAO,EAA0B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAY7E,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAE/D;AAMD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG;IACpD,EAAE,EAAE,UAAU,GAAG,aAAa,GAAG,WAAW,GAAG,YAAY,CAAA;IAC3D,IAAI,EAAE,MAAM,CAAA;CACb,CAUA;AAMD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAelE;AAwMD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAkCpE;AA8FD;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,YAAY,CAAC,kBAAkB,EAAE,CAAC,EAClD,YAAY,CAAC,EAAE,YAAY,CAAC,WAAW,EAAE,CAAC,GACzC,OAAO,CAkBT"}