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
@@ -0,0 +1,101 @@
1
+ .row {
2
+ display: flex;
3
+ align-items: center;
4
+ gap: 8px;
5
+ padding: 4px 0;
6
+ min-height: 30px;
7
+
8
+ // Value pills adopt the parent group's accent — parent sets `--qb-pill-color`
9
+ // as inline style on its wrapper (see FilterGroupNode).
10
+ --qb-pill-color: var(--synapse-primary-action-color);
11
+ }
12
+
13
+ .remove {
14
+ color: var(--synapse-gray-600) !important;
15
+ border: 1px solid var(--synapse-border-color-gray);
16
+ border-radius: 4px !important;
17
+ padding: 4px !important;
18
+
19
+ &:hover {
20
+ color: var(--synapse-error);
21
+ border-color: var(--synapse-error);
22
+ background-color: transparent !important;
23
+ }
24
+ }
25
+
26
+ // Match the field heights across the row so Property, Operator, and value
27
+ // inputs all sit on the same baseline. Outlined inputs get consistent
28
+ // padding via MUI defaults; we just fix the height and widths.
29
+ .propertyPicker,
30
+ .operatorPicker,
31
+ .rangeInput,
32
+ .textInput {
33
+ :global(.MuiOutlinedInput-root) {
34
+ height: 36px;
35
+ font-size: 14px;
36
+ }
37
+ }
38
+
39
+ .propertyPicker {
40
+ min-width: 200px;
41
+ }
42
+
43
+ .operatorPicker {
44
+ min-width: 120px;
45
+ }
46
+
47
+ .rangeInput {
48
+ width: 120px;
49
+ }
50
+
51
+ .textInput {
52
+ min-width: 200px;
53
+ }
54
+
55
+ .pillGroupContainer {
56
+ display: flex;
57
+ flex-direction: column;
58
+ gap: 6px;
59
+ flex: 1;
60
+ min-width: 0;
61
+ }
62
+
63
+ .pillFilter {
64
+ max-width: 260px;
65
+ }
66
+
67
+ .pillGroupScroll {
68
+ max-height: 120px;
69
+ overflow-y: auto;
70
+ }
71
+
72
+ .pillGroup {
73
+ display: flex;
74
+ flex-wrap: wrap;
75
+ gap: 6px;
76
+
77
+ // MUI's ToggleButtonGroup uses `:not(:first-of-type)` rules to collapse
78
+ // grouped buttons into an attached pill bar. `!important` is the pragmatic
79
+ // way to undo that; otherwise our pills have flat left edges and negative
80
+ // margins.
81
+ :global(.MuiToggleButton-root),
82
+ :global(.MuiToggleButtonGroup-grouped) {
83
+ text-transform: none;
84
+ padding: 2px 12px;
85
+ border-radius: 999px !important;
86
+ border: 1px solid var(--synapse-gray-dark) !important;
87
+ margin: 0 !important;
88
+ font-size: 13px;
89
+ line-height: 1.4;
90
+ }
91
+
92
+ :global(.MuiToggleButton-root.Mui-selected) {
93
+ background-color: var(--qb-pill-color);
94
+ color: white;
95
+ border-color: var(--qb-pill-color);
96
+ }
97
+
98
+ :global(.MuiToggleButton-root.Mui-selected:hover) {
99
+ background-color: var(--qb-pill-color);
100
+ }
101
+ }
@@ -0,0 +1 @@
1
+ ._group_ryxud_1{border-left:2px solid var(--qb-accent-color,var(--synapse-primary-action-color));border-radius:2px 0 0 2px;padding:8px 0 8px 16px;position:relative}._group_ryxud_1._nested_ryxud_7{margin-top:4px;margin-bottom:4px}._group_ryxud_1._dropTarget_ryxud_11{box-shadow:inset 0 0 0 2px var(--qb-accent-color,var(--synapse-primary-action-color));border-radius:3px}._header_ryxud_16{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:4px;display:flex}._combinator_ryxud_24 .MuiToggleButton-root{text-transform:none;border-color:var(--synapse-gray-dark);min-width:44px;color:var(--synapse-gray-regular);padding:2px 12px;font-weight:700}._combinator_ryxud_24 .MuiToggleButton-root.Mui-selected{background-color:var(--qb-accent-color,var(--synapse-primary-action-color));color:#fff;border-color:var(--qb-accent-color,var(--synapse-primary-action-color))}._combinator_ryxud_24 .MuiToggleButton-root.Mui-selected:hover{background-color:var(--qb-accent-color,var(--synapse-primary-action-color))}._notToggle_ryxud_43{text-transform:none;border-color:var(--synapse-gray-dark);color:var(--synapse-gray-regular);padding:2px 12px;font-size:13px;font-weight:600}._notToggle_ryxud_43.Mui-selected,._notToggle_ryxud_43.Mui-selected:hover{background-color:var(--synapse-error);color:#fff;border-color:var(--synapse-error)}._actions_ryxud_57{align-items:center;gap:4px;margin-left:auto;display:flex}._actionButton_ryxud_64{text-transform:none;min-width:0;color:var(--synapse-primary-action-color);padding:2px 8px;font-weight:500}._children_ryxud_72{flex-direction:column;gap:2px;display:flex}._emptyState_ryxud_78{color:var(--synapse-gray-deemphasized);padding:8px 4px;font-size:13px;font-style:italic}
@@ -0,0 +1,11 @@
1
+ import { QBGroup } from './QueryBuilderTypes';
2
+ export type FilterGroupNodeProps = {
3
+ group: QBGroup;
4
+ isRoot?: boolean;
5
+ parentGroupId?: string;
6
+ index?: number;
7
+ /** Nesting level, used to resolve drops into the innermost group. */
8
+ depth?: number;
9
+ };
10
+ export declare function FilterGroupNode(props: FilterGroupNodeProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=FilterGroupNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterGroupNode.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/FilterGroupNode.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAa,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAExD,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAmK1D"}
@@ -0,0 +1,134 @@
1
+ import { isQBGroup as e } from "./QueryBuilderTypes.js";
2
+ import { groupDropZoneData as t, groupDropZoneId as n } from "./queryBuilderDnd.js";
3
+ import { useQueryBuilderInternalContext as r } from "./QueryBuilderInternalContext.js";
4
+ import i from "./queryBuilderDrag.module.js";
5
+ import { QBDragHandle as a } from "./QBDragHandle.js";
6
+ import { FilterConditionRow as o } from "./FilterConditionRow.js";
7
+ import s from "./FilterGroupNode.module.js";
8
+ import { Button as c, ToggleButton as l, ToggleButtonGroup as u } from "@mui/material";
9
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
10
+ import { useForkRef as p } from "@mui/material/utils";
11
+ import { useSortable as m } from "@dnd-kit/react/sortable";
12
+ import { pointerIntersection as h } from "@dnd-kit/collision";
13
+ import { useDroppable as g } from "@dnd-kit/react";
14
+ //#region src/components/QueryBuilder/FilterGroupNode.tsx
15
+ function _(b) {
16
+ let { group: x, isRoot: S = !1, parentGroupId: C, index: w, depth: T = 0 } = b, { addConditionAt: E, addChildGroupAt: D, clearGroupAt: O, updateGroupAt: k, removeGroupAt: A } = r(), { ref: j, handleRef: M, isDragSource: N } = m({
17
+ id: x.id,
18
+ index: w ?? 0,
19
+ group: C ?? x.id,
20
+ disabled: {
21
+ draggable: S,
22
+ droppable: !0
23
+ }
24
+ }), { ref: P, isDropTarget: F } = g({
25
+ id: n(x.id),
26
+ data: t(x.id),
27
+ collisionDetector: h,
28
+ collisionPriority: T
29
+ }), I = p(j, P), L = {
30
+ "--qb-accent-color": v(x),
31
+ "--qb-pill-color": v(x)
32
+ };
33
+ return /* @__PURE__ */ f("div", {
34
+ ref: I,
35
+ className: `${s.group} ${S ? "" : s.nested}${N ? ` ${i.dragSource}` : ""}${F ? ` ${s.dropTarget}` : ""}`,
36
+ style: L,
37
+ role: "group",
38
+ "aria-label": y(x),
39
+ "data-qb-node-id": x.id,
40
+ children: [/* @__PURE__ */ f("div", {
41
+ className: s.header,
42
+ children: [
43
+ !S && /* @__PURE__ */ d(a, {
44
+ handleRef: M,
45
+ label: "Drag condition group into another condition group"
46
+ }),
47
+ /* @__PURE__ */ f(u, {
48
+ size: "small",
49
+ className: s.combinator,
50
+ exclusive: !0,
51
+ value: x.combinator,
52
+ "aria-label": "Boolean combinator",
53
+ onChange: (e, t) => {
54
+ t != null && k(x.id, { combinator: t });
55
+ },
56
+ children: [/* @__PURE__ */ d(l, {
57
+ value: "AND",
58
+ "aria-label": "AND",
59
+ children: "AND"
60
+ }), /* @__PURE__ */ d(l, {
61
+ value: "OR",
62
+ "aria-label": "OR",
63
+ children: "OR"
64
+ })]
65
+ }),
66
+ /* @__PURE__ */ d(l, {
67
+ size: "small",
68
+ value: "not",
69
+ selected: x.not,
70
+ className: s.notToggle,
71
+ "aria-label": "Negate this group",
72
+ "aria-pressed": x.not,
73
+ onChange: () => k(x.id, { not: !x.not }),
74
+ children: "Exclude (NOT)"
75
+ }),
76
+ /* @__PURE__ */ f("div", {
77
+ className: s.actions,
78
+ children: [
79
+ /* @__PURE__ */ d(c, {
80
+ className: s.actionButton,
81
+ size: "small",
82
+ onClick: () => E(x.id),
83
+ children: "+ Condition"
84
+ }),
85
+ /* @__PURE__ */ d(c, {
86
+ className: s.actionButton,
87
+ size: "small",
88
+ onClick: () => D(x.id),
89
+ children: "+ Condition Group"
90
+ }),
91
+ /* @__PURE__ */ d(c, {
92
+ className: s.actionButton,
93
+ size: "small",
94
+ onClick: () => O(x.id),
95
+ disabled: x.children.length === 0,
96
+ children: "Clear"
97
+ }),
98
+ !S && /* @__PURE__ */ d(c, {
99
+ className: s.actionButton,
100
+ size: "small",
101
+ onClick: () => A(x.id),
102
+ children: "Delete Condition Group"
103
+ })
104
+ ]
105
+ })
106
+ ]
107
+ }), /* @__PURE__ */ d("div", {
108
+ className: s.children,
109
+ children: x.children.length === 0 ? /* @__PURE__ */ d("div", {
110
+ className: s.emptyState,
111
+ children: "No conditions yet, add one above"
112
+ }) : x.children.map((t, n) => e(t) ? /* @__PURE__ */ d(_, {
113
+ group: t,
114
+ parentGroupId: x.id,
115
+ index: n,
116
+ depth: T + 1
117
+ }, t.id) : /* @__PURE__ */ d(o, {
118
+ condition: t,
119
+ parentGroupId: x.id,
120
+ index: n
121
+ }, t.id))
122
+ })]
123
+ });
124
+ }
125
+ function v(e) {
126
+ return e.not ? "var(--synapse-error)" : e.combinator === "OR" ? "var(--synapse-warning)" : "var(--synapse-primary-action-color)";
127
+ }
128
+ function y(e) {
129
+ return `${e.not ? "excluded " : ""}${e.combinator} filter group`;
130
+ }
131
+ //#endregion
132
+ export { _ as FilterGroupNode };
133
+
134
+ //# sourceMappingURL=FilterGroupNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterGroupNode.js","names":[],"sources":["../../../src/components/QueryBuilder/FilterGroupNode.tsx"],"sourcesContent":["import { Button, ToggleButton, ToggleButtonGroup } from '@mui/material'\nimport { useForkRef } from '@mui/material/utils'\nimport { pointerIntersection } from '@dnd-kit/collision'\nimport { useDroppable } from '@dnd-kit/react'\nimport { useSortable } from '@dnd-kit/react/sortable'\nimport { CSSProperties } from 'react'\nimport { FilterConditionRow } from './FilterConditionRow'\nimport styles from './FilterGroupNode.module.scss'\nimport { QBDragHandle } from './QBDragHandle'\nimport dragStyles from './queryBuilderDrag.module.scss'\nimport { groupDropZoneData, groupDropZoneId } from './queryBuilderDnd'\nimport { useQueryBuilderInternalContext } from './QueryBuilderInternalContext'\nimport { isQBGroup, QBGroup } from './QueryBuilderTypes'\n\nexport type FilterGroupNodeProps = {\n group: QBGroup\n isRoot?: boolean\n parentGroupId?: string\n index?: number\n /** Nesting level, used to resolve drops into the innermost group. */\n depth?: number\n}\n\nexport function FilterGroupNode(props: FilterGroupNodeProps) {\n const { group, isRoot = false, parentGroupId, index, depth = 0 } = props\n const {\n addConditionAt,\n addChildGroupAt,\n clearGroupAt,\n updateGroupAt,\n removeGroupAt,\n } = useQueryBuilderInternalContext()\n\n // Groups become drop targets only through the `useDroppable` zone below.\n // Keep the sortable's droppable half disabled unless `useQueryBuilderDrag`\n // also resolves sortable targets: for any target the app doesn't reposition\n // in `onDragOver`, dnd-kit's OptimisticSortingPlugin moves the DOM node\n // itself, and React's next commit throws `NotFoundError` on `removeChild`.\n const {\n ref: sortableRef,\n handleRef,\n isDragSource,\n } = useSortable({\n id: group.id,\n index: index ?? 0,\n group: parentGroupId ?? group.id,\n disabled: { draggable: isRoot, droppable: true },\n })\n\n // `useQueryBuilderDrag` identifies the target group by `data.groupId`. Zones\n // nest inside their groups, so the pointer is inside every ancestor of the\n // group it is over; hit-testing by pointer and ranking by depth selects the\n // innermost. `collisionPriority` replaces the ranking a detector returns, so\n // the detector has to be one that reports nothing but pointer hits —\n // otherwise a deeper zone the dragged box merely overlaps outranks the zone\n // the pointer is actually in.\n const { ref: dropZoneRef, isDropTarget } = useDroppable({\n id: groupDropZoneId(group.id),\n data: groupDropZoneData(group.id),\n collisionDetector: pointerIntersection,\n collisionPriority: depth,\n })\n\n // The drag source and the drop zone are the same element.\n const groupRef = useForkRef(sortableRef, dropZoneRef)\n\n const style: CSSProperties = {\n ['--qb-accent-color' as string]: accentColorFor(group),\n ['--qb-pill-color' as string]: accentColorFor(group),\n }\n\n return (\n <div\n ref={groupRef}\n className={`${styles.group} ${isRoot ? '' : styles.nested}${\n isDragSource ? ` ${dragStyles.dragSource}` : ''\n }${isDropTarget ? ` ${styles.dropTarget}` : ''}`}\n style={style}\n role=\"group\"\n aria-label={groupAriaLabel(group)}\n data-qb-node-id={group.id}\n >\n <div className={styles.header}>\n {!isRoot && (\n <QBDragHandle\n handleRef={handleRef}\n label=\"Drag condition group into another condition group\"\n />\n )}\n <ToggleButtonGroup\n size=\"small\"\n className={styles.combinator}\n exclusive\n value={group.combinator}\n aria-label=\"Boolean combinator\"\n onChange={(_event, next) => {\n if (next == null) return\n updateGroupAt(group.id, { combinator: next })\n }}\n >\n <ToggleButton value=\"AND\" aria-label=\"AND\">\n AND\n </ToggleButton>\n <ToggleButton value=\"OR\" aria-label=\"OR\">\n OR\n </ToggleButton>\n </ToggleButtonGroup>\n\n <ToggleButton\n size=\"small\"\n value=\"not\"\n selected={group.not}\n className={styles.notToggle}\n aria-label=\"Negate this group\"\n aria-pressed={group.not}\n onChange={() => updateGroupAt(group.id, { not: !group.not })}\n >\n Exclude (NOT)\n </ToggleButton>\n\n <div className={styles.actions}>\n <Button\n className={styles.actionButton}\n size=\"small\"\n onClick={() => addConditionAt(group.id)}\n >\n + Condition\n </Button>\n <Button\n className={styles.actionButton}\n size=\"small\"\n onClick={() => addChildGroupAt(group.id)}\n >\n + Condition Group\n </Button>\n <Button\n className={styles.actionButton}\n size=\"small\"\n onClick={() => clearGroupAt(group.id)}\n disabled={group.children.length === 0}\n >\n Clear\n </Button>\n {!isRoot && (\n <Button\n className={styles.actionButton}\n size=\"small\"\n onClick={() => removeGroupAt(group.id)}\n >\n Delete Condition Group\n </Button>\n )}\n </div>\n </div>\n\n <div className={styles.children}>\n {group.children.length === 0 ? (\n <div className={styles.emptyState}>\n No conditions yet, add one above\n </div>\n ) : (\n group.children.map((child, childIndex) => {\n if (isQBGroup(child)) {\n return (\n <FilterGroupNode\n key={child.id}\n group={child}\n parentGroupId={group.id}\n index={childIndex}\n depth={depth + 1}\n />\n )\n }\n return (\n <FilterConditionRow\n key={child.id}\n condition={child}\n parentGroupId={group.id}\n index={childIndex}\n />\n )\n })\n )}\n </div>\n </div>\n )\n}\n\nfunction accentColorFor(group: QBGroup): string {\n if (group.not) return 'var(--synapse-error)'\n if (group.combinator === 'OR') return 'var(--synapse-warning)'\n return 'var(--synapse-primary-action-color)'\n}\n\nfunction groupAriaLabel(group: QBGroup): string {\n const modifier = group.not ? 'excluded ' : ''\n return `${modifier}${group.combinator} filter group`\n}\n"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import './FilterGroupNode.css';var e = {
2
+ group: "_group_ryxud_1",
3
+ nested: "_nested_ryxud_7",
4
+ dropTarget: "_dropTarget_ryxud_11",
5
+ header: "_header_ryxud_16",
6
+ combinator: "_combinator_ryxud_24",
7
+ notToggle: "_notToggle_ryxud_43",
8
+ actions: "_actions_ryxud_57",
9
+ actionButton: "_actionButton_ryxud_64",
10
+ children: "_children_ryxud_72",
11
+ emptyState: "_emptyState_ryxud_78"
12
+ };
13
+ //#endregion
14
+ export { e as default };
15
+
16
+ //# sourceMappingURL=FilterGroupNode.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterGroupNode.module.js","names":[],"sources":["../../../src/components/QueryBuilder/FilterGroupNode.module.scss"],"sourcesContent":[".group {\n position: relative;\n padding: 8px 0 8px 16px;\n border-left: 2px solid\n var(--qb-accent-color, var(--synapse-primary-action-color));\n border-radius: 2px 0 0 2px;\n\n &.nested {\n margin-top: 4px;\n margin-bottom: 4px;\n }\n\n // Groups are the only drop targets, so this marks which one a release\n // would land in. The dragged node has already moved here by the time it\n // shows, so the highlight reads as confirmation rather than a preview.\n &.dropTarget {\n border-radius: 3px;\n box-shadow: inset 0 0 0 2px\n var(--qb-accent-color, var(--synapse-primary-action-color));\n }\n}\n\n.header {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n margin-bottom: 4px;\n}\n\n.combinator :global(.MuiToggleButton-root) {\n text-transform: none;\n padding: 2px 12px;\n min-width: 44px;\n font-weight: 700;\n border-color: var(--synapse-gray-dark);\n color: var(--synapse-gray-regular);\n}\n\n.combinator :global(.MuiToggleButton-root.Mui-selected) {\n background-color: var(--qb-accent-color, var(--synapse-primary-action-color));\n color: white;\n border-color: var(--qb-accent-color, var(--synapse-primary-action-color));\n}\n\n.combinator :global(.MuiToggleButton-root.Mui-selected:hover) {\n background-color: var(--qb-accent-color, var(--synapse-primary-action-color));\n}\n\n.notToggle {\n text-transform: none;\n padding: 2px 12px;\n border-color: var(--synapse-gray-dark);\n color: var(--synapse-gray-regular);\n font-weight: 600;\n font-size: 13px;\n\n &:global(.Mui-selected),\n &:global(.Mui-selected:hover) {\n background-color: var(--synapse-error);\n color: white;\n border-color: var(--synapse-error);\n }\n}\n\n.actions {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-left: auto;\n}\n\n.actionButton {\n text-transform: none;\n padding: 2px 8px;\n min-width: 0;\n font-weight: 500;\n color: var(--synapse-primary-action-color);\n}\n\n.children {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.emptyState {\n padding: 8px 4px;\n color: var(--synapse-gray-deemphasized);\n font-style: italic;\n font-size: 13px;\n}\n"],"mappings":""}
@@ -0,0 +1,92 @@
1
+ .group {
2
+ position: relative;
3
+ padding: 8px 0 8px 16px;
4
+ border-left: 2px solid
5
+ var(--qb-accent-color, var(--synapse-primary-action-color));
6
+ border-radius: 2px 0 0 2px;
7
+
8
+ &.nested {
9
+ margin-top: 4px;
10
+ margin-bottom: 4px;
11
+ }
12
+
13
+ // Groups are the only drop targets, so this marks which one a release
14
+ // would land in. The dragged node has already moved here by the time it
15
+ // shows, so the highlight reads as confirmation rather than a preview.
16
+ &.dropTarget {
17
+ border-radius: 3px;
18
+ box-shadow: inset 0 0 0 2px
19
+ var(--qb-accent-color, var(--synapse-primary-action-color));
20
+ }
21
+ }
22
+
23
+ .header {
24
+ display: flex;
25
+ align-items: center;
26
+ gap: 12px;
27
+ flex-wrap: wrap;
28
+ margin-bottom: 4px;
29
+ }
30
+
31
+ .combinator :global(.MuiToggleButton-root) {
32
+ text-transform: none;
33
+ padding: 2px 12px;
34
+ min-width: 44px;
35
+ font-weight: 700;
36
+ border-color: var(--synapse-gray-dark);
37
+ color: var(--synapse-gray-regular);
38
+ }
39
+
40
+ .combinator :global(.MuiToggleButton-root.Mui-selected) {
41
+ background-color: var(--qb-accent-color, var(--synapse-primary-action-color));
42
+ color: white;
43
+ border-color: var(--qb-accent-color, var(--synapse-primary-action-color));
44
+ }
45
+
46
+ .combinator :global(.MuiToggleButton-root.Mui-selected:hover) {
47
+ background-color: var(--qb-accent-color, var(--synapse-primary-action-color));
48
+ }
49
+
50
+ .notToggle {
51
+ text-transform: none;
52
+ padding: 2px 12px;
53
+ border-color: var(--synapse-gray-dark);
54
+ color: var(--synapse-gray-regular);
55
+ font-weight: 600;
56
+ font-size: 13px;
57
+
58
+ &:global(.Mui-selected),
59
+ &:global(.Mui-selected:hover) {
60
+ background-color: var(--synapse-error);
61
+ color: white;
62
+ border-color: var(--synapse-error);
63
+ }
64
+ }
65
+
66
+ .actions {
67
+ display: flex;
68
+ align-items: center;
69
+ gap: 4px;
70
+ margin-left: auto;
71
+ }
72
+
73
+ .actionButton {
74
+ text-transform: none;
75
+ padding: 2px 8px;
76
+ min-width: 0;
77
+ font-weight: 500;
78
+ color: var(--synapse-primary-action-color);
79
+ }
80
+
81
+ .children {
82
+ display: flex;
83
+ flex-direction: column;
84
+ gap: 2px;
85
+ }
86
+
87
+ .emptyState {
88
+ padding: 8px 4px;
89
+ color: var(--synapse-gray-deemphasized);
90
+ font-style: italic;
91
+ font-size: 13px;
92
+ }
@@ -0,0 +1,10 @@
1
+ import { Ref } from 'react';
2
+ export type QBDragHandleProps = {
3
+ /** `handleRef` from `useSortable`, which binds the drag sensor here. */
4
+ handleRef: Ref<HTMLButtonElement>;
5
+ /** Names the drag for both the tooltip and the accessible name. */
6
+ label: string;
7
+ };
8
+ /** The grip that starts a drag on a condition or a condition group. */
9
+ export declare function QBDragHandle(props: QBDragHandleProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=QBDragHandle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QBDragHandle.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/QBDragHandle.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAG3B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,wEAAwE;IACxE,SAAS,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAA;IACjC,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,uEAAuE;AACvE,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,2CAcpD"}
@@ -0,0 +1,22 @@
1
+ import e from "./queryBuilderDrag.module.js";
2
+ import { IconButton as t, Tooltip as n } from "@mui/material";
3
+ import { jsx as r } from "react/jsx-runtime";
4
+ import i from "@mui/icons-material/DragIndicator";
5
+ //#region src/components/QueryBuilder/QBDragHandle.tsx
6
+ function a(a) {
7
+ let { handleRef: o, label: s } = a;
8
+ return /* @__PURE__ */ r(n, {
9
+ title: s,
10
+ children: /* @__PURE__ */ r(t, {
11
+ ref: o,
12
+ size: "small",
13
+ className: e.dragHandle,
14
+ "aria-label": s,
15
+ children: /* @__PURE__ */ r(i, { fontSize: "small" })
16
+ })
17
+ });
18
+ }
19
+ //#endregion
20
+ export { a as QBDragHandle };
21
+
22
+ //# sourceMappingURL=QBDragHandle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QBDragHandle.js","names":[],"sources":["../../../src/components/QueryBuilder/QBDragHandle.tsx"],"sourcesContent":["import DragIndicatorIcon from '@mui/icons-material/DragIndicator'\nimport { IconButton, Tooltip } from '@mui/material'\nimport { Ref } from 'react'\nimport styles from './queryBuilderDrag.module.scss'\n\nexport type QBDragHandleProps = {\n /** `handleRef` from `useSortable`, which binds the drag sensor here. */\n handleRef: Ref<HTMLButtonElement>\n /** Names the drag for both the tooltip and the accessible name. */\n label: string\n}\n\n/** The grip that starts a drag on a condition or a condition group. */\nexport function QBDragHandle(props: QBDragHandleProps) {\n const { handleRef, label } = props\n return (\n <Tooltip title={label}>\n <IconButton\n ref={handleRef}\n size=\"small\"\n className={styles.dragHandle}\n aria-label={label}\n >\n <DragIndicatorIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n )\n}\n"],"mappings":";;;;;AAaA,SAAgB,EAAa,GAA0B;CACrD,IAAM,EAAE,cAAW,aAAU;CAC7B,OACE,kBAAC,GAAD;EAAS,OAAO;YACd,kBAAC,GAAD;GACE,KAAK;GACL,MAAK;GACL,WAAW,EAAO;GAClB,cAAY;aAEZ,kBAAC,GAAD,EAAmB,UAAS,QAAS,CAAA;EAC3B,CAAA;CACL,CAAA;AAEb"}
@@ -0,0 +1 @@
1
+ ._root_x90xm_1{background:var(--synapse-background-color-gray-light);border:1px solid var(--synapse-border-color-gray);border-radius:4px;flex-direction:column;gap:12px;padding:12px;display:flex}._applyRow_x90xm_11{justify-content:flex-end;display:flex}._applyButton_x90xm_16{text-transform:none}._summaryBar_x90xm_20{border:1px solid var(--synapse-border-color-gray);background:#fff;border-radius:4px;flex-direction:column;align-items:stretch;gap:6px;padding:8px 12px;display:flex}._summaryHeader_x90xm_31{justify-content:space-between;align-items:center;gap:12px;display:flex}._summaryLabel_x90xm_38{text-transform:uppercase;letter-spacing:.5px;color:var(--synapse-gray-regular);font-size:11px;font-weight:700}._summaryContent_x90xm_46{word-break:break-word;font-size:14px;line-height:1.5}._summaryModeToggle_x90xm_52{flex-shrink:0}._summaryModeToggle_x90xm_52 .MuiToggleButton-root{text-transform:none;padding:2px 12px;font-size:12px}._sqlPlaceholder_x90xm_61{color:var(--synapse-gray-deemphasized);font-style:italic}._sqlText_x90xm_66{font-family:var(--synapse-font-family-mono,monospace);white-space:pre-wrap;word-break:break-word;color:var(--synapse-gray-1000);font-size:12px;display:block}._sqlError_x90xm_75{color:var(--synapse-error);font-size:13px}
@@ -0,0 +1,21 @@
1
+ import { QBGroup } from './QueryBuilderTypes';
2
+ export type QueryBuilderControlsProps = {
3
+ /** The QB tree. When null, an empty default tree is rendered. */
4
+ tree: QBGroup | null;
5
+ /** Called with the next tree after any dispatched edit. */
6
+ onTreeChange: (next: QBGroup) => void;
7
+ /**
8
+ * When true, the property picker only offers columns that have facet
9
+ * metadata (Cohort Builder mode). Defaults to false.
10
+ */
11
+ onlyFacetedColumns?: boolean;
12
+ };
13
+ /**
14
+ * Top-level Query Builder panel. Uses `useQBFacetSourceMetadata()` — must be
15
+ * rendered inside the Suspense boundary that already wraps
16
+ * `QueryVisualizationWrapper` in `QueryWrapperPlotNav`. Facet metadata is
17
+ * pulled from a companion query that strips the QB's own `FilterGroup` out
18
+ * of `additionalFilters` so pill values remain stable while the user builds.
19
+ */
20
+ export declare function QueryBuilderControls(props: QueryBuilderControlsProps): import("react/jsx-runtime").JSX.Element;
21
+ //# sourceMappingURL=QueryBuilderControls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBuilderControls.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/QueryBuilderControls.tsx"],"names":[],"mappings":"AAqBA,OAAO,EAAe,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAI1D,MAAM,MAAM,yBAAyB,GAAG;IACtC,iEAAiE;IACjE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IACpB,2DAA2D;IAC3D,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,CAAA;AAID;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,2CAkLpE"}
@@ -0,0 +1,143 @@
1
+ import { isFilterGroup as e } from "../../utils/types/IsType.js";
2
+ import { useQueryContext as t } from "../QueryContext/QueryContext.js";
3
+ import "../QueryContext/index.js";
4
+ import { useQueryVisualizationContext as n } from "../QueryVisualizationWrapper/QueryVisualizationContext.js";
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";
9
+ import { useQBCombinedSql as f } from "./useQBCombinedSql.js";
10
+ import { useQBFacetSourceMetadata as p } from "./useQBFacetSourceMetadata.js";
11
+ import { QueryBuilderInternalContextProvider as m } from "./QueryBuilderInternalContext.js";
12
+ import { FilterGroupNode as h } from "./FilterGroupNode.js";
13
+ import { qbTreeToReadable as g } from "./qbTreeToReadable.js";
14
+ import _ from "./QueryBuilderControls.module.js";
15
+ import { useCallback as v, useMemo as y, useState as b } from "react";
16
+ import { Button as x, ToggleButton as S, ToggleButtonGroup as C } from "@mui/material";
17
+ import { jsx as w, jsxs as T } from "react/jsx-runtime";
18
+ import { DragDropProvider as E } from "@dnd-kit/react";
19
+ //#region src/components/QueryBuilder/QueryBuilderControls.tsx
20
+ function D(D) {
21
+ let { tree: O, onTreeChange: k, onlyFacetedColumns: A = !1 } = D, { columnModels: j, facetResults: M } = p(), { executeQueryRequest: N } = t(), P = O ?? o(), F = v(() => {
22
+ let t = u(P);
23
+ N((n) => {
24
+ let r = (n.query.additionalFilters ?? []).filter((t) => !e(t)), i = t ? [...r, t] : r;
25
+ return {
26
+ ...n,
27
+ query: {
28
+ ...n.query,
29
+ additionalFilters: i.length > 0 ? i : void 0
30
+ }
31
+ };
32
+ });
33
+ }, [P, N]), { getColumnDisplayName: I } = n(), [L, R] = b("plain-english"), z = v((e) => {
34
+ k(i(P, e, null, null));
35
+ }, [P, k]), B = v((e) => {
36
+ k(r(P, e));
37
+ }, [P, k]), V = v((e) => {
38
+ k(a(P, e));
39
+ }, [P, k]), H = v((e, t) => {
40
+ k(l(P, e, t));
41
+ }, [P, k]), U = v((e) => {
42
+ k(s(P, e));
43
+ }, [P, k]), W = v((e, t) => {
44
+ k(c(P, e, t));
45
+ }, [P, k]), G = v((e) => {
46
+ k(s(P, e));
47
+ }, [P, k]), K = d(P, k), q = y(() => ({
48
+ columnModels: j,
49
+ facetResults: M,
50
+ onlyFacetedColumns: A,
51
+ getColumnDisplayName: I,
52
+ addConditionAt: z,
53
+ addChildGroupAt: B,
54
+ clearGroupAt: V,
55
+ updateGroupAt: H,
56
+ removeGroupAt: U,
57
+ updateConditionAt: W,
58
+ removeConditionAt: G
59
+ }), [
60
+ j,
61
+ M,
62
+ A,
63
+ I,
64
+ z,
65
+ B,
66
+ V,
67
+ H,
68
+ U,
69
+ W,
70
+ G
71
+ ]), J = y(() => g(P, I), [P, I]), { data: Y, isPending: X, error: Z } = f(L === "sql" ? P : null);
72
+ return /* @__PURE__ */ w(m, {
73
+ value: q,
74
+ children: /* @__PURE__ */ w(E, {
75
+ ...K,
76
+ children: /* @__PURE__ */ T("div", {
77
+ className: _.root,
78
+ children: [
79
+ /* @__PURE__ */ T("div", {
80
+ className: _.summaryBar,
81
+ children: [/* @__PURE__ */ T("div", {
82
+ className: _.summaryHeader,
83
+ children: [/* @__PURE__ */ w("span", {
84
+ className: _.summaryLabel,
85
+ children: "Query Summary"
86
+ }), /* @__PURE__ */ T(C, {
87
+ className: _.summaryModeToggle,
88
+ size: "small",
89
+ exclusive: !0,
90
+ value: L,
91
+ onChange: (e, t) => {
92
+ t != null && R(t);
93
+ },
94
+ "aria-label": "Query summary display mode",
95
+ children: [/* @__PURE__ */ w(S, {
96
+ value: "plain-english",
97
+ "aria-label": "Show summary",
98
+ children: "Summary"
99
+ }), /* @__PURE__ */ w(S, {
100
+ value: "sql",
101
+ "aria-label": "Show SQL",
102
+ children: "SQL"
103
+ })]
104
+ })]
105
+ }), /* @__PURE__ */ w("div", {
106
+ className: _.summaryContent,
107
+ "aria-live": "polite",
108
+ "aria-atomic": "true",
109
+ children: L === "plain-english" ? J : Z ? /* @__PURE__ */ T("span", {
110
+ className: _.sqlError,
111
+ children: ["Could not load SQL preview: ", Z.message]
112
+ }) : X ? /* @__PURE__ */ w("span", {
113
+ className: _.sqlPlaceholder,
114
+ children: "Loading SQL…"
115
+ }) : /* @__PURE__ */ w("code", {
116
+ className: _.sqlText,
117
+ children: Y
118
+ })
119
+ })]
120
+ }),
121
+ /* @__PURE__ */ w(h, {
122
+ group: P,
123
+ isRoot: !0
124
+ }),
125
+ /* @__PURE__ */ w("div", {
126
+ className: _.applyRow,
127
+ children: /* @__PURE__ */ w(x, {
128
+ variant: "contained",
129
+ color: "primary",
130
+ onClick: F,
131
+ className: _.applyButton,
132
+ children: "Update Results"
133
+ })
134
+ })
135
+ ]
136
+ })
137
+ })
138
+ });
139
+ }
140
+ //#endregion
141
+ export { D as QueryBuilderControls };
142
+
143
+ //# sourceMappingURL=QueryBuilderControls.js.map
@@ -0,0 +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'\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\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 addConditionAt,\n addChildGroupAt,\n clearGroupAt,\n updateGroupAt,\n removeGroupAt,\n updateConditionAt,\n removeConditionAt,\n }),\n [\n columnModels,\n facetResults,\n onlyFacetedColumns,\n getColumnDisplayName,\n addConditionAt,\n addChildGroupAt,\n clearGroupAt,\n updateGroupAt,\n removeGroupAt,\n updateConditionAt,\n removeConditionAt,\n ],\n )\n\n const readable = useMemo(\n () => qbTreeToReadable(activeTree, getColumnDisplayName),\n [activeTree, getColumnDisplayName],\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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"}
@@ -0,0 +1,17 @@
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"
13
+ };
14
+ //#endregion
15
+ export { e as default };
16
+
17
+ //# sourceMappingURL=QueryBuilderControls.module.js.map