synapse-react-client 4.0.38 → 4.0.41

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 (350) hide show
  1. package/dist/SWC.index.d.ts +1 -0
  2. package/dist/SWC.index.d.ts.map +1 -1
  3. package/dist/SWC.index.js +2 -1
  4. package/dist/SWC.index.js.map +1 -1
  5. package/dist/aridhia-queries/useAridhiaQuery.d.ts +6 -2
  6. package/dist/aridhia-queries/useAridhiaQuery.d.ts.map +1 -1
  7. package/dist/aridhia-queries/useAridhiaQuery.js +3 -0
  8. package/dist/aridhia-queries/useAridhiaQuery.js.map +1 -1
  9. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.d.ts +1 -0
  10. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.d.ts.map +1 -1
  11. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.js +12 -12
  12. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.js.map +1 -1
  13. package/dist/components/Aridhia/AridhiaAccessStatus.d.ts +2 -1
  14. package/dist/components/Aridhia/AridhiaAccessStatus.d.ts.map +1 -1
  15. package/dist/components/Aridhia/AridhiaAccessStatus.js +57 -31
  16. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  17. package/dist/components/Aridhia/AridhiaDarStatusPopover.d.ts +12 -0
  18. package/dist/components/Aridhia/AridhiaDarStatusPopover.d.ts.map +1 -0
  19. package/dist/components/Aridhia/AridhiaDarStatusPopover.js +56 -0
  20. package/dist/components/Aridhia/AridhiaDarStatusPopover.js.map +1 -0
  21. package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.d.ts.map +1 -1
  22. package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.js +38 -30
  23. package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.js.map +1 -1
  24. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js +15 -14
  25. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js.map +1 -1
  26. package/dist/components/Aridhia/RdcaDapEligibilityDialog.d.ts +11 -0
  27. package/dist/components/Aridhia/RdcaDapEligibilityDialog.d.ts.map +1 -0
  28. package/dist/components/Aridhia/RdcaDapEligibilityDialog.js +37 -0
  29. package/dist/components/Aridhia/RdcaDapEligibilityDialog.js.map +1 -0
  30. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js +2 -2
  31. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js.map +1 -1
  32. package/dist/components/Aridhia/aridhiaFairPortalUrls.d.ts +10 -0
  33. package/dist/components/Aridhia/aridhiaFairPortalUrls.d.ts.map +1 -0
  34. package/dist/components/Aridhia/aridhiaFairPortalUrls.js +11 -0
  35. package/dist/components/Aridhia/aridhiaFairPortalUrls.js.map +1 -0
  36. package/dist/components/Aridhia/rdcaDapConstants.d.ts +3 -0
  37. package/dist/components/Aridhia/rdcaDapConstants.d.ts.map +1 -0
  38. package/dist/components/Aridhia/rdcaDapConstants.js +6 -0
  39. package/dist/components/Aridhia/rdcaDapConstants.js.map +1 -0
  40. package/dist/components/Authentication/Constants.d.ts +4 -0
  41. package/dist/components/Authentication/Constants.d.ts.map +1 -1
  42. package/dist/components/Authentication/Constants.js +5 -2
  43. package/dist/components/Authentication/Constants.js.map +1 -1
  44. package/dist/components/Authentication/RecoveryCodeGrid.d.ts.map +1 -1
  45. package/dist/components/Authentication/RecoveryCodeGrid.js +8 -1
  46. package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
  47. package/dist/components/Authentication/RegenerateBackupCodesWarning.js +4 -1
  48. package/dist/components/Authentication/RegenerateBackupCodesWarning.js.map +1 -1
  49. package/dist/components/Authentication/TOTPForm.d.ts.map +1 -1
  50. package/dist/components/Authentication/TOTPForm.js +20 -18
  51. package/dist/components/Authentication/TOTPForm.js.map +1 -1
  52. package/dist/components/Authentication/TwoFactorBackupCodes.d.ts.map +1 -1
  53. package/dist/components/Authentication/TwoFactorBackupCodes.js +41 -12
  54. package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
  55. package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
  56. package/dist/components/Authentication/TwoFactorEnrollmentForm.js +74 -71
  57. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  58. package/dist/components/DataExplorer/DataExplorer.css +1 -1
  59. package/dist/components/DataExplorer/DataExplorer.d.ts.map +1 -1
  60. package/dist/components/DataExplorer/DataExplorer.js +50 -50
  61. package/dist/components/DataExplorer/DataExplorer.js.map +1 -1
  62. package/dist/components/DataExplorer/DataExplorer.module.js +16 -16
  63. package/dist/components/DataExplorer/DataExplorer.module.js.map +1 -1
  64. package/dist/components/DataExplorer/DataExplorer.module.scss +29 -6
  65. package/dist/components/DataGrid/columns/DateTimeColumn.d.ts +16 -7
  66. package/dist/components/DataGrid/columns/DateTimeColumn.d.ts.map +1 -1
  67. package/dist/components/DataGrid/columns/DateTimeColumn.js +79 -57
  68. package/dist/components/DataGrid/columns/DateTimeColumn.js.map +1 -1
  69. package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
  70. package/dist/components/DataGrid/components/ReorderColumnsDialog.js +43 -46
  71. package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
  72. package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
  73. package/dist/components/DataGrid/utils/columnFactory.js +11 -8
  74. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  75. package/dist/components/DatePicker/DatePicker.d.ts +10 -0
  76. package/dist/components/DatePicker/DatePicker.d.ts.map +1 -0
  77. package/dist/components/DatePicker/DatePicker.js +18 -0
  78. package/dist/components/DatePicker/DatePicker.js.map +1 -0
  79. package/dist/components/EntityCitation/EntityCitation.d.ts.map +1 -1
  80. package/dist/components/EntityCitation/EntityCitation.js +8 -5
  81. package/dist/components/EntityCitation/EntityCitation.js.map +1 -1
  82. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts +11 -0
  83. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts.map +1 -0
  84. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js +61 -0
  85. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js.map +1 -0
  86. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts +33 -0
  87. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts.map +1 -0
  88. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js +187 -0
  89. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js.map +1 -0
  90. package/dist/components/FormTemplateEditor/FormTemplatePreview.d.ts +14 -0
  91. package/dist/components/FormTemplateEditor/FormTemplatePreview.d.ts.map +1 -0
  92. package/dist/components/FormTemplateEditor/FormTemplatePreview.js +83 -0
  93. package/dist/components/FormTemplateEditor/FormTemplatePreview.js.map +1 -0
  94. package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.d.ts +13 -0
  95. package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.d.ts.map +1 -0
  96. package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.js +33 -0
  97. package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.js.map +1 -0
  98. package/dist/components/FormTemplateEditor/formTemplateValidation.d.ts +32 -0
  99. package/dist/components/FormTemplateEditor/formTemplateValidation.d.ts.map +1 -0
  100. package/dist/components/FormTemplateEditor/formTemplateValidation.js +75 -0
  101. package/dist/components/FormTemplateEditor/formTemplateValidation.js.map +1 -0
  102. package/dist/components/FormTemplateEditor/schemaFieldUtils.d.ts +25 -0
  103. package/dist/components/FormTemplateEditor/schemaFieldUtils.d.ts.map +1 -0
  104. package/dist/components/FormTemplateEditor/schemaFieldUtils.js +66 -0
  105. package/dist/components/FormTemplateEditor/schemaFieldUtils.js.map +1 -0
  106. package/dist/components/FormTemplateEditor/useSaveFormTemplate.d.ts +28 -0
  107. package/dist/components/FormTemplateEditor/useSaveFormTemplate.d.ts.map +1 -0
  108. package/dist/components/FormTemplateEditor/useSaveFormTemplate.js +39 -0
  109. package/dist/components/FormTemplateEditor/useSaveFormTemplate.js.map +1 -0
  110. package/dist/components/FormTemplateEditor/utils.d.ts +21 -0
  111. package/dist/components/FormTemplateEditor/utils.d.ts.map +1 -0
  112. package/dist/components/FormTemplateEditor/utils.js +27 -0
  113. package/dist/components/FormTemplateEditor/utils.js.map +1 -0
  114. package/dist/components/HasAccess/AccessIcon.d.ts +3 -1
  115. package/dist/components/HasAccess/AccessIcon.d.ts.map +1 -1
  116. package/dist/components/HasAccess/AccessIcon.js +11 -1
  117. package/dist/components/HasAccess/AccessIcon.js.map +1 -1
  118. package/dist/components/JsonSchemaForm/CustomFormContext.d.ts +1 -1
  119. package/dist/components/JsonSchemaForm/CustomFormContext.d.ts.map +1 -1
  120. package/dist/components/JsonSchemaForm/JsonSchemaForm.css +1 -1
  121. package/dist/components/JsonSchemaForm/JsonSchemaForm.module.js +1 -1
  122. package/dist/components/JsonSchemaForm/JsonSchemaForm.module.js.map +1 -1
  123. package/dist/components/JsonSchemaForm/JsonSchemaForm.module.scss +6 -1
  124. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.d.ts.map +1 -1
  125. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js +4 -0
  126. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  127. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.d.ts +2 -1
  128. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.d.ts.map +1 -1
  129. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.js +81 -53
  130. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.js.map +1 -1
  131. package/dist/components/ProjectInfo/ProjectInfo.d.ts.map +1 -1
  132. package/dist/components/ProjectInfo/ProjectInfo.js +3 -2
  133. package/dist/components/ProjectInfo/ProjectInfo.js.map +1 -1
  134. package/dist/components/QueryBuilder/FilterConditionRow.css +1 -0
  135. package/dist/components/QueryBuilder/FilterConditionRow.d.ts +8 -0
  136. package/dist/components/QueryBuilder/FilterConditionRow.d.ts.map +1 -0
  137. package/dist/components/QueryBuilder/FilterConditionRow.js +260 -0
  138. package/dist/components/QueryBuilder/FilterConditionRow.js.map +1 -0
  139. package/dist/components/QueryBuilder/FilterConditionRow.module.js +16 -0
  140. package/dist/components/QueryBuilder/FilterConditionRow.module.js.map +1 -0
  141. package/dist/components/QueryBuilder/FilterConditionRow.module.scss +101 -0
  142. package/dist/components/QueryBuilder/FilterGroupNode.css +1 -0
  143. package/dist/components/QueryBuilder/FilterGroupNode.d.ts +11 -0
  144. package/dist/components/QueryBuilder/FilterGroupNode.d.ts.map +1 -0
  145. package/dist/components/QueryBuilder/FilterGroupNode.js +134 -0
  146. package/dist/components/QueryBuilder/FilterGroupNode.js.map +1 -0
  147. package/dist/components/QueryBuilder/FilterGroupNode.module.js +16 -0
  148. package/dist/components/QueryBuilder/FilterGroupNode.module.js.map +1 -0
  149. package/dist/components/QueryBuilder/FilterGroupNode.module.scss +92 -0
  150. package/dist/components/QueryBuilder/QBDragHandle.d.ts +10 -0
  151. package/dist/components/QueryBuilder/QBDragHandle.d.ts.map +1 -0
  152. package/dist/components/QueryBuilder/QBDragHandle.js +22 -0
  153. package/dist/components/QueryBuilder/QBDragHandle.js.map +1 -0
  154. package/dist/components/QueryBuilder/QueryBuilderControls.css +1 -0
  155. package/dist/components/QueryBuilder/QueryBuilderControls.d.ts +21 -0
  156. package/dist/components/QueryBuilder/QueryBuilderControls.d.ts.map +1 -0
  157. package/dist/components/QueryBuilder/QueryBuilderControls.js +143 -0
  158. package/dist/components/QueryBuilder/QueryBuilderControls.js.map +1 -0
  159. package/dist/components/QueryBuilder/QueryBuilderControls.module.js +17 -0
  160. package/dist/components/QueryBuilder/QueryBuilderControls.module.js.map +1 -0
  161. package/dist/components/QueryBuilder/QueryBuilderControls.module.scss +79 -0
  162. package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts +39 -0
  163. package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts.map +1 -0
  164. package/dist/components/QueryBuilder/QueryBuilderInternalContext.js +19 -0
  165. package/dist/components/QueryBuilder/QueryBuilderInternalContext.js.map +1 -0
  166. package/dist/components/QueryBuilder/qbTreeToReadable.d.ts +14 -0
  167. package/dist/components/QueryBuilder/qbTreeToReadable.d.ts.map +1 -0
  168. package/dist/components/QueryBuilder/qbTreeToReadable.js +89 -0
  169. package/dist/components/QueryBuilder/qbTreeToReadable.js.map +1 -0
  170. package/dist/components/QueryBuilder/queryBuilderDnd.d.ts +27 -0
  171. package/dist/components/QueryBuilder/queryBuilderDnd.d.ts.map +1 -0
  172. package/dist/components/QueryBuilder/queryBuilderDnd.js +41 -0
  173. package/dist/components/QueryBuilder/queryBuilderDnd.js.map +1 -0
  174. package/dist/components/QueryBuilder/queryBuilderDrag.css +1 -0
  175. package/dist/components/QueryBuilder/queryBuilderDrag.module.js +8 -0
  176. package/dist/components/QueryBuilder/queryBuilderDrag.module.js.map +1 -0
  177. package/dist/components/QueryBuilder/queryBuilderDrag.module.scss +12 -0
  178. package/dist/components/QueryBuilder/queryBuilderId.d.ts +2 -0
  179. package/dist/components/QueryBuilder/queryBuilderId.d.ts.map +1 -0
  180. package/dist/components/QueryBuilder/queryBuilderId.js +9 -0
  181. package/dist/components/QueryBuilder/queryBuilderId.js.map +1 -0
  182. package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts +24 -0
  183. package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts.map +1 -0
  184. package/dist/components/QueryBuilder/queryBuilderMetadata.js +91 -0
  185. package/dist/components/QueryBuilder/queryBuilderMetadata.js.map +1 -0
  186. package/dist/components/QueryBuilder/queryBuilderOperations.d.ts +71 -0
  187. package/dist/components/QueryBuilder/queryBuilderOperations.d.ts.map +1 -0
  188. package/dist/components/QueryBuilder/queryBuilderOperations.js +203 -0
  189. package/dist/components/QueryBuilder/queryBuilderOperations.js.map +1 -0
  190. package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts +3 -2
  191. package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts.map +1 -1
  192. package/dist/components/QueryBuilder/queryBuilderTranslation.js +82 -84
  193. package/dist/components/QueryBuilder/queryBuilderTranslation.js.map +1 -1
  194. package/dist/components/QueryBuilder/useQBCombinedSql.d.ts +11 -0
  195. package/dist/components/QueryBuilder/useQBCombinedSql.d.ts.map +1 -0
  196. package/dist/components/QueryBuilder/useQBCombinedSql.js +29 -0
  197. package/dist/components/QueryBuilder/useQBCombinedSql.js.map +1 -0
  198. package/dist/components/QueryBuilder/useQBFacetSourceMetadata.d.ts +18 -0
  199. package/dist/components/QueryBuilder/useQBFacetSourceMetadata.d.ts.map +1 -0
  200. package/dist/components/QueryBuilder/useQBFacetSourceMetadata.js +27 -0
  201. package/dist/components/QueryBuilder/useQBFacetSourceMetadata.js.map +1 -0
  202. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +14 -1
  203. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
  204. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +183 -119
  205. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  206. package/dist/components/RssFeedCards/RssFeedCards.d.ts +1 -0
  207. package/dist/components/RssFeedCards/RssFeedCards.d.ts.map +1 -1
  208. package/dist/components/RssFeedCards/RssFeedCards.js +11 -11
  209. package/dist/components/RssFeedCards/RssFeedCards.js.map +1 -1
  210. package/dist/components/SynapseChat/SynapseChat.d.ts +7 -1
  211. package/dist/components/SynapseChat/SynapseChat.d.ts.map +1 -1
  212. package/dist/components/SynapseChat/SynapseChat.js +76 -71
  213. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  214. package/dist/components/SynapseChat/SynapsePortalChatDialog.d.ts +3 -1
  215. package/dist/components/SynapseChat/SynapsePortalChatDialog.d.ts.map +1 -1
  216. package/dist/components/SynapseChat/SynapsePortalChatDialog.js +24 -13
  217. package/dist/components/SynapseChat/SynapsePortalChatDialog.js.map +1 -1
  218. package/dist/components/SynapseChat/portalChatSessionStorage.d.ts +23 -0
  219. package/dist/components/SynapseChat/portalChatSessionStorage.d.ts.map +1 -0
  220. package/dist/components/SynapseChat/portalChatSessionStorage.js +29 -0
  221. package/dist/components/SynapseChat/portalChatSessionStorage.js.map +1 -0
  222. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts +6 -0
  223. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts.map +1 -1
  224. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js +92 -79
  225. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
  226. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts +3 -4
  227. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map +1 -1
  228. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js +2 -2
  229. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map +1 -1
  230. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js +1 -1
  231. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js.map +1 -1
  232. package/dist/components/entity/page/action_menu/EntityActionMenu.d.ts.map +1 -1
  233. package/dist/components/entity/page/action_menu/EntityActionMenu.js +9 -2
  234. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  235. package/dist/components/entity/page/title_bar/EntityPageTitleBar.d.ts +0 -1
  236. package/dist/components/entity/page/title_bar/EntityPageTitleBar.d.ts.map +1 -1
  237. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js +36 -37
  238. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js.map +1 -1
  239. package/dist/components/menu/ComplexMenu.js +1 -1
  240. package/dist/components/menu/ComplexMenu.js.map +1 -1
  241. package/dist/components/menu/DropdownMenu.d.ts.map +1 -1
  242. package/dist/components/menu/DropdownMenu.js +4 -0
  243. package/dist/components/menu/DropdownMenu.js.map +1 -1
  244. package/dist/components/styled/LeftRightPanel.d.ts.map +1 -1
  245. package/dist/components/styled/LeftRightPanel.js +19 -2
  246. package/dist/components/styled/LeftRightPanel.js.map +1 -1
  247. package/dist/features/entity/metadata-task/hooks/useMarkCurationTaskInProgress.d.ts +10 -0
  248. package/dist/features/entity/metadata-task/hooks/useMarkCurationTaskInProgress.d.ts.map +1 -0
  249. package/dist/features/entity/metadata-task/hooks/useMarkCurationTaskInProgress.js +20 -0
  250. package/dist/features/entity/metadata-task/hooks/useMarkCurationTaskInProgress.js.map +1 -0
  251. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.d.ts.map +1 -1
  252. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js +29 -20
  253. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js.map +1 -1
  254. package/dist/mocks/accessRequirement/mockFormTemplates.d.ts +16 -0
  255. package/dist/mocks/accessRequirement/mockFormTemplates.d.ts.map +1 -0
  256. package/dist/mocks/accessRequirement/mockFormTemplates.js +63 -0
  257. package/dist/mocks/accessRequirement/mockFormTemplates.js.map +1 -0
  258. package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.d.ts +7 -0
  259. package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.d.ts.map +1 -0
  260. package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.js +47 -0
  261. package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.js.map +1 -0
  262. package/dist/mocks/accessRequirement/mockJsonSchemas.d.ts +27 -0
  263. package/dist/mocks/accessRequirement/mockJsonSchemas.d.ts.map +1 -0
  264. package/dist/mocks/accessRequirement/mockJsonSchemas.js +83 -0
  265. package/dist/mocks/accessRequirement/mockJsonSchemas.js.map +1 -0
  266. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts +18 -1
  267. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts.map +1 -1
  268. package/dist/mocks/msw/handlers/aridhiaHandlers.js +39 -33
  269. package/dist/mocks/msw/handlers/aridhiaHandlers.js.map +1 -1
  270. package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts +41 -14
  271. package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts.map +1 -1
  272. package/dist/mocks/msw/handlers/asyncJobHandlers.js +53 -44
  273. package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
  274. package/dist/mocks/msw/handlers/chatHandlers.d.ts.map +1 -1
  275. package/dist/mocks/msw/handlers/chatHandlers.js +19 -13
  276. package/dist/mocks/msw/handlers/chatHandlers.js.map +1 -1
  277. package/dist/mocks/msw/handlers/formTemplateHandlers.d.ts +5 -0
  278. package/dist/mocks/msw/handlers/formTemplateHandlers.d.ts.map +1 -0
  279. package/dist/mocks/msw/handlers/formTemplateHandlers.js +65 -0
  280. package/dist/mocks/msw/handlers/formTemplateHandlers.js.map +1 -0
  281. package/dist/mocks/msw/handlers/schemaHandlers.d.ts +2 -1
  282. package/dist/mocks/msw/handlers/schemaHandlers.d.ts.map +1 -1
  283. package/dist/mocks/msw/handlers/schemaHandlers.js +13 -7
  284. package/dist/mocks/msw/handlers/schemaHandlers.js.map +1 -1
  285. package/dist/mocks/msw/handlers/searchQueryHandlers.d.ts.map +1 -1
  286. package/dist/mocks/msw/handlers/searchQueryHandlers.js +24 -18
  287. package/dist/mocks/msw/handlers/searchQueryHandlers.js.map +1 -1
  288. package/dist/mocks/msw/handlers/tableQueryHandlers.d.ts.map +1 -1
  289. package/dist/mocks/msw/handlers/tableQueryHandlers.js +35 -16
  290. package/dist/mocks/msw/handlers/tableQueryHandlers.js.map +1 -1
  291. package/dist/mocks/msw/handlers.d.ts.map +1 -1
  292. package/dist/mocks/msw/handlers.js +49 -47
  293. package/dist/mocks/msw/handlers.js.map +1 -1
  294. package/dist/style/abstracts/_cssVariables.scss +7 -0
  295. package/dist/style/components/_query-wrapper-plot-nav.scss +9 -0
  296. package/dist/style/main.css +1 -1
  297. package/dist/synapse-queries/KeyFactory.d.ts +5 -1
  298. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  299. package/dist/synapse-queries/KeyFactory.js +14 -2
  300. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  301. package/dist/synapse-queries/chat/useChat.d.ts.map +1 -1
  302. package/dist/synapse-queries/chat/useChat.js +2 -4
  303. package/dist/synapse-queries/chat/useChat.js.map +1 -1
  304. package/dist/synapse-queries/dataaccess/index.d.ts +1 -0
  305. package/dist/synapse-queries/dataaccess/index.d.ts.map +1 -1
  306. package/dist/synapse-queries/dataaccess/index.js +4 -3
  307. package/dist/synapse-queries/dataaccess/useFormTemplate.d.ts +41 -0
  308. package/dist/synapse-queries/dataaccess/useFormTemplate.d.ts.map +1 -0
  309. package/dist/synapse-queries/dataaccess/useFormTemplate.js +63 -0
  310. package/dist/synapse-queries/dataaccess/useFormTemplate.js.map +1 -0
  311. package/dist/synapse-queries/index.js +186 -180
  312. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.d.ts +9 -0
  313. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.d.ts.map +1 -0
  314. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.js +22 -0
  315. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.js.map +1 -0
  316. package/dist/testutils/ReactQueryMockUtils.js.map +1 -1
  317. package/dist/testutils/vitest.setup.js +18 -9
  318. package/dist/testutils/vitest.setup.js.map +1 -1
  319. package/dist/tsconfig.build.tsbuildinfo +1 -1
  320. package/dist/utils/APIConstants.d.ts +1 -0
  321. package/dist/utils/APIConstants.d.ts.map +1 -1
  322. package/dist/utils/APIConstants.js +2 -2
  323. package/dist/utils/APIConstants.js.map +1 -1
  324. package/dist/utils/appendFinalQueryParamKey.d.ts.map +1 -1
  325. package/dist/utils/appendFinalQueryParamKey.js +4 -1
  326. package/dist/utils/appendFinalQueryParamKey.js.map +1 -1
  327. package/dist/utils/functions/ArrayUtils.d.ts +3 -0
  328. package/dist/utils/functions/ArrayUtils.d.ts.map +1 -1
  329. package/dist/utils/functions/ArrayUtils.js +7 -1
  330. package/dist/utils/functions/ArrayUtils.js.map +1 -1
  331. package/dist/utils/jsonschema/generateDataAccessSchema.d.ts +26 -0
  332. package/dist/utils/jsonschema/generateDataAccessSchema.d.ts.map +1 -0
  333. package/dist/utils/jsonschema/generateDataAccessSchema.js +28 -0
  334. package/dist/utils/jsonschema/generateDataAccessSchema.js.map +1 -0
  335. package/dist/utils/jsonschema/getType.d.ts.map +1 -1
  336. package/dist/utils/jsonschema/getType.js +4 -1
  337. package/dist/utils/jsonschema/getType.js.map +1 -1
  338. package/dist/utils/jsonschema/submissionContext.d.ts +86 -0
  339. package/dist/utils/jsonschema/submissionContext.d.ts.map +1 -0
  340. package/dist/utils/jsonschema/submissionContext.js +186 -0
  341. package/dist/utils/jsonschema/submissionContext.js.map +1 -0
  342. package/package.json +10 -8
  343. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.d.ts +0 -6
  344. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.d.ts.map +0 -1
  345. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js +0 -32
  346. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js.map +0 -1
  347. package/dist/components/entity/page/title_bar/TitleBarProperties.d.ts +0 -9
  348. package/dist/components/entity/page/title_bar/TitleBarProperties.d.ts.map +0 -1
  349. package/dist/components/entity/page/title_bar/TitleBarProperties.js +0 -24
  350. package/dist/components/entity/page/title_bar/TitleBarProperties.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"queryBuilderTranslation.js","names":[],"sources":["../../../src/components/QueryBuilder/queryBuilderTranslation.ts"],"sourcesContent":["import {\n ColumnMultiValueFunction,\n ColumnMultiValueFunctionQueryFilter,\n ColumnSingleValueFilterOperator,\n ColumnSingleValueQueryFilter,\n FacetColumnRequest,\n FILTER_GROUP_CONCRETE_TYPE_VALUE,\n FilterGroup,\n QueryFilter,\n} from '@sage-bionetworks/synapse-types'\nimport {\n isColumnMultiValueFunctionQueryFilter,\n isColumnSingleValueQueryFilter,\n isFacetColumnRangeRequest,\n isFacetColumnValuesRequest,\n isFilterGroup,\n} from '../../utils/types/IsType'\nimport { isQBGroup, QBCondition, QBGroup, QBNode } from './QueryBuilderTypes'\n\nconst COLUMN_SINGLE_VALUE_QUERY_FILTER =\n 'org.sagebionetworks.repo.model.table.ColumnSingleValueQueryFilter' as const\nconst COLUMN_MULTI_VALUE_FUNCTION_QUERY_FILTER =\n 'org.sagebionetworks.repo.model.table.ColumnMultiValueFunctionQueryFilter' as const\n\n// -----------------------------------------------------------------------------\n// Column-kind classification\n// -----------------------------------------------------------------------------\n\n/** A multi-value list column is one whose column type ends in `_LIST`. */\nexport function isListColumn(columnType: string | null): boolean {\n return columnType?.endsWith('_LIST') ?? false\n}\n\n// -----------------------------------------------------------------------------\n// LIKE escaping / classification\n// -----------------------------------------------------------------------------\n\n/**\n * Escape SQL LIKE metacharacters (`%` and `_`) plus the escape character itself\n * (`\\`) so a user's literal `50%` isn't treated as a wildcard match.\n */\nexport function escapeLike(input: string): string {\n return input.replace(/[\\\\%_]/g, ch => '\\\\' + ch)\n}\n\n/**\n * Inverse of {@link escapeLike}: strip the backslash escapes that\n * {@link escapeLike} added.\n */\nexport function unescapeLike(input: string): string {\n return input.replace(/\\\\([\\\\%_])/g, '$1')\n}\n\n/**\n * Classify a LIKE pattern string produced by {@link qbNodeToApiFilter} back\n * into a QB op + un-escaped text. Handles the four wildcard shapes\n * produced by that function (`%val%`, `val%`, `%val`, `val`).\n */\nexport function classifyLikePattern(pattern: string): {\n op: 'contains' | 'starts_with' | 'ends_with' | 'is_exactly'\n text: string\n} {\n const startsPct = pattern.startsWith('%')\n // Only treat a trailing '%' as a wildcard if it isn't itself escaped\n const endsPct = /(?<!\\\\)%$/.test(pattern)\n const core = pattern.slice(startsPct ? 1 : 0, endsPct ? -1 : undefined)\n const text = unescapeLike(core)\n if (startsPct && endsPct) return { op: 'contains', text }\n if (endsPct) return { op: 'starts_with', text }\n if (startsPct) return { op: 'ends_with', text }\n return { op: 'is_exactly', text }\n}\n\n// -----------------------------------------------------------------------------\n// QB → API\n// -----------------------------------------------------------------------------\n\n/**\n * Convert a QB tree node into a `QueryFilter`. Returns `null` when the node\n * (or an entire subtree) has no complete conditions — an incomplete leaf and\n * an empty group are both treated as \"no constraint\" so partial user input\n * never contributes to the outgoing query.\n */\nexport function qbNodeToApiFilter(node: QBNode): QueryFilter | null {\n if (isQBGroup(node)) {\n const children = node.children\n .map(qbNodeToApiFilter)\n .filter((f): f is QueryFilter => f !== null)\n if (children.length === 0) return null\n const filter: FilterGroup = {\n concreteType: FILTER_GROUP_CONCRETE_TYPE_VALUE,\n operator: node.combinator,\n not: node.not || undefined,\n children,\n }\n return filter\n }\n return conditionToApiFilter(node)\n}\n\nfunction conditionToApiFilter(\n node: QBCondition,\n): ColumnSingleValueQueryFilter | ColumnMultiValueFunctionQueryFilter | null {\n const { columnName, columnType, op, values, rangeMin, rangeMax, text } = node\n if (columnName === null) return null\n\n switch (op) {\n case 'is_any_of':\n return anyOfFilter(columnName, columnType, values)\n case 'is_all_of':\n return values.length === 0\n ? null\n : makeMultiValueFilter(columnName, values)\n case 'between':\n return betweenFilter(columnName, rangeMin, rangeMax)\n case 'gt':\n return rangeBoundFilter(\n columnName,\n rangeMin,\n ColumnSingleValueFilterOperator.GREATER_THAN,\n )\n case 'gte':\n return rangeBoundFilter(\n columnName,\n rangeMin,\n ColumnSingleValueFilterOperator.GREATER_THAN_OR_EQUAL,\n )\n case 'lt':\n return rangeBoundFilter(\n columnName,\n rangeMax,\n ColumnSingleValueFilterOperator.LESS_THAN,\n )\n case 'lte':\n return rangeBoundFilter(\n columnName,\n rangeMax,\n ColumnSingleValueFilterOperator.LESS_THAN_OR_EQUAL,\n )\n case 'equal':\n return equalityFilter(\n columnName,\n values,\n ColumnSingleValueFilterOperator.EQUAL,\n )\n case 'not_equal':\n return equalityFilter(\n columnName,\n values,\n ColumnSingleValueFilterOperator.NOT_EQUAL,\n )\n case 'has_value':\n return makeSingleValueFilter(\n columnName,\n ColumnSingleValueFilterOperator.IS_NOT_NULL,\n [],\n )\n case 'no_value':\n return makeSingleValueFilter(\n columnName,\n ColumnSingleValueFilterOperator.IS_NULL,\n [],\n )\n case 'contains':\n return likeFilter(columnName, text, escaped => `%${escaped}%`)\n case 'starts_with':\n return likeFilter(columnName, text, escaped => `${escaped}%`)\n case 'ends_with':\n return likeFilter(columnName, text, escaped => `%${escaped}`)\n case 'is_exactly':\n return isBlank(text)\n ? null\n : makeSingleValueFilter(\n columnName,\n ColumnSingleValueFilterOperator.EQUAL,\n [text!],\n )\n default: {\n // Compile-time exhaustiveness guard; the log fires only if a new op is\n // added to QBConditionOp without a case here.\n op satisfies never\n console.warn(\n `conditionToApiFilter: unrecognized QB op, skipping condition for column \"${columnName}\"`,\n { op },\n )\n return null\n }\n }\n}\n\nfunction isBlank(value: string | null | undefined): boolean {\n return value == null || value === ''\n}\n\nfunction anyOfFilter(\n columnName: string,\n columnType: string | null,\n values: string[],\n): ColumnSingleValueQueryFilter | ColumnMultiValueFunctionQueryFilter | null {\n if (values.length === 0) return null\n if (isListColumn(columnType)) return makeMultiValueFilter(columnName, values)\n return makeSingleValueFilter(\n columnName,\n ColumnSingleValueFilterOperator.IN,\n values,\n )\n}\n\nfunction betweenFilter(\n columnName: string,\n rangeMin: string | null,\n rangeMax: string | null,\n): ColumnSingleValueQueryFilter | null {\n if (isBlank(rangeMin) || isBlank(rangeMax)) return null\n return makeSingleValueFilter(\n columnName,\n ColumnSingleValueFilterOperator.BETWEEN,\n [rangeMin!, rangeMax!],\n )\n}\n\nfunction equalityFilter(\n columnName: string,\n values: string[],\n operator: ColumnSingleValueFilterOperator,\n): ColumnSingleValueQueryFilter | null {\n if (values.length === 0) return null\n return makeSingleValueFilter(columnName, operator, [values[0]])\n}\n\nfunction likeFilter(\n columnName: string,\n text: string | null,\n wrap: (escapedText: string) => string,\n): ColumnSingleValueQueryFilter | null {\n if (isBlank(text)) return null\n return makeSingleValueFilter(\n columnName,\n ColumnSingleValueFilterOperator.LIKE,\n [wrap(escapeLike(text!))],\n )\n}\n\nfunction makeSingleValueFilter(\n columnName: string,\n operator: ColumnSingleValueFilterOperator,\n values: string[],\n): ColumnSingleValueQueryFilter {\n return {\n concreteType: COLUMN_SINGLE_VALUE_QUERY_FILTER,\n columnName,\n operator,\n values,\n }\n}\n\nfunction makeMultiValueFilter(\n columnName: string,\n values: string[],\n): ColumnMultiValueFunctionQueryFilter {\n return {\n concreteType: COLUMN_MULTI_VALUE_FUNCTION_QUERY_FILTER,\n columnName,\n function: ColumnMultiValueFunction.HAS,\n _function: ColumnMultiValueFunction.HAS,\n values,\n }\n}\n\nfunction rangeBoundFilter(\n columnName: string,\n bound: string | null,\n operator: ColumnSingleValueFilterOperator,\n): ColumnSingleValueQueryFilter | null {\n if (bound == null || bound === '') return null\n return makeSingleValueFilter(columnName, operator, [bound])\n}\n\n// -----------------------------------------------------------------------------\n// API → QB (initial hydration)\n// -----------------------------------------------------------------------------\n\n/**\n * Convert an API `QueryFilter` back into a QB node. Used when the initial\n * query already contains a `FilterGroup` (see filterMode auto-detect) so the\n * QB tree can be reconstructed on mount.\n *\n * Some conversions are lossy — `HAS` always deserializes as `is_any_of` (we\n * can't distinguish it from an `is_all_of` at the API layer), and `EQUAL` on\n * text columns deserializes as `equal` (not `is_exactly`) because they share\n * the same wire representation. Users can adjust the operator picker.\n */\nexport function apiFilterToQBNode(filter: QueryFilter): QBNode | null {\n if (isFilterGroup(filter)) {\n const children = (filter.children ?? [])\n .map(apiFilterToQBNode)\n .filter((n): n is QBNode => n !== null)\n return {\n kind: 'group',\n id: newId(),\n combinator: filter.operator ?? 'AND',\n not: filter.not ?? false,\n children,\n }\n }\n if (isColumnSingleValueQueryFilter(filter)) {\n return singleValueToCondition(filter)\n }\n if (isColumnMultiValueFunctionQueryFilter(filter)) {\n return {\n kind: 'condition',\n id: newId(),\n columnName: filter.columnName,\n columnType: null,\n op: 'is_any_of',\n values: [...filter.values],\n rangeMin: null,\n rangeMax: null,\n text: null,\n }\n }\n // TextMatchesQueryFilter and other non-QB filter types are not part of the\n // QB tree — they belong in the non-QB baseline.\n return null\n}\n\nfunction singleValueToCondition(\n filter: ColumnSingleValueQueryFilter,\n): QBCondition {\n const base = {\n kind: 'condition' as const,\n id: newId(),\n columnName: filter.columnName,\n columnType: null,\n values: [] as string[],\n rangeMin: null as string | null,\n rangeMax: null as string | null,\n text: null as string | null,\n }\n const [firstValue] = filter.values\n switch (filter.operator) {\n case ColumnSingleValueFilterOperator.IN:\n return { ...base, op: 'is_any_of', values: [...filter.values] }\n case ColumnSingleValueFilterOperator.EQUAL:\n return { ...base, op: 'equal', values: [...filter.values] }\n case ColumnSingleValueFilterOperator.NOT_EQUAL:\n return { ...base, op: 'not_equal', values: [...filter.values] }\n case ColumnSingleValueFilterOperator.GREATER_THAN:\n return { ...base, op: 'gt', rangeMin: firstValue ?? null }\n case ColumnSingleValueFilterOperator.GREATER_THAN_OR_EQUAL:\n return { ...base, op: 'gte', rangeMin: firstValue ?? null }\n case ColumnSingleValueFilterOperator.LESS_THAN:\n return { ...base, op: 'lt', rangeMax: firstValue ?? null }\n case ColumnSingleValueFilterOperator.LESS_THAN_OR_EQUAL:\n return { ...base, op: 'lte', rangeMax: firstValue ?? null }\n case ColumnSingleValueFilterOperator.BETWEEN:\n return {\n ...base,\n op: 'between',\n rangeMin: filter.values[0] ?? null,\n rangeMax: filter.values[1] ?? null,\n }\n case ColumnSingleValueFilterOperator.IS_NULL:\n return { ...base, op: 'no_value' }\n case ColumnSingleValueFilterOperator.IS_NOT_NULL:\n return { ...base, op: 'has_value' }\n case ColumnSingleValueFilterOperator.LIKE: {\n const classified = classifyLikePattern(firstValue ?? '')\n return { ...base, op: classified.op, text: classified.text }\n }\n default:\n // Compile-time exhaustiveness guard; the log fires only if a new operator\n // is added to ColumnSingleValueFilterOperator without a case here.\n filter.operator satisfies never\n console.warn(\n `singleValueToCondition: unrecognized filter operator, falling back to 'equal' for column \"${filter.columnName}\"`,\n { operator: filter.operator },\n )\n return { ...base, op: 'equal' }\n }\n}\n\n// -----------------------------------------------------------------------------\n// Facets → QB (mode switch)\n// -----------------------------------------------------------------------------\n\n/**\n * Translate `selectedFacets` into a QB group whose children mirror each facet\n * (as an AND-combined, non-negated group). The reverse direction is not\n * generally possible; a QB → facets switch clears the tree.\n */\nexport function selectedFacetsToQBGroup(\n selectedFacets: FacetColumnRequest[],\n): QBGroup {\n return {\n kind: 'group',\n id: newId(),\n combinator: 'AND',\n not: false,\n children: selectedFacets\n .map(facetToQBCondition)\n .filter((c): c is QBCondition => c !== null),\n }\n}\n\nfunction facetToQBCondition(facet: FacetColumnRequest): QBCondition | null {\n if (isFacetColumnValuesRequest(facet)) {\n if (!facet.facetValues || facet.facetValues.length === 0) return null\n return {\n kind: 'condition',\n id: newId(),\n columnName: facet.columnName,\n columnType: null,\n op: 'is_any_of',\n values: [...facet.facetValues],\n rangeMin: null,\n rangeMax: null,\n text: null,\n }\n }\n if (isFacetColumnRangeRequest(facet)) {\n const hasMin = facet.min != null && facet.min !== ''\n const hasMax = facet.max != null && facet.max !== ''\n if (!hasMin && !hasMax) return null\n const base = {\n kind: 'condition' as const,\n id: newId(),\n columnName: facet.columnName,\n columnType: null,\n values: [],\n text: null,\n }\n if (hasMin && hasMax) {\n return {\n ...base,\n op: 'between',\n rangeMin: facet.min!,\n rangeMax: facet.max!,\n }\n }\n if (hasMin) {\n return { ...base, op: 'gte', rangeMin: facet.min!, rangeMax: null }\n }\n return { ...base, op: 'lte', rangeMin: null, rangeMax: facet.max! }\n }\n return null\n}\n\n// -----------------------------------------------------------------------------\n// Utilities\n// -----------------------------------------------------------------------------\n\nlet idCounter = 0\nfunction newId(): string {\n if (\n typeof crypto !== 'undefined' &&\n typeof crypto.randomUUID === 'function'\n ) {\n return crypto.randomUUID()\n }\n // Monotonic counter is sufficient — QB ids are client-only React keys, not secrets.\n idCounter += 1\n return `qb-${idCounter}`\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"queryBuilderTranslation.js","names":[],"sources":["../../../src/components/QueryBuilder/queryBuilderTranslation.ts"],"sourcesContent":["import {\n ColumnModel,\n ColumnMultiValueFunction,\n ColumnMultiValueFunctionQueryFilter,\n ColumnSingleValueFilterOperator,\n ColumnSingleValueQueryFilter,\n FacetColumnRequest,\n FILTER_GROUP_CONCRETE_TYPE_VALUE,\n FilterGroup,\n QueryFilter,\n} from '@sage-bionetworks/synapse-types'\nimport { ReadonlyDeep } from 'type-fest'\nimport {\n isColumnMultiValueFunctionQueryFilter,\n isColumnSingleValueQueryFilter,\n isFacetColumnRangeRequest,\n isFacetColumnValuesRequest,\n isFilterGroup,\n} from '../../utils/types/IsType'\nimport { isQBGroup, QBCondition, QBGroup, QBNode } from './QueryBuilderTypes'\nimport { newQBNodeId } from './queryBuilderId'\n\nconst COLUMN_SINGLE_VALUE_QUERY_FILTER =\n 'org.sagebionetworks.repo.model.table.ColumnSingleValueQueryFilter' as const\nconst COLUMN_MULTI_VALUE_FUNCTION_QUERY_FILTER =\n 'org.sagebionetworks.repo.model.table.ColumnMultiValueFunctionQueryFilter' as const\n\n// -----------------------------------------------------------------------------\n// Column-kind classification\n// -----------------------------------------------------------------------------\n\n/** A multi-value list column is one whose column type ends in `_LIST`. */\nexport function isListColumn(columnType: string | null): boolean {\n return columnType?.endsWith('_LIST') ?? false\n}\n\n// -----------------------------------------------------------------------------\n// LIKE escaping / classification\n// -----------------------------------------------------------------------------\n\n/**\n * Escape SQL LIKE metacharacters (`%` and `_`) plus the escape character itself\n * (`\\`) so a user's literal `50%` isn't treated as a wildcard match.\n */\nexport function escapeLike(input: string): string {\n return input.replace(/[\\\\%_]/g, ch => '\\\\' + ch)\n}\n\n/**\n * Inverse of {@link escapeLike}: strip the backslash escapes that\n * {@link escapeLike} added.\n */\nexport function unescapeLike(input: string): string {\n return input.replace(/\\\\([\\\\%_])/g, '$1')\n}\n\n/**\n * Classify a LIKE pattern string produced by {@link qbNodeToApiFilter} back\n * into a QB op + un-escaped text. Handles the four wildcard shapes\n * produced by that function (`%val%`, `val%`, `%val`, `val`).\n */\nexport function classifyLikePattern(pattern: string): {\n op: 'contains' | 'starts_with' | 'ends_with' | 'is_exactly'\n text: string\n} {\n const startsPct = pattern.startsWith('%')\n // Only treat a trailing '%' as a wildcard if it isn't itself escaped\n const endsPct = /(?<!\\\\)%$/.test(pattern)\n const core = pattern.slice(startsPct ? 1 : 0, endsPct ? -1 : undefined)\n const text = unescapeLike(core)\n if (startsPct && endsPct) return { op: 'contains', text }\n if (endsPct) return { op: 'starts_with', text }\n if (startsPct) return { op: 'ends_with', text }\n return { op: 'is_exactly', text }\n}\n\n// -----------------------------------------------------------------------------\n// QB → API\n// -----------------------------------------------------------------------------\n\n/**\n * Convert a QB tree node into a `QueryFilter`. Returns `null` when the node\n * (or an entire subtree) has no complete conditions — an incomplete leaf and\n * an empty group are both treated as \"no constraint\" so partial user input\n * never contributes to the outgoing query.\n */\nexport function qbNodeToApiFilter(node: QBNode): QueryFilter | null {\n if (isQBGroup(node)) {\n const children = node.children\n .map(qbNodeToApiFilter)\n .filter((f): f is QueryFilter => f !== null)\n if (children.length === 0) return null\n const filter: FilterGroup = {\n concreteType: FILTER_GROUP_CONCRETE_TYPE_VALUE,\n operator: node.combinator,\n not: node.not || undefined,\n children,\n }\n return filter\n }\n return conditionToApiFilter(node)\n}\n\nfunction conditionToApiFilter(\n node: QBCondition,\n): ColumnSingleValueQueryFilter | ColumnMultiValueFunctionQueryFilter | null {\n const { columnName, columnType, op, values, rangeMin, rangeMax, text } = node\n if (columnName === null) return null\n\n switch (op) {\n case 'is_any_of':\n return anyOfFilter(columnName, columnType, values)\n case 'is_all_of':\n return values.length === 0\n ? null\n : makeMultiValueFilter(columnName, values)\n case 'between':\n return betweenFilter(columnName, rangeMin, rangeMax)\n case 'gt':\n return rangeBoundFilter(\n columnName,\n rangeMin,\n ColumnSingleValueFilterOperator.GREATER_THAN,\n )\n case 'gte':\n return rangeBoundFilter(\n columnName,\n rangeMin,\n ColumnSingleValueFilterOperator.GREATER_THAN_OR_EQUAL,\n )\n case 'lt':\n return rangeBoundFilter(\n columnName,\n rangeMax,\n ColumnSingleValueFilterOperator.LESS_THAN,\n )\n case 'lte':\n return rangeBoundFilter(\n columnName,\n rangeMax,\n ColumnSingleValueFilterOperator.LESS_THAN_OR_EQUAL,\n )\n case 'equal':\n return equalityFilter(\n columnName,\n values,\n ColumnSingleValueFilterOperator.EQUAL,\n )\n case 'not_equal':\n return equalityFilter(\n columnName,\n values,\n ColumnSingleValueFilterOperator.NOT_EQUAL,\n )\n case 'has_value':\n return makeSingleValueFilter(\n columnName,\n ColumnSingleValueFilterOperator.IS_NOT_NULL,\n [],\n )\n case 'no_value':\n return makeSingleValueFilter(\n columnName,\n ColumnSingleValueFilterOperator.IS_NULL,\n [],\n )\n case 'contains':\n return likeFilter(columnName, text, escaped => `%${escaped}%`)\n case 'starts_with':\n return likeFilter(columnName, text, escaped => `${escaped}%`)\n case 'ends_with':\n return likeFilter(columnName, text, escaped => `%${escaped}`)\n case 'is_exactly':\n return isBlank(text)\n ? null\n : makeSingleValueFilter(\n columnName,\n ColumnSingleValueFilterOperator.EQUAL,\n [text!],\n )\n default: {\n // Compile-time exhaustiveness guard; the log fires only if a new op is\n // added to QBConditionOp without a case here.\n op satisfies never\n console.warn(\n `conditionToApiFilter: unrecognized QB op, skipping condition for column \"${columnName}\"`,\n { op },\n )\n return null\n }\n }\n}\n\nfunction isBlank(value: string | null | undefined): boolean {\n return value == null || value === ''\n}\n\nfunction anyOfFilter(\n columnName: string,\n columnType: string | null,\n values: string[],\n): ColumnSingleValueQueryFilter | ColumnMultiValueFunctionQueryFilter | null {\n if (values.length === 0) return null\n if (isListColumn(columnType)) return makeMultiValueFilter(columnName, values)\n return makeSingleValueFilter(\n columnName,\n ColumnSingleValueFilterOperator.IN,\n values,\n )\n}\n\nfunction betweenFilter(\n columnName: string,\n rangeMin: string | null,\n rangeMax: string | null,\n): ColumnSingleValueQueryFilter | null {\n if (isBlank(rangeMin) || isBlank(rangeMax)) return null\n return makeSingleValueFilter(\n columnName,\n ColumnSingleValueFilterOperator.BETWEEN,\n [rangeMin!, rangeMax!],\n )\n}\n\nfunction equalityFilter(\n columnName: string,\n values: string[],\n operator: ColumnSingleValueFilterOperator,\n): ColumnSingleValueQueryFilter | null {\n if (values.length === 0) return null\n return makeSingleValueFilter(columnName, operator, [values[0]])\n}\n\nfunction likeFilter(\n columnName: string,\n text: string | null,\n wrap: (escapedText: string) => string,\n): ColumnSingleValueQueryFilter | null {\n if (isBlank(text)) return null\n return makeSingleValueFilter(\n columnName,\n ColumnSingleValueFilterOperator.LIKE,\n [wrap(escapeLike(text!))],\n )\n}\n\nfunction makeSingleValueFilter(\n columnName: string,\n operator: ColumnSingleValueFilterOperator,\n values: string[],\n): ColumnSingleValueQueryFilter {\n return {\n concreteType: COLUMN_SINGLE_VALUE_QUERY_FILTER,\n columnName,\n operator,\n values,\n }\n}\n\nfunction makeMultiValueFilter(\n columnName: string,\n values: string[],\n): ColumnMultiValueFunctionQueryFilter {\n return {\n concreteType: COLUMN_MULTI_VALUE_FUNCTION_QUERY_FILTER,\n columnName,\n function: ColumnMultiValueFunction.HAS,\n _function: ColumnMultiValueFunction.HAS,\n values,\n }\n}\n\nfunction rangeBoundFilter(\n columnName: string,\n bound: string | null,\n operator: ColumnSingleValueFilterOperator,\n): ColumnSingleValueQueryFilter | null {\n if (bound == null || bound === '') return null\n return makeSingleValueFilter(columnName, operator, [bound])\n}\n\n// -----------------------------------------------------------------------------\n// API → QB (initial hydration)\n// -----------------------------------------------------------------------------\n\n/**\n * Convert an API `QueryFilter` back into a QB node. Used when the initial\n * query already contains a `FilterGroup` (see filterMode auto-detect) so the\n * QB tree can be reconstructed on mount.\n *\n * Some conversions are lossy — `HAS` always deserializes as `is_any_of` (we\n * can't distinguish it from an `is_all_of` at the API layer), and `EQUAL` on\n * text columns deserializes as `equal` (not `is_exactly`) because they share\n * the same wire representation. Users can adjust the operator picker.\n */\nexport function apiFilterToQBNode(filter: QueryFilter): QBNode | null {\n if (isFilterGroup(filter)) {\n const children = (filter.children ?? [])\n .map(apiFilterToQBNode)\n .filter((n): n is QBNode => n !== null)\n return {\n kind: 'group',\n id: newQBNodeId(),\n combinator: filter.operator ?? 'AND',\n not: filter.not ?? false,\n children,\n }\n }\n if (isColumnSingleValueQueryFilter(filter)) {\n return singleValueToCondition(filter)\n }\n if (isColumnMultiValueFunctionQueryFilter(filter)) {\n return {\n kind: 'condition',\n id: newQBNodeId(),\n columnName: filter.columnName,\n columnType: null,\n op: 'is_any_of',\n values: [...filter.values],\n rangeMin: null,\n rangeMax: null,\n text: null,\n }\n }\n // TextMatchesQueryFilter and other non-QB filter types are not part of the\n // QB tree — they belong in the non-QB baseline.\n return null\n}\n\nfunction singleValueToCondition(\n filter: ColumnSingleValueQueryFilter,\n): QBCondition {\n const base = {\n kind: 'condition' as const,\n id: newQBNodeId(),\n columnName: filter.columnName,\n columnType: null,\n values: [] as string[],\n rangeMin: null as string | null,\n rangeMax: null as string | null,\n text: null as string | null,\n }\n const [firstValue] = filter.values\n switch (filter.operator) {\n case ColumnSingleValueFilterOperator.IN:\n return { ...base, op: 'is_any_of', values: [...filter.values] }\n case ColumnSingleValueFilterOperator.EQUAL:\n return { ...base, op: 'equal', values: [...filter.values] }\n case ColumnSingleValueFilterOperator.NOT_EQUAL:\n return { ...base, op: 'not_equal', values: [...filter.values] }\n case ColumnSingleValueFilterOperator.GREATER_THAN:\n return { ...base, op: 'gt', rangeMin: firstValue ?? null }\n case ColumnSingleValueFilterOperator.GREATER_THAN_OR_EQUAL:\n return { ...base, op: 'gte', rangeMin: firstValue ?? null }\n case ColumnSingleValueFilterOperator.LESS_THAN:\n return { ...base, op: 'lt', rangeMax: firstValue ?? null }\n case ColumnSingleValueFilterOperator.LESS_THAN_OR_EQUAL:\n return { ...base, op: 'lte', rangeMax: firstValue ?? null }\n case ColumnSingleValueFilterOperator.BETWEEN:\n return {\n ...base,\n op: 'between',\n rangeMin: filter.values[0] ?? null,\n rangeMax: filter.values[1] ?? null,\n }\n case ColumnSingleValueFilterOperator.IS_NULL:\n return { ...base, op: 'no_value' }\n case ColumnSingleValueFilterOperator.IS_NOT_NULL:\n return { ...base, op: 'has_value' }\n case ColumnSingleValueFilterOperator.LIKE: {\n const classified = classifyLikePattern(firstValue ?? '')\n return { ...base, op: classified.op, text: classified.text }\n }\n default:\n // Compile-time exhaustiveness guard; the log fires only if a new operator\n // is added to ColumnSingleValueFilterOperator without a case here.\n filter.operator satisfies never\n console.warn(\n `singleValueToCondition: unrecognized filter operator, falling back to 'equal' for column \"${filter.columnName}\"`,\n { operator: filter.operator },\n )\n return { ...base, op: 'equal' }\n }\n}\n\n// -----------------------------------------------------------------------------\n// Facets → QB (mode switch)\n// -----------------------------------------------------------------------------\n\n/**\n * Translate `selectedFacets` into a QB group whose children mirror each facet\n * (as an AND-combined, non-negated group). The reverse direction is not\n * generally possible; a QB → facets switch clears the tree.\n */\nexport function selectedFacetsToQBGroup(\n selectedFacets: ReadonlyDeep<FacetColumnRequest[]>,\n columnModels?: ReadonlyDeep<ColumnModel[]>,\n): QBGroup {\n const columnTypeByName = new Map(\n (columnModels ?? []).map(cm => [cm.name, cm.columnType as string]),\n )\n return {\n kind: 'group',\n id: newQBNodeId(),\n combinator: 'AND',\n not: false,\n children: selectedFacets\n .map(facet =>\n facetToQBCondition(\n facet,\n columnTypeByName.get(facet.columnName) ?? null,\n ),\n )\n .filter((c): c is QBCondition => c !== null),\n }\n}\n\nfunction facetToQBCondition(\n facet: ReadonlyDeep<FacetColumnRequest>,\n columnType: string | null,\n): QBCondition | null {\n if (isFacetColumnValuesRequest(facet)) {\n if (!facet.facetValues || facet.facetValues.length === 0) return null\n return {\n kind: 'condition',\n id: newQBNodeId(),\n columnName: facet.columnName,\n columnType,\n op: 'is_any_of',\n values: [...facet.facetValues],\n rangeMin: null,\n rangeMax: null,\n text: null,\n }\n }\n if (isFacetColumnRangeRequest(facet)) {\n const hasMin = facet.min != null && facet.min !== ''\n const hasMax = facet.max != null && facet.max !== ''\n if (!hasMin && !hasMax) return null\n const base = {\n kind: 'condition' as const,\n id: newQBNodeId(),\n columnName: facet.columnName,\n columnType,\n values: [],\n text: null,\n }\n if (hasMin && hasMax) {\n return {\n ...base,\n op: 'between',\n rangeMin: facet.min!,\n rangeMax: facet.max!,\n }\n }\n if (hasMin) {\n return { ...base, op: 'gte', rangeMin: facet.min!, rangeMax: null }\n }\n return { ...base, op: 'lte', rangeMin: null, rangeMax: facet.max! }\n }\n return null\n}\n"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { UseQueryResult } from '@tanstack/react-query';
2
+ import { QBGroup } from './QueryBuilderTypes';
3
+ /**
4
+ * Ask the backend to produce the effective SQL for a given QB tree by firing a
5
+ * `QueryBundleRequest` with `BUNDLE_MASK_COMBINED_SQL` and the tree translated
6
+ * into an `additionalFilters` `FilterGroup`. The QB does not otherwise drive
7
+ * the outgoing query in V1 — this hook exists purely to power the SQL preview
8
+ * tab in the summary bar.
9
+ */
10
+ export declare function useQBCombinedSql(tree: QBGroup | null): UseQueryResult<string | undefined>;
11
+ //# sourceMappingURL=useQBCombinedSql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQBCombinedSql.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/useQBCombinedSql.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAItD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE7C;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,GAAG,IAAI,GACnB,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,CA0BpC"}
@@ -0,0 +1,29 @@
1
+ import "../../utils/SynapseConstants.js";
2
+ import e from "../../synapse-queries/entity/useGetQueryResultBundle.js";
3
+ import { useQueryContext as t } from "../QueryContext/QueryContext.js";
4
+ import "../QueryContext/index.js";
5
+ import { qbNodeToApiFilter as n } from "./queryBuilderTranslation.js";
6
+ import { useMemo as r } from "react";
7
+ //#region src/components/QueryBuilder/useQBCombinedSql.ts
8
+ function i(i) {
9
+ let { currentQueryRequest: a } = t();
10
+ return e(r(() => {
11
+ let e = i ? n(i) : null;
12
+ return {
13
+ ...a,
14
+ partMask: 256,
15
+ query: {
16
+ ...a.query,
17
+ additionalFilters: e ? [e] : void 0,
18
+ offset: void 0,
19
+ limit: void 0,
20
+ sort: void 0,
21
+ selectedFacets: void 0
22
+ }
23
+ };
24
+ }, [a, i]), { select: (e) => e.combinedSql });
25
+ }
26
+ //#endregion
27
+ export { i as useQBCombinedSql };
28
+
29
+ //# sourceMappingURL=useQBCombinedSql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQBCombinedSql.js","names":[],"sources":["../../../src/components/QueryBuilder/useQBCombinedSql.ts"],"sourcesContent":["import useGetQueryResultBundle from '@/synapse-queries/entity/useGetQueryResultBundle'\nimport { BUNDLE_MASK_COMBINED_SQL } from '@/utils/SynapseConstants'\nimport { QueryBundleRequest } from '@sage-bionetworks/synapse-types'\nimport { UseQueryResult } from '@tanstack/react-query'\nimport { useMemo } from 'react'\nimport { useQueryContext } from '../QueryContext'\nimport { qbNodeToApiFilter } from './queryBuilderTranslation'\nimport { QBGroup } from './QueryBuilderTypes'\n\n/**\n * Ask the backend to produce the effective SQL for a given QB tree by firing a\n * `QueryBundleRequest` with `BUNDLE_MASK_COMBINED_SQL` and the tree translated\n * into an `additionalFilters` `FilterGroup`. The QB does not otherwise drive\n * the outgoing query in V1 — this hook exists purely to power the SQL preview\n * tab in the summary bar.\n */\nexport function useQBCombinedSql(\n tree: QBGroup | null,\n): UseQueryResult<string | undefined> {\n const { currentQueryRequest } = useQueryContext()\n\n const request: QueryBundleRequest = useMemo(() => {\n const translated = tree ? qbNodeToApiFilter(tree) : null\n // Reuse the current query's SQL + entity so the backend combines the QB\n // filters against the same base view, but ask only for combinedSql.\n return {\n ...currentQueryRequest,\n partMask: BUNDLE_MASK_COMBINED_SQL,\n query: {\n ...currentQueryRequest.query,\n additionalFilters: translated ? [translated] : undefined,\n // combinedSql is unaffected by paging/sort, so drop them to keep the\n // cache key stable across scroll and re-sort.\n offset: undefined,\n limit: undefined,\n sort: undefined,\n selectedFacets: undefined,\n },\n }\n }, [currentQueryRequest, tree])\n\n return useGetQueryResultBundle(request, {\n select: bundle => bundle.combinedSql,\n })\n}\n"],"mappings":";;;;;;;AAgBA,SAAgB,EACd,GACoC;CACpC,IAAM,EAAE,2BAAwB,EAAgB;CAsBhD,OAAO,EApB6B,QAAc;EAChD,IAAM,IAAa,IAAO,EAAkB,CAAI,IAAI;EAGpD,OAAO;GACL,GAAG;GACH,UAAA;GACA,OAAO;IACL,GAAG,EAAoB;IACvB,mBAAmB,IAAa,CAAC,CAAU,IAAI,KAAA;IAG/C,QAAQ,KAAA;IACR,OAAO,KAAA;IACP,MAAM,KAAA;IACN,gBAAgB,KAAA;GAClB;EACF;CACF,GAAG,CAAC,GAAqB,CAAI,CAEE,GAAS,EACtC,SAAQ,MAAU,EAAO,YAC3B,CAAC;AACH"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Facet + column-model metadata for the QB property picker and pill values,
3
+ * fetched against the *base* query state with any QB-managed `FilterGroup`
4
+ * entries stripped out of `additionalFilters`.
5
+ *
6
+ * Rationale: Synapse's facet-values computation applies `additionalFilters`
7
+ * globally (unlike `selectedFacets`, which are self-excluded per facet). Once
8
+ * the QB commits a `FilterGroup`, the current query's facet results collapse
9
+ * to only the values that pass the QB filter — leaving the user unable to
10
+ * add or edit values that were filtered out. Firing a separate metadata
11
+ * query with the QB's own `FilterGroup` removed gives the QB stable
12
+ * dropdowns while still honoring any non-QB filters and `selectedFacets`.
13
+ */
14
+ export declare function useQBFacetSourceMetadata(): {
15
+ columnModels: import("@sage-bionetworks/synapse-types").ColumnModel[];
16
+ facetResults: import("@sage-bionetworks/synapse-types").FacetColumnResult[];
17
+ };
18
+ //# sourceMappingURL=useQBFacetSourceMetadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQBFacetSourceMetadata.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/useQBFacetSourceMetadata.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB;;;EA6BvC"}
@@ -0,0 +1,27 @@
1
+ import { useQueryContext as e } from "../QueryContext/QueryContext.js";
2
+ import "../QueryContext/index.js";
3
+ import { useTableQueryUseQueryOptions as t } from "../QueryWrapper/TableQueryUseQueryOptions.js";
4
+ import { useMemo as n } from "react";
5
+ import { FILTER_GROUP_CONCRETE_TYPE_VALUE as r } from "@sage-bionetworks/synapse-types";
6
+ import { useSuspenseQuery as i } from "@tanstack/react-query";
7
+ //#region src/components/QueryBuilder/useQBFacetSourceMetadata.ts
8
+ function a() {
9
+ let { currentQueryRequest: a } = e(), { queryMetadataQueryOptions: o } = t(n(() => {
10
+ let e = (a.query.additionalFilters ?? []).filter((e) => e.concreteType !== r);
11
+ return {
12
+ ...a,
13
+ query: {
14
+ ...a.query,
15
+ additionalFilters: e.length > 0 ? e : void 0
16
+ }
17
+ };
18
+ }, [a])), { data: s } = i(o);
19
+ return n(() => ({
20
+ columnModels: s?.columnModels ?? [],
21
+ facetResults: s?.facets ?? []
22
+ }), [s]);
23
+ }
24
+ //#endregion
25
+ export { a as useQBFacetSourceMetadata };
26
+
27
+ //# sourceMappingURL=useQBFacetSourceMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQBFacetSourceMetadata.js","names":[],"sources":["../../../src/components/QueryBuilder/useQBFacetSourceMetadata.ts"],"sourcesContent":["import {\n FILTER_GROUP_CONCRETE_TYPE_VALUE,\n QueryBundleRequest,\n} from '@sage-bionetworks/synapse-types'\nimport { useSuspenseQuery } from '@tanstack/react-query'\nimport { useMemo } from 'react'\nimport { useQueryContext } from '../QueryContext'\nimport { useTableQueryUseQueryOptions } from '../QueryWrapper/TableQueryUseQueryOptions'\n\n/**\n * Facet + column-model metadata for the QB property picker and pill values,\n * fetched against the *base* query state with any QB-managed `FilterGroup`\n * entries stripped out of `additionalFilters`.\n *\n * Rationale: Synapse's facet-values computation applies `additionalFilters`\n * globally (unlike `selectedFacets`, which are self-excluded per facet). Once\n * the QB commits a `FilterGroup`, the current query's facet results collapse\n * to only the values that pass the QB filter — leaving the user unable to\n * add or edit values that were filtered out. Firing a separate metadata\n * query with the QB's own `FilterGroup` removed gives the QB stable\n * dropdowns while still honoring any non-QB filters and `selectedFacets`.\n */\nexport function useQBFacetSourceMetadata() {\n const { currentQueryRequest } = useQueryContext()\n\n const strippedRequest: QueryBundleRequest = useMemo(() => {\n const existingFilters = currentQueryRequest.query.additionalFilters ?? []\n const nonQbFilters = existingFilters.filter(\n f => f.concreteType !== FILTER_GROUP_CONCRETE_TYPE_VALUE,\n )\n return {\n ...currentQueryRequest,\n query: {\n ...currentQueryRequest.query,\n additionalFilters: nonQbFilters.length > 0 ? nonQbFilters : undefined,\n },\n } as QueryBundleRequest\n }, [currentQueryRequest])\n\n const { queryMetadataQueryOptions } =\n useTableQueryUseQueryOptions(strippedRequest)\n\n const { data } = useSuspenseQuery(queryMetadataQueryOptions)\n\n return useMemo(\n () => ({\n columnModels: data?.columnModels ?? [],\n facetResults: data?.facets ?? [],\n }),\n [data],\n )\n}\n"],"mappings":";;;;;;;AAsBA,SAAgB,IAA2B;CACzC,IAAM,EAAE,2BAAwB,EAAgB,GAgB1C,EAAE,iCACN,EAf0C,QAAc;EAExD,IAAM,KADkB,EAAoB,MAAM,qBAAqB,CAAC,GACnC,QACnC,MAAK,EAAE,iBAAiB,CAC1B;EACA,OAAO;GACL,GAAG;GACH,OAAO;IACL,GAAG,EAAoB;IACvB,mBAAmB,EAAa,SAAS,IAAI,IAAe,KAAA;GAC9D;EACF;CACF,GAAG,CAAC,CAAmB,CAGQ,CAAe,GAExC,EAAE,YAAS,EAAiB,CAAyB;CAE3D,OAAO,SACE;EACL,cAAc,GAAM,gBAAgB,CAAC;EACrC,cAAc,GAAM,UAAU,CAAC;CACjC,IACA,CAAC,CAAI,CACP;AACF"}
@@ -37,9 +37,22 @@ type QueryWrapperPlotNavOwnProps = {
37
37
  lockedColumn?: QueryWrapperProps['lockedColumn'];
38
38
  initialLimit?: number;
39
39
  hideTopLevelControls?: boolean;
40
+ /**
41
+ * When true, shows a `Show / Hide Query Builder` toggle in `TopLevelControls`.
42
+ * The QB and the facet nav are mutually exclusive — turning the QB on hides
43
+ * the facet nav entirely.
44
+ */
45
+ showQueryBuilderControl?: boolean;
46
+ /**
47
+ * When true, the QB is shown by default. When `showQueryBuilderControl` is
48
+ * also true, the user can toggle it back off from `TopLevelControls`. When
49
+ * `showQueryBuilderControl` is false the QB is permanently displayed with
50
+ * no toggle button.
51
+ */
52
+ defaultShowQueryBuilder?: boolean;
40
53
  } & Omit<TopLevelControlsProps, 'entityId'> & Pick<QueryWrapperPlotNavCustomPlotParams, 'onCustomPlotClick'> & Pick<QueryWrapperProps, 'isRowSelectionVisible' | 'rowSelectionPrimaryKey' | 'isRowSelectionUIFloating' | 'fileIdColumnName' | 'fileNameColumnName' | 'fileVersionColumnName'> & Pick<QueryVisualizationWrapperProps, 'defaultShowPlots' | 'visibleColumnCount' | 'hiddenColumns' | 'columnAliases' | 'renderFacetValue' | 'rgbIndex' | 'showLastUpdatedOn' | 'noContentPlaceholderType' | 'unitDescription' | 'additionalFiltersSessionStorageKey' | 'helpConfiguration' | 'hideCopyToClipboard' | 'hideSearchBarControl' | 'hideVisualizationsControl' | 'enabledExternalAnalysisPlatforms' | 'lockTextMatchesQueryFilterPill'> & Pick<QueryContextType, 'combineRangeFacetConfig'>;
41
54
  export type QueryWrapperPlotNavProps = QueryOrDeprecatedSearchParams & PlotsContainerProps & QueryWrapperPlotNavOwnProps;
42
- export type QueryWrapperPlotNavContentsProps = Pick<QueryWrapperPlotNavProps, 'tableConfiguration' | 'name' | 'cardConfiguration' | 'facetsToPlot' | 'availableFacets' | 'initialExpandedFacetControls' | 'hideDownload' | 'hideAddToDownloadListMenuItem' | 'hideProgrammaticOptionsMenuItem' | 'hideQueryCount' | 'hideSqlEditorControl' | 'hideVisualizationsControl' | 'searchConfiguration' | 'enabledExternalAnalysisPlatforms' | 'cavaticaConnectAccountURL' | 'customControls' | 'customPlots' | 'fileIdColumnName' | 'fileNameColumnName' | 'fileVersionColumnName' | 'initialLimit' | 'initialPlotTypeByFacetColumnName' | 'hideTopLevelControls'> & {
55
+ export type QueryWrapperPlotNavContentsProps = Pick<QueryWrapperPlotNavProps, 'tableConfiguration' | 'name' | 'cardConfiguration' | 'facetsToPlot' | 'availableFacets' | 'initialExpandedFacetControls' | 'hideDownload' | 'hideAddToDownloadListMenuItem' | 'hideProgrammaticOptionsMenuItem' | 'hideQueryCount' | 'hideSqlEditorControl' | 'hideVisualizationsControl' | 'searchConfiguration' | 'enabledExternalAnalysisPlatforms' | 'cavaticaConnectAccountURL' | 'customControls' | 'customPlots' | 'fileIdColumnName' | 'fileNameColumnName' | 'fileVersionColumnName' | 'initialLimit' | 'initialPlotTypeByFacetColumnName' | 'hideTopLevelControls' | 'showQueryBuilderControl' | 'defaultShowQueryBuilder'> & {
43
56
  isFullTextSearchEnabled: boolean;
44
57
  remount?: () => void;
45
58
  };
@@ -1 +1 @@
1
- {"version":3,"file":"QueryWrapperPlotNav.d.ts","sourceRoot":"","sources":["../../../src/components/QueryWrapperPlotNav/QueryWrapperPlotNav.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueryWrapperPlotNav.d.ts","sourceRoot":"","sources":["../../../src/components/QueryWrapperPlotNav/QueryWrapperPlotNav.tsx"],"names":[],"mappings":"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"}
@@ -1,159 +1,223 @@
1
1
  import "../../utils/SynapseConstants.js";
2
- import { isTable as e } from "../../utils/functions/EntityTypeUtils.js";
3
- import { getAdditionalFilters as t, parseEntityIdAndVersionFromSqlStatement as n } from "../../utils/functions/SqlFunctions.js";
2
+ import { isFilterGroup as e } from "../../utils/types/IsType.js";
3
+ import { isTable as t } from "../../utils/functions/EntityTypeUtils.js";
4
+ import { getAdditionalFilters as n, parseEntityIdAndVersionFromSqlStatement as r } from "../../utils/functions/SqlFunctions.js";
4
5
  import "../../utils/functions/index.js";
5
- import { SynapseErrorBoundary as r } from "../error/ErrorBanner.js";
6
+ import { SynapseErrorBoundary as i } from "../error/ErrorBanner.js";
6
7
  import "../../utils/index.js";
7
- import { useGetEntity as i } from "../../synapse-queries/entity/useEntity.js";
8
+ import { useGetEntity as a } from "../../synapse-queries/entity/useEntity.js";
8
9
  import "../../synapse-queries/index.js";
9
- import a from "../download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js";
10
- import { useQueryContext as o } from "../QueryContext/QueryContext.js";
10
+ import { ConfirmationDialog as o } from "../ConfirmationDialog/ConfirmationDialog.js";
11
+ import "../ConfirmationDialog/index.js";
12
+ import s from "../download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js";
13
+ import { useQueryContext as c } from "../QueryContext/QueryContext.js";
11
14
  import "../QueryContext/index.js";
12
- import { NoContentPlaceholderType as s } from "../SynapseTable/NoContentPlaceholderType.js";
13
- import { QueryVisualizationContextConsumer as c } from "../QueryVisualizationWrapper/QueryVisualizationContext.js";
14
- import { QueryVisualizationWrapper as l } from "../QueryVisualizationWrapper/QueryVisualizationWrapper.js";
15
+ import { NoContentPlaceholderType as l } from "../SynapseTable/NoContentPlaceholderType.js";
16
+ import { QueryVisualizationContextConsumer as u } from "../QueryVisualizationWrapper/QueryVisualizationContext.js";
17
+ import { QueryVisualizationWrapper as d } from "../QueryVisualizationWrapper/QueryVisualizationWrapper.js";
15
18
  import "../QueryVisualizationWrapper/index.js";
16
- import { isRowSelectionVisibleAtom as u } from "../QueryWrapper/TableRowSelectionState.js";
17
- import { QueryWrapper as d } from "../QueryWrapper/QueryWrapper.js";
19
+ import { isRowSelectionVisibleAtom as f } from "../QueryWrapper/TableRowSelectionState.js";
20
+ import { QueryWrapper as p } from "../QueryWrapper/QueryWrapper.js";
18
21
  import "../QueryWrapper/index.js";
19
22
  import "../error/index.js";
20
- import f from "../TotalQueryResults.js";
21
- import { SqlEditor as p } from "../SynapseTable/SqlEditor.js";
22
- import { QueryWrapperErrorBoundary as m } from "../QueryWrapperErrorBoundary.js";
23
- import { ModalDownload as h } from "../ModalDownload/ModalDownload.js";
24
- import g from "../QueryWrapper/QueryWrapperLoadingScreen.js";
25
- import { RowSetView as _ } from "./RowSetView.js";
26
- import v from "../widgets/query-filter/FacetFilterControls.js";
27
- import { useGetAddToDownloadListRequestForCurrentQuery as y } from "../QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js";
28
- import { FullTextSearch as b } from "../FullTextSearch/FullTextSearch.js";
29
- import x from "../SynapseTable/SearchV2.js";
30
- import S from "../SynapseTable/TopLevelControls/TopLevelControls.js";
31
- import { CustomControls as C } from "../SynapseTable/CustomControls/CustomControls.js";
32
- import w from "../widgets/facet-nav/PlotsContainer.js";
33
- import { Suspense as T, createElement as E, useMemo as D, useState as O } from "react";
34
- import { Box as k } from "@mui/material";
35
- import { Fragment as A, jsx as j, jsxs as M } from "react/jsx-runtime";
36
- import { useQuery as N } from "@tanstack/react-query";
37
- import { useAtomValue as P } from "jotai";
23
+ import m from "../TotalQueryResults.js";
24
+ import { SqlEditor as h } from "../SynapseTable/SqlEditor.js";
25
+ import { QueryWrapperErrorBoundary as g } from "../QueryWrapperErrorBoundary.js";
26
+ import { ModalDownload as _ } from "../ModalDownload/ModalDownload.js";
27
+ import v from "../QueryWrapper/QueryWrapperLoadingScreen.js";
28
+ import { RowSetView as y } from "./RowSetView.js";
29
+ import b from "../widgets/query-filter/FacetFilterControls.js";
30
+ import { useGetAddToDownloadListRequestForCurrentQuery as x } from "../QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js";
31
+ import { FullTextSearch as S } from "../FullTextSearch/FullTextSearch.js";
32
+ import C from "../SynapseTable/SearchV2.js";
33
+ import w from "../SynapseTable/TopLevelControls/TopLevelControls.js";
34
+ import { CustomControls as T } from "../SynapseTable/CustomControls/CustomControls.js";
35
+ import E from "../widgets/facet-nav/PlotsContainer.js";
36
+ import { defaultQBGroup as D, hasCompleteCondition as O } from "../QueryBuilder/queryBuilderOperations.js";
37
+ import { qbNodeToApiFilter as ee, selectedFacetsToQBGroup as te } from "../QueryBuilder/queryBuilderTranslation.js";
38
+ import { Suspense as k, createElement as A, lazy as j, useMemo as M, useState as N } from "react";
39
+ import { Box as ne } from "@mui/material";
40
+ import { jsx as P, jsxs as re } from "react/jsx-runtime";
41
+ import { useQuery as ie } from "@tanstack/react-query";
42
+ import { useAtomValue as ae } from "jotai";
38
43
  //#region src/components/QueryWrapperPlotNav/QueryWrapperPlotNav.tsx
39
- var F = "isShowingFacetFilters", I = "isHidingFacetFilters", L = "hasSelectedRows";
40
- function R(e) {
41
- let { tableConfiguration: t, name: n, cardConfiguration: i, facetsToPlot: s, availableFacets: l, initialExpandedFacetControls: d, hideDownload: g, hideAddToDownloadListMenuItem: E, hideProgrammaticOptionsMenuItem: D, hideQueryCount: R, hideSqlEditorControl: z, hideVisualizationsControl: B, searchConfiguration: V, cavaticaConnectAccountURL: H, customControls: U, remount: W = () => {}, isFullTextSearchEnabled: ee, customPlots: G, initialLimit: K, initialPlotTypeByFacetColumnName: q, hideTopLevelControls: J } = e, Y = o(), [X, Z] = O(!1), { hasFacetedSelectColumn: Q, queryMetadataQueryOptions: te } = Y, { isLoading: ne } = N(te), re = P(u), $ = Y.currentQueryRequest, ie = $?.query.selectedFacets !== void 0 && $.query.selectedFacets.length > 0 || $?.query.additionalFilters !== void 0 && $?.query.additionalFilters.length > 0, ae = y();
42
- return /* @__PURE__ */ j(c, { children: (e) => {
44
+ var oe = j(() => import("../QueryBuilder/QueryBuilderControls.js").then((e) => ({ default: e.QueryBuilderControls }))), F = "isShowingFacetFilters", I = "isHidingFacetFilters", L = "hasSelectedRows";
45
+ function R(t) {
46
+ let { tableConfiguration: n, name: r, cardConfiguration: a, facetsToPlot: l, availableFacets: d, initialExpandedFacetControls: p, hideDownload: v, hideAddToDownloadListMenuItem: A, hideProgrammaticOptionsMenuItem: j, hideQueryCount: M, hideSqlEditorControl: R, hideVisualizationsControl: z, searchConfiguration: B, cavaticaConnectAccountURL: se, customControls: V, remount: H = () => {}, isFullTextSearchEnabled: ce, customPlots: le, initialLimit: ue, initialPlotTypeByFacetColumnName: de, hideTopLevelControls: U, showQueryBuilderControl: fe = !1, defaultShowQueryBuilder: pe = !1 } = t, W = c(), [me, he] = N(!1), [G, K] = N(pe), [q, J] = N(() => D()), [ge, Y] = N(!1), { hasFacetedSelectColumn: X, queryMetadataQueryOptions: _e } = W, { executeQueryRequest: Z } = W, { isLoading: ve, data: ye } = ie(_e), be = () => {
47
+ let t = W.currentQueryRequest.query.selectedFacets;
48
+ if (t && t.length > 0) {
49
+ let n = te(t, ye?.columnModels), r = ee(n);
50
+ J(n), Z((t) => ({
51
+ ...t,
52
+ query: {
53
+ ...t.query,
54
+ selectedFacets: void 0,
55
+ additionalFilters: r ? [...(t.query.additionalFilters ?? []).filter((t) => !e(t)), r] : t.query.additionalFilters
56
+ }
57
+ }));
58
+ }
59
+ K(!0);
60
+ }, Q = () => {
61
+ J(D()), Z((t) => ({
62
+ ...t,
63
+ query: {
64
+ ...t.query,
65
+ additionalFilters: t.query.additionalFilters?.filter((t) => !e(t))
66
+ }
67
+ })), K(!1);
68
+ }, xe = () => {
69
+ if (!G) {
70
+ be();
71
+ return;
72
+ }
73
+ let t = W.currentQueryRequest.query.additionalFilters?.some(e) ?? !1;
74
+ if (O(q) || t) {
75
+ Y(!0);
76
+ return;
77
+ }
78
+ Q();
79
+ }, Se = ae(f), $ = W.currentQueryRequest, Ce = $?.query.selectedFacets !== void 0 && $.query.selectedFacets.length > 0 || $?.query.additionalFilters !== void 0 && $?.query.additionalFilters.length > 0, we = x();
80
+ return /* @__PURE__ */ P(u, { children: (e) => {
43
81
  if (e === void 0) throw Error("No queryVisualizationContext found when using QueryVisualizationContextConsumer");
44
- return /* @__PURE__ */ j(k, {
45
- className: `QueryWrapperPlotNav ${e.showFacetFilter ? F : I} ${re ? L : ""} ${J ? "isHidingTopLevelControls" : ""}`,
46
- sx: { "*": { cursor: ne ? "wait" : void 0 } },
47
- children: /* @__PURE__ */ M(m, { children: [
48
- ee ? /* @__PURE__ */ j(b, { ftsConfig: V?.ftsConfig }) : /* @__PURE__ */ j(x, {
49
- ...V,
50
- queryContext: Y,
82
+ return /* @__PURE__ */ P(ne, {
83
+ className: `QueryWrapperPlotNav ${e.showFacetFilter && !G ? F : I} ${Se ? L : ""} ${U ? "isHidingTopLevelControls" : ""} ${G ? "isShowingQueryBuilder" : ""}`,
84
+ sx: { "*": { cursor: ve ? "wait" : void 0 } },
85
+ children: /* @__PURE__ */ re(g, { children: [
86
+ ce ? /* @__PURE__ */ P(S, { ftsConfig: B?.ftsConfig }) : /* @__PURE__ */ P(C, {
87
+ ...B,
88
+ queryContext: W,
51
89
  queryVisualizationContext: e
52
90
  }),
53
- /* @__PURE__ */ j(p, {}),
54
- e.showDownloadConfirmation && /* @__PURE__ */ j(a, {
55
- addToDownloadListRequest: ae,
91
+ /* @__PURE__ */ P(h, {}),
92
+ e.showDownloadConfirmation && /* @__PURE__ */ P(s, {
93
+ addToDownloadListRequest: we,
56
94
  onClose: () => e.setShowDownloadConfirmation(!1)
57
95
  }),
58
- !J && /* @__PURE__ */ j(r, { children: /* @__PURE__ */ j(S, {
59
- showColumnSelection: t !== void 0,
60
- name: n,
61
- hideDownload: g,
62
- hideAddToDownloadListMenuItem: E,
63
- hideProgrammaticOptionsMenuItem: D,
64
- hideQueryCount: R,
65
- hideFacetFilterControl: !Q,
66
- hideVisualizationsControl: !Q || B,
67
- hideSqlEditorControl: z,
68
- cavaticaConnectAccountURL: H,
69
- remount: W,
70
- customControls: U
96
+ !U && /* @__PURE__ */ P(i, { children: /* @__PURE__ */ P(w, {
97
+ showColumnSelection: n !== void 0,
98
+ name: r,
99
+ hideDownload: v,
100
+ hideAddToDownloadListMenuItem: A,
101
+ hideProgrammaticOptionsMenuItem: j,
102
+ hideQueryCount: M,
103
+ hideFacetFilterControl: !X || G,
104
+ hideVisualizationsControl: !X || z,
105
+ hideSqlEditorControl: R,
106
+ cavaticaConnectAccountURL: se,
107
+ remount: H,
108
+ customControls: V,
109
+ showQueryBuilderControl: fe,
110
+ showQueryBuilder: G,
111
+ onToggleQueryBuilder: xe
71
112
  }) }),
72
- Q && /* @__PURE__ */ j(A, { children: /* @__PURE__ */ j(v, {
73
- availableFacets: l,
74
- initialExpandedFacetControls: d
75
- }) }),
76
- /* @__PURE__ */ j(T, {
113
+ G ? /* @__PURE__ */ P(k, {
77
114
  fallback: null,
78
- children: /* @__PURE__ */ j(f, {
115
+ children: /* @__PURE__ */ P("div", {
116
+ className: "QueryBuilderControls",
117
+ children: /* @__PURE__ */ P(oe, {
118
+ tree: q,
119
+ onTreeChange: J
120
+ })
121
+ })
122
+ }) : X && /* @__PURE__ */ P(b, {
123
+ availableFacets: d,
124
+ initialExpandedFacetControls: p
125
+ }),
126
+ /* @__PURE__ */ P(k, {
127
+ fallback: null,
128
+ children: /* @__PURE__ */ P(m, {
79
129
  frontText: "",
80
- endText: ie ? "filtered by" : "",
130
+ endText: Ce ? "filtered by" : "",
81
131
  hideIfUnfiltered: !0
82
132
  })
83
133
  }),
84
- /* @__PURE__ */ j(C, {
85
- customControls: U,
86
- remount: W
134
+ /* @__PURE__ */ P(T, {
135
+ customControls: V,
136
+ remount: H
137
+ }),
138
+ /* @__PURE__ */ P(E, {
139
+ facetsToPlot: l,
140
+ customPlots: le,
141
+ initialPlotTypeByFacetColumnName: de
87
142
  }),
88
- /* @__PURE__ */ j(w, {
89
- facetsToPlot: s,
90
- customPlots: G,
91
- initialPlotTypeByFacetColumnName: q
143
+ /* @__PURE__ */ P(y, {
144
+ tableConfiguration: n,
145
+ hideDownload: v,
146
+ cardConfiguration: a,
147
+ initialLimit: ue
92
148
  }),
93
- /* @__PURE__ */ j(_, {
94
- tableConfiguration: t,
95
- hideDownload: g,
96
- cardConfiguration: i,
97
- initialLimit: K
149
+ me && /* @__PURE__ */ P(_, {
150
+ getLastQueryRequest: W?.getCurrentQueryRequest,
151
+ onClose: () => he(!1)
98
152
  }),
99
- X && /* @__PURE__ */ j(h, {
100
- getLastQueryRequest: Y?.getCurrentQueryRequest,
101
- onClose: () => Z(!1)
153
+ /* @__PURE__ */ P(o, {
154
+ open: ge,
155
+ title: "Hide Query Builder?",
156
+ content: "Hiding the Query Builder will clear the conditions you've built. This can't be undone.",
157
+ confirmButtonProps: {
158
+ children: "Hide Query Builder",
159
+ color: "error",
160
+ variant: "contained"
161
+ },
162
+ onConfirm: () => {
163
+ Y(!1), Q();
164
+ },
165
+ onCancel: () => Y(!1)
102
166
  })
103
167
  ] })
104
168
  });
105
169
  } });
106
170
  }
107
- function z(r) {
108
- let { sql: a, tableConfiguration: o, isInfinite: c = !o, limit: u = 25, showLastUpdatedOn: f, unitDescription: p, additionalFiltersSessionStorageKey: m, helpConfiguration: h, customPlots: _, enabledExternalAnalysisPlatforms: v } = r, { entityId: y, versionNumber: b } = n(r.query?.sql ?? a ?? ""), x = D(() => r.query ? r.query : r.initQueryJson ? JSON.parse(r.initQueryJson) : {
109
- sql: a,
110
- additionalFilters: t(r.searchParams, r.sqlOperator, m),
111
- limit: u,
171
+ function z(e) {
172
+ let { sql: i, tableConfiguration: o, isInfinite: s = !o, limit: c = 25, showLastUpdatedOn: u, unitDescription: f, additionalFiltersSessionStorageKey: m, helpConfiguration: h, customPlots: g, enabledExternalAnalysisPlatforms: _ } = e, { entityId: y, versionNumber: b } = r(e.query?.sql ?? i ?? ""), x = M(() => e.query ? e.query : e.initQueryJson ? JSON.parse(e.initQueryJson) : {
173
+ sql: i,
174
+ additionalFilters: n(e.searchParams, e.sqlOperator, m),
175
+ limit: c,
112
176
  offset: 0
113
177
  }, [
114
- r.query,
115
- r.initQueryJson,
116
- r.searchParams,
117
- r.sqlOperator,
178
+ e.query,
179
+ e.initQueryJson,
180
+ e.searchParams,
181
+ e.sqlOperator,
118
182
  m,
119
- a,
120
- u
121
- ]), [S, C] = O(1), w = () => {
183
+ i,
184
+ c
185
+ ]), [S, C] = N(1), w = () => {
122
186
  C(S + 1);
123
- }, { data: k } = i(y, b), A = {
187
+ }, { data: T } = a(y, b), E = {
124
188
  entityId: y ?? "",
125
189
  concreteType: "org.sagebionetworks.repo.model.table.QueryBundleRequest",
126
190
  partMask: 255,
127
191
  query: x
128
- }, M = (k && e(k) && k.isSearchEnabled) ?? !1, N = `${JSON.stringify(A)}-${S}`;
129
- return /* @__PURE__ */ E(d, {
130
- ...r,
131
- initQueryRequest: A,
132
- key: N,
133
- isInfinite: c
134
- }, /* @__PURE__ */ j(T, {
135
- fallback: /* @__PURE__ */ j(g, {}),
136
- children: /* @__PURE__ */ j(l, {
137
- unitDescription: p,
138
- rgbIndex: r.rgbIndex,
139
- columnAliases: r.columnAliases,
140
- renderFacetValue: r.renderFacetValue,
141
- dataUseModifiersColumnName: r.cardConfiguration?.genericCardSchema?.dataUseModifiersColumnName,
192
+ }, D = (T && t(T) && T.isSearchEnabled) ?? !1, O = `${JSON.stringify(E)}-${S}`;
193
+ return /* @__PURE__ */ A(p, {
194
+ ...e,
195
+ initQueryRequest: E,
196
+ key: O,
197
+ isInfinite: s
198
+ }, /* @__PURE__ */ P(k, {
199
+ fallback: /* @__PURE__ */ P(v, {}),
200
+ children: /* @__PURE__ */ P(d, {
201
+ unitDescription: f,
202
+ rgbIndex: e.rgbIndex,
203
+ columnAliases: e.columnAliases,
204
+ renderFacetValue: e.renderFacetValue,
205
+ dataUseModifiersColumnName: e.cardConfiguration?.genericCardSchema?.dataUseModifiersColumnName,
142
206
  helpConfiguration: h,
143
- visibleColumnCount: r.visibleColumnCount,
144
- hiddenColumns: r.hiddenColumns,
145
- defaultShowPlots: r.defaultShowPlots,
146
- hideCopyToClipboard: r.hideCopyToClipboard,
147
- defaultShowSearchBar: (r.defaultShowSearchBox || M) && !r.hideSearchBarControl,
148
- lockTextMatchesQueryFilterPill: r.lockTextMatchesQueryFilterPill,
149
- hideSearchBarControl: r.hideSearchBarControl,
150
- showLastUpdatedOn: f,
151
- noContentPlaceholderType: s.INTERACTIVE,
152
- hasCustomPlots: Array.isArray(_) && _.length > 0,
153
- enabledExternalAnalysisPlatforms: v,
154
- children: /* @__PURE__ */ j(R, {
155
- ...r,
156
- isFullTextSearchEnabled: M,
207
+ visibleColumnCount: e.visibleColumnCount,
208
+ hiddenColumns: e.hiddenColumns,
209
+ defaultShowPlots: e.defaultShowPlots,
210
+ hideCopyToClipboard: e.hideCopyToClipboard,
211
+ defaultShowSearchBar: (e.defaultShowSearchBox || D) && !e.hideSearchBarControl,
212
+ lockTextMatchesQueryFilterPill: e.lockTextMatchesQueryFilterPill,
213
+ hideSearchBarControl: e.hideSearchBarControl,
214
+ showLastUpdatedOn: u,
215
+ noContentPlaceholderType: l.INTERACTIVE,
216
+ hasCustomPlots: Array.isArray(g) && g.length > 0,
217
+ enabledExternalAnalysisPlatforms: _,
218
+ children: /* @__PURE__ */ P(R, {
219
+ ...e,
220
+ isFullTextSearchEnabled: D,
157
221
  remount: w
158
222
  })
159
223
  })