synapse-react-client 4.0.44 → 4.0.46

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 (415) hide show
  1. package/dist/SWC.index.d.ts +1 -1
  2. package/dist/SWC.index.js +2 -2
  3. package/dist/SWC.index.js.map +1 -1
  4. package/dist/aridhia-queries/AridhiaKeyFactory.d.ts +1 -0
  5. package/dist/aridhia-queries/AridhiaKeyFactory.d.ts.map +1 -1
  6. package/dist/aridhia-queries/AridhiaKeyFactory.js +3 -0
  7. package/dist/aridhia-queries/AridhiaKeyFactory.js.map +1 -1
  8. package/dist/aridhia-queries/aridhiaTokenExchange.js +6 -6
  9. package/dist/aridhia-queries/index.d.ts +1 -0
  10. package/dist/aridhia-queries/index.d.ts.map +1 -1
  11. package/dist/aridhia-queries/index.js +11 -10
  12. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.d.ts +19 -0
  13. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.d.ts.map +1 -0
  14. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.js +14 -0
  15. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.js.map +1 -0
  16. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.d.ts.map +1 -1
  17. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js +6 -4
  18. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
  19. package/dist/components/AccessRequirementList/AccessRequirementList.d.ts +2 -1
  20. package/dist/components/AccessRequirementList/AccessRequirementList.d.ts.map +1 -1
  21. package/dist/components/AccessRequirementList/AccessRequirementList.js +126 -125
  22. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  23. package/dist/components/AccessRequirementList/AccessRequirementListItem.d.ts +1 -1
  24. package/dist/components/AccessRequirementList/AccessRequirementListItem.d.ts.map +1 -1
  25. package/dist/components/AccessRequirementList/AccessRequirementListItem.js.map +1 -1
  26. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js +1 -1
  27. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js.map +1 -1
  28. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts.map +1 -1
  29. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js +28 -16
  30. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js.map +1 -1
  31. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts.map +1 -1
  32. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js +99 -97
  33. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js.map +1 -1
  34. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js +1 -1
  35. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
  36. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js +1 -1
  37. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js.map +1 -1
  38. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -1
  39. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +11 -8
  40. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -1
  41. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.d.ts +1 -1
  42. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.d.ts.map +1 -1
  43. package/dist/components/AccessRequirementList/RequestDataStep.d.ts +1 -4
  44. package/dist/components/AccessRequirementList/RequestDataStep.d.ts.map +1 -1
  45. package/dist/components/AccessRequirementList/RequestDataStep.js +15 -18
  46. package/dist/components/AccessRequirementList/RequestDataStep.js.map +1 -1
  47. package/dist/components/AccessTokenPage/AccessTokenPage.js +1 -1
  48. package/dist/components/AccessTokenPage/AccessTokenPage.js.map +1 -1
  49. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js +1 -1
  50. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
  51. package/dist/components/Aridhia/DarWizard/DarSectionForm.d.ts.map +1 -1
  52. package/dist/components/Aridhia/DarWizard/DarSectionForm.js +17 -13
  53. package/dist/components/Aridhia/DarWizard/DarSectionForm.js.map +1 -1
  54. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts +3 -3
  55. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts.map +1 -1
  56. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js +33 -34
  57. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js.map +1 -1
  58. package/dist/components/Aridhia/fairFormToRjsf.js +1 -1
  59. package/dist/components/Aridhia/fairFormToRjsf.js.map +1 -1
  60. package/dist/components/Authentication/LastLoginInfo.js +1 -1
  61. package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
  62. package/dist/components/CertificationQuiz/CertificationQuiz.js +1 -1
  63. package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
  64. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js +1 -1
  65. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js.map +1 -1
  66. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js +1 -1
  67. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
  68. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js +6 -6
  69. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
  70. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.d.ts.map +1 -1
  71. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js +4 -4
  72. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js.map +1 -1
  73. package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js +4 -4
  74. package/dist/components/CitationPopover/CitationPopoverContent.js +4 -4
  75. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  76. package/dist/components/ComponentCollapse.d.ts.map +1 -1
  77. package/dist/components/ComponentCollapse.js +2 -1
  78. package/dist/components/ComponentCollapse.js.map +1 -1
  79. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.d.ts.map +1 -1
  80. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js +52 -49
  81. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js.map +1 -1
  82. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  83. package/dist/components/DataGrid/SynapseGrid.js +231 -219
  84. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  85. package/dist/components/DataGrid/SyncGridWithSourceButton.d.ts.map +1 -1
  86. package/dist/components/DataGrid/SyncGridWithSourceButton.js +5 -4
  87. package/dist/components/DataGrid/SyncGridWithSourceButton.js.map +1 -1
  88. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.d.ts.map +1 -1
  89. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js +7 -5
  90. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js.map +1 -1
  91. package/dist/components/DataGrid/components/ExportCsvFromGridButton.js +4 -4
  92. package/dist/components/DataGrid/components/ExportCsvFromGridButton.js.map +1 -1
  93. package/dist/components/DataGrid/components/ReorderColumnsButton.js +4 -4
  94. package/dist/components/DataGrid/components/ReorderColumnsButton.js.map +1 -1
  95. package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
  96. package/dist/components/DataGrid/components/ReorderColumnsDialog.js +12 -8
  97. package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
  98. package/dist/components/DataGrid/components/UploadCsvToGridButton.js +1 -1
  99. package/dist/components/DataGrid/components/UploadCsvToGridButton.js.map +1 -1
  100. package/dist/components/DataGrid/hooks/useGridUndoRedo.js +5 -5
  101. package/dist/components/DataGrid/utils/applyModelChange.d.ts.map +1 -1
  102. package/dist/components/DataGrid/utils/applyModelChange.js +14 -14
  103. package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
  104. package/dist/components/DataGrid/utils/columnFactory.js +1 -1
  105. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  106. package/dist/components/DataGrid/utils/splitPatch.d.ts.map +1 -1
  107. package/dist/components/DataGrid/utils/splitPatch.js +22 -13
  108. package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
  109. package/dist/components/DownloadCart/DownloadCartPage.js +1 -1
  110. package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
  111. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.d.ts.map +1 -1
  112. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +2 -1
  113. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  114. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.js.map +1 -1
  115. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.scss +1 -3
  116. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.d.ts.map +1 -1
  117. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +16 -10
  118. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  119. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +1 -1
  120. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  121. package/dist/components/EntityFinder/EntityFinder.js +4 -4
  122. package/dist/components/EntityFinder/EntityIdTextField.js +1 -1
  123. package/dist/components/EntityFinder/EntityIdTextField.js.map +1 -1
  124. package/dist/components/EntityFinder/tree/VirtualizedTree.d.ts.map +1 -1
  125. package/dist/components/EntityFinder/tree/VirtualizedTree.js +5 -4
  126. package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
  127. package/dist/components/EntityHeaderTable/EntityHeaderTable.js +1 -1
  128. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  129. package/dist/components/EntityTreeTable/components/EntityNameCell.d.ts.map +1 -1
  130. package/dist/components/EntityTreeTable/components/EntityNameCell.js +2 -1
  131. package/dist/components/EntityTreeTable/components/EntityNameCell.js.map +1 -1
  132. package/dist/components/EntityUpload/FileUploadProgress.d.ts.map +1 -1
  133. package/dist/components/EntityUpload/FileUploadProgress.js +11 -7
  134. package/dist/components/EntityUpload/FileUploadProgress.js.map +1 -1
  135. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.d.ts.map +1 -1
  136. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js +4 -3
  137. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js.map +1 -1
  138. package/dist/components/ExperimentalMode/ExperimentalMode.js +1 -1
  139. package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
  140. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js +1 -1
  141. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
  142. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts.map +1 -1
  143. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js +2 -1
  144. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js.map +1 -1
  145. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts.map +1 -1
  146. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js +2 -1
  147. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js.map +1 -1
  148. package/dist/components/FormTemplateEditor/FieldLibrary.d.ts.map +1 -1
  149. package/dist/components/FormTemplateEditor/FieldLibrary.js +2 -1
  150. package/dist/components/FormTemplateEditor/FieldLibrary.js.map +1 -1
  151. package/dist/components/FormTemplateEditor/FieldLibraryRow.js +4 -4
  152. package/dist/components/FormTemplateEditor/FieldLibraryRow.js.map +1 -1
  153. package/dist/components/FormTemplateEditor/FormStructurePanel.js +1 -1
  154. package/dist/components/FormTemplateEditor/FormStructurePanel.js.map +1 -1
  155. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js +1 -1
  156. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js.map +1 -1
  157. package/dist/components/FormTemplateEditor/StepCard.d.ts.map +1 -1
  158. package/dist/components/FormTemplateEditor/StepCard.js +15 -10
  159. package/dist/components/FormTemplateEditor/StepCard.js.map +1 -1
  160. package/dist/components/FormTemplateEditor/StepFieldRow.d.ts.map +1 -1
  161. package/dist/components/FormTemplateEditor/StepFieldRow.js +11 -6
  162. package/dist/components/FormTemplateEditor/StepFieldRow.js.map +1 -1
  163. package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts.map +1 -1
  164. package/dist/components/FormTemplateEditor/TemplateFileHandleField.js +2 -1
  165. package/dist/components/FormTemplateEditor/TemplateFileHandleField.js.map +1 -1
  166. package/dist/components/FormTemplateEditor/useSaveFormTemplate.d.ts.map +1 -1
  167. package/dist/components/FormTemplateEditor/useSaveFormTemplate.js.map +1 -1
  168. package/dist/components/FormTemplateReferenceField/FormTemplatePreviewDialog.d.ts +9 -0
  169. package/dist/components/FormTemplateReferenceField/FormTemplatePreviewDialog.d.ts.map +1 -0
  170. package/dist/components/FormTemplateReferenceField/FormTemplatePreviewDialog.js +45 -0
  171. package/dist/components/FormTemplateReferenceField/FormTemplatePreviewDialog.js.map +1 -0
  172. package/dist/components/FormTemplateReferenceField/FormTemplateReferenceField.d.ts +22 -0
  173. package/dist/components/FormTemplateReferenceField/FormTemplateReferenceField.d.ts.map +1 -0
  174. package/dist/components/FormTemplateReferenceField/FormTemplateReferenceField.js +139 -0
  175. package/dist/components/FormTemplateReferenceField/FormTemplateReferenceField.js.map +1 -0
  176. package/dist/components/Forum/ForumTable.d.ts +17 -5
  177. package/dist/components/Forum/ForumTable.d.ts.map +1 -1
  178. package/dist/components/Forum/ForumTable.js +94 -77
  179. package/dist/components/Forum/ForumTable.js.map +1 -1
  180. package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js +45 -45
  181. package/dist/components/GenericCard/PortalDOI/PortalDOI.js +5 -5
  182. package/dist/components/GenericCard/PortalDOI/PortalDOI.js.map +1 -1
  183. package/dist/components/GenericCard/TableRowGenericCard.js +1 -1
  184. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  185. package/dist/components/HelpPopover/HelpPopover.js +1 -1
  186. package/dist/components/HelpPopover/HelpPopover.js.map +1 -1
  187. package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
  188. package/dist/components/IconSvg/IconSvg.js +154 -47
  189. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  190. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.d.ts.map +1 -1
  191. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js +19 -16
  192. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js.map +1 -1
  193. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.d.ts.map +1 -1
  194. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js +2 -1
  195. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  196. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.d.ts +9 -0
  197. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.d.ts.map +1 -0
  198. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.js +21 -0
  199. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.js.map +1 -0
  200. package/dist/components/Markdown/MarkdownCollapse.d.ts.map +1 -1
  201. package/dist/components/Markdown/MarkdownCollapse.js +3 -1
  202. package/dist/components/Markdown/MarkdownCollapse.js.map +1 -1
  203. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js +1 -1
  204. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  205. package/dist/components/OAuthClientManagement/OAuthManagement.js +14 -13
  206. package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
  207. package/dist/components/PortalList/PortalCard.d.ts.map +1 -1
  208. package/dist/components/PortalList/PortalCard.js +6 -5
  209. package/dist/components/PortalList/PortalCard.js.map +1 -1
  210. package/dist/components/PortalList/PortalList.js +4 -4
  211. package/dist/components/PortalList/PortalList.js.map +1 -1
  212. package/dist/components/ProjectVisibilityChip/ProjectVisibilityChip.js +6 -6
  213. package/dist/components/QueryBuilder/FilterConditionRow.js +4 -4
  214. package/dist/components/QueryCountButton/QueryCountButton.js +5 -5
  215. package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
  216. package/dist/components/ReleaseCard/ReleaseCardLarge.js +5 -5
  217. package/dist/components/ReleaseCard/ReleaseCardLarge.js.map +1 -1
  218. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.d.ts.map +1 -1
  219. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js +142 -108
  220. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  221. package/dist/components/SetBasicAccessRequirementFields/AccessorRequirements.d.ts.map +1 -1
  222. package/dist/components/SetBasicAccessRequirementFields/AccessorRequirements.js +15 -15
  223. package/dist/components/SetBasicAccessRequirementFields/AccessorRequirements.js.map +1 -1
  224. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.d.ts.map +1 -1
  225. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js +57 -55
  226. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
  227. package/dist/components/ShareThisPage/ShareThisPage.js +4 -4
  228. package/dist/components/ShareThisPage/ShareThisPage.js.map +1 -1
  229. package/dist/components/SustainabilityScorecard/DialLayout.js +1 -1
  230. package/dist/components/SustainabilityScorecard/DialLayout.js.map +1 -1
  231. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js +1 -1
  232. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
  233. package/dist/components/SynapseChat/SynapseChat.js +1 -1
  234. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  235. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts.map +1 -1
  236. package/dist/components/SynapseChat/SynapseChatInteraction.js +2 -1
  237. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  238. package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.js +1 -1
  239. package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.js.map +1 -1
  240. package/dist/components/SynapseFooter/SynapseFooter.js +1 -1
  241. package/dist/components/SynapseFooter/SynapseFooter.js.map +1 -1
  242. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js +1 -1
  243. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js.map +1 -1
  244. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.d.ts.map +1 -1
  245. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js +2 -1
  246. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js.map +1 -1
  247. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js +4 -4
  248. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
  249. package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js +1 -1
  250. package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js.map +1 -1
  251. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts.map +1 -1
  252. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +4 -1
  253. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  254. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js +1 -1
  255. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  256. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js +1 -1
  257. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
  258. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.d.ts.map +1 -1
  259. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js +12 -9
  260. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js.map +1 -1
  261. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +4 -4
  262. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  263. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +140 -140
  264. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  265. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +1 -1
  266. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  267. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js +1 -1
  268. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
  269. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
  270. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  271. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +9 -9
  272. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  273. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.d.ts.map +1 -1
  274. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js +6 -4
  275. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js.map +1 -1
  276. package/dist/components/TanStackTable/ColumnHeader.js +1 -1
  277. package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
  278. package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js +1 -1
  279. package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js.map +1 -1
  280. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.d.ts.map +1 -1
  281. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js +4 -3
  282. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
  283. package/dist/components/Webhook/WebhookDashboard.js +1 -1
  284. package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
  285. package/dist/components/dataaccess/AccessRequirementDashboard.js +4 -4
  286. package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
  287. package/dist/components/dataaccess/AccessRequirementTable.js +1 -1
  288. package/dist/components/dataaccess/AccessRequirementTable.js.map +1 -1
  289. package/dist/components/dataaccess/EDucTemplateTable.d.ts.map +1 -1
  290. package/dist/components/dataaccess/EDucTemplateTable.js +13 -11
  291. package/dist/components/dataaccess/EDucTemplateTable.js.map +1 -1
  292. package/dist/components/dataaccess/FormTemplateTable.js +6 -6
  293. package/dist/components/dataaccess/FormTemplateTable.js.map +1 -1
  294. package/dist/components/dataaccess/ReviewerDashboard.js +17 -17
  295. package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
  296. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js +4 -4
  297. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map +1 -1
  298. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js +4 -1
  299. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map +1 -1
  300. package/dist/components/doi/CreateOrUpdateDoiModal.js +1 -1
  301. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  302. package/dist/components/download_list/DownloadDetails.d.ts.map +1 -1
  303. package/dist/components/download_list/DownloadDetails.js +12 -10
  304. package/dist/components/download_list/DownloadDetails.js.map +1 -1
  305. package/dist/components/entity/metadata/AnnotationsTable.js +1 -1
  306. package/dist/components/entity/metadata/AnnotationsTable.js.map +1 -1
  307. package/dist/components/entity/page/CreatedByModifiedBy.js +1 -1
  308. package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
  309. package/dist/components/entity/page/action_menu/EntityActionMenu.d.ts.map +1 -1
  310. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  311. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js +1 -1
  312. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
  313. package/dist/components/error/ErrorChip.d.ts.map +1 -1
  314. package/dist/components/error/ErrorChip.js +2 -1
  315. package/dist/components/error/ErrorChip.js.map +1 -1
  316. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js +14 -14
  317. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js +4 -4
  318. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js.map +1 -1
  319. package/dist/components/widgets/facet-nav/FacetNavPanel.js +1 -1
  320. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  321. package/dist/features/curator/dashboard/components/NextStepButton.d.ts.map +1 -1
  322. package/dist/features/curator/dashboard/components/NextStepButton.js +7 -6
  323. package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -1
  324. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +8 -8
  325. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
  326. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +4 -4
  327. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  328. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +4 -4
  329. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
  330. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js +1 -1
  331. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
  332. package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js +4 -4
  333. package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js.map +1 -1
  334. package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.js +1 -1
  335. package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.js.map +1 -1
  336. package/dist/features/entity/metadata-task/create-task/TaskFormHeader.js +1 -1
  337. package/dist/features/entity/metadata-task/create-task/TaskFormHeader.js.map +1 -1
  338. package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js +10 -10
  339. package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js.map +1 -1
  340. package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js +1 -1
  341. package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js.map +1 -1
  342. package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.d.ts +5 -0
  343. package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.d.ts.map +1 -1
  344. package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.js +37 -26
  345. package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.js.map +1 -1
  346. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts +8 -0
  347. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts.map +1 -1
  348. package/dist/mocks/msw/handlers/aridhiaHandlers.js +52 -41
  349. package/dist/mocks/msw/handlers/aridhiaHandlers.js.map +1 -1
  350. package/dist/mocks/msw/handlers/discussionHandlers.d.ts.map +1 -1
  351. package/dist/mocks/msw/handlers/discussionHandlers.js +40 -33
  352. package/dist/mocks/msw/handlers/discussionHandlers.js.map +1 -1
  353. package/dist/mocks/msw/handlers/entityHandlers.d.ts.map +1 -1
  354. package/dist/mocks/msw/handlers/entityHandlers.js +70 -67
  355. package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
  356. package/dist/mocks/msw/handlers/gridHandlers.js +2 -2
  357. package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
  358. package/dist/mocks/msw/server.d.ts.map +1 -1
  359. package/dist/mocks/msw/server.js +4 -2
  360. package/dist/mocks/msw/server.js.map +1 -1
  361. package/dist/synapse-client/SynapseClient.d.ts +10 -0
  362. package/dist/synapse-client/SynapseClient.d.ts.map +1 -1
  363. package/dist/synapse-client/SynapseClient.js +486 -482
  364. package/dist/synapse-client/SynapseClient.js.map +1 -1
  365. package/dist/synapse-client/index.js +3 -3
  366. package/dist/synapse-queries/KeyFactory.d.ts +13 -1
  367. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  368. package/dist/synapse-queries/KeyFactory.js +11 -1
  369. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  370. package/dist/synapse-queries/dataaccess/index.js +4 -4
  371. package/dist/synapse-queries/dataaccess/useAccessRequirements.d.ts.map +1 -1
  372. package/dist/synapse-queries/dataaccess/useAccessRequirements.js +4 -1
  373. package/dist/synapse-queries/dataaccess/useAccessRequirements.js.map +1 -1
  374. package/dist/synapse-queries/dataaccess/useEDuc.d.ts +19 -5
  375. package/dist/synapse-queries/dataaccess/useEDuc.d.ts.map +1 -1
  376. package/dist/synapse-queries/dataaccess/useEDuc.js +29 -21
  377. package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
  378. package/dist/synapse-queries/dataaccess/useFormTemplate.d.ts +12 -0
  379. package/dist/synapse-queries/dataaccess/useFormTemplate.d.ts.map +1 -1
  380. package/dist/synapse-queries/dataaccess/useFormTemplate.js +52 -30
  381. package/dist/synapse-queries/dataaccess/useFormTemplate.js.map +1 -1
  382. package/dist/synapse-queries/forum/useForum.d.ts +5 -1
  383. package/dist/synapse-queries/forum/useForum.d.ts.map +1 -1
  384. package/dist/synapse-queries/forum/useForum.js +23 -1
  385. package/dist/synapse-queries/forum/useForum.js.map +1 -1
  386. package/dist/synapse-queries/index.js +185 -184
  387. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.d.ts +5 -3
  388. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.d.ts.map +1 -1
  389. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.js +12 -15
  390. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.js.map +1 -1
  391. package/dist/synapse-queries/user/useGetUserChallenges.d.ts.map +1 -1
  392. package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
  393. package/dist/theme/DefaultTheme.d.ts.map +1 -1
  394. package/dist/theme/DefaultTheme.js +4 -1
  395. package/dist/theme/DefaultTheme.js.map +1 -1
  396. package/dist/tsconfig.build.tsbuildinfo +1 -1
  397. package/dist/utils/APIConstants.d.ts.map +1 -1
  398. package/dist/utils/APIConstants.js.map +1 -1
  399. package/dist/utils/AppUtils/AppUtils.js +1 -1
  400. package/dist/utils/AppUtils/AppUtils.js.map +1 -1
  401. package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
  402. package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
  403. package/dist/utils/functions/EntityTypeUtils.d.ts.map +1 -1
  404. package/dist/utils/functions/EntityTypeUtils.js.map +1 -1
  405. package/dist/utils/functions/getEndpoint.d.ts +1 -0
  406. package/dist/utils/functions/getEndpoint.d.ts.map +1 -1
  407. package/dist/utils/functions/getEndpoint.js +3 -3
  408. package/dist/utils/functions/getEndpoint.js.map +1 -1
  409. package/dist/utils/types/RequestableAccessRequirement.d.ts +8 -0
  410. package/dist/utils/types/RequestableAccessRequirement.d.ts.map +1 -0
  411. package/dist/utils/types/RequestableAccessRequirement.js +9 -0
  412. package/dist/utils/types/RequestableAccessRequirement.js.map +1 -0
  413. package/package.json +6 -5
  414. package/dist/testutils/ReactQueryMockUtils.js +0 -676
  415. package/dist/testutils/ReactQueryMockUtils.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"OAuthManagement.js","names":[],"sources":["../../../src/components/OAuthClientManagement/OAuthManagement.tsx"],"sourcesContent":["import InfiniteTableLayout from '@/components/layout/InfiniteTableLayout'\nimport SynapseClient from '@/synapse-client'\nimport { useGetOAuthClientInfinite } from '@/synapse-queries'\nimport { MoreVert } from '@mui/icons-material'\nimport { useSynapseContext } from '@/utils'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport { AddCircleTwoTone } from '@mui/icons-material'\nimport { Box, Button, Link, IconButton, Menu, MenuItem } from '@mui/material'\nimport { OAuthClient } from '@sage-bionetworks/synapse-client/generated/models/OAuthClient'\nimport {\n createColumnHelper,\n getCoreRowModel,\n Row,\n Table,\n useReactTable,\n} from '@tanstack/react-table'\nimport dayjs from 'dayjs'\nimport { useMemo, useState } from 'react'\nimport CopyToClipboardInput from '../CopyToClipboardInput/CopyToClipboardInput'\nimport { DialogBase } from '../DialogBase'\nimport WarningDialog from '../SynapseForm/WarningDialog'\nimport ColumnHeader from '../TanStackTable/ColumnHeader'\nimport StyledTanStackTable from '../TanStackTable/StyledTanStackTable'\nimport { displayToast } from '../ToastMessage'\nimport { CreateOAuthModal } from './CreateOAuthClient'\nimport OAuthAclEditorModal from '../OAuthClientAclEditor/OAuthAclEditorModal'\n\nconst columnHelper = createColumnHelper<OAuthClient>()\nfunction getColumns(columnOptions: {\n setIsShowingVerification: (value: boolean) => void\n setSelectedClient: (value: OAuthClient) => void\n setIsShowingSecretWarning: (value: boolean) => void\n setIsEdit: (value: boolean) => void\n setIsShowingCreateClientModal: (value: boolean) => void\n setIsShowingSharingSettings: (value: boolean) => void\n}) {\n const {\n setIsShowingVerification,\n setSelectedClient,\n setIsShowingSecretWarning,\n setIsEdit,\n setIsShowingCreateClientModal,\n setIsShowingSharingSettings,\n } = columnOptions\n return [\n columnHelper.accessor('createdOn', {\n header: props => <ColumnHeader {...props} title={'Created'} />,\n cell: info => formatDate(dayjs(info.getValue())),\n }),\n columnHelper.accessor('modifiedOn', {\n header: props => <ColumnHeader {...props} title={'Modified'} />,\n cell: info => formatDate(dayjs(info.getValue())),\n }),\n columnHelper.accessor('client_id', {\n header: props => <ColumnHeader {...props} title={'ID'} />,\n }),\n columnHelper.accessor('client_name', {\n header: props => <ColumnHeader {...props} title={'Client'} />,\n }),\n columnHelper.accessor('verified', {\n header: props => <ColumnHeader {...props} title={'Verified'} />,\n cell: ({ getValue }) =>\n getValue() ? (\n 'Yes'\n ) : (\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => setIsShowingVerification(true)}\n >\n Submit Verification\n </Button>\n ),\n }),\n columnHelper.display({\n id: 'actions',\n header: props => <ColumnHeader {...props} title={'Actions'} />,\n cell: ({ row }) => (\n <ActionsMenuCell\n row={row}\n setSelectedClient={setSelectedClient}\n setIsEdit={setIsEdit}\n setIsShowingCreateClientModal={setIsShowingCreateClientModal}\n setIsShowingSecretWarning={setIsShowingSecretWarning}\n setIsShowingSharingSettings={setIsShowingSharingSettings}\n />\n ),\n }),\n ]\n}\n\nfunction ActionsMenuCell({\n row,\n setSelectedClient,\n setIsEdit,\n setIsShowingCreateClientModal,\n setIsShowingSecretWarning,\n setIsShowingSharingSettings,\n}: {\n row: Row<OAuthClient>\n setSelectedClient: (value: OAuthClient) => void\n setIsEdit: (value: boolean) => void\n setIsShowingCreateClientModal: (value: boolean) => void\n setIsShowingSecretWarning: (value: boolean) => void\n setIsShowingSharingSettings: (value: boolean) => void\n}) {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n const open = Boolean(anchorEl)\n const handleMenuOpen = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget)\n }\n const handleMenuClose = () => {\n setAnchorEl(null)\n }\n return (\n <>\n <IconButton\n aria-label=\"more\"\n aria-controls={`actions-menu-${row.id}`}\n aria-haspopup=\"true\"\n onClick={handleMenuOpen}\n size=\"small\"\n >\n <MoreVert />\n </IconButton>\n <Menu\n id={`actions-menu-${row.id}`}\n anchorEl={anchorEl}\n open={open}\n onClose={handleMenuClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n >\n <MenuItem\n onClick={() => {\n setSelectedClient(row.original)\n setIsEdit(true)\n setIsShowingCreateClientModal(true)\n handleMenuClose()\n }}\n >\n Edit\n </MenuItem>\n <MenuItem\n onClick={() => {\n setSelectedClient(row.original)\n setIsShowingSecretWarning(true)\n handleMenuClose()\n }}\n >\n Generate Secret\n </MenuItem>\n <MenuItem\n onClick={() => {\n setSelectedClient(row.original)\n setIsShowingSharingSettings(true)\n handleMenuClose()\n }}\n >\n Sharing Settings\n </MenuItem>\n </Menu>\n </>\n )\n}\n\nexport function OAuthManagement() {\n const { accessToken } = useSynapseContext()\n const [isShowingSharingSettings, setIsShowingSharingSettings] =\n useState(false)\n const [isShowingCreateClientModal, setIsShowingCreateClientModal] =\n useState(false)\n const [isEdit, setIsEdit] = useState<boolean>(false)\n const [selectedClient, setSelectedClient] = useState<OAuthClient>()\n const [isShowingConfirmModal, setIsShowingConfirmModal] = useState(false)\n const [isShowingSecretWarning, setIsShowingSecretWarning] = useState(false)\n const [isShowingSecret, setIsShowingSecret] = useState(false)\n const [secret, setSecret] = useState<string>()\n const [isShowingVerification, setIsShowingVerification] = useState(false)\n\n const { data, isLoading, hasNextPage, fetchNextPage, isFetchingNextPage } =\n useGetOAuthClientInfinite()\n const oAuthClientList = useMemo(\n () => data?.pages.flatMap(page => page.results || []) || [],\n [data],\n )\n\n const warningHeader = 'Are you absolutely sure?'\n const warningBody =\n 'If you have an existing secret, generating a new secret will make your application invalid after generation. This action cannot be undone.'\n\n const onShowSecret = async () => {\n setIsShowingSecretWarning(false)\n try {\n const secret = await SynapseClient.createOAuthClientSecret(\n accessToken!,\n selectedClient?.client_id!,\n )\n setSelectedClient(undefined)\n setIsShowingSecret(true)\n setSecret(secret.client_secret)\n } catch (err: any) {\n displayToast(err.reason as string, 'danger')\n }\n }\n\n const columns = useMemo(\n () =>\n getColumns({\n setIsShowingVerification,\n setSelectedClient,\n setIsShowingSecretWarning,\n setIsEdit,\n setIsShowingCreateClientModal,\n setIsShowingSharingSettings,\n }),\n [],\n )\n\n const table: Table<OAuthClient> = useReactTable<OAuthClient>({\n data: oAuthClientList,\n columns,\n getRowId: row => row.client_id!,\n enableRowSelection: true,\n enableSorting: false,\n getCoreRowModel: getCoreRowModel(),\n columnResizeMode: 'onChange',\n })\n\n const isEmpty = !isLoading && table.getRowModel().rows.length === 0\n\n return (\n <div>\n <Box\n sx={{\n display: 'flex',\n width: '100%',\n justifyContent: 'flex-end',\n mb: 2,\n }}\n >\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n setIsShowingCreateClientModal(true)\n setIsEdit(false)\n }}\n sx={{ float: 'right' }}\n startIcon={<AddCircleTwoTone />}\n >\n Create New Client\n </Button>\n </Box>\n <InfiniteTableLayout\n table={<StyledTanStackTable table={table} />}\n isLoading={isLoading}\n isEmpty={isEmpty}\n hasNextPage={hasNextPage}\n onFetchNextPageClicked={() => {\n void fetchNextPage()\n }}\n isFetchingNextPage={isFetchingNextPage}\n />\n <CreateOAuthModal\n onClose={() => {\n setIsShowingCreateClientModal(false)\n }}\n isShowingModal={isShowingCreateClientModal}\n client={isEdit ? selectedClient : undefined}\n isEdit={isEdit}\n setIsShowingConfirmModal={setIsShowingConfirmModal}\n isShowingConfirmModal={isShowingConfirmModal}\n setIsShowingModal={setIsShowingCreateClientModal}\n />\n <DialogBase\n open={isShowingVerification}\n onCancel={() => setIsShowingVerification(false)}\n title=\"Submit Verification\"\n content={\n <>\n <p>\n In order to verify an OAuth client please submit a request to the{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://sagebionetworks.jira.com/servicedesk/customer/portal/9\"\n >\n Synapse Service Desk.\n </Link>\n </p>\n <b>Please list the following items in your request:</b>\n <ul>\n <li>Your name</li>\n <li>\n The ID of the client to be verified <br />\n </li>\n <li>A description of your application</li>\n </ul>\n {/* <p>\n Verification can take up to X weeks and we will notify you via X.\n </p> */}\n </>\n }\n />\n <OAuthAclEditorModal\n clientId={selectedClient?.client_id!}\n open={isShowingSharingSettings}\n onClose={() => setIsShowingSharingSettings(false)}\n />\n <WarningDialog\n open={isShowingSecretWarning}\n title={warningHeader}\n content={warningBody}\n onCancel={() => {\n setIsShowingSecretWarning(false)\n setSelectedClient(undefined)\n }}\n onConfirm={onShowSecret}\n confirmButtonColor=\"error\"\n confirmButtonText=\"Yes, Continue\"\n />\n {secret && (\n <DialogBase\n open={isShowingSecret}\n title=\"App Secret\"\n onCancel={() => {\n setIsShowingSecret(false)\n setSecret(undefined)\n }}\n content={\n <>\n <p>\n <b>This secret will not be able to be retrieved again.</b> If\n needed, in order to generate a new secret select Generate from\n the Client List.\n </p>\n <CopyToClipboardInput value={secret} inputWidth={'400px'} />\n </>\n }\n />\n )}\n </div>\n )\n}\n\nexport default OAuthManagement\n"],"mappings":"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"}
1
+ {"version":3,"file":"OAuthManagement.js","names":[],"sources":["../../../src/components/OAuthClientManagement/OAuthManagement.tsx"],"sourcesContent":["import InfiniteTableLayout from '@/components/layout/InfiniteTableLayout'\nimport SynapseClient from '@/synapse-client'\nimport { useGetOAuthClientInfinite } from '@/synapse-queries'\nimport MoreVert from '@mui/icons-material/MoreVert'\nimport { useSynapseContext } from '@/utils'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport AddCircleTwoTone from '@mui/icons-material/AddCircleTwoTone'\nimport { Box, Button, Link, IconButton, Menu, MenuItem } from '@mui/material'\nimport { OAuthClient } from '@sage-bionetworks/synapse-client/generated/models/OAuthClient'\nimport {\n createColumnHelper,\n getCoreRowModel,\n Row,\n Table,\n useReactTable,\n} from '@tanstack/react-table'\nimport dayjs from 'dayjs'\nimport { useMemo, useState } from 'react'\nimport CopyToClipboardInput from '../CopyToClipboardInput/CopyToClipboardInput'\nimport { DialogBase } from '../DialogBase'\nimport WarningDialog from '../SynapseForm/WarningDialog'\nimport ColumnHeader from '../TanStackTable/ColumnHeader'\nimport StyledTanStackTable from '../TanStackTable/StyledTanStackTable'\nimport { displayToast } from '../ToastMessage'\nimport { CreateOAuthModal } from './CreateOAuthClient'\nimport OAuthAclEditorModal from '../OAuthClientAclEditor/OAuthAclEditorModal'\n\nconst columnHelper = createColumnHelper<OAuthClient>()\nfunction getColumns(columnOptions: {\n setIsShowingVerification: (value: boolean) => void\n setSelectedClient: (value: OAuthClient) => void\n setIsShowingSecretWarning: (value: boolean) => void\n setIsEdit: (value: boolean) => void\n setIsShowingCreateClientModal: (value: boolean) => void\n setIsShowingSharingSettings: (value: boolean) => void\n}) {\n const {\n setIsShowingVerification,\n setSelectedClient,\n setIsShowingSecretWarning,\n setIsEdit,\n setIsShowingCreateClientModal,\n setIsShowingSharingSettings,\n } = columnOptions\n return [\n columnHelper.accessor('createdOn', {\n header: props => <ColumnHeader {...props} title={'Created'} />,\n cell: info => formatDate(dayjs(info.getValue())),\n }),\n columnHelper.accessor('modifiedOn', {\n header: props => <ColumnHeader {...props} title={'Modified'} />,\n cell: info => formatDate(dayjs(info.getValue())),\n }),\n columnHelper.accessor('client_id', {\n header: props => <ColumnHeader {...props} title={'ID'} />,\n }),\n columnHelper.accessor('client_name', {\n header: props => <ColumnHeader {...props} title={'Client'} />,\n }),\n columnHelper.accessor('verified', {\n header: props => <ColumnHeader {...props} title={'Verified'} />,\n cell: ({ getValue }) =>\n getValue() ? (\n 'Yes'\n ) : (\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => setIsShowingVerification(true)}\n >\n Submit Verification\n </Button>\n ),\n }),\n columnHelper.display({\n id: 'actions',\n header: props => <ColumnHeader {...props} title={'Actions'} />,\n cell: ({ row }) => (\n <ActionsMenuCell\n row={row}\n setSelectedClient={setSelectedClient}\n setIsEdit={setIsEdit}\n setIsShowingCreateClientModal={setIsShowingCreateClientModal}\n setIsShowingSecretWarning={setIsShowingSecretWarning}\n setIsShowingSharingSettings={setIsShowingSharingSettings}\n />\n ),\n }),\n ]\n}\n\nfunction ActionsMenuCell({\n row,\n setSelectedClient,\n setIsEdit,\n setIsShowingCreateClientModal,\n setIsShowingSecretWarning,\n setIsShowingSharingSettings,\n}: {\n row: Row<OAuthClient>\n setSelectedClient: (value: OAuthClient) => void\n setIsEdit: (value: boolean) => void\n setIsShowingCreateClientModal: (value: boolean) => void\n setIsShowingSecretWarning: (value: boolean) => void\n setIsShowingSharingSettings: (value: boolean) => void\n}) {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n const open = Boolean(anchorEl)\n const handleMenuOpen = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget)\n }\n const handleMenuClose = () => {\n setAnchorEl(null)\n }\n return (\n <>\n <IconButton\n aria-label=\"more\"\n aria-controls={`actions-menu-${row.id}`}\n aria-haspopup=\"true\"\n onClick={handleMenuOpen}\n size=\"small\"\n >\n <MoreVert />\n </IconButton>\n <Menu\n id={`actions-menu-${row.id}`}\n anchorEl={anchorEl}\n open={open}\n onClose={handleMenuClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n >\n <MenuItem\n onClick={() => {\n setSelectedClient(row.original)\n setIsEdit(true)\n setIsShowingCreateClientModal(true)\n handleMenuClose()\n }}\n >\n Edit\n </MenuItem>\n <MenuItem\n onClick={() => {\n setSelectedClient(row.original)\n setIsShowingSecretWarning(true)\n handleMenuClose()\n }}\n >\n Generate Secret\n </MenuItem>\n <MenuItem\n onClick={() => {\n setSelectedClient(row.original)\n setIsShowingSharingSettings(true)\n handleMenuClose()\n }}\n >\n Sharing Settings\n </MenuItem>\n </Menu>\n </>\n )\n}\n\nexport function OAuthManagement() {\n const { accessToken } = useSynapseContext()\n const [isShowingSharingSettings, setIsShowingSharingSettings] =\n useState(false)\n const [isShowingCreateClientModal, setIsShowingCreateClientModal] =\n useState(false)\n const [isEdit, setIsEdit] = useState<boolean>(false)\n const [selectedClient, setSelectedClient] = useState<OAuthClient>()\n const [isShowingConfirmModal, setIsShowingConfirmModal] = useState(false)\n const [isShowingSecretWarning, setIsShowingSecretWarning] = useState(false)\n const [isShowingSecret, setIsShowingSecret] = useState(false)\n const [secret, setSecret] = useState<string>()\n const [isShowingVerification, setIsShowingVerification] = useState(false)\n\n const { data, isLoading, hasNextPage, fetchNextPage, isFetchingNextPage } =\n useGetOAuthClientInfinite()\n const oAuthClientList = useMemo(\n () => data?.pages.flatMap(page => page.results || []) || [],\n [data],\n )\n\n const warningHeader = 'Are you absolutely sure?'\n const warningBody =\n 'If you have an existing secret, generating a new secret will make your application invalid after generation. This action cannot be undone.'\n\n const onShowSecret = async () => {\n setIsShowingSecretWarning(false)\n try {\n const secret = await SynapseClient.createOAuthClientSecret(\n accessToken!,\n selectedClient?.client_id!,\n )\n setSelectedClient(undefined)\n setIsShowingSecret(true)\n setSecret(secret.client_secret)\n } catch (err: any) {\n displayToast(err.reason as string, 'danger')\n }\n }\n\n const columns = useMemo(\n () =>\n getColumns({\n setIsShowingVerification,\n setSelectedClient,\n setIsShowingSecretWarning,\n setIsEdit,\n setIsShowingCreateClientModal,\n setIsShowingSharingSettings,\n }),\n [],\n )\n\n const table: Table<OAuthClient> = useReactTable<OAuthClient>({\n data: oAuthClientList,\n columns,\n getRowId: row => row.client_id!,\n enableRowSelection: true,\n enableSorting: false,\n getCoreRowModel: getCoreRowModel(),\n columnResizeMode: 'onChange',\n })\n\n const isEmpty = !isLoading && table.getRowModel().rows.length === 0\n\n return (\n <div>\n <Box\n sx={{\n display: 'flex',\n width: '100%',\n justifyContent: 'flex-end',\n mb: 2,\n }}\n >\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n setIsShowingCreateClientModal(true)\n setIsEdit(false)\n }}\n sx={{ float: 'right' }}\n startIcon={<AddCircleTwoTone />}\n >\n Create New Client\n </Button>\n </Box>\n <InfiniteTableLayout\n table={<StyledTanStackTable table={table} />}\n isLoading={isLoading}\n isEmpty={isEmpty}\n hasNextPage={hasNextPage}\n onFetchNextPageClicked={() => {\n void fetchNextPage()\n }}\n isFetchingNextPage={isFetchingNextPage}\n />\n <CreateOAuthModal\n onClose={() => {\n setIsShowingCreateClientModal(false)\n }}\n isShowingModal={isShowingCreateClientModal}\n client={isEdit ? selectedClient : undefined}\n isEdit={isEdit}\n setIsShowingConfirmModal={setIsShowingConfirmModal}\n isShowingConfirmModal={isShowingConfirmModal}\n setIsShowingModal={setIsShowingCreateClientModal}\n />\n <DialogBase\n open={isShowingVerification}\n onCancel={() => setIsShowingVerification(false)}\n title=\"Submit Verification\"\n content={\n <>\n <p>\n In order to verify an OAuth client please submit a request to the{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://sagebionetworks.jira.com/servicedesk/customer/portal/9\"\n >\n Synapse Service Desk.\n </Link>\n </p>\n <b>Please list the following items in your request:</b>\n <ul>\n <li>Your name</li>\n <li>\n The ID of the client to be verified <br />\n </li>\n <li>A description of your application</li>\n </ul>\n {/* <p>\n Verification can take up to X weeks and we will notify you via X.\n </p> */}\n </>\n }\n />\n <OAuthAclEditorModal\n clientId={selectedClient?.client_id!}\n open={isShowingSharingSettings}\n onClose={() => setIsShowingSharingSettings(false)}\n />\n <WarningDialog\n open={isShowingSecretWarning}\n title={warningHeader}\n content={warningBody}\n onCancel={() => {\n setIsShowingSecretWarning(false)\n setSelectedClient(undefined)\n }}\n onConfirm={onShowSecret}\n confirmButtonColor=\"error\"\n confirmButtonText=\"Yes, Continue\"\n />\n {secret && (\n <DialogBase\n open={isShowingSecret}\n title=\"App Secret\"\n onCancel={() => {\n setIsShowingSecret(false)\n setSecret(undefined)\n }}\n content={\n <>\n <p>\n <b>This secret will not be able to be retrieved again.</b> If\n needed, in order to generate a new secret select Generate from\n the Client List.\n </p>\n <CopyToClipboardInput value={secret} inputWidth={'400px'} />\n </>\n }\n />\n )}\n </div>\n )\n}\n\nexport default OAuthManagement\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PortalCard.d.ts","sourceRoot":"","sources":["../../../src/components/PortalList/PortalCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AAsBzD,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,eAAe,GAAG,KAAK,CAAC,SAAS,CAyJvE;AAED,eAAe,UAAU,CAAA"}
1
+ {"version":3,"file":"PortalCard.d.ts","sourceRoot":"","sources":["../../../src/components/PortalList/PortalCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AAuBzD,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,eAAe,GAAG,KAAK,CAAC,SAAS,CAyJvE;AAED,eAAe,UAAU,CAAA"}
@@ -8,8 +8,9 @@ import a from "../PortalAclEditor/PortalAclEditorModal.js";
8
8
  import { useState as o } from "react";
9
9
  import { Box as s, Card as c, CardContent as l, IconButton as u, Link as d, Typography as f } from "@mui/material";
10
10
  import { Fragment as p, jsx as m, jsxs as h } from "react/jsx-runtime";
11
- import { Delete as g, Settings as _ } from "@mui/icons-material";
12
- import v from "dayjs";
11
+ import g from "dayjs";
12
+ import _ from "@mui/icons-material/Settings";
13
+ import v from "@mui/icons-material/Delete";
13
14
  //#region src/components/PortalList/PortalCard.tsx
14
15
  var y = "1";
15
16
  function b({ portal: b }) {
@@ -46,7 +47,7 @@ function b({ portal: b }) {
46
47
  "aria-label": "Delete portal",
47
48
  title: "Delete portal",
48
49
  color: "error",
49
- children: /* @__PURE__ */ m(g, { fontSize: "small" })
50
+ children: /* @__PURE__ */ m(v, { fontSize: "small" })
50
51
  })]
51
52
  })]
52
53
  }), C && /* @__PURE__ */ m(d, {
@@ -85,7 +86,7 @@ function b({ portal: b }) {
85
86
  T && /* @__PURE__ */ h(f, {
86
87
  variant: "caption",
87
88
  color: "text.secondary",
88
- children: ["on ", v(T).format("MMMM D, YYYY")]
89
+ children: ["on ", g(T).format("MMMM D, YYYY")]
89
90
  })
90
91
  ]
91
92
  }),
@@ -106,7 +107,7 @@ function b({ portal: b }) {
106
107
  D && /* @__PURE__ */ h(f, {
107
108
  variant: "caption",
108
109
  color: "text.secondary",
109
- children: ["on ", v(D).format("MMMM D, YYYY")]
110
+ children: ["on ", g(D).format("MMMM D, YYYY")]
110
111
  })
111
112
  ]
112
113
  })
@@ -1 +1 @@
1
- {"version":3,"file":"PortalCard.js","names":[],"sources":["../../../src/components/PortalList/PortalCard.tsx"],"sourcesContent":["import { Portal } from '@sage-bionetworks/synapse-client'\nimport {\n Card,\n CardContent,\n Typography,\n Box,\n Link as MuiLink,\n IconButton,\n} from '@mui/material'\nimport styles from './PortalCard.module.scss'\nimport UserCard from '../UserCard/UserCard'\nimport dayjs from 'dayjs'\nimport { useState } from 'react'\nimport PortalAclEditorModal from '../PortalAclEditor/PortalAclEditorModal'\nimport { Settings, Delete } from '@mui/icons-material'\nimport { ConfirmationDialog } from '../ConfirmationDialog/ConfirmationDialog'\nimport { useDeletePortal } from '@/synapse-queries/portal/usePortal'\nimport { displayToast } from '../ToastMessage'\n\n// Synapse itself is portal ID 1 and should not have ACL management\nconst SYNAPSE_PORTAL_ID = '1'\n\nexport type PortalCardProps = {\n portal: Portal\n}\n\nexport function PortalCard({ portal }: PortalCardProps): React.ReactNode {\n const { id, name, url, createdBy, createdOn, modifiedBy, modifiedOn } = portal\n const [isAclEditorOpen, setIsAclEditorOpen] = useState(false)\n const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false)\n const showAclEditor = id && id !== SYNAPSE_PORTAL_ID\n const showDeleteButton = id && id !== SYNAPSE_PORTAL_ID\n\n const { mutate: deletePortal } = useDeletePortal({\n onSuccess: () => {\n displayToast(`Portal \"${name}\" was successfully deleted`, 'success')\n setIsDeleteDialogOpen(false)\n },\n onError: error => {\n displayToast(`Failed to delete portal: ${error.reason}`, 'danger')\n },\n })\n\n return (\n <>\n <Card className={styles.portalCard}>\n <CardContent>\n <Box className={styles.header}>\n <Box className={styles.titleRow}>\n <Typography variant=\"h6\" component=\"h3\">\n {name}\n </Typography>\n <Box className={styles.actions}>\n {showAclEditor && (\n <IconButton\n size=\"small\"\n onClick={() => setIsAclEditorOpen(true)}\n aria-label=\"Manage portal permissions\"\n title=\"Manage portal permissions\"\n >\n <Settings fontSize=\"small\" />\n </IconButton>\n )}\n {showDeleteButton && (\n <IconButton\n size=\"small\"\n onClick={() => setIsDeleteDialogOpen(true)}\n aria-label=\"Delete portal\"\n title=\"Delete portal\"\n color=\"error\"\n >\n <Delete fontSize=\"small\" />\n </IconButton>\n )}\n </Box>\n </Box>\n {url && (\n <MuiLink\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={styles.url}\n >\n {url}\n </MuiLink>\n )}\n </Box>\n\n <Box className={styles.metadata}>\n {id && (\n <Typography variant=\"body2\" color=\"text.secondary\">\n <strong>ID:</strong> {id}\n </Typography>\n )}\n\n {createdBy && (\n <Box className={styles.userInfo}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n <strong>Created by:</strong>\n </Typography>\n <UserCard\n ownerId={createdBy}\n size=\"SMALL USER CARD\"\n hideEmail\n disableLink={false}\n />\n {createdOn && (\n <Typography variant=\"caption\" color=\"text.secondary\">\n on {dayjs(createdOn).format('MMMM D, YYYY')}\n </Typography>\n )}\n </Box>\n )}\n\n {modifiedBy && (\n <Box className={styles.userInfo}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n <strong>Last modified by:</strong>\n </Typography>\n <UserCard\n ownerId={modifiedBy}\n size=\"SMALL USER CARD\"\n hideEmail\n disableLink={false}\n />\n {modifiedOn && (\n <Typography variant=\"caption\" color=\"text.secondary\">\n on {dayjs(modifiedOn).format('MMMM D, YYYY')}\n </Typography>\n )}\n </Box>\n )}\n </Box>\n </CardContent>\n </Card>\n\n {showAclEditor && id && (\n <PortalAclEditorModal\n portalId={id}\n open={isAclEditorOpen}\n onClose={() => setIsAclEditorOpen(false)}\n />\n )}\n\n {id && (\n <ConfirmationDialog\n open={isDeleteDialogOpen}\n title=\"Delete Portal\"\n content={\n <Box>\n <Typography variant=\"body1\" sx={{ mb: 2 }}>\n Are you sure you want to delete this portal?\n </Typography>\n <Typography variant=\"body2\" sx={{ mb: 1 }}>\n <strong>Name:</strong> {name}\n </Typography>\n {url && (\n <Typography variant=\"body2\">\n <strong>URL:</strong> {url}\n </Typography>\n )}\n </Box>\n }\n confirmButtonProps={{\n children: 'Delete',\n color: 'error',\n variant: 'contained',\n }}\n onConfirm={() => {\n if (id) {\n deletePortal(id)\n }\n }}\n onCancel={() => setIsDeleteDialogOpen(false)}\n maxWidth=\"sm\"\n />\n )}\n </>\n )\n}\n\nexport default PortalCard\n"],"mappings":"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"}
1
+ {"version":3,"file":"PortalCard.js","names":[],"sources":["../../../src/components/PortalList/PortalCard.tsx"],"sourcesContent":["import { Portal } from '@sage-bionetworks/synapse-client'\nimport {\n Card,\n CardContent,\n Typography,\n Box,\n Link as MuiLink,\n IconButton,\n} from '@mui/material'\nimport styles from './PortalCard.module.scss'\nimport UserCard from '../UserCard/UserCard'\nimport dayjs from 'dayjs'\nimport { useState } from 'react'\nimport PortalAclEditorModal from '../PortalAclEditor/PortalAclEditorModal'\nimport Settings from '@mui/icons-material/Settings'\nimport Delete from '@mui/icons-material/Delete'\nimport { ConfirmationDialog } from '../ConfirmationDialog/ConfirmationDialog'\nimport { useDeletePortal } from '@/synapse-queries/portal/usePortal'\nimport { displayToast } from '../ToastMessage'\n\n// Synapse itself is portal ID 1 and should not have ACL management\nconst SYNAPSE_PORTAL_ID = '1'\n\nexport type PortalCardProps = {\n portal: Portal\n}\n\nexport function PortalCard({ portal }: PortalCardProps): React.ReactNode {\n const { id, name, url, createdBy, createdOn, modifiedBy, modifiedOn } = portal\n const [isAclEditorOpen, setIsAclEditorOpen] = useState(false)\n const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false)\n const showAclEditor = id && id !== SYNAPSE_PORTAL_ID\n const showDeleteButton = id && id !== SYNAPSE_PORTAL_ID\n\n const { mutate: deletePortal } = useDeletePortal({\n onSuccess: () => {\n displayToast(`Portal \"${name}\" was successfully deleted`, 'success')\n setIsDeleteDialogOpen(false)\n },\n onError: error => {\n displayToast(`Failed to delete portal: ${error.reason}`, 'danger')\n },\n })\n\n return (\n <>\n <Card className={styles.portalCard}>\n <CardContent>\n <Box className={styles.header}>\n <Box className={styles.titleRow}>\n <Typography variant=\"h6\" component=\"h3\">\n {name}\n </Typography>\n <Box className={styles.actions}>\n {showAclEditor && (\n <IconButton\n size=\"small\"\n onClick={() => setIsAclEditorOpen(true)}\n aria-label=\"Manage portal permissions\"\n title=\"Manage portal permissions\"\n >\n <Settings fontSize=\"small\" />\n </IconButton>\n )}\n {showDeleteButton && (\n <IconButton\n size=\"small\"\n onClick={() => setIsDeleteDialogOpen(true)}\n aria-label=\"Delete portal\"\n title=\"Delete portal\"\n color=\"error\"\n >\n <Delete fontSize=\"small\" />\n </IconButton>\n )}\n </Box>\n </Box>\n {url && (\n <MuiLink\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={styles.url}\n >\n {url}\n </MuiLink>\n )}\n </Box>\n\n <Box className={styles.metadata}>\n {id && (\n <Typography variant=\"body2\" color=\"text.secondary\">\n <strong>ID:</strong> {id}\n </Typography>\n )}\n\n {createdBy && (\n <Box className={styles.userInfo}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n <strong>Created by:</strong>\n </Typography>\n <UserCard\n ownerId={createdBy}\n size=\"SMALL USER CARD\"\n hideEmail\n disableLink={false}\n />\n {createdOn && (\n <Typography variant=\"caption\" color=\"text.secondary\">\n on {dayjs(createdOn).format('MMMM D, YYYY')}\n </Typography>\n )}\n </Box>\n )}\n\n {modifiedBy && (\n <Box className={styles.userInfo}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n <strong>Last modified by:</strong>\n </Typography>\n <UserCard\n ownerId={modifiedBy}\n size=\"SMALL USER CARD\"\n hideEmail\n disableLink={false}\n />\n {modifiedOn && (\n <Typography variant=\"caption\" color=\"text.secondary\">\n on {dayjs(modifiedOn).format('MMMM D, YYYY')}\n </Typography>\n )}\n </Box>\n )}\n </Box>\n </CardContent>\n </Card>\n\n {showAclEditor && id && (\n <PortalAclEditorModal\n portalId={id}\n open={isAclEditorOpen}\n onClose={() => setIsAclEditorOpen(false)}\n />\n )}\n\n {id && (\n <ConfirmationDialog\n open={isDeleteDialogOpen}\n title=\"Delete Portal\"\n content={\n <Box>\n <Typography variant=\"body1\" sx={{ mb: 2 }}>\n Are you sure you want to delete this portal?\n </Typography>\n <Typography variant=\"body2\" sx={{ mb: 1 }}>\n <strong>Name:</strong> {name}\n </Typography>\n {url && (\n <Typography variant=\"body2\">\n <strong>URL:</strong> {url}\n </Typography>\n )}\n </Box>\n }\n confirmButtonProps={{\n children: 'Delete',\n color: 'error',\n variant: 'contained',\n }}\n onConfirm={() => {\n if (id) {\n deletePortal(id)\n }\n }}\n onCancel={() => setIsDeleteDialogOpen(false)}\n maxWidth=\"sm\"\n />\n )}\n </>\n )\n}\n\nexport default PortalCard\n"],"mappings":"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"}
@@ -5,11 +5,11 @@ import r from "./PortalList.module.js";
5
5
  import { Fragment as i, useEffect as a, useState as o } from "react";
6
6
  import { Alert as s, Box as c, Button as l, CircularProgress as u, Typography as d } from "@mui/material";
7
7
  import { jsx as f, jsxs as p } from "react/jsx-runtime";
8
- import { Add as m } from "@mui/icons-material";
9
- import { useInView as h } from "react-intersection-observer";
8
+ import { useInView as m } from "react-intersection-observer";
9
+ import h from "@mui/icons-material/Add";
10
10
  //#region src/components/PortalList/PortalList.tsx
11
11
  function g() {
12
- let { ref: g, inView: _ } = h(), [v, y] = o(!1), { data: b, status: x, error: S, isLoading: C, hasNextPage: w, isFetchingNextPage: T, fetchNextPage: E } = e({ throwOnError: !1 });
12
+ let { ref: g, inView: _ } = m(), [v, y] = o(!1), { data: b, status: x, error: S, isLoading: C, hasNextPage: w, isFetchingNextPage: T, fetchNextPage: E } = e({ throwOnError: !1 });
13
13
  a(() => {
14
14
  x === "success" && !T && w && E && _ && E();
15
15
  }, [
@@ -37,7 +37,7 @@ function g() {
37
37
  }), /* @__PURE__ */ f(l, {
38
38
  variant: "contained",
39
39
  color: "primary",
40
- startIcon: /* @__PURE__ */ f(m, {}),
40
+ startIcon: /* @__PURE__ */ f(h, {}),
41
41
  onClick: () => y(!0),
42
42
  children: "Create New Portal"
43
43
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"PortalList.js","names":[],"sources":["../../../src/components/PortalList/PortalList.tsx"],"sourcesContent":["import { useListPortalsInfinite } from '@/synapse-queries/portal/useListPortals'\nimport { Box, Typography, CircularProgress, Alert, Button } from '@mui/material'\nimport { Fragment, useEffect, useState } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport PortalCard from './PortalCard'\nimport CreatePortalModal from './CreatePortalModal'\nimport styles from './PortalList.module.scss'\nimport { Add } from '@mui/icons-material'\n\nexport function PortalList(): React.ReactNode {\n const { ref, inView } = useInView()\n const [isCreateModalOpen, setIsCreateModalOpen] = useState(false)\n\n const {\n data,\n status,\n error,\n isLoading,\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n } = useListPortalsInfinite({\n throwOnError: false,\n })\n\n useEffect(() => {\n if (\n status === 'success' &&\n !isFetchingNextPage &&\n hasNextPage &&\n fetchNextPage &&\n inView\n ) {\n fetchNextPage()\n }\n }, [status, hasNextPage, isFetchingNextPage, fetchNextPage, inView])\n\n const allPortals = data?.pages.flatMap(page => page.page ?? []) ?? []\n\n if (error) {\n return (\n <Alert severity=\"error\" className={styles.errorAlert}>\n Error loading portals: {error.message}\n </Alert>\n )\n }\n\n return (\n <Box className={styles.portalListContainer}>\n <Box className={styles.header}>\n <Typography variant=\"h4\" component=\"h2\" className={styles.title}>\n Portals\n </Typography>\n <Button\n variant=\"contained\"\n color=\"primary\"\n startIcon={<Add />}\n onClick={() => setIsCreateModalOpen(true)}\n >\n Create New Portal\n </Button>\n </Box>\n\n {isLoading && (\n <Box className={styles.loadingContainer}>\n <CircularProgress />\n </Box>\n )}\n\n {!isLoading && allPortals.length === 0 && (\n <Typography variant=\"body1\" color=\"text.secondary\">\n No portals found.\n </Typography>\n )}\n\n {allPortals.length > 0 && (\n <Box className={styles.portalGrid}>\n {allPortals.map(portal => (\n <Fragment key={portal.id ?? JSON.stringify(portal)}>\n <PortalCard portal={portal} />\n </Fragment>\n ))}\n </Box>\n )}\n\n {/* Trigger for loading next page */}\n {hasNextPage && <div ref={ref} className={styles.loadMoreTrigger} />}\n\n {isFetchingNextPage && (\n <Box className={styles.loadingMoreContainer}>\n <CircularProgress size={32} />\n </Box>\n )}\n\n <CreatePortalModal\n open={isCreateModalOpen}\n onClose={() => setIsCreateModalOpen(false)}\n />\n </Box>\n )\n}\n\nexport default PortalList\n"],"mappings":";;;;;;;;;;AASA,SAAgB,IAA8B;CAC5C,IAAM,EAAE,QAAK,cAAW,EAAU,GAC5B,CAAC,GAAmB,KAAwB,EAAS,EAAK,GAE1D,EACJ,SACA,WACA,UACA,cACA,gBACA,uBACA,qBACE,EAAuB,EACzB,cAAc,GAChB,CAAC;CAED,QAAgB;EACd,AACE,MAAW,aACX,CAAC,KACD,KACA,KACA,KAEA,EAAc;CAElB,GAAG;EAAC;EAAQ;EAAa;EAAoB;EAAe;CAAM,CAAC;CAEnE,IAAM,IAAa,GAAM,MAAM,SAAQ,MAAQ,EAAK,QAAQ,CAAC,CAAC,KAAK,CAAC;CAUpE,OARI,IAEA,kBAAC,GAAD;EAAO,UAAS;EAAQ,WAAW,EAAO;YAA1C,CAAsD,2BAC5B,EAAM,OACzB;MAKT,kBAAC,GAAD;EAAK,WAAW,EAAO;YAAvB;GACE,kBAAC,GAAD;IAAK,WAAW,EAAO;cAAvB,CACE,kBAAC,GAAD;KAAY,SAAQ;KAAK,WAAU;KAAK,WAAW,EAAO;eAAO;IAErD,CAAA,GACZ,kBAAC,GAAD;KACE,SAAQ;KACR,OAAM;KACN,WAAW,kBAAC,GAAD,CAAM,CAAA;KACjB,eAAe,EAAqB,EAAI;eACzC;IAEO,CAAA,CACL;;GAEJ,KACC,kBAAC,GAAD;IAAK,WAAW,EAAO;cACrB,kBAAC,GAAD,CAAmB,CAAA;GAChB,CAAA;GAGN,CAAC,KAAa,EAAW,WAAW,KACnC,kBAAC,GAAD;IAAY,SAAQ;IAAQ,OAAM;cAAiB;GAEvC,CAAA;GAGb,EAAW,SAAS,KACnB,kBAAC,GAAD;IAAK,WAAW,EAAO;cACpB,EAAW,KAAI,MACd,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAoB,UAAS,CAAA,EACrB,GAFK,EAAO,MAAM,KAAK,UAAU,CAAM,CAEvC,CACX;GACE,CAAA;GAIN,KAAe,kBAAC,OAAD;IAAU;IAAK,WAAW,EAAO;GAAkB,CAAA;GAElE,KACC,kBAAC,GAAD;IAAK,WAAW,EAAO;cACrB,kBAAC,GAAD,EAAkB,MAAM,GAAK,CAAA;GAC1B,CAAA;GAGP,kBAAC,GAAD;IACE,MAAM;IACN,eAAe,EAAqB,EAAK;GAC1C,CAAA;EACE;;AAET"}
1
+ {"version":3,"file":"PortalList.js","names":[],"sources":["../../../src/components/PortalList/PortalList.tsx"],"sourcesContent":["import { useListPortalsInfinite } from '@/synapse-queries/portal/useListPortals'\nimport { Box, Typography, CircularProgress, Alert, Button } from '@mui/material'\nimport { Fragment, useEffect, useState } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport PortalCard from './PortalCard'\nimport CreatePortalModal from './CreatePortalModal'\nimport styles from './PortalList.module.scss'\nimport Add from '@mui/icons-material/Add'\n\nexport function PortalList(): React.ReactNode {\n const { ref, inView } = useInView()\n const [isCreateModalOpen, setIsCreateModalOpen] = useState(false)\n\n const {\n data,\n status,\n error,\n isLoading,\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n } = useListPortalsInfinite({\n throwOnError: false,\n })\n\n useEffect(() => {\n if (\n status === 'success' &&\n !isFetchingNextPage &&\n hasNextPage &&\n fetchNextPage &&\n inView\n ) {\n fetchNextPage()\n }\n }, [status, hasNextPage, isFetchingNextPage, fetchNextPage, inView])\n\n const allPortals = data?.pages.flatMap(page => page.page ?? []) ?? []\n\n if (error) {\n return (\n <Alert severity=\"error\" className={styles.errorAlert}>\n Error loading portals: {error.message}\n </Alert>\n )\n }\n\n return (\n <Box className={styles.portalListContainer}>\n <Box className={styles.header}>\n <Typography variant=\"h4\" component=\"h2\" className={styles.title}>\n Portals\n </Typography>\n <Button\n variant=\"contained\"\n color=\"primary\"\n startIcon={<Add />}\n onClick={() => setIsCreateModalOpen(true)}\n >\n Create New Portal\n </Button>\n </Box>\n\n {isLoading && (\n <Box className={styles.loadingContainer}>\n <CircularProgress />\n </Box>\n )}\n\n {!isLoading && allPortals.length === 0 && (\n <Typography variant=\"body1\" color=\"text.secondary\">\n No portals found.\n </Typography>\n )}\n\n {allPortals.length > 0 && (\n <Box className={styles.portalGrid}>\n {allPortals.map(portal => (\n <Fragment key={portal.id ?? JSON.stringify(portal)}>\n <PortalCard portal={portal} />\n </Fragment>\n ))}\n </Box>\n )}\n\n {/* Trigger for loading next page */}\n {hasNextPage && <div ref={ref} className={styles.loadMoreTrigger} />}\n\n {isFetchingNextPage && (\n <Box className={styles.loadingMoreContainer}>\n <CircularProgress size={32} />\n </Box>\n )}\n\n <CreatePortalModal\n open={isCreateModalOpen}\n onClose={() => setIsCreateModalOpen(false)}\n />\n </Box>\n )\n}\n\nexport default PortalList\n"],"mappings":";;;;;;;;;;AASA,SAAgB,IAA8B;CAC5C,IAAM,EAAE,QAAK,cAAW,EAAU,GAC5B,CAAC,GAAmB,KAAwB,EAAS,EAAK,GAE1D,EACJ,SACA,WACA,UACA,cACA,gBACA,uBACA,qBACE,EAAuB,EACzB,cAAc,GAChB,CAAC;CAED,QAAgB;EACd,AACE,MAAW,aACX,CAAC,KACD,KACA,KACA,KAEA,EAAc;CAElB,GAAG;EAAC;EAAQ;EAAa;EAAoB;EAAe;CAAM,CAAC;CAEnE,IAAM,IAAa,GAAM,MAAM,SAAQ,MAAQ,EAAK,QAAQ,CAAC,CAAC,KAAK,CAAC;CAUpE,OARI,IAEA,kBAAC,GAAD;EAAO,UAAS;EAAQ,WAAW,EAAO;YAA1C,CAAsD,2BAC5B,EAAM,OACzB;MAKT,kBAAC,GAAD;EAAK,WAAW,EAAO;YAAvB;GACE,kBAAC,GAAD;IAAK,WAAW,EAAO;cAAvB,CACE,kBAAC,GAAD;KAAY,SAAQ;KAAK,WAAU;KAAK,WAAW,EAAO;eAAO;IAErD,CAAA,GACZ,kBAAC,GAAD;KACE,SAAQ;KACR,OAAM;KACN,WAAW,kBAAC,GAAD,CAAM,CAAA;KACjB,eAAe,EAAqB,EAAI;eACzC;IAEO,CAAA,CACL;;GAEJ,KACC,kBAAC,GAAD;IAAK,WAAW,EAAO;cACrB,kBAAC,GAAD,CAAmB,CAAA;GAChB,CAAA;GAGN,CAAC,KAAa,EAAW,WAAW,KACnC,kBAAC,GAAD;IAAY,SAAQ;IAAQ,OAAM;cAAiB;GAEvC,CAAA;GAGb,EAAW,SAAS,KACnB,kBAAC,GAAD;IAAK,WAAW,EAAO;cACpB,EAAW,KAAI,MACd,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAoB,UAAS,CAAA,EACrB,GAFK,EAAO,MAAM,KAAK,UAAU,CAAM,CAEvC,CACX;GACE,CAAA;GAIN,KAAe,kBAAC,OAAD;IAAU;IAAK,WAAW,EAAO;GAAkB,CAAA;GAElE,KACC,kBAAC,GAAD;IAAK,WAAW,EAAO;cACrB,kBAAC,GAAD,EAAkB,MAAM,GAAK,CAAA;GAC1B,CAAA;GAGP,kBAAC,GAAD;IACE,MAAM;IACN,eAAe,EAAqB,EAAK;GAC1C,CAAA;EACE;;AAET"}
@@ -4,9 +4,9 @@ import "../../synapse-queries/index.js";
4
4
  import { getProjectVisibilityFromACL as n } from "./getProjectVisibilityFromACL.js";
5
5
  import { Chip as r, Skeleton as i, Typography as a } from "@mui/material";
6
6
  import { jsx as o } from "react/jsx-runtime";
7
- import s from "@mui/icons-material/VisibilityOutlined";
8
- import c from "@mui/icons-material/LanguageOutlined";
9
- import l from "@mui/icons-material/LockOutlined";
7
+ import s from "@mui/icons-material/LockOutlined";
8
+ import c from "@mui/icons-material/VisibilityOutlined";
9
+ import l from "@mui/icons-material/LanguageOutlined";
10
10
  //#region src/components/ProjectVisibilityChip/ProjectVisibilityChip.tsx
11
11
  var u = {
12
12
  fill: "var(--synapse-gray-900)",
@@ -15,17 +15,17 @@ var u = {
15
15
  PRIVATE: {
16
16
  label: "Private Project",
17
17
  color: "#FAC3C3",
18
- icon: /* @__PURE__ */ o(l, { sx: u })
18
+ icon: /* @__PURE__ */ o(s, { sx: u })
19
19
  },
20
20
  DISCOVERABLE: {
21
21
  label: "Discoverable Project",
22
22
  color: "#FDEFC1",
23
- icon: /* @__PURE__ */ o(s, { sx: u })
23
+ icon: /* @__PURE__ */ o(c, { sx: u })
24
24
  },
25
25
  PUBLIC: {
26
26
  label: "Public Project",
27
27
  color: "#D4EFD4",
28
- icon: /* @__PURE__ */ o(c, { sx: u })
28
+ icon: /* @__PURE__ */ o(l, { sx: u })
29
29
  }
30
30
  };
31
31
  function f({ visibility: e }) {
@@ -8,11 +8,11 @@ import { QBDragHandle as u } from "./QBDragHandle.js";
8
8
  import { useCallback as d, useMemo as f, useState as p } from "react";
9
9
  import { Autocomplete as m, IconButton as h, InputLabel as g, MenuItem as _, Select as v, TextField as y, ToggleButton as b, ToggleButtonGroup as x, Tooltip as S } from "@mui/material";
10
10
  import { Fragment as C, jsx as w, jsxs as T } from "react/jsx-runtime";
11
- import { useSortable as E } from "@dnd-kit/react/sortable";
12
- import D from "@mui/icons-material/DeleteOutline";
11
+ import E from "@mui/icons-material/DeleteOutline";
12
+ import { useSortable as D } from "@dnd-kit/react/sortable";
13
13
  //#region src/components/QueryBuilder/FilterConditionRow.tsx
14
14
  function O(e) {
15
- let { condition: i, parentGroupId: d, index: p } = e, { columnModels: b, facetResults: x, onlyFacetedColumns: O, getColumnDisplayName: A, updateConditionAt: j, removeConditionAt: P } = s(), { ref: F, handleRef: I, isDragSource: L } = E({
15
+ let { condition: i, parentGroupId: d, index: p } = e, { columnModels: b, facetResults: x, onlyFacetedColumns: O, getColumnDisplayName: A, updateConditionAt: j, removeConditionAt: P } = s(), { ref: F, handleRef: I, isDragSource: L } = D({
16
16
  id: i.id,
17
17
  index: p,
18
18
  group: d,
@@ -45,7 +45,7 @@ function O(e) {
45
45
  className: c.remove,
46
46
  "aria-label": "Remove condition",
47
47
  onClick: () => P(i.id),
48
- children: /* @__PURE__ */ w(D, { fontSize: "small" })
48
+ children: /* @__PURE__ */ w(E, { fontSize: "small" })
49
49
  })
50
50
  }),
51
51
  /* @__PURE__ */ w(m, {
@@ -4,11 +4,11 @@ import t from "../../synapse-queries/entity/useGetQueryResultBundle.js";
4
4
  import n from "react";
5
5
  import { Box as r, Button as i } from "@mui/material";
6
6
  import { jsx as a } from "react/jsx-runtime";
7
- import { NavigateNext as o } from "@mui/icons-material";
8
- import { Link as s, useInRouterContext as c } from "react-router";
7
+ import { Link as o, useInRouterContext as s } from "react-router";
8
+ import c from "@mui/icons-material/NavigateNext";
9
9
  //#region src/components/QueryCountButton/QueryCountButton.tsx
10
10
  function l(l) {
11
- let { sql: u, href: d, prefixText: f = "", suffixText: p = "", ...m } = l, h = e(u), g = c(), { data: _, isLoading: v } = t({
11
+ let { sql: u, href: d, prefixText: f = "", suffixText: p = "", ...m } = l, h = e(u), g = s(), { data: _, isLoading: v } = t({
12
12
  concreteType: "org.sagebionetworks.repo.model.table.QueryBundleRequest",
13
13
  query: { sql: u },
14
14
  entityId: h,
@@ -21,7 +21,7 @@ function l(l) {
21
21
  component: "a"
22
22
  } : g ? {
23
23
  to: d,
24
- component: s
24
+ component: o
25
25
  } : {
26
26
  href: d,
27
27
  component: "a"
@@ -44,7 +44,7 @@ function l(l) {
44
44
  width: 24,
45
45
  height: 24
46
46
  },
47
- children: /* @__PURE__ */ a(o, { sx: {
47
+ children: /* @__PURE__ */ a(c, { sx: {
48
48
  color: "primary.main",
49
49
  fontSize: 20
50
50
  } })
@@ -1 +1 @@
1
- {"version":3,"file":"QueryCountButton.js","names":[],"sources":["../../../src/components/QueryCountButton/QueryCountButton.tsx"],"sourcesContent":["import useGetQueryResultBundle from '@/synapse-queries/entity/useGetQueryResultBundle'\nimport { BUNDLE_MASK_QUERY_COUNT } from '@/utils/SynapseConstants'\nimport { parseEntityIdFromSqlStatement } from '@/utils/functions/SqlFunctions'\nimport { QueryBundleRequest } from '@sage-bionetworks/synapse-types'\nimport { Box, Button, ButtonProps } from '@mui/material'\nimport { NavigateNext } from '@mui/icons-material'\nimport React from 'react'\nimport { Link as RouterLink, useInRouterContext } from 'react-router'\n\nexport type QueryCountButtonProps = {\n /**\n * The SQL query to execute to get the count\n */\n sql: string\n /**\n * The target URL when the button is clicked\n */\n href: string\n /**\n * Text to display before the count (e.g., \"Explore\")\n */\n prefixText?: string\n /**\n * Text to display after the count (e.g., \"files\")\n */\n suffixText?: string\n /**\n * Additional MUI Button props\n */\n} & Omit<ButtonProps, 'children'>\n\n/**\n * A button component that displays text with an inline count.\n * The count is fetched by executing a SQL query against a Synapse table.\n * Example: \"Explore 42 files\"\n */\nexport function QueryCountButton(props: QueryCountButtonProps) {\n const { sql, href, prefixText = '', suffixText = '', ...buttonProps } = props\n const entityId = parseEntityIdFromSqlStatement(sql)\n const inRouterContext = useInRouterContext()\n\n const request: QueryBundleRequest = {\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n query: { sql },\n entityId,\n partMask: BUNDLE_MASK_QUERY_COUNT,\n }\n\n const { data: queryResult, isLoading } = useGetQueryResultBundle(request)\n\n const count = queryResult?.queryCount\n\n const isExternalLink =\n href?.startsWith('http://') || href?.startsWith('https://')\n\n // Determine the appropriate link props based on context\n let linkProps: Partial<ButtonProps> & { target?: string; to?: string } = {}\n\n if (isExternalLink) {\n linkProps = {\n href,\n target: '_blank',\n rel: 'noopener noreferrer',\n component: 'a',\n }\n } else if (inRouterContext) {\n // For internal links, if we are in a react-router context, use RouterLink\n linkProps = {\n to: href,\n component: RouterLink,\n }\n } else {\n linkProps = {\n href,\n component: 'a',\n }\n }\n\n // Build the button text: \"prefixText count suffixText\"\n const buttonText = React.useMemo(() => {\n const parts: string[] = []\n\n if (prefixText) {\n parts.push(prefixText)\n }\n\n if (!isLoading && count !== undefined) {\n parts.push(count.toLocaleString())\n }\n\n if (suffixText) {\n parts.push(suffixText)\n }\n\n return parts.join(' ')\n }, [prefixText, count, suffixText, isLoading])\n\n // Icon with theme-aware circular background\n const endIcon = (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'background.paper',\n borderRadius: '50%',\n width: 24,\n height: 24,\n }}\n >\n <NavigateNext sx={{ color: 'primary.main', fontSize: 20 }} />\n </Box>\n )\n\n return (\n <Button\n {...buttonProps}\n {...linkProps}\n endIcon={endIcon}\n loading={isLoading}\n >\n {buttonText}\n </Button>\n )\n}\n\nexport default QueryCountButton\n"],"mappings":";;;;;;;;;AAoCA,SAAgB,EAAiB,GAA8B;CAC7D,IAAM,EAAE,QAAK,SAAM,gBAAa,IAAI,gBAAa,IAAI,GAAG,MAAgB,GAClE,IAAW,EAA8B,CAAG,GAC5C,IAAkB,EAAmB,GASrC,EAAE,MAAM,GAAa,iBAAc,EAAwB;EAN/D,cAAc;EACd,OAAO,EAAE,OAAI;EACb;EACA,UAAA;CAG+D,CAAO,GAElE,IAAQ,GAAa,YAErB,IACJ,GAAM,WAAW,SAAS,KAAK,GAAM,WAAW,UAAU,GAGxD,IAAqE,CAAC;CAE1E,AAcE,IAdE,IACU;EACV;EACA,QAAQ;EACR,KAAK;EACL,WAAW;CACb,IACS,IAEG;EACV,IAAI;EACJ,WAAW;CACb,IAEY;EACV;EACA,WAAW;CACb;CAIF,IAAM,IAAa,EAAM,cAAc;EACrC,IAAM,IAAkB,CAAC;EAczB,OAZI,KACF,EAAM,KAAK,CAAU,GAGnB,CAAC,KAAa,MAAU,KAAA,KAC1B,EAAM,KAAK,EAAM,eAAe,CAAC,GAG/B,KACF,EAAM,KAAK,CAAU,GAGhB,EAAM,KAAK,GAAG;CACvB,GAAG;EAAC;EAAY;EAAO;EAAY;CAAS,CAAC,GAGvC,IACJ,kBAAC,GAAD;EACE,IAAI;GACF,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,iBAAiB;GACjB,cAAc;GACd,OAAO;GACP,QAAQ;EACV;YAEA,kBAAC,GAAD,EAAc,IAAI;GAAE,OAAO;GAAgB,UAAU;EAAG,EAAI,CAAA;CACzD,CAAA;CAGP,OACE,kBAAC,GAAD;EACE,GAAI;EACJ,GAAI;EACK;EACT,SAAS;YAER;CACK,CAAA;AAEZ"}
1
+ {"version":3,"file":"QueryCountButton.js","names":[],"sources":["../../../src/components/QueryCountButton/QueryCountButton.tsx"],"sourcesContent":["import useGetQueryResultBundle from '@/synapse-queries/entity/useGetQueryResultBundle'\nimport { BUNDLE_MASK_QUERY_COUNT } from '@/utils/SynapseConstants'\nimport { parseEntityIdFromSqlStatement } from '@/utils/functions/SqlFunctions'\nimport { QueryBundleRequest } from '@sage-bionetworks/synapse-types'\nimport { Box, Button, ButtonProps } from '@mui/material'\nimport NavigateNext from '@mui/icons-material/NavigateNext'\nimport React from 'react'\nimport { Link as RouterLink, useInRouterContext } from 'react-router'\n\nexport type QueryCountButtonProps = {\n /**\n * The SQL query to execute to get the count\n */\n sql: string\n /**\n * The target URL when the button is clicked\n */\n href: string\n /**\n * Text to display before the count (e.g., \"Explore\")\n */\n prefixText?: string\n /**\n * Text to display after the count (e.g., \"files\")\n */\n suffixText?: string\n /**\n * Additional MUI Button props\n */\n} & Omit<ButtonProps, 'children'>\n\n/**\n * A button component that displays text with an inline count.\n * The count is fetched by executing a SQL query against a Synapse table.\n * Example: \"Explore 42 files\"\n */\nexport function QueryCountButton(props: QueryCountButtonProps) {\n const { sql, href, prefixText = '', suffixText = '', ...buttonProps } = props\n const entityId = parseEntityIdFromSqlStatement(sql)\n const inRouterContext = useInRouterContext()\n\n const request: QueryBundleRequest = {\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n query: { sql },\n entityId,\n partMask: BUNDLE_MASK_QUERY_COUNT,\n }\n\n const { data: queryResult, isLoading } = useGetQueryResultBundle(request)\n\n const count = queryResult?.queryCount\n\n const isExternalLink =\n href?.startsWith('http://') || href?.startsWith('https://')\n\n // Determine the appropriate link props based on context\n let linkProps: Partial<ButtonProps> & { target?: string; to?: string } = {}\n\n if (isExternalLink) {\n linkProps = {\n href,\n target: '_blank',\n rel: 'noopener noreferrer',\n component: 'a',\n }\n } else if (inRouterContext) {\n // For internal links, if we are in a react-router context, use RouterLink\n linkProps = {\n to: href,\n component: RouterLink,\n }\n } else {\n linkProps = {\n href,\n component: 'a',\n }\n }\n\n // Build the button text: \"prefixText count suffixText\"\n const buttonText = React.useMemo(() => {\n const parts: string[] = []\n\n if (prefixText) {\n parts.push(prefixText)\n }\n\n if (!isLoading && count !== undefined) {\n parts.push(count.toLocaleString())\n }\n\n if (suffixText) {\n parts.push(suffixText)\n }\n\n return parts.join(' ')\n }, [prefixText, count, suffixText, isLoading])\n\n // Icon with theme-aware circular background\n const endIcon = (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'background.paper',\n borderRadius: '50%',\n width: 24,\n height: 24,\n }}\n >\n <NavigateNext sx={{ color: 'primary.main', fontSize: 20 }} />\n </Box>\n )\n\n return (\n <Button\n {...buttonProps}\n {...linkProps}\n endIcon={endIcon}\n loading={isLoading}\n >\n {buttonText}\n </Button>\n )\n}\n\nexport default QueryCountButton\n"],"mappings":";;;;;;;;;AAoCA,SAAgB,EAAiB,GAA8B;CAC7D,IAAM,EAAE,QAAK,SAAM,gBAAa,IAAI,gBAAa,IAAI,GAAG,MAAgB,GAClE,IAAW,EAA8B,CAAG,GAC5C,IAAkB,EAAmB,GASrC,EAAE,MAAM,GAAa,iBAAc,EAAwB;EAN/D,cAAc;EACd,OAAO,EAAE,OAAI;EACb;EACA,UAAA;CAG+D,CAAO,GAElE,IAAQ,GAAa,YAErB,IACJ,GAAM,WAAW,SAAS,KAAK,GAAM,WAAW,UAAU,GAGxD,IAAqE,CAAC;CAE1E,AAcE,IAdE,IACU;EACV;EACA,QAAQ;EACR,KAAK;EACL,WAAW;CACb,IACS,IAEG;EACV,IAAI;EACJ,WAAW;CACb,IAEY;EACV;EACA,WAAW;CACb;CAIF,IAAM,IAAa,EAAM,cAAc;EACrC,IAAM,IAAkB,CAAC;EAczB,OAZI,KACF,EAAM,KAAK,CAAU,GAGnB,CAAC,KAAa,MAAU,KAAA,KAC1B,EAAM,KAAK,EAAM,eAAe,CAAC,GAG/B,KACF,EAAM,KAAK,CAAU,GAGhB,EAAM,KAAK,GAAG;CACvB,GAAG;EAAC;EAAY;EAAO;EAAY;CAAS,CAAC,GAGvC,IACJ,kBAAC,GAAD;EACE,IAAI;GACF,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,iBAAiB;GACjB,cAAc;GACd,OAAO;GACP,QAAQ;EACV;YAEA,kBAAC,GAAD,EAAc,IAAI;GAAE,OAAO;GAAgB,UAAU;EAAG,EAAI,CAAA;CACzD,CAAA;CAGP,OACE,kBAAC,GAAD;EACE,GAAI;EACJ,GAAI;EACK;EACT,SAAS;YAER;CACK,CAAA;AAEZ"}
@@ -2,8 +2,8 @@ import { formatExplorePagePathAndQueryString as e, formatReleaseCardData as t }
2
2
  import { Fragment as n, useEffect as r, useState as i } from "react";
3
3
  import { Box as a, Button as o, Divider as s, Stack as c, Typography as l } from "@mui/material";
4
4
  import { Fragment as u, jsx as d, jsxs as f } from "react/jsx-runtime";
5
- import { CalendarTodayTwoTone as p } from "@mui/icons-material";
6
- import { Link as m } from "react-router";
5
+ import { Link as p } from "react-router";
6
+ import m from "@mui/icons-material/CalendarTodayTwoTone";
7
7
  //#region src/components/ReleaseCard/ReleaseCardLarge.tsx
8
8
  function h({ value: e, label: t }) {
9
9
  return /* @__PURE__ */ f(c, {
@@ -65,7 +65,7 @@ function g({ data: g, schema: _, includePortalCardClass: v = !0, releaseCardConf
65
65
  alignItems: "center",
66
66
  gap: "10px"
67
67
  },
68
- children: [/* @__PURE__ */ d(p, { sx: { color: "grey.700" } }), /* @__PURE__ */ f(l, {
68
+ children: [/* @__PURE__ */ d(m, { sx: { color: "grey.700" } }), /* @__PURE__ */ f(l, {
69
69
  variant: "headline1",
70
70
  children: [y.prependRelease && "Release ", b]
71
71
  })]
@@ -82,13 +82,13 @@ function g({ data: g, schema: _, includePortalCardClass: v = !0, releaseCardConf
82
82
  gap: "20px"
83
83
  },
84
84
  children: [C && T && /* @__PURE__ */ d(o, {
85
- component: m,
85
+ component: p,
86
86
  variant: "contained",
87
87
  color: "primary",
88
88
  to: T,
89
89
  children: C.label
90
90
  }), w && D && /* @__PURE__ */ d(o, {
91
- component: m,
91
+ component: p,
92
92
  to: D,
93
93
  children: w.label
94
94
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"ReleaseCardLarge.js","names":[],"sources":["../../../src/components/ReleaseCard/ReleaseCardLarge.tsx"],"sourcesContent":["import { CalendarTodayTwoTone } from '@mui/icons-material'\nimport { Box, Button, Divider, Stack, Typography } from '@mui/material'\nimport { Fragment, useEffect, useState } from 'react'\nimport { Link as ReactRouterLink } from 'react-router'\nimport { ReleaseCardProps } from './ReleaseCard'\nimport { ReleaseCardLargeConfig, ReleaseCardStat } from './ReleaseCardTypes'\nimport {\n formatExplorePagePathAndQueryString,\n formatReleaseCardData,\n} from './ReleaseCardUtils'\n\nfunction StatFlex({ value, label }: ReleaseCardStat) {\n return (\n <Stack\n direction=\"column\"\n sx={{\n alignItems: 'center',\n padding: { xs: '20px 10px', md: '20px 40px' },\n gap: '10px',\n // ensure that stats are aligned when multiple cards are stacked vertically\n width: { xs: 'unset', lg: '200px' },\n }}\n >\n <Typography variant=\"headline1\">{value}</Typography>\n <Typography\n variant=\"body1\"\n sx={{\n lineHeight: '20px',\n color: 'grey.700',\n }}\n >\n {label}\n </Typography>\n </Stack>\n )\n}\n\nexport type ReleaseCardLargeProps = Omit<\n ReleaseCardProps,\n 'releaseCardConfig'\n> & { releaseCardConfig: ReleaseCardLargeConfig }\n\nexport function ReleaseCardLarge({\n data,\n schema,\n includePortalCardClass = true,\n releaseCardConfig,\n}: ReleaseCardLargeProps) {\n const { releaseName, releaseDate, stats } = formatReleaseCardData(\n schema,\n data,\n releaseCardConfig.releaseMetadataConfig,\n releaseCardConfig.statsConfig,\n )\n const { primaryBtnConfig, secondaryBtnConfig } = releaseCardConfig\n\n const [primaryBtnPathAndQuery, setPrimaryBtnPathAndQuery] = useState<\n string | null\n >(null)\n const [secondaryBtnPathAndQuery, setSecondaryBtnPathAndQuery] = useState<\n string | null\n >(null)\n\n useEffect(() => {\n formatExplorePagePathAndQueryString(schema, data, primaryBtnConfig).then(\n setPrimaryBtnPathAndQuery,\n )\n\n formatExplorePagePathAndQueryString(schema, data, secondaryBtnConfig).then(\n setSecondaryBtnPathAndQuery,\n )\n }, [schema, data, primaryBtnConfig, secondaryBtnConfig])\n\n if (releaseName === null) return <></>\n\n return (\n <Box\n className={`ReleaseCard ${\n includePortalCardClass ? 'SRC-portalCard' : ''\n }`}\n sx={{\n minWidth: '200px',\n }}\n >\n <Stack\n direction={{ xs: 'column', lg: 'row' }}\n sx={{\n justifyContent: 'space-between',\n gap: '20px',\n padding: '20px',\n }}\n >\n <Stack\n direction=\"column\"\n sx={{\n gap: '20px',\n }}\n >\n <Stack\n direction=\"row\"\n sx={{\n alignItems: 'center',\n gap: '10px',\n }}\n >\n <CalendarTodayTwoTone sx={{ color: 'grey.700' }} />\n <Typography variant=\"headline1\">\n {releaseCardConfig.prependRelease && 'Release '}\n {releaseName}\n </Typography>\n </Stack>\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n sx={{\n alignItems: { xs: 'flex-start', sm: 'center' },\n gap: '20px',\n }}\n >\n {primaryBtnConfig && primaryBtnPathAndQuery && (\n <Button\n component={ReactRouterLink}\n variant=\"contained\"\n color=\"primary\"\n to={primaryBtnPathAndQuery}\n >\n {primaryBtnConfig.label}\n </Button>\n )}\n {secondaryBtnConfig && secondaryBtnPathAndQuery && (\n <Button component={ReactRouterLink} to={secondaryBtnPathAndQuery}>\n {secondaryBtnConfig.label}\n </Button>\n )}\n </Stack>\n </Stack>\n <Divider /> {/* divides stacks when page is narrow */}\n <Stack\n direction=\"row\"\n sx={{\n gap: { xs: 0, lg: '10px' },\n alignItems: 'center',\n justifyContent: { xs: 'space-evenly', lg: 'unset' },\n flexWrap: { xs: 'wrap', lg: 'nowrap' },\n }}\n >\n <StatFlex {...releaseDate} />\n {stats.map(stat => {\n return (\n <Fragment key={stat.label}>\n <Divider orientation=\"vertical\" flexItem />\n <StatFlex {...stat} />\n </Fragment>\n )\n })}\n </Stack>\n </Stack>\n </Box>\n )\n}\n"],"mappings":";;;;;;;AAWA,SAAS,EAAS,EAAE,UAAO,YAA0B;CACnD,OACE,kBAAC,GAAD;EACE,WAAU;EACV,IAAI;GACF,YAAY;GACZ,SAAS;IAAE,IAAI;IAAa,IAAI;GAAY;GAC5C,KAAK;GAEL,OAAO;IAAE,IAAI;IAAS,IAAI;GAAQ;EACpC;YARF,CAUE,kBAAC,GAAD;GAAY,SAAQ;aAAa;EAAkB,CAAA,GACnD,kBAAC,GAAD;GACE,SAAQ;GACR,IAAI;IACF,YAAY;IACZ,OAAO;GACT;aAEC;EACS,CAAA,CACP;;AAEX;AAOA,SAAgB,EAAiB,EAC/B,SACA,WACA,4BAAyB,IACzB,wBACwB;CACxB,IAAM,EAAE,gBAAa,gBAAa,aAAU,EAC1C,GACA,GACA,EAAkB,uBAClB,EAAkB,WACpB,GACM,EAAE,qBAAkB,0BAAuB,GAE3C,CAAC,GAAwB,KAA6B,EAE1D,IAAI,GACA,CAAC,GAA0B,KAA+B,EAE9D,IAAI;CAcN,OAZA,QAAgB;EAKd,AAJA,EAAoC,GAAQ,GAAM,CAAgB,EAAE,KAClE,CACF,GAEA,EAAoC,GAAQ,GAAM,CAAkB,EAAE,KACpE,CACF;CACF,GAAG;EAAC;EAAQ;EAAM;EAAkB;CAAkB,CAAC,GAEnD,MAAgB,OAAa,kBAAA,GAAA,CAAI,CAAA,IAGnC,kBAAC,GAAD;EACE,WAAW,eACT,IAAyB,mBAAmB;EAE9C,IAAI,EACF,UAAU,QACZ;YAEA,kBAAC,GAAD;GACE,WAAW;IAAE,IAAI;IAAU,IAAI;GAAM;GACrC,IAAI;IACF,gBAAgB;IAChB,KAAK;IACL,SAAS;GACX;aANF;IAQE,kBAAC,GAAD;KACE,WAAU;KACV,IAAI,EACF,KAAK,OACP;eAJF,CAME,kBAAC,GAAD;MACE,WAAU;MACV,IAAI;OACF,YAAY;OACZ,KAAK;MACP;gBALF,CAOE,kBAAC,GAAD,EAAsB,IAAI,EAAE,OAAO,WAAW,EAAI,CAAA,GAClD,kBAAC,GAAD;OAAY,SAAQ;iBAApB,CACG,EAAkB,kBAAkB,YACpC,CACS;QACP;SACP,kBAAC,GAAD;MACE,WAAW;OAAE,IAAI;OAAU,IAAI;MAAM;MACrC,IAAI;OACF,YAAY;QAAE,IAAI;QAAc,IAAI;OAAS;OAC7C,KAAK;MACP;gBALF,CAOG,KAAoB,KACnB,kBAAC,GAAD;OACE,WAAW;OACX,SAAQ;OACR,OAAM;OACN,IAAI;iBAEH,EAAiB;MACZ,CAAA,GAET,KAAsB,KACrB,kBAAC,GAAD;OAAQ,WAAW;OAAiB,IAAI;iBACrC,EAAmB;MACd,CAAA,CAEL;OACF;;IACP,kBAAC,GAAD,CAAU,CAAA;IAAC;IACX,kBAAC,GAAD;KACE,WAAU;KACV,IAAI;MACF,KAAK;OAAE,IAAI;OAAG,IAAI;MAAO;MACzB,YAAY;MACZ,gBAAgB;OAAE,IAAI;OAAgB,IAAI;MAAQ;MAClD,UAAU;OAAE,IAAI;OAAQ,IAAI;MAAS;KACvC;eAPF,CASE,kBAAC,GAAD,EAAU,GAAI,EAAc,CAAA,GAC3B,EAAM,KAAI,MAEP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAS,aAAY;MAAW,UAAA;KAAU,CAAA,GAC1C,kBAAC,GAAD,EAAU,GAAI,EAAO,CAAA,CACb,EAAA,GAHK,EAAK,KAGV,CAEb,CACI;;GACF;;CACJ,CAAA;AAET"}
1
+ {"version":3,"file":"ReleaseCardLarge.js","names":[],"sources":["../../../src/components/ReleaseCard/ReleaseCardLarge.tsx"],"sourcesContent":["import CalendarTodayTwoTone from '@mui/icons-material/CalendarTodayTwoTone'\nimport { Box, Button, Divider, Stack, Typography } from '@mui/material'\nimport { Fragment, useEffect, useState } from 'react'\nimport { Link as ReactRouterLink } from 'react-router'\nimport { ReleaseCardProps } from './ReleaseCard'\nimport { ReleaseCardLargeConfig, ReleaseCardStat } from './ReleaseCardTypes'\nimport {\n formatExplorePagePathAndQueryString,\n formatReleaseCardData,\n} from './ReleaseCardUtils'\n\nfunction StatFlex({ value, label }: ReleaseCardStat) {\n return (\n <Stack\n direction=\"column\"\n sx={{\n alignItems: 'center',\n padding: { xs: '20px 10px', md: '20px 40px' },\n gap: '10px',\n // ensure that stats are aligned when multiple cards are stacked vertically\n width: { xs: 'unset', lg: '200px' },\n }}\n >\n <Typography variant=\"headline1\">{value}</Typography>\n <Typography\n variant=\"body1\"\n sx={{\n lineHeight: '20px',\n color: 'grey.700',\n }}\n >\n {label}\n </Typography>\n </Stack>\n )\n}\n\nexport type ReleaseCardLargeProps = Omit<\n ReleaseCardProps,\n 'releaseCardConfig'\n> & { releaseCardConfig: ReleaseCardLargeConfig }\n\nexport function ReleaseCardLarge({\n data,\n schema,\n includePortalCardClass = true,\n releaseCardConfig,\n}: ReleaseCardLargeProps) {\n const { releaseName, releaseDate, stats } = formatReleaseCardData(\n schema,\n data,\n releaseCardConfig.releaseMetadataConfig,\n releaseCardConfig.statsConfig,\n )\n const { primaryBtnConfig, secondaryBtnConfig } = releaseCardConfig\n\n const [primaryBtnPathAndQuery, setPrimaryBtnPathAndQuery] = useState<\n string | null\n >(null)\n const [secondaryBtnPathAndQuery, setSecondaryBtnPathAndQuery] = useState<\n string | null\n >(null)\n\n useEffect(() => {\n formatExplorePagePathAndQueryString(schema, data, primaryBtnConfig).then(\n setPrimaryBtnPathAndQuery,\n )\n\n formatExplorePagePathAndQueryString(schema, data, secondaryBtnConfig).then(\n setSecondaryBtnPathAndQuery,\n )\n }, [schema, data, primaryBtnConfig, secondaryBtnConfig])\n\n if (releaseName === null) return <></>\n\n return (\n <Box\n className={`ReleaseCard ${\n includePortalCardClass ? 'SRC-portalCard' : ''\n }`}\n sx={{\n minWidth: '200px',\n }}\n >\n <Stack\n direction={{ xs: 'column', lg: 'row' }}\n sx={{\n justifyContent: 'space-between',\n gap: '20px',\n padding: '20px',\n }}\n >\n <Stack\n direction=\"column\"\n sx={{\n gap: '20px',\n }}\n >\n <Stack\n direction=\"row\"\n sx={{\n alignItems: 'center',\n gap: '10px',\n }}\n >\n <CalendarTodayTwoTone sx={{ color: 'grey.700' }} />\n <Typography variant=\"headline1\">\n {releaseCardConfig.prependRelease && 'Release '}\n {releaseName}\n </Typography>\n </Stack>\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n sx={{\n alignItems: { xs: 'flex-start', sm: 'center' },\n gap: '20px',\n }}\n >\n {primaryBtnConfig && primaryBtnPathAndQuery && (\n <Button\n component={ReactRouterLink}\n variant=\"contained\"\n color=\"primary\"\n to={primaryBtnPathAndQuery}\n >\n {primaryBtnConfig.label}\n </Button>\n )}\n {secondaryBtnConfig && secondaryBtnPathAndQuery && (\n <Button component={ReactRouterLink} to={secondaryBtnPathAndQuery}>\n {secondaryBtnConfig.label}\n </Button>\n )}\n </Stack>\n </Stack>\n <Divider /> {/* divides stacks when page is narrow */}\n <Stack\n direction=\"row\"\n sx={{\n gap: { xs: 0, lg: '10px' },\n alignItems: 'center',\n justifyContent: { xs: 'space-evenly', lg: 'unset' },\n flexWrap: { xs: 'wrap', lg: 'nowrap' },\n }}\n >\n <StatFlex {...releaseDate} />\n {stats.map(stat => {\n return (\n <Fragment key={stat.label}>\n <Divider orientation=\"vertical\" flexItem />\n <StatFlex {...stat} />\n </Fragment>\n )\n })}\n </Stack>\n </Stack>\n </Box>\n )\n}\n"],"mappings":";;;;;;;AAWA,SAAS,EAAS,EAAE,UAAO,YAA0B;CACnD,OACE,kBAAC,GAAD;EACE,WAAU;EACV,IAAI;GACF,YAAY;GACZ,SAAS;IAAE,IAAI;IAAa,IAAI;GAAY;GAC5C,KAAK;GAEL,OAAO;IAAE,IAAI;IAAS,IAAI;GAAQ;EACpC;YARF,CAUE,kBAAC,GAAD;GAAY,SAAQ;aAAa;EAAkB,CAAA,GACnD,kBAAC,GAAD;GACE,SAAQ;GACR,IAAI;IACF,YAAY;IACZ,OAAO;GACT;aAEC;EACS,CAAA,CACP;;AAEX;AAOA,SAAgB,EAAiB,EAC/B,SACA,WACA,4BAAyB,IACzB,wBACwB;CACxB,IAAM,EAAE,gBAAa,gBAAa,aAAU,EAC1C,GACA,GACA,EAAkB,uBAClB,EAAkB,WACpB,GACM,EAAE,qBAAkB,0BAAuB,GAE3C,CAAC,GAAwB,KAA6B,EAE1D,IAAI,GACA,CAAC,GAA0B,KAA+B,EAE9D,IAAI;CAcN,OAZA,QAAgB;EAKd,AAJA,EAAoC,GAAQ,GAAM,CAAgB,EAAE,KAClE,CACF,GAEA,EAAoC,GAAQ,GAAM,CAAkB,EAAE,KACpE,CACF;CACF,GAAG;EAAC;EAAQ;EAAM;EAAkB;CAAkB,CAAC,GAEnD,MAAgB,OAAa,kBAAA,GAAA,CAAI,CAAA,IAGnC,kBAAC,GAAD;EACE,WAAW,eACT,IAAyB,mBAAmB;EAE9C,IAAI,EACF,UAAU,QACZ;YAEA,kBAAC,GAAD;GACE,WAAW;IAAE,IAAI;IAAU,IAAI;GAAM;GACrC,IAAI;IACF,gBAAgB;IAChB,KAAK;IACL,SAAS;GACX;aANF;IAQE,kBAAC,GAAD;KACE,WAAU;KACV,IAAI,EACF,KAAK,OACP;eAJF,CAME,kBAAC,GAAD;MACE,WAAU;MACV,IAAI;OACF,YAAY;OACZ,KAAK;MACP;gBALF,CAOE,kBAAC,GAAD,EAAsB,IAAI,EAAE,OAAO,WAAW,EAAI,CAAA,GAClD,kBAAC,GAAD;OAAY,SAAQ;iBAApB,CACG,EAAkB,kBAAkB,YACpC,CACS;QACP;SACP,kBAAC,GAAD;MACE,WAAW;OAAE,IAAI;OAAU,IAAI;MAAM;MACrC,IAAI;OACF,YAAY;QAAE,IAAI;QAAc,IAAI;OAAS;OAC7C,KAAK;MACP;gBALF,CAOG,KAAoB,KACnB,kBAAC,GAAD;OACE,WAAW;OACX,SAAQ;OACR,OAAM;OACN,IAAI;iBAEH,EAAiB;MACZ,CAAA,GAET,KAAsB,KACrB,kBAAC,GAAD;OAAQ,WAAW;OAAiB,IAAI;iBACrC,EAAmB;MACd,CAAA,CAEL;OACF;;IACP,kBAAC,GAAD,CAAU,CAAA;IAAC;IACX,kBAAC,GAAD;KACE,WAAU;KACV,IAAI;MACF,KAAK;OAAE,IAAI;OAAG,IAAI;MAAO;MACzB,YAAY;MACZ,gBAAgB;OAAE,IAAI;OAAgB,IAAI;MAAQ;MAClD,UAAU;OAAE,IAAI;OAAQ,IAAI;MAAS;KACvC;eAPF,CASE,kBAAC,GAAD,EAAU,GAAI,EAAc,CAAA,GAC3B,EAAM,KAAI,MAEP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAS,aAAY;MAAW,UAAA;KAAU,CAAA,GAC1C,kBAAC,GAAD,EAAU,GAAI,EAAO,CAAA,CACb,EAAA,GAHK,EAAK,KAGV,CAEb,CACI;;GACF;;CACJ,CAAA;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"SetAccessRequirementCommonFields.d.ts","sourceRoot":"","sources":["../../../src/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.tsx"],"names":[],"mappings":"AAqBA,OAAO,EACL,gCAAgC,EAIhC,4BAA4B,EAC5B,sBAAsB,EAEvB,MAAM,iCAAiC,CAAA;AAcxC,eAAO,MAAM,gCAAgC,2FAC6C,CAAA;AAC1F,eAAO,MAAM,8BAA8B,GACzC,cAAc,sBAAsB,WASrC,CAAA;AAsBD,MAAM,MAAM,sCAAsC,GAAG;IAEnD,IAAI,EAAE,MAAM,IAAI,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,qCAAqC,GAAG;IAElD,OAAO,CAAC,EAAE,4BAA4B,CAAA;IAEtC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAE5B,MAAM,EAAE,CACN,mBAAmB,EAAE,MAAM,EAC3B,4BAA4B,EAAE,gCAAgC,KAC3D,IAAI,CAAA;IAET,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,gCAAgC,0JAiS5C,CAAA"}
1
+ {"version":3,"file":"SetAccessRequirementCommonFields.d.ts","sourceRoot":"","sources":["../../../src/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.tsx"],"names":[],"mappings":"AAsBA,OAAO,EACL,gCAAgC,EAKhC,4BAA4B,EAC5B,sBAAsB,EAEvB,MAAM,iCAAiC,CAAA;AAqBxC,eAAO,MAAM,gCAAgC,2FAC6C,CAAA;AAC1F,eAAO,MAAM,8BAA8B,GACzC,cAAc,sBAAsB,WASrC,CAAA;AAsBD,MAAM,MAAM,sCAAsC,GAAG;IAEnD,IAAI,EAAE,MAAM,IAAI,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,qCAAqC,GAAG;IAElD,OAAO,CAAC,EAAE,4BAA4B,CAAA;IAEtC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAE5B,MAAM,EAAE,CACN,mBAAmB,EAAE,MAAM,EAC3B,4BAA4B,EAAE,gCAAgC,KAC3D,IAAI,CAAA;IAET,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,gCAAgC,0JAyV5C,CAAA"}