synapse-react-client 4.0.2 → 4.0.4

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 (525) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/assets/icons/AwardScroll.d.ts +5 -0
  3. package/dist/assets/icons/AwardScroll.d.ts.map +1 -0
  4. package/dist/assets/icons/AwardScroll.js +78 -0
  5. package/dist/assets/icons/AwardScroll.js.map +1 -0
  6. package/dist/assets/icons/Baseline.d.ts +5 -0
  7. package/dist/assets/icons/Baseline.d.ts.map +1 -0
  8. package/dist/assets/icons/Baseline.js +43 -0
  9. package/dist/assets/icons/Baseline.js.map +1 -0
  10. package/dist/assets/icons/Challenge.svg +13 -0
  11. package/dist/assets/icons/Challenge.svg.js +7 -0
  12. package/dist/assets/icons/Challenge.svg.js.map +1 -0
  13. package/dist/assets/icons/ClappingHands.d.ts +5 -0
  14. package/dist/assets/icons/ClappingHands.d.ts.map +1 -0
  15. package/dist/assets/icons/ClappingHands.js +106 -0
  16. package/dist/assets/icons/ClappingHands.js.map +1 -0
  17. package/dist/assets/icons/HandWithMoney.d.ts +5 -0
  18. package/dist/assets/icons/HandWithMoney.d.ts.map +1 -0
  19. package/dist/assets/icons/HandWithMoney.js +15 -0
  20. package/dist/assets/icons/HandWithMoney.js.map +1 -0
  21. package/dist/assets/icons/MultiFile.d.ts +5 -0
  22. package/dist/assets/icons/MultiFile.d.ts.map +1 -0
  23. package/dist/assets/icons/MultiFile.js +8 -0
  24. package/dist/assets/icons/MultiFile.js.map +1 -0
  25. package/dist/assets/icons/MultiFile.svg +4 -0
  26. package/dist/assets/icons/MultiFile.svg.js +7 -0
  27. package/dist/assets/icons/MultiFile.svg.js.map +1 -0
  28. package/dist/assets/icons/OpenBook.d.ts +5 -0
  29. package/dist/assets/icons/OpenBook.d.ts.map +1 -0
  30. package/dist/assets/icons/OpenBook.js +99 -0
  31. package/dist/assets/icons/OpenBook.js.map +1 -0
  32. package/dist/assets/icons/Podium.d.ts +5 -0
  33. package/dist/assets/icons/Podium.d.ts.map +1 -0
  34. package/dist/assets/icons/Podium.js +36 -0
  35. package/dist/assets/icons/Podium.js.map +1 -0
  36. package/dist/assets/icons/RosetteRibbon.d.ts +5 -0
  37. package/dist/assets/icons/RosetteRibbon.d.ts.map +1 -0
  38. package/dist/assets/icons/RosetteRibbon.js +36 -0
  39. package/dist/assets/icons/RosetteRibbon.js.map +1 -0
  40. package/dist/assets/icons/StarTrophy.d.ts +5 -0
  41. package/dist/assets/icons/StarTrophy.d.ts.map +1 -0
  42. package/dist/assets/icons/StarTrophy.js +99 -0
  43. package/dist/assets/icons/StarTrophy.js.map +1 -0
  44. package/dist/assets/icons/ThreeStars.d.ts +5 -0
  45. package/dist/assets/icons/ThreeStars.d.ts.map +1 -0
  46. package/dist/assets/icons/ThreeStars.js +71 -0
  47. package/dist/assets/icons/ThreeStars.js.map +1 -0
  48. package/dist/assets/icons/UnpackagableFile.d.ts +5 -0
  49. package/dist/assets/icons/UnpackagableFile.d.ts.map +1 -0
  50. package/dist/assets/icons/UnpackagableFile.js +8 -0
  51. package/dist/assets/icons/UnpackagableFile.js.map +1 -0
  52. package/dist/assets/icons/UnpackagableFile.svg +4 -0
  53. package/dist/assets/icons/UnpackagableFile.svg.js +7 -0
  54. package/dist/assets/icons/UnpackagableFile.svg.js.map +1 -0
  55. package/dist/assets/mui_components/PackagableFile.d.ts.map +1 -1
  56. package/dist/assets/mui_components/PackagableFile.js +5 -4
  57. package/dist/assets/mui_components/PackagableFile.js.map +1 -1
  58. package/dist/assets/mui_components/PackagableFile.svg +3 -0
  59. package/dist/assets/mui_components/PackagableFile.svg.js +7 -0
  60. package/dist/assets/mui_components/PackagableFile.svg.js.map +1 -0
  61. package/dist/assets/themed_icons/index.d.ts +1 -2
  62. package/dist/assets/themed_icons/index.d.ts.map +1 -1
  63. package/dist/assets/themed_icons/index.js +8 -10
  64. package/dist/assets/themed_icons/index.js.map +1 -1
  65. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js +1 -1
  66. package/dist/components/AccessRequirementList/AccessRequirementList.js +4 -4
  67. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.d.ts.map +1 -1
  68. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js +8 -7
  69. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
  70. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js +4 -4
  71. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItem.js +11 -11
  72. package/dist/components/AccessRequirementList/RequirementItem/RequirementItem.js +1 -1
  73. package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js +9 -9
  74. package/dist/components/AccessRequirementList/RequirementItem/UnmanagedACTAccessRequirementItem.js +5 -5
  75. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.d.ts.map +1 -1
  76. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js +36 -35
  77. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
  78. package/dist/components/AclEditor/AclEditor.js +8 -8
  79. package/dist/components/AclEditor/AclEditor.js.map +1 -1
  80. package/dist/components/AclEditor/AclEditor.test-utils.js +34 -34
  81. package/dist/components/AclEditor/AclEditor.test-utils.js.map +1 -1
  82. package/dist/components/AddToDownloadListV2.js +10 -10
  83. package/dist/components/AddToDownloadListV2.js.map +1 -1
  84. package/dist/components/Authentication/AuthenticationMethodSelection.js +1 -1
  85. package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
  86. package/dist/components/Authentication/TwoFactorEnrollmentForm.js +6 -5
  87. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  88. package/dist/components/BasePortalCard/BasePortalCard.css +1 -1
  89. package/dist/components/BasePortalCard/BasePortalCard.d.ts +1 -2
  90. package/dist/components/BasePortalCard/BasePortalCard.d.ts.map +1 -1
  91. package/dist/components/BasePortalCard/BasePortalCard.js +21 -28
  92. package/dist/components/BasePortalCard/BasePortalCard.js.map +1 -1
  93. package/dist/components/BasePortalCard/BasePortalCard.module.scss +13 -1
  94. package/dist/components/BasePortalCard/BasePortalCard.module.scss.js +11 -11
  95. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.css +1 -1
  96. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.d.ts.map +1 -1
  97. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js +25 -25
  98. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js.map +1 -1
  99. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.module.scss +13 -5
  100. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.module.scss.js +5 -5
  101. package/dist/components/CardContainer/CardLink.d.ts +12 -0
  102. package/dist/components/CardContainer/CardLink.d.ts.map +1 -1
  103. package/dist/components/CardContainerLogic/CardContainerLogic.d.ts +5 -1
  104. package/dist/components/CardContainerLogic/CardContainerLogic.d.ts.map +1 -1
  105. package/dist/components/CardContainerLogic/CardContainerLogic.js.map +1 -1
  106. package/dist/components/CardContainerLogic/index.d.ts +1 -1
  107. package/dist/components/CardContainerLogic/index.d.ts.map +1 -1
  108. package/dist/components/CardDeck/TableQueryCardDeck.js +12 -9
  109. package/dist/components/CardDeck/TableQueryCardDeck.js.map +1 -1
  110. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js +33 -33
  111. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js.map +1 -1
  112. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js +12 -12
  113. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.d.ts.map +1 -1
  114. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js +7 -7
  115. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
  116. package/dist/components/ChangePassword/useChangePasswordFormState.js +5 -2
  117. package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
  118. package/dist/components/CitationPopover/CitationPopoverContent.d.ts.map +1 -1
  119. package/dist/components/CitationPopover/CitationPopoverContent.js +13 -12
  120. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  121. package/dist/components/ComponentCollapse.d.ts +6 -10
  122. package/dist/components/ComponentCollapse.d.ts.map +1 -1
  123. package/dist/components/ComponentCollapse.js +31 -35
  124. package/dist/components/ComponentCollapse.js.map +1 -1
  125. package/dist/components/CookiesNotification/CookiesNotification.js +1 -1
  126. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js +12 -10
  127. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js.map +1 -1
  128. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js +10 -5
  129. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js.map +1 -1
  130. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  131. package/dist/components/DataGrid/SynapseGrid.js +43 -38
  132. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  133. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js +10 -5
  134. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js.map +1 -1
  135. package/dist/components/DataGrid/hooks/useExportDataGridToCsv.d.ts.map +1 -1
  136. package/dist/components/DataGrid/hooks/useExportDataGridToCsv.js +9 -7
  137. package/dist/components/DataGrid/hooks/useExportDataGridToCsv.js.map +1 -1
  138. package/dist/components/DirectDownload/DirectDownload.d.ts.map +1 -1
  139. package/dist/components/DirectDownload/DirectDownload.js +23 -23
  140. package/dist/components/DirectDownload/DirectDownload.js.map +1 -1
  141. package/dist/components/DownloadCart/ActionRequiredCard/ActionRequiredCard.js +1 -1
  142. package/dist/components/DownloadCart/AvailableForDownloadTable.d.ts +6 -2
  143. package/dist/components/DownloadCart/AvailableForDownloadTable.d.ts.map +1 -1
  144. package/dist/components/DownloadCart/AvailableForDownloadTable.js +10 -8
  145. package/dist/components/DownloadCart/AvailableForDownloadTable.js.map +1 -1
  146. package/dist/components/DownloadCart/CreatePackageV2.css +1 -0
  147. package/dist/components/DownloadCart/CreatePackageV2.d.ts.map +1 -1
  148. package/dist/components/DownloadCart/CreatePackageV2.js +50 -46
  149. package/dist/components/DownloadCart/CreatePackageV2.js.map +1 -1
  150. package/dist/components/DownloadCart/CreatePackageV2.module.scss +38 -0
  151. package/dist/components/DownloadCart/CreatePackageV2.module.scss.js +14 -0
  152. package/dist/components/DownloadCart/CreatePackageV2.module.scss.js.map +1 -0
  153. package/dist/components/DownloadCart/DownloadCartPage.css +1 -0
  154. package/dist/components/DownloadCart/DownloadCartPage.d.ts.map +1 -1
  155. package/dist/components/DownloadCart/DownloadCartPage.js +316 -186
  156. package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
  157. package/dist/components/DownloadCart/DownloadCartPage.module.scss +217 -0
  158. package/dist/components/DownloadCart/DownloadCartPage.module.scss.js +48 -0
  159. package/dist/components/DownloadCart/DownloadCartPage.module.scss.js.map +1 -0
  160. package/dist/components/DownloadCart/DownloadDetails.js +1 -1
  161. package/dist/components/DownloadCart/DownloadDetails.js.map +1 -1
  162. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +33 -33
  163. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  164. package/dist/components/DownloadCart/DownloadListTable.d.ts +4 -1
  165. package/dist/components/DownloadCart/DownloadListTable.d.ts.map +1 -1
  166. package/dist/components/DownloadCart/DownloadListTable.js +156 -236
  167. package/dist/components/DownloadCart/DownloadListTable.js.map +1 -1
  168. package/dist/components/DownloadCart/RequestDownloadCard.js +1 -1
  169. package/dist/components/DownloadCart/ShowDownloadV2.js +5 -5
  170. package/dist/components/DownloadCart/ShowDownloadV2.js.map +1 -1
  171. package/dist/components/Ecosystem/EcosystemSkeleton.js +10 -5
  172. package/dist/components/Ecosystem/EcosystemSkeleton.js.map +1 -1
  173. package/dist/components/Ecosystem/TableQueryEcosystem.js +1 -1
  174. package/dist/components/EntityAclEditor/EntityAclEditorModal.js +1 -1
  175. package/dist/components/EntityAclEditor/OpenData.js +1 -1
  176. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.d.ts.map +1 -1
  177. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +113 -127
  178. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  179. package/dist/components/EntityCitation/EntityCitation.js +1 -1
  180. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +20 -20
  181. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  182. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js +4 -4
  183. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js.map +1 -1
  184. package/dist/components/EntityFinder/details/view/table/CreatedOnCell.js +1 -1
  185. package/dist/components/EntityFinder/details/view/table/EntityNameCell.js +1 -1
  186. package/dist/components/EntityFinder/details/view/table/FileEntityMD5Cell.js +1 -1
  187. package/dist/components/EntityFinder/details/view/table/FileEntitySizeCell.js +1 -1
  188. package/dist/components/EntityFinder/details/view/table/ModifiedByCell.js +1 -1
  189. package/dist/components/EntityFinder/details/view/table/ModifiedOnCell.js +1 -1
  190. package/dist/components/EntityFinder/details/view/table/ParentProjectCell.js +1 -1
  191. package/dist/components/EntityFinder/tree/EntityTree.js +1 -1
  192. package/dist/components/EntityHeaderTable/EntityHeaderTable.d.ts.map +1 -1
  193. package/dist/components/EntityHeaderTable/EntityHeaderTable.js +39 -39
  194. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  195. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.d.ts +8 -0
  196. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.d.ts.map +1 -0
  197. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.js +46 -0
  198. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.js.map +1 -0
  199. package/dist/components/Evaluation/EvaluationCard.d.ts.map +1 -1
  200. package/dist/components/Evaluation/EvaluationCard.js +35 -41
  201. package/dist/components/Evaluation/EvaluationCard.js.map +1 -1
  202. package/dist/components/Evaluation/EvaluationEditor.d.ts.map +1 -1
  203. package/dist/components/Evaluation/EvaluationEditor.js +95 -90
  204. package/dist/components/Evaluation/EvaluationEditor.js.map +1 -1
  205. package/dist/components/Evaluation/EvaluationRoundEditor.d.ts.map +1 -1
  206. package/dist/components/Evaluation/EvaluationRoundEditor.js +133 -124
  207. package/dist/components/Evaluation/EvaluationRoundEditor.js.map +1 -1
  208. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js +6 -2
  209. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  210. package/dist/components/FeaturedDataTabs/FeaturedDataTabs.js +11 -8
  211. package/dist/components/FeaturedDataTabs/FeaturedDataTabs.js.map +1 -1
  212. package/dist/components/FilePreview/EntityPreview.js +1 -1
  213. package/dist/components/Forum/DiscussionReply.js +10 -10
  214. package/dist/components/Forum/DiscussionThread.js +21 -21
  215. package/dist/components/FullWidthAlert/FullWidthAlert.d.ts +2 -2
  216. package/dist/components/FullWidthAlert/FullWidthAlert.js.map +1 -1
  217. package/dist/components/GenericCard/CardUtils.d.ts.map +1 -1
  218. package/dist/components/GenericCard/CardUtils.js +36 -36
  219. package/dist/components/GenericCard/CardUtils.js.map +1 -1
  220. package/dist/components/GenericCard/CollapsibleDescription.js +25 -25
  221. package/dist/components/GenericCard/GenericCard.d.ts +5 -5
  222. package/dist/components/GenericCard/GenericCard.d.ts.map +1 -1
  223. package/dist/components/GenericCard/GenericCard.js +117 -103
  224. package/dist/components/GenericCard/GenericCard.js.map +1 -1
  225. package/dist/components/GenericCard/LabelMaybeWithIcon.d.ts +10 -0
  226. package/dist/components/GenericCard/LabelMaybeWithIcon.d.ts.map +1 -0
  227. package/dist/components/GenericCard/LabelMaybeWithIcon.js +33 -0
  228. package/dist/components/GenericCard/LabelMaybeWithIcon.js.map +1 -0
  229. package/dist/components/GenericCard/SynapseCardLabel.d.ts +2 -1
  230. package/dist/components/GenericCard/SynapseCardLabel.d.ts.map +1 -1
  231. package/dist/components/GenericCard/SynapseCardLabel.js +95 -85
  232. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  233. package/dist/components/GenericCard/TableRowGenericCard.d.ts +10 -1
  234. package/dist/components/GenericCard/TableRowGenericCard.d.ts.map +1 -1
  235. package/dist/components/GenericCard/TableRowGenericCard.js +248 -209
  236. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  237. package/dist/components/GoalsV2/GoalsV2.Desktop.d.ts.map +1 -1
  238. package/dist/components/GoalsV2/GoalsV2.Desktop.js +14 -15
  239. package/dist/components/GoalsV2/GoalsV2.Desktop.js.map +1 -1
  240. package/dist/components/GoogleAnalytics/GoogleAnalytics.js +1 -1
  241. package/dist/components/HasAccess/HasAccessV2.js +1 -1
  242. package/dist/components/HasAccess/useHasAccess.js +1 -1
  243. package/dist/components/HeaderCard.js +17 -13
  244. package/dist/components/HeaderCard.js.map +1 -1
  245. package/dist/components/IDUReport/IDUReportSubmissionInfo.js +23 -23
  246. package/dist/components/IDUReport/IDUReportSubmissionInfo.js.map +1 -1
  247. package/dist/components/Icon/Icon.js +52 -52
  248. package/dist/components/Icon/Icon.js.map +1 -1
  249. package/dist/components/IconSvg/IconSvg.d.ts +1 -1
  250. package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
  251. package/dist/components/IconSvg/IconSvg.js +215 -171
  252. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  253. package/dist/components/JSONArrayEditor/useParseCsv.d.ts +1 -1
  254. package/dist/components/JSONArrayEditor/useParseCsv.d.ts.map +1 -1
  255. package/dist/components/JSONArrayEditor/useParseCsv.js +9 -9
  256. package/dist/components/JSONArrayEditor/useParseCsv.js.map +1 -1
  257. package/dist/components/Markdown/MarkdownCollapse.js +7 -7
  258. package/dist/components/Markdown/MarkdownEditor.js +11 -11
  259. package/dist/components/Markdown/MarkdownGithub.js +1 -1
  260. package/dist/components/Markdown/MarkdownPopover.js +6 -6
  261. package/dist/components/Markdown/MarkdownPopover.js.map +1 -1
  262. package/dist/components/Markdown/MarkdownSynapse.d.ts.map +1 -1
  263. package/dist/components/Markdown/MarkdownSynapse.js +139 -135
  264. package/dist/components/Markdown/MarkdownSynapse.js.map +1 -1
  265. package/dist/components/Markdown/MarkdownUtils.d.ts +8 -0
  266. package/dist/components/Markdown/MarkdownUtils.d.ts.map +1 -1
  267. package/dist/components/Markdown/MarkdownUtils.js +139 -65
  268. package/dist/components/Markdown/MarkdownUtils.js.map +1 -1
  269. package/dist/components/Markdown/UserMentionModal.js +18 -18
  270. package/dist/components/Markdown/UserMentionModal.js.map +1 -1
  271. package/dist/components/Markdown/widget/MarkdownButton.js +3 -3
  272. package/dist/components/Markdown/widget/MarkdownButton.js.map +1 -1
  273. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.d.ts.map +1 -1
  274. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js +9 -8
  275. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  276. package/dist/components/Plot/SynapsePlot.css +1 -0
  277. package/dist/components/Plot/SynapsePlot.d.ts +2 -0
  278. package/dist/components/Plot/SynapsePlot.d.ts.map +1 -1
  279. package/dist/components/Plot/SynapsePlot.js +43 -39
  280. package/dist/components/Plot/SynapsePlot.js.map +1 -1
  281. package/dist/components/Plot/SynapsePlot.scss +8 -0
  282. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js +1 -1
  283. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +1 -0
  284. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
  285. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +137 -135
  286. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  287. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.d.ts +1 -1
  288. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.d.ts.map +1 -1
  289. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js.map +1 -1
  290. package/dist/components/Resources/Resources.Desktop.js +7 -7
  291. package/dist/components/Resources/Resources.Mobile.js +6 -6
  292. package/dist/components/StorybookComponentWrapper.js +6 -3
  293. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  294. package/dist/components/SubsectionRowRenderer/SubsectionRowRenderer.js +3 -3
  295. package/dist/components/SustainabilityScorecard/SustainabilityScorecardSummary.js +10 -10
  296. package/dist/components/SynapseChat/SynapseChat.d.ts +7 -1
  297. package/dist/components/SynapseChat/SynapseChat.d.ts.map +1 -1
  298. package/dist/components/SynapseChat/SynapseChat.js +76 -67
  299. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  300. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts +2 -1
  301. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts.map +1 -1
  302. package/dist/components/SynapseChat/SynapseChatInteraction.js +83 -58
  303. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  304. package/dist/components/SynapseChat/SynapseChatMessage.d.ts +1 -0
  305. package/dist/components/SynapseChat/SynapseChatMessage.d.ts.map +1 -1
  306. package/dist/components/SynapseChat/SynapseChatMessage.js +16 -15
  307. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  308. package/dist/components/SynapseChat/SynapsePortalChatDialog.d.ts +12 -0
  309. package/dist/components/SynapseChat/SynapsePortalChatDialog.d.ts.map +1 -0
  310. package/dist/components/SynapseChat/SynapsePortalChatDialog.js +30 -0
  311. package/dist/components/SynapseChat/SynapsePortalChatDialog.js.map +1 -0
  312. package/dist/components/SynapseChat/extractMessageFromTraceEvent.d.ts.map +1 -1
  313. package/dist/components/SynapseChat/extractMessageFromTraceEvent.js +22 -16
  314. package/dist/components/SynapseChat/extractMessageFromTraceEvent.js.map +1 -1
  315. package/dist/components/SynapseChat/index.d.ts +2 -0
  316. package/dist/components/SynapseChat/index.d.ts.map +1 -1
  317. package/dist/components/SynapseChat/index.js +5 -3
  318. package/dist/components/SynapseChat/index.js.map +1 -1
  319. package/dist/components/SynapseChat/useChatState.d.ts +1 -1
  320. package/dist/components/SynapseChat/useChatState.d.ts.map +1 -1
  321. package/dist/components/SynapseChat/useChatState.js +10 -7
  322. package/dist/components/SynapseChat/useChatState.js.map +1 -1
  323. package/dist/components/SynapseForm/WarningDialog.d.ts +1 -0
  324. package/dist/components/SynapseForm/WarningDialog.d.ts.map +1 -1
  325. package/dist/components/SynapseForm/WarningDialog.js +18 -16
  326. package/dist/components/SynapseForm/WarningDialog.js.map +1 -1
  327. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js +1 -1
  328. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +25 -25
  329. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  330. package/dist/components/SynapseSearchPageResults/HasAccessChip.js +1 -1
  331. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.d.ts.map +1 -1
  332. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.js +12 -13
  333. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.js.map +1 -1
  334. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js +5 -5
  335. package/dist/components/SynapseTable/ExpandableTableDataCell.d.ts.map +1 -1
  336. package/dist/components/SynapseTable/ExpandableTableDataCell.js +3 -1
  337. package/dist/components/SynapseTable/ExpandableTableDataCell.js.map +1 -1
  338. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +13 -13
  339. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  340. package/dist/components/SynapseTable/SynapseTable.js +4 -4
  341. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.d.ts.map +1 -1
  342. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js +122 -122
  343. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js.map +1 -1
  344. package/dist/components/SynapseTable/TopLevelControls/TopLevelControlsUtils.js +9 -9
  345. package/dist/components/SynapseTable/TopLevelControls/TopLevelControlsUtils.js.map +1 -1
  346. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +5 -5
  347. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +1 -1
  348. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditor.js +1 -1
  349. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +1 -1
  350. package/dist/components/TableFeedCards/TableFeedCards.js +9 -9
  351. package/dist/components/TermsAndConditions/TermsAndConditionsItem.js +10 -10
  352. package/dist/components/TextToComponentCollapse.d.ts +16 -0
  353. package/dist/components/TextToComponentCollapse.d.ts.map +1 -0
  354. package/dist/components/TextToComponentCollapse.js +29 -0
  355. package/dist/components/TextToComponentCollapse.js.map +1 -0
  356. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js +9 -9
  357. package/dist/components/UserSearchBox/UserSearchBox.d.ts +23 -0
  358. package/dist/components/UserSearchBox/UserSearchBox.d.ts.map +1 -0
  359. package/dist/components/UserSearchBox/UserSearchBox.js +146 -0
  360. package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -0
  361. package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js +13 -13
  362. package/dist/components/WizardChoiceButton/WizardChoiceButton.js +3 -3
  363. package/dist/components/dataaccess/AccessHistoryDashboard.js +5 -5
  364. package/dist/components/dataaccess/AccessHistoryDashboard.js.map +1 -1
  365. package/dist/components/dataaccess/AccessRequirementDashboard.js +4 -4
  366. package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
  367. package/dist/components/dataaccess/AccessSubmissionDashboard.js +1 -1
  368. package/dist/components/dataaccess/AccessSubmissionDashboard.js.map +1 -1
  369. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js +5 -5
  370. package/dist/components/dataaccess/UseAccessRequirementTable.js +3 -3
  371. package/dist/components/dataaccess/UseAccessRequirementTable.js.map +1 -1
  372. package/dist/components/doi/CreateOrUpdateDoiModal.js +1 -1
  373. package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js +10 -5
  374. package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js.map +1 -1
  375. package/dist/components/download_list/DownloadConfirmationUI.d.ts +1 -1
  376. package/dist/components/download_list/DownloadConfirmationUI.js +22 -22
  377. package/dist/components/download_list/DownloadConfirmationUI.js.map +1 -1
  378. package/dist/components/download_list/DownloadConfirmationUtils.js +4 -4
  379. package/dist/components/download_list/DownloadConfirmationUtils.js.map +1 -1
  380. package/dist/components/entity/metadata/EntityModal.js +1 -1
  381. package/dist/components/entity/metadata/MetadataTable.js +1 -1
  382. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js +1 -1
  383. package/dist/components/entity/page/title_bar/EntityTitleBarVersionInfo.js +1 -1
  384. package/dist/components/entity/page/title_bar/TitleBarProperties.js +1 -1
  385. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.d.ts.map +1 -1
  386. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js +27 -26
  387. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
  388. package/dist/components/index.js +125 -121
  389. package/dist/components/index.js.map +1 -1
  390. package/dist/components/layout/InfiniteTableLayout.js +1 -1
  391. package/dist/components/row_renderers/ObservationCard.js +12 -11
  392. package/dist/components/row_renderers/ObservationCard.js.map +1 -1
  393. package/dist/components/row_renderers/utils/CardFooter.d.ts +1 -3
  394. package/dist/components/row_renderers/utils/CardFooter.d.ts.map +1 -1
  395. package/dist/components/row_renderers/utils/CardFooter.js +31 -45
  396. package/dist/components/row_renderers/utils/CardFooter.js.map +1 -1
  397. package/dist/components/styled/HoverPopover.css +1 -0
  398. package/dist/components/styled/HoverPopover.d.ts +28 -0
  399. package/dist/components/styled/HoverPopover.d.ts.map +1 -0
  400. package/dist/components/styled/HoverPopover.js +103 -0
  401. package/dist/components/styled/HoverPopover.js.map +1 -0
  402. package/dist/components/styled/HoverPopover.module.scss +9 -0
  403. package/dist/components/styled/HoverPopover.module.scss.js +10 -0
  404. package/dist/components/styled/HoverPopover.module.scss.js.map +1 -0
  405. package/dist/components/styled/index.d.ts +2 -0
  406. package/dist/components/styled/index.d.ts.map +1 -1
  407. package/dist/components/styled/index.js +11 -9
  408. package/dist/components/styled/index.js.map +1 -1
  409. package/dist/components/table/CsvPreview/CsvPreview.js +10 -5
  410. package/dist/components/table/CsvPreview/CsvPreview.js.map +1 -1
  411. package/dist/components/table/CsvPreview/CsvPreviewDialog.js +10 -5
  412. package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
  413. package/dist/components/widgets/Range.js +1 -1
  414. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts.map +1 -1
  415. package/dist/components/widgets/facet-nav/FacetNavPanel.js +35 -32
  416. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  417. package/dist/components/widgets/facet-nav/PlotsContainer.d.ts +1 -1
  418. package/dist/components/widgets/facet-nav/PlotsContainer.d.ts.map +1 -1
  419. package/dist/components/widgets/facet-nav/PlotsContainer.js +69 -68
  420. package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
  421. package/dist/components/widgets/facet-nav/useFacetPlots.d.ts.map +1 -1
  422. package/dist/components/widgets/facet-nav/useFacetPlots.js +24 -21
  423. package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
  424. package/dist/components/widgets/query-filter/FacetFilterControls.js +3 -3
  425. package/dist/features/curator/GridPage/GridPage.js +10 -5
  426. package/dist/features/curator/GridPage/GridPage.js.map +1 -1
  427. package/dist/features/curator/GridPage/components/GridPageTitle.js +10 -5
  428. package/dist/features/curator/GridPage/components/GridPageTitle.js.map +1 -1
  429. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +1 -1
  430. package/dist/index.js +155 -151
  431. package/dist/index.js.map +1 -1
  432. package/dist/mocks/msw/handlers/accessRequirementHandlers.js +5 -5
  433. package/dist/mocks/msw/handlers/projectStorageHandlers.js +5 -5
  434. package/dist/mocks/msw/handlers/wikiHandlers.js +1 -1
  435. package/dist/mocks/msw/handlers.d.ts.map +1 -1
  436. package/dist/mocks/msw/handlers.js +67 -59
  437. package/dist/mocks/msw/handlers.js.map +1 -1
  438. package/dist/style/base/_core.scss +0 -1
  439. package/dist/style/components/_all.scss +0 -2
  440. package/dist/style/components/_cards.scss +22 -0
  441. package/dist/style/components/_download-list-v2.scss +1 -1
  442. package/dist/style/components/_entity-badge.scss +0 -2
  443. package/dist/style/components/_expandable_table_data.scss +3 -3
  444. package/dist/style/components/_query-wrapper-plot-nav.scss +13 -0
  445. package/dist/style/components/facet_nav/_facet-nav-panel.scss +3 -0
  446. package/dist/style/components/facet_nav/_facet-nav.scss +4 -0
  447. package/dist/style/main.css +1 -1
  448. package/dist/synapse-client/SynapseClient.js +118 -118
  449. package/dist/synapse-client/SynapseClient.js.map +1 -1
  450. package/dist/synapse-queries/auth/useOIDC.js +1 -1
  451. package/dist/synapse-queries/auth/useTwoFactorEnrollment.js +1 -1
  452. package/dist/synapse-queries/entity/index.js +6 -6
  453. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js +1 -1
  454. package/dist/synapse-queries/index.js +1 -1
  455. package/dist/synapse-queries/user/usePersonalAccessToken.js +1 -1
  456. package/dist/testutils/vitest.setup.js +10 -11
  457. package/dist/testutils/vitest.setup.js.map +1 -1
  458. package/dist/theme/DefaultTheme.js +1 -1
  459. package/dist/theme/ThemeProvider.d.ts +2 -1
  460. package/dist/theme/ThemeProvider.d.ts.map +1 -1
  461. package/dist/theme/ThemeProvider.js +11 -10
  462. package/dist/theme/ThemeProvider.js.map +1 -1
  463. package/dist/theme/index.js +1 -1
  464. package/dist/theme/mergeTheme.js +1 -1
  465. package/dist/tsconfig.build.tsbuildinfo +1 -1
  466. package/dist/utils/AppUtils/AppUtils.js +1 -1
  467. package/dist/utils/AppUtils/session/ApplicationSessionManager.d.ts.map +1 -1
  468. package/dist/utils/AppUtils/session/ApplicationSessionManager.js.map +1 -1
  469. package/dist/utils/context/FullContextProvider.js +9 -9
  470. package/dist/utils/context/FullContextProvider.js.map +1 -1
  471. package/dist/utils/context/SynapseContext.d.ts.map +1 -1
  472. package/dist/utils/context/SynapseContext.js +1 -0
  473. package/dist/utils/context/SynapseContext.js.map +1 -1
  474. package/dist/utils/functions/SanitizeHtmlUtils.d.ts.map +1 -1
  475. package/dist/utils/functions/SanitizeHtmlUtils.js +34 -40
  476. package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
  477. package/dist/utils/functions/SqlFunctions.d.ts +4 -0
  478. package/dist/utils/functions/SqlFunctions.d.ts.map +1 -1
  479. package/dist/utils/functions/SqlFunctions.js +25 -23
  480. package/dist/utils/functions/SqlFunctions.js.map +1 -1
  481. package/dist/utils/functions/deepLinkingUtils.js +10 -10
  482. package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
  483. package/dist/utils/hooks/index.js +6 -6
  484. package/dist/utils/hooks/useDetectSSOCode.js +3 -3
  485. package/dist/utils/hooks/useGetEntityMetadata.js +1 -1
  486. package/dist/utils/hooks/useNativeSearchParams.d.ts.map +1 -1
  487. package/dist/utils/hooks/useNativeSearchParams.js +1 -1
  488. package/dist/utils/hooks/useNativeSearchParams.js.map +1 -1
  489. package/dist/utils/hooks/useOneSageURL.d.ts.map +1 -1
  490. package/dist/utils/hooks/useOneSageURL.js +15 -15
  491. package/dist/utils/hooks/useOneSageURL.js.map +1 -1
  492. package/dist/utils/hooks/useSourceAppConfigs.d.ts +1 -0
  493. package/dist/utils/hooks/useSourceAppConfigs.d.ts.map +1 -1
  494. package/dist/utils/hooks/useSourceAppConfigs.js +79 -77
  495. package/dist/utils/hooks/useSourceAppConfigs.js.map +1 -1
  496. package/dist/utils/index.js +4 -4
  497. package/package.json +15 -16
  498. package/dist/_virtual/index.js +0 -6
  499. package/dist/_virtual/index.js.map +0 -1
  500. package/dist/_virtual/index2.js +0 -5
  501. package/dist/_virtual/index2.js.map +0 -1
  502. package/dist/_virtual/index3.js +0 -5
  503. package/dist/_virtual/index3.js.map +0 -1
  504. package/dist/_virtual/index4.js +0 -5
  505. package/dist/_virtual/index4.js.map +0 -1
  506. package/dist/_virtual/index5.js +0 -5
  507. package/dist/_virtual/index5.js.map +0 -1
  508. package/dist/assets/themed_icons/Challenge.d.ts +0 -3
  509. package/dist/assets/themed_icons/Challenge.d.ts.map +0 -1
  510. package/dist/assets/themed_icons/Challenge.js +0 -25
  511. package/dist/assets/themed_icons/Challenge.js.map +0 -1
  512. package/dist/components/UserSearchBox/UserSearchBoxV2.d.ts +0 -21
  513. package/dist/components/UserSearchBox/UserSearchBoxV2.d.ts.map +0 -1
  514. package/dist/components/UserSearchBox/UserSearchBoxV2.js +0 -144
  515. package/dist/components/UserSearchBox/UserSearchBoxV2.js.map +0 -1
  516. package/dist/node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js +0 -53
  517. package/dist/node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js.map +0 -1
  518. package/dist/node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js +0 -948
  519. package/dist/node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js.map +0 -1
  520. package/dist/node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js +0 -30
  521. package/dist/node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js.map +0 -1
  522. package/dist/node_modules/.pnpm/vite-plugin-node-polyfills@0.17.0_rollup@4.55.1_vite@7.3.1_@types_node@22.19.13_sass@1._2da6e8f78437c36f3eb7db51bdd4d89e/node_modules/vite-plugin-node-polyfills/shims/dist/index.js +0 -15
  523. package/dist/node_modules/.pnpm/vite-plugin-node-polyfills@0.17.0_rollup@4.55.1_vite@7.3.1_@types_node@22.19.13_sass@1._2da6e8f78437c36f3eb7db51bdd4d89e/node_modules/vite-plugin-node-polyfills/shims/dist/index.js.map +0 -1
  524. package/dist/style/components/_download-cart-page.scss +0 -204
  525. package/dist/style/components/_user-search-box.scss +0 -30
@@ -4,10 +4,10 @@ import { Box as t, Typography as n, Collapse as S, Button as k, Tooltip as D, Fo
4
4
  import { noop as X } from "lodash-es";
5
5
  import { TransitionGroup as j } from "react-transition-group";
6
6
  import b from "../IconSvg/IconSvg.js";
7
- import F from "../UserSearchBox/UserSearchBoxV2.js";
8
- import { AclEditorSkeleton as V } from "./AclEditorSkeleton.js";
9
- import { ResourceAccessItem as Y } from "./ResourceAccessItem.js";
10
- const H = "Add a user or team", z = "Make Public", K = "Remove Public Access", W = "Notify people via email";
7
+ import F from "../UserSearchBox/UserSearchBox.js";
8
+ import { AclEditorSkeleton as Y } from "./AclEditorSkeleton.js";
9
+ import { ResourceAccessItem as H } from "./ResourceAccessItem.js";
10
+ const V = "Add a user or team", z = "Make Public", K = "Remove Public Access", W = "Notify people via email";
11
11
  function te(v) {
12
12
  const {
13
13
  resourceAccessList: s,
@@ -35,7 +35,7 @@ function te(v) {
35
35
  R
36
36
  ].filter((i) => i !== void 0);
37
37
  if (x || g)
38
- return /* @__PURE__ */ e(V, {});
38
+ return /* @__PURE__ */ e(Y, {});
39
39
  const E = !!s.find(
40
40
  (i) => f.some((r) => i.principalId === Number(r))
41
41
  ) ? {
@@ -74,7 +74,7 @@ function te(v) {
74
74
  s.length === 0 ? /* @__PURE__ */ e(n, { variant: "body1Italic", children: C }) : /* @__PURE__ */ e(j, { children: s.map((i) => {
75
75
  const r = typeof o == "function" ? o(i) : o, N = typeof l == "function" ? l(i) : l, O = u ? u(i) : void 0;
76
76
  return /* @__PURE__ */ e(S, { children: /* @__PURE__ */ e(
77
- Y,
77
+ H,
78
78
  {
79
79
  resourceAccess: i,
80
80
  availablePermissionLevels: I,
@@ -123,7 +123,7 @@ function te(v) {
123
123
  component: "label",
124
124
  variant: "smallText2",
125
125
  htmlFor: "reviewer-search",
126
- children: H
126
+ children: V
127
127
  }
128
128
  ),
129
129
  /* @__PURE__ */ e(
@@ -184,7 +184,7 @@ function te(v) {
184
184
  ] });
185
185
  }
186
186
  export {
187
- H as ADD_PRINCIPAL_TO_ACL_COMBOBOX_LABEL,
187
+ V as ADD_PRINCIPAL_TO_ACL_COMBOBOX_LABEL,
188
188
  z as ADD_PUBLIC_PRINCIPALS_BUTTON_TEXT,
189
189
  te as AclEditor,
190
190
  W as NOTIFY_NEW_ACL_USERS_CHECKBOX_LABEL,
@@ -1 +1 @@
1
- {"version":3,"file":"AclEditor.js","sources":["../../../src/components/AclEditor/AclEditor.tsx"],"sourcesContent":["import { PermissionLevel } from '@/utils/PermissionLevelToAccessType'\nimport { useGetRealmPrincipals } from '@/synapse-queries/realm/useRealmPrincipals'\nimport {\n Box,\n Button,\n ButtonProps,\n Checkbox,\n Collapse,\n FormControlLabel,\n Tooltip,\n Typography,\n} from '@mui/material'\nimport { ResourceAccess } from '@sage-bionetworks/synapse-types'\nimport { noop } from 'lodash-es'\nimport React, { ReactNode } from 'react'\nimport { TransitionGroup } from 'react-transition-group'\nimport IconSvg from '../IconSvg'\nimport UserSearchBoxV2 from '../UserSearchBox/UserSearchBoxV2'\nimport { AclEditorSkeleton } from './AclEditorSkeleton'\nimport { ResourceAccessItem } from './ResourceAccessItem'\nimport useUpdateAcl from './useUpdateAcl'\n\nexport const ADD_PRINCIPAL_TO_ACL_COMBOBOX_LABEL = 'Add a user or team'\nexport const ADD_PUBLIC_PRINCIPALS_BUTTON_TEXT = 'Make Public'\nexport const REMOVE_PUBLIC_PRINCIPALS_BUTTON_TEXT = 'Remove Public Access'\n\nexport type AclEditorProps = {\n resourceAccessList: ResourceAccess[]\n availablePermissionLevels: PermissionLevel[]\n /** If true, the user can edit the ACL. If a function, it will be called with the ResourceAccess to determine if the user can edit it. */\n canEdit: boolean | ((resourceAccess: ResourceAccess) => boolean)\n /** If true, object ACL is inherited from another object */\n isInherited: boolean\n /**\n * If true, the user can remove any entry from the ACL. a function, it will be called with the ResourceAccess to determine if the user can remove it.\n * If undefined, then the behavior will fall back to the value of `canEdit`\n */\n canRemoveEntry?: boolean | ((resourceAccess: ResourceAccess) => boolean)\n isLoading?: boolean\n emptyText: ReactNode\n onAddPrincipalToAcl: (id: number) => void\n updateResourceAccessItem: ReturnType<\n typeof useUpdateAcl\n >['updateResourceAccessItem']\n removeResourceAccessItem: ReturnType<\n typeof useUpdateAcl\n >['removeResourceAccessItem']\n /** If true, shows a button to add/remove AUTHENTICATED and PUBLIC groups when in edit mode */\n showAddRemovePublicButton: boolean\n /** If present, a checkbox to notify those added to the email will be shown. */\n showNotifyCheckbox: boolean\n notifyCheckboxValue?: boolean\n onNotifyCheckboxChange?: (checked: boolean) => void\n /**\n * In special cases, can be used to display a permission level that is different from the typical permission levels.\n * For example, the PUBLIC group \"Can download\" an entity if they have READ access and the entity is marked as\n * \"open data\" (open data status is not captured in the ResourceAccess)\n */\n displayedPermissionLevelOverride?: (\n resourceAccess: ResourceAccess,\n ) => string | undefined\n}\n\nexport const NOTIFY_NEW_ACL_USERS_CHECKBOX_LABEL = 'Notify people via email'\n\nexport function AclEditor(props: AclEditorProps): React.ReactNode {\n const {\n resourceAccessList,\n availablePermissionLevels,\n canEdit,\n isInherited,\n canRemoveEntry = canEdit,\n isLoading = false,\n emptyText,\n onAddPrincipalToAcl,\n updateResourceAccessItem,\n removeResourceAccessItem,\n showAddRemovePublicButton,\n showNotifyCheckbox,\n notifyCheckboxValue,\n onNotifyCheckboxChange = noop,\n displayedPermissionLevelOverride,\n } = props\n\n const { data, isLoading: isLoadingRealmPrincipals } = useGetRealmPrincipals()\n const realmPrincipals = data || {}\n const {\n authenticatedUsers: authenticatedUsersId,\n publicGroup: publicGroupId,\n anonymousUser: anonymousUserId,\n } = realmPrincipals\n\n const publicPrincipalIds = [\n authenticatedUsersId,\n publicGroupId,\n anonymousUserId,\n ].filter((id): id is string => id !== undefined)\n\n if (isLoading || isLoadingRealmPrincipals) {\n return <AclEditorSkeleton />\n }\n\n const resourceAccessListCurrentlyIncludesPublic = Boolean(\n resourceAccessList.find(resourceAccess =>\n publicPrincipalIds.some(id => resourceAccess.principalId === Number(id)),\n ),\n )\n\n const addOrRemovePublicButtonProps: ButtonProps =\n resourceAccessListCurrentlyIncludesPublic\n ? {\n startIcon: <IconSvg icon={'close'} wrap={false} />,\n children: REMOVE_PUBLIC_PRINCIPALS_BUTTON_TEXT,\n onClick: () => {\n publicPrincipalIds.forEach(publicId => {\n removeResourceAccessItem(Number(publicId))\n })\n },\n }\n : {\n startIcon: <IconSvg icon={'public'} wrap={false} />,\n children: ADD_PUBLIC_PRINCIPALS_BUTTON_TEXT,\n onClick: () => {\n if (publicGroupId) onAddPrincipalToAcl(Number(publicGroupId))\n if (authenticatedUsersId)\n onAddPrincipalToAcl(Number(authenticatedUsersId))\n },\n }\n\n return (\n <Box>\n <Box\n sx={{\n mb: '30px',\n }}\n >\n <Typography\n variant=\"headline3\"\n sx={{\n mb: '10px',\n }}\n >\n Users and Teams with Permissions\n </Typography>\n\n {resourceAccessList.length === 0 ? (\n <Typography variant=\"body1Italic\">{emptyText}</Typography>\n ) : (\n <TransitionGroup>\n {resourceAccessList.map(resourceAccess => {\n const canChangePermission =\n typeof canEdit === 'function'\n ? canEdit(resourceAccess)\n : canEdit\n const canDelete =\n typeof canRemoveEntry === 'function'\n ? canRemoveEntry(resourceAccess)\n : canRemoveEntry\n\n const permissionLevelOverride = displayedPermissionLevelOverride\n ? displayedPermissionLevelOverride(resourceAccess)\n : undefined\n return (\n <Collapse key={resourceAccess.principalId}>\n <ResourceAccessItem\n resourceAccess={resourceAccess}\n availablePermissionLevels={availablePermissionLevels}\n canChangePermission={canChangePermission}\n displayedPermissionLevelOverride={permissionLevelOverride}\n showDeleteButton={canDelete}\n onChange={accessType =>\n updateResourceAccessItem(\n resourceAccess.principalId,\n accessType,\n )\n }\n onRemove={() =>\n removeResourceAccessItem(resourceAccess.principalId)\n }\n />\n </Collapse>\n )\n })}\n </TransitionGroup>\n )}\n </Box>\n {canEdit && (\n <Box>\n <Typography\n variant=\"headline3\"\n sx={{\n mb: '10px',\n }}\n >\n Add More\n </Typography>\n <Typography\n sx={{\n mb: '20px',\n variant: 'body1',\n lineHeight: '20px',\n fontStyle: 'italic',\n color: 'text.secondary',\n }}\n >\n Search for a username or team to add. You can search by username,\n first or last names, or team name.\n </Typography>\n <Box sx={{ mb: 1 }}>\n <Typography\n component=\"label\"\n variant=\"smallText2\"\n htmlFor=\"reviewer-search\"\n >\n {ADD_PRINCIPAL_TO_ACL_COMBOBOX_LABEL}\n </Typography>\n <UserSearchBoxV2\n value={null}\n inputId=\"reviewer-search\"\n placeholder=\"Username, name (first and last) or team name.\"\n onChange={id => {\n const parsedId = parseInt(id || '')\n if (parsedId) {\n onAddPrincipalToAcl(parsedId)\n }\n }}\n />\n </Box>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n gap: 2,\n }}\n >\n <Box>\n {showAddRemovePublicButton && (\n <Button\n size={'small'}\n variant={'outlined'}\n {...addOrRemovePublicButtonProps}\n />\n )}\n </Box>\n {showNotifyCheckbox && (\n <Tooltip\n title={\n 'Select to notify newly added people that this item has been shared with them'\n }\n >\n <FormControlLabel\n sx={{ mr: 0 }}\n control={\n <Checkbox\n value={notifyCheckboxValue}\n onChange={() =>\n onNotifyCheckboxChange(!notifyCheckboxValue)\n }\n />\n }\n label={\n <Typography variant={'smallText1'}>\n {NOTIFY_NEW_ACL_USERS_CHECKBOX_LABEL}\n </Typography>\n }\n />\n </Tooltip>\n )}\n </Box>\n </Box>\n )}\n {!canEdit && !isInherited && (\n <Typography variant={'body1'}>\n You do not have sufficient privileges to modify the sharing settings.\n </Typography>\n )}\n </Box>\n )\n}\n"],"names":["ADD_PRINCIPAL_TO_ACL_COMBOBOX_LABEL","ADD_PUBLIC_PRINCIPALS_BUTTON_TEXT","REMOVE_PUBLIC_PRINCIPALS_BUTTON_TEXT","NOTIFY_NEW_ACL_USERS_CHECKBOX_LABEL","AclEditor","props","resourceAccessList","availablePermissionLevels","canEdit","isInherited","canRemoveEntry","isLoading","emptyText","onAddPrincipalToAcl","updateResourceAccessItem","removeResourceAccessItem","showAddRemovePublicButton","showNotifyCheckbox","notifyCheckboxValue","onNotifyCheckboxChange","noop","displayedPermissionLevelOverride","data","isLoadingRealmPrincipals","useGetRealmPrincipals","realmPrincipals","authenticatedUsersId","publicGroupId","anonymousUserId","publicPrincipalIds","id","AclEditorSkeleton","addOrRemovePublicButtonProps","resourceAccess","jsx","IconSvg","publicId","Box","jsxs","Typography","TransitionGroup","canChangePermission","canDelete","permissionLevelOverride","Collapse","ResourceAccessItem","accessType","UserSearchBoxV2","parsedId","Button","Tooltip","FormControlLabel","Checkbox"],"mappings":"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"}
1
+ {"version":3,"file":"AclEditor.js","sources":["../../../src/components/AclEditor/AclEditor.tsx"],"sourcesContent":["import { PermissionLevel } from '@/utils/PermissionLevelToAccessType'\nimport { useGetRealmPrincipals } from '@/synapse-queries/realm/useRealmPrincipals'\nimport {\n Box,\n Button,\n ButtonProps,\n Checkbox,\n Collapse,\n FormControlLabel,\n Tooltip,\n Typography,\n} from '@mui/material'\nimport { ResourceAccess } from '@sage-bionetworks/synapse-types'\nimport { noop } from 'lodash-es'\nimport React, { ReactNode } from 'react'\nimport { TransitionGroup } from 'react-transition-group'\nimport IconSvg from '../IconSvg'\nimport UserSearchBox from '../UserSearchBox/UserSearchBox'\nimport { AclEditorSkeleton } from './AclEditorSkeleton'\nimport { ResourceAccessItem } from './ResourceAccessItem'\nimport useUpdateAcl from './useUpdateAcl'\n\nexport const ADD_PRINCIPAL_TO_ACL_COMBOBOX_LABEL = 'Add a user or team'\nexport const ADD_PUBLIC_PRINCIPALS_BUTTON_TEXT = 'Make Public'\nexport const REMOVE_PUBLIC_PRINCIPALS_BUTTON_TEXT = 'Remove Public Access'\n\nexport type AclEditorProps = {\n resourceAccessList: ResourceAccess[]\n availablePermissionLevels: PermissionLevel[]\n /** If true, the user can edit the ACL. If a function, it will be called with the ResourceAccess to determine if the user can edit it. */\n canEdit: boolean | ((resourceAccess: ResourceAccess) => boolean)\n /** If true, object ACL is inherited from another object */\n isInherited: boolean\n /**\n * If true, the user can remove any entry from the ACL. a function, it will be called with the ResourceAccess to determine if the user can remove it.\n * If undefined, then the behavior will fall back to the value of `canEdit`\n */\n canRemoveEntry?: boolean | ((resourceAccess: ResourceAccess) => boolean)\n isLoading?: boolean\n emptyText: ReactNode\n onAddPrincipalToAcl: (id: number) => void\n updateResourceAccessItem: ReturnType<\n typeof useUpdateAcl\n >['updateResourceAccessItem']\n removeResourceAccessItem: ReturnType<\n typeof useUpdateAcl\n >['removeResourceAccessItem']\n /** If true, shows a button to add/remove AUTHENTICATED and PUBLIC groups when in edit mode */\n showAddRemovePublicButton: boolean\n /** If present, a checkbox to notify those added to the email will be shown. */\n showNotifyCheckbox: boolean\n notifyCheckboxValue?: boolean\n onNotifyCheckboxChange?: (checked: boolean) => void\n /**\n * In special cases, can be used to display a permission level that is different from the typical permission levels.\n * For example, the PUBLIC group \"Can download\" an entity if they have READ access and the entity is marked as\n * \"open data\" (open data status is not captured in the ResourceAccess)\n */\n displayedPermissionLevelOverride?: (\n resourceAccess: ResourceAccess,\n ) => string | undefined\n}\n\nexport const NOTIFY_NEW_ACL_USERS_CHECKBOX_LABEL = 'Notify people via email'\n\nexport function AclEditor(props: AclEditorProps): React.ReactNode {\n const {\n resourceAccessList,\n availablePermissionLevels,\n canEdit,\n isInherited,\n canRemoveEntry = canEdit,\n isLoading = false,\n emptyText,\n onAddPrincipalToAcl,\n updateResourceAccessItem,\n removeResourceAccessItem,\n showAddRemovePublicButton,\n showNotifyCheckbox,\n notifyCheckboxValue,\n onNotifyCheckboxChange = noop,\n displayedPermissionLevelOverride,\n } = props\n\n const { data, isLoading: isLoadingRealmPrincipals } = useGetRealmPrincipals()\n const realmPrincipals = data || {}\n const {\n authenticatedUsers: authenticatedUsersId,\n publicGroup: publicGroupId,\n anonymousUser: anonymousUserId,\n } = realmPrincipals\n\n const publicPrincipalIds = [\n authenticatedUsersId,\n publicGroupId,\n anonymousUserId,\n ].filter((id): id is string => id !== undefined)\n\n if (isLoading || isLoadingRealmPrincipals) {\n return <AclEditorSkeleton />\n }\n\n const resourceAccessListCurrentlyIncludesPublic = Boolean(\n resourceAccessList.find(resourceAccess =>\n publicPrincipalIds.some(id => resourceAccess.principalId === Number(id)),\n ),\n )\n\n const addOrRemovePublicButtonProps: ButtonProps =\n resourceAccessListCurrentlyIncludesPublic\n ? {\n startIcon: <IconSvg icon={'close'} wrap={false} />,\n children: REMOVE_PUBLIC_PRINCIPALS_BUTTON_TEXT,\n onClick: () => {\n publicPrincipalIds.forEach(publicId => {\n removeResourceAccessItem(Number(publicId))\n })\n },\n }\n : {\n startIcon: <IconSvg icon={'public'} wrap={false} />,\n children: ADD_PUBLIC_PRINCIPALS_BUTTON_TEXT,\n onClick: () => {\n if (publicGroupId) onAddPrincipalToAcl(Number(publicGroupId))\n if (authenticatedUsersId)\n onAddPrincipalToAcl(Number(authenticatedUsersId))\n },\n }\n\n return (\n <Box>\n <Box\n sx={{\n mb: '30px',\n }}\n >\n <Typography\n variant=\"headline3\"\n sx={{\n mb: '10px',\n }}\n >\n Users and Teams with Permissions\n </Typography>\n\n {resourceAccessList.length === 0 ? (\n <Typography variant=\"body1Italic\">{emptyText}</Typography>\n ) : (\n <TransitionGroup>\n {resourceAccessList.map(resourceAccess => {\n const canChangePermission =\n typeof canEdit === 'function'\n ? canEdit(resourceAccess)\n : canEdit\n const canDelete =\n typeof canRemoveEntry === 'function'\n ? canRemoveEntry(resourceAccess)\n : canRemoveEntry\n\n const permissionLevelOverride = displayedPermissionLevelOverride\n ? displayedPermissionLevelOverride(resourceAccess)\n : undefined\n return (\n <Collapse key={resourceAccess.principalId}>\n <ResourceAccessItem\n resourceAccess={resourceAccess}\n availablePermissionLevels={availablePermissionLevels}\n canChangePermission={canChangePermission}\n displayedPermissionLevelOverride={permissionLevelOverride}\n showDeleteButton={canDelete}\n onChange={accessType =>\n updateResourceAccessItem(\n resourceAccess.principalId,\n accessType,\n )\n }\n onRemove={() =>\n removeResourceAccessItem(resourceAccess.principalId)\n }\n />\n </Collapse>\n )\n })}\n </TransitionGroup>\n )}\n </Box>\n {canEdit && (\n <Box>\n <Typography\n variant=\"headline3\"\n sx={{\n mb: '10px',\n }}\n >\n Add More\n </Typography>\n <Typography\n sx={{\n mb: '20px',\n variant: 'body1',\n lineHeight: '20px',\n fontStyle: 'italic',\n color: 'text.secondary',\n }}\n >\n Search for a username or team to add. You can search by username,\n first or last names, or team name.\n </Typography>\n <Box sx={{ mb: 1 }}>\n <Typography\n component=\"label\"\n variant=\"smallText2\"\n htmlFor=\"reviewer-search\"\n >\n {ADD_PRINCIPAL_TO_ACL_COMBOBOX_LABEL}\n </Typography>\n <UserSearchBox\n value={null}\n inputId=\"reviewer-search\"\n placeholder=\"Username, name (first and last) or team name.\"\n onChange={id => {\n const parsedId = parseInt(id || '')\n if (parsedId) {\n onAddPrincipalToAcl(parsedId)\n }\n }}\n />\n </Box>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n gap: 2,\n }}\n >\n <Box>\n {showAddRemovePublicButton && (\n <Button\n size={'small'}\n variant={'outlined'}\n {...addOrRemovePublicButtonProps}\n />\n )}\n </Box>\n {showNotifyCheckbox && (\n <Tooltip\n title={\n 'Select to notify newly added people that this item has been shared with them'\n }\n >\n <FormControlLabel\n sx={{ mr: 0 }}\n control={\n <Checkbox\n value={notifyCheckboxValue}\n onChange={() =>\n onNotifyCheckboxChange(!notifyCheckboxValue)\n }\n />\n }\n label={\n <Typography variant={'smallText1'}>\n {NOTIFY_NEW_ACL_USERS_CHECKBOX_LABEL}\n </Typography>\n }\n />\n </Tooltip>\n )}\n </Box>\n </Box>\n )}\n {!canEdit && !isInherited && (\n <Typography variant={'body1'}>\n You do not have sufficient privileges to modify the sharing settings.\n </Typography>\n )}\n </Box>\n )\n}\n"],"names":["ADD_PRINCIPAL_TO_ACL_COMBOBOX_LABEL","ADD_PUBLIC_PRINCIPALS_BUTTON_TEXT","REMOVE_PUBLIC_PRINCIPALS_BUTTON_TEXT","NOTIFY_NEW_ACL_USERS_CHECKBOX_LABEL","AclEditor","props","resourceAccessList","availablePermissionLevels","canEdit","isInherited","canRemoveEntry","isLoading","emptyText","onAddPrincipalToAcl","updateResourceAccessItem","removeResourceAccessItem","showAddRemovePublicButton","showNotifyCheckbox","notifyCheckboxValue","onNotifyCheckboxChange","noop","displayedPermissionLevelOverride","data","isLoadingRealmPrincipals","useGetRealmPrincipals","realmPrincipals","authenticatedUsersId","publicGroupId","anonymousUserId","publicPrincipalIds","id","AclEditorSkeleton","addOrRemovePublicButtonProps","resourceAccess","jsx","IconSvg","publicId","Box","jsxs","Typography","TransitionGroup","canChangePermission","canDelete","permissionLevelOverride","Collapse","ResourceAccessItem","accessType","UserSearchBox","parsedId","Button","Tooltip","FormControlLabel","Checkbox"],"mappings":"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"}
@@ -1,40 +1,40 @@
1
- import { within as i, waitFor as a, screen as r } from "@testing-library/react";
1
+ import { screen as r, waitFor as a, within as i } from "@testing-library/react";
2
2
  import { REMOVE_BUTTON_LABEL as m } from "./ResourceAccessItem.js";
3
3
  import { PUBLIC_GROUP_DISPLAY_TEXT as B, AUTHENTICATED_GROUP_DISPLAY_TEXT as T } from "../TeamBadge.js";
4
- import { ADD_PRINCIPAL_TO_ACL_COMBOBOX_LABEL as x, ADD_PUBLIC_PRINCIPALS_BUTTON_TEXT as y } from "./AclEditor.js";
5
- function u(o, n) {
6
- return o.find((t) => i(t).queryByText(n, { exact: !1 }));
4
+ import { ADD_PUBLIC_PRINCIPALS_BUTTON_TEXT as x, ADD_PRINCIPAL_TO_ACL_COMBOBOX_LABEL as y } from "./AclEditor.js";
5
+ function u(e, n) {
6
+ return e.find((t) => i(t).queryByText(n, { exact: !1 }));
7
7
  }
8
- async function R(o, n, t) {
9
- let e;
8
+ async function R(e, n, t) {
9
+ let o;
10
10
  try {
11
11
  await a(() => {
12
- e = u(o, n), expect(e).toBeInTheDocument();
12
+ o = u(e, n), expect(o).toBeInTheDocument();
13
13
  });
14
14
  } catch (l) {
15
15
  throw r.debug(), new Error(`Principal ${n} not found in ACL`, { cause: l });
16
16
  }
17
- const c = i(e).queryByRole("combobox");
18
- return c ? expect(c).toHaveTextContent(t) : i(e).getByText(t), e;
17
+ const c = i(o).queryByRole("combobox");
18
+ return c ? expect(c).toHaveTextContent(t) : i(o).getByText(t), o;
19
19
  }
20
- function b(o, n, t) {
21
- expect(i(o).queryByRole("link") ?? o).toHaveTextContent(
20
+ function b(e, n, t) {
21
+ expect(i(e).queryByRole("link") ?? e).toHaveTextContent(
22
22
  n
23
23
  );
24
- const e = i(o).queryByRole("combobox");
25
- e ? expect(e).toHaveTextContent(t) : i(o).getByText(t);
24
+ const o = i(e).queryByRole("combobox");
25
+ o ? expect(o).toHaveTextContent(t) : i(e).getByText(t);
26
26
  }
27
- async function d(o, n, t = !0) {
28
- const e = i(o).getByRole("button", {
27
+ async function d(e, n, t = !0) {
28
+ const o = i(e).getByRole("button", {
29
29
  name: m
30
30
  });
31
- await n.click(e), t && await a(() => {
32
- expect(e).not.toBeInTheDocument(), expect(o).not.toBeInTheDocument();
31
+ await n.click(o), t && await a(() => {
32
+ expect(o).not.toBeInTheDocument(), expect(e).not.toBeInTheDocument();
33
33
  });
34
34
  }
35
- async function h(o, n, t) {
36
- const e = i(o).getByRole("combobox");
37
- await n.click(e);
35
+ async function h(e, n, t) {
36
+ const o = i(e).getByRole("combobox");
37
+ await n.click(o);
38
38
  const c = r.getByRole("option", {
39
39
  name: t
40
40
  });
@@ -42,30 +42,30 @@ async function h(o, n, t) {
42
42
  expect(c).not.toBeInTheDocument();
43
43
  });
44
44
  }
45
- function p() {
45
+ function w() {
46
46
  return r.queryByRole("combobox", {
47
- name: x
47
+ name: y
48
48
  });
49
49
  }
50
- async function A(o, n) {
51
- const t = p();
52
- expect(t).toBeInTheDocument(), await o.type(t, n);
53
- const e = await r.findByText(new RegExp(`\\(@${n}\\)`));
54
- await o.click(e), await a(() => expect(e).not.toBeInTheDocument());
50
+ async function A(e, n) {
51
+ const t = w();
52
+ expect(t).toBeInTheDocument(), await e.clear(t), await e.type(t, n);
53
+ const o = await r.findByText(new RegExp(`\\(@${n}\\)`));
54
+ await e.click(o), await a(() => expect(o).not.toBeInTheDocument());
55
55
  const c = r.getAllByRole("row");
56
56
  return c[c.length - 1];
57
57
  }
58
- async function _(o) {
58
+ async function _(e) {
59
59
  const n = r.getByRole("button", {
60
- name: y
60
+ name: x
61
61
  });
62
- await o.click(n);
63
- let t = [], e, c;
62
+ await e.click(n);
63
+ let t = [], o, c;
64
64
  return await a(() => {
65
- t = r.getAllByRole("row"), e = u(t, B), c = u(
65
+ t = r.getAllByRole("row"), o = u(t, B), c = u(
66
66
  t,
67
67
  T
68
- ), expect(e).toBeInTheDocument(), expect(c).toBeInTheDocument();
68
+ ), expect(o).toBeInTheDocument(), expect(c).toBeInTheDocument();
69
69
  }), {
70
70
  publicRow: t[t.length - 2],
71
71
  authenticatedUsersRow: t[t.length - 1]
@@ -76,7 +76,7 @@ export {
76
76
  A as addUserToAcl,
77
77
  b as confirmItem,
78
78
  R as confirmItemViaQuery,
79
- p as queryForAddUserCombobox,
79
+ w as queryForAddUserCombobox,
80
80
  u as queryForRowWithPrincipalName,
81
81
  d as removeItem,
82
82
  h as updatePermissionLevel
@@ -1 +1 @@
1
- {"version":3,"file":"AclEditor.test-utils.js","sources":["../../../src/components/AclEditor/AclEditor.test-utils.ts"],"sourcesContent":["import userEvent from '@testing-library/user-event'\nimport { screen, waitFor, within } from '@testing-library/react'\nimport { REMOVE_BUTTON_LABEL } from './ResourceAccessItem'\nimport {\n AUTHENTICATED_GROUP_DISPLAY_TEXT,\n PUBLIC_GROUP_DISPLAY_TEXT,\n} from '../TeamBadge'\nimport {\n ADD_PRINCIPAL_TO_ACL_COMBOBOX_LABEL,\n ADD_PUBLIC_PRINCIPALS_BUTTON_TEXT,\n} from './AclEditor'\n\n/**\n * Find a row in the ACL editor that contains the specified principal name.\n * @param rows\n * @param principalName\n */\nexport function queryForRowWithPrincipalName(\n rows: HTMLElement[],\n principalName: string,\n) {\n return rows.find(row => {\n return within(row).queryByText(principalName, { exact: false })\n })\n}\n\n/**\n * Verify that a row in the ACL editor contains the expected principal name and access type.\n * @param rows\n * @param principalName\n * @param accessTypeLabel\n */\nexport async function confirmItemViaQuery(\n rows: HTMLElement[],\n principalName: string,\n accessTypeLabel: string,\n) {\n let row: HTMLElement | undefined\n try {\n await waitFor(() => {\n row = queryForRowWithPrincipalName(rows, principalName)!\n expect(row).toBeInTheDocument()\n })\n } catch (e) {\n screen.debug()\n throw new Error(`Principal ${principalName} not found in ACL`, { cause: e })\n }\n\n const editorCombobox = within(row!).queryByRole('combobox')\n if (editorCombobox) {\n expect(editorCombobox).toHaveTextContent(accessTypeLabel)\n } else {\n within(row!).getByText(accessTypeLabel)\n }\n return row!\n}\n\n/**\n * Verify that a row in the ACL editor contains the expected principal name and access type.\n * @param row\n * @param principalName\n * @param accessTypeLabel\n */\nexport function confirmItem(\n row: HTMLElement,\n principalName: string,\n accessTypeLabel: string,\n) {\n expect(within(row).queryByRole('link') ?? row).toHaveTextContent(\n principalName,\n )\n const editorCombobox = within(row).queryByRole('combobox')\n if (editorCombobox) {\n expect(editorCombobox).toHaveTextContent(accessTypeLabel)\n } else {\n within(row).getByText(accessTypeLabel)\n }\n}\n\n/**\n * Remove a particular row from the HTML editor.\n * @param row\n * @param user\n * @param verifyRemoval\n */\nexport async function removeItem(\n row: HTMLElement,\n user: ReturnType<(typeof userEvent)['setup']>,\n verifyRemoval = true,\n) {\n const removeButton = within(row).getByRole('button', {\n name: REMOVE_BUTTON_LABEL,\n })\n await user.click(removeButton)\n if (verifyRemoval) {\n await waitFor(() => {\n expect(removeButton).not.toBeInTheDocument()\n expect(row).not.toBeInTheDocument()\n })\n }\n}\n\n/**\n * Updates the permission level of a particular row in the ACL editor.\n * @param row\n * @param user\n * @param updatedPermissionLevelLabel\n */\nexport async function updatePermissionLevel(\n row: HTMLElement,\n user: ReturnType<(typeof userEvent)['setup']>,\n updatedPermissionLevelLabel: string,\n) {\n const menu = within(row).getByRole('combobox')\n await user.click(menu)\n\n const option = screen.getByRole('option', {\n name: updatedPermissionLevelLabel,\n })\n await user.click(option)\n\n await waitFor(() => {\n expect(option).not.toBeInTheDocument()\n })\n}\n\nexport function queryForAddUserCombobox() {\n return screen.queryByRole('combobox', {\n name: ADD_PRINCIPAL_TO_ACL_COMBOBOX_LABEL,\n })\n}\n\n/**\n * Adds a user to the ACL editor.\n * @param user\n * @param userName\n */\nexport async function addUserToAcl(\n user: ReturnType<(typeof userEvent)['setup']>,\n userName: string,\n) {\n const userInput = queryForAddUserCombobox()!\n expect(userInput).toBeInTheDocument()\n await user.type(userInput, userName)\n\n const option = await screen.findByText(new RegExp(`\\\\(@${userName}\\\\)`))\n await user.click(option)\n\n await waitFor(() => expect(option).not.toBeInTheDocument())\n const rows = screen.getAllByRole('row')\n return rows[rows.length - 1]\n}\n\n/**\n * Adds public / authenticated groups to the ACL editor.\n * @param user\n */\nexport async function addPublicToAcl(\n user: ReturnType<(typeof userEvent)['setup']>,\n) {\n const makePublicButton = screen.getByRole('button', {\n name: ADD_PUBLIC_PRINCIPALS_BUTTON_TEXT,\n })\n await user.click(makePublicButton)\n\n let rows: HTMLElement[] = []\n let publicRow: HTMLElement | undefined = undefined\n let authenticatedUsersRow: HTMLElement | undefined = undefined\n await waitFor(() => {\n rows = screen.getAllByRole('row')\n publicRow = queryForRowWithPrincipalName(rows, PUBLIC_GROUP_DISPLAY_TEXT)\n authenticatedUsersRow = queryForRowWithPrincipalName(\n rows,\n AUTHENTICATED_GROUP_DISPLAY_TEXT,\n )\n expect(publicRow).toBeInTheDocument()\n expect(authenticatedUsersRow).toBeInTheDocument()\n })\n\n return {\n publicRow: rows[rows.length - 2],\n authenticatedUsersRow: rows[rows.length - 1],\n }\n}\n"],"names":["queryForRowWithPrincipalName","rows","principalName","row","within","confirmItemViaQuery","accessTypeLabel","waitFor","e","screen","editorCombobox","confirmItem","removeItem","user","verifyRemoval","removeButton","REMOVE_BUTTON_LABEL","updatePermissionLevel","updatedPermissionLevelLabel","menu","option","queryForAddUserCombobox","ADD_PRINCIPAL_TO_ACL_COMBOBOX_LABEL","addUserToAcl","userName","userInput","addPublicToAcl","makePublicButton","ADD_PUBLIC_PRINCIPALS_BUTTON_TEXT","publicRow","authenticatedUsersRow","PUBLIC_GROUP_DISPLAY_TEXT","AUTHENTICATED_GROUP_DISPLAY_TEXT"],"mappings":"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"}
1
+ {"version":3,"file":"AclEditor.test-utils.js","sources":["../../../src/components/AclEditor/AclEditor.test-utils.ts"],"sourcesContent":["import userEvent from '@testing-library/user-event'\nimport { screen, waitFor, within } from '@testing-library/react'\nimport { REMOVE_BUTTON_LABEL } from './ResourceAccessItem'\nimport {\n AUTHENTICATED_GROUP_DISPLAY_TEXT,\n PUBLIC_GROUP_DISPLAY_TEXT,\n} from '../TeamBadge'\nimport {\n ADD_PRINCIPAL_TO_ACL_COMBOBOX_LABEL,\n ADD_PUBLIC_PRINCIPALS_BUTTON_TEXT,\n} from './AclEditor'\n\n/**\n * Find a row in the ACL editor that contains the specified principal name.\n * @param rows\n * @param principalName\n */\nexport function queryForRowWithPrincipalName(\n rows: HTMLElement[],\n principalName: string,\n) {\n return rows.find(row => {\n return within(row).queryByText(principalName, { exact: false })\n })\n}\n\n/**\n * Verify that a row in the ACL editor contains the expected principal name and access type.\n * @param rows\n * @param principalName\n * @param accessTypeLabel\n */\nexport async function confirmItemViaQuery(\n rows: HTMLElement[],\n principalName: string,\n accessTypeLabel: string,\n) {\n let row: HTMLElement | undefined\n try {\n await waitFor(() => {\n row = queryForRowWithPrincipalName(rows, principalName)!\n expect(row).toBeInTheDocument()\n })\n } catch (e) {\n screen.debug()\n throw new Error(`Principal ${principalName} not found in ACL`, { cause: e })\n }\n\n const editorCombobox = within(row!).queryByRole('combobox')\n if (editorCombobox) {\n expect(editorCombobox).toHaveTextContent(accessTypeLabel)\n } else {\n within(row!).getByText(accessTypeLabel)\n }\n return row!\n}\n\n/**\n * Verify that a row in the ACL editor contains the expected principal name and access type.\n * @param row\n * @param principalName\n * @param accessTypeLabel\n */\nexport function confirmItem(\n row: HTMLElement,\n principalName: string,\n accessTypeLabel: string,\n) {\n expect(within(row).queryByRole('link') ?? row).toHaveTextContent(\n principalName,\n )\n const editorCombobox = within(row).queryByRole('combobox')\n if (editorCombobox) {\n expect(editorCombobox).toHaveTextContent(accessTypeLabel)\n } else {\n within(row).getByText(accessTypeLabel)\n }\n}\n\n/**\n * Remove a particular row from the HTML editor.\n * @param row\n * @param user\n * @param verifyRemoval\n */\nexport async function removeItem(\n row: HTMLElement,\n user: ReturnType<(typeof userEvent)['setup']>,\n verifyRemoval = true,\n) {\n const removeButton = within(row).getByRole('button', {\n name: REMOVE_BUTTON_LABEL,\n })\n await user.click(removeButton)\n if (verifyRemoval) {\n await waitFor(() => {\n expect(removeButton).not.toBeInTheDocument()\n expect(row).not.toBeInTheDocument()\n })\n }\n}\n\n/**\n * Updates the permission level of a particular row in the ACL editor.\n * @param row\n * @param user\n * @param updatedPermissionLevelLabel\n */\nexport async function updatePermissionLevel(\n row: HTMLElement,\n user: ReturnType<(typeof userEvent)['setup']>,\n updatedPermissionLevelLabel: string,\n) {\n const menu = within(row).getByRole('combobox')\n await user.click(menu)\n\n const option = screen.getByRole('option', {\n name: updatedPermissionLevelLabel,\n })\n await user.click(option)\n\n await waitFor(() => {\n expect(option).not.toBeInTheDocument()\n })\n}\n\nexport function queryForAddUserCombobox() {\n return screen.queryByRole('combobox', {\n name: ADD_PRINCIPAL_TO_ACL_COMBOBOX_LABEL,\n })\n}\n\n/**\n * Adds a user to the ACL editor.\n * @param user\n * @param userName\n */\nexport async function addUserToAcl(\n user: ReturnType<(typeof userEvent)['setup']>,\n userName: string,\n) {\n const userInput = queryForAddUserCombobox()!\n expect(userInput).toBeInTheDocument()\n await user.clear(userInput)\n await user.type(userInput, userName)\n\n const option = await screen.findByText(new RegExp(`\\\\(@${userName}\\\\)`))\n await user.click(option)\n\n await waitFor(() => expect(option).not.toBeInTheDocument())\n const rows = screen.getAllByRole('row')\n return rows[rows.length - 1]\n}\n\n/**\n * Adds public / authenticated groups to the ACL editor.\n * @param user\n */\nexport async function addPublicToAcl(\n user: ReturnType<(typeof userEvent)['setup']>,\n) {\n const makePublicButton = screen.getByRole('button', {\n name: ADD_PUBLIC_PRINCIPALS_BUTTON_TEXT,\n })\n await user.click(makePublicButton)\n\n let rows: HTMLElement[] = []\n let publicRow: HTMLElement | undefined = undefined\n let authenticatedUsersRow: HTMLElement | undefined = undefined\n await waitFor(() => {\n rows = screen.getAllByRole('row')\n publicRow = queryForRowWithPrincipalName(rows, PUBLIC_GROUP_DISPLAY_TEXT)\n authenticatedUsersRow = queryForRowWithPrincipalName(\n rows,\n AUTHENTICATED_GROUP_DISPLAY_TEXT,\n )\n expect(publicRow).toBeInTheDocument()\n expect(authenticatedUsersRow).toBeInTheDocument()\n })\n\n return {\n publicRow: rows[rows.length - 2],\n authenticatedUsersRow: rows[rows.length - 1],\n }\n}\n"],"names":["queryForRowWithPrincipalName","rows","principalName","row","within","confirmItemViaQuery","accessTypeLabel","waitFor","e","screen","editorCombobox","confirmItem","removeItem","user","verifyRemoval","removeButton","REMOVE_BUTTON_LABEL","updatePermissionLevel","updatedPermissionLevelLabel","menu","option","queryForAddUserCombobox","ADD_PRINCIPAL_TO_ACL_COMBOBOX_LABEL","addUserToAcl","userName","userInput","addPublicToAcl","makePublicButton","ADD_PUBLIC_PRINCIPALS_BUTTON_TEXT","publicRow","authenticatedUsersRow","PUBLIC_GROUP_DISPLAY_TEXT","AUTHENTICATED_GROUP_DISPLAY_TEXT"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { jsx as o, Fragment as i } from "react/jsx-runtime";
1
+ import { jsx as o, Fragment as r } from "react/jsx-runtime";
2
2
  import "../synapse-client/SynapseClient.js";
3
3
  import "@sage-bionetworks/synapse-client/generated/models/ErrorResponseCode";
4
4
  import "@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse";
@@ -11,7 +11,7 @@ import "@sage-bionetworks/synapse-client/util/synapseClientFetch";
11
11
  import "@tanstack/react-query";
12
12
  import "../utils/PermissionLevelToAccessType.js";
13
13
  import "react";
14
- import { useSynapseContext as s } from "../utils/context/SynapseContext.js";
14
+ import { useSynapseContext as a } from "../utils/context/SynapseContext.js";
15
15
  import "use-deep-compare-effect";
16
16
  import { Tooltip as l, Link as c } from "@mui/material";
17
17
  import "../utils/hooks/useCookiePreferences.js";
@@ -33,24 +33,24 @@ import { useGetEntity as f } from "../synapse-queries/entity/useEntity.js";
33
33
  import y from "./IconSvg/IconSvg.js";
34
34
  import { displayToast as m } from "./ToastMessage/ToastMessage.js";
35
35
  function X(e) {
36
- const { entityId: t, entityVersionNumber: r } = e, { isAuthenticated: n } = s(), { data: p } = f(t, r), { mutate: a } = u({
36
+ const { entityId: t, entityVersionNumber: i } = e, { isAuthenticated: n } = a(), { data: p } = f(t, i), { mutate: d } = u({
37
37
  onSuccess: () => {
38
38
  m(
39
- `${p?.name ?? t} was successfully added to your Download Cart.`,
39
+ `${p?.name ?? t} was successfully added to your Download List.`,
40
40
  "success"
41
41
  );
42
42
  },
43
- onError: (d) => {
43
+ onError: (s) => {
44
44
  m(
45
- `Unable to add the file to your Download Cart. ${d.reason}`,
45
+ `Unable to add the file to your Download List. ${s.reason}`,
46
46
  "danger"
47
47
  );
48
48
  }
49
49
  });
50
- return n ? /* @__PURE__ */ o(i, { children: /* @__PURE__ */ o(
50
+ return n ? /* @__PURE__ */ o(r, { children: /* @__PURE__ */ o(
51
51
  l,
52
52
  {
53
- title: "Add this file to your Download Cart",
53
+ title: "Add this file to your Download List",
54
54
  placement: "right",
55
55
  enterNextDelay: 300,
56
56
  children: /* @__PURE__ */ o(
@@ -58,14 +58,14 @@ function X(e) {
58
58
  {
59
59
  "data-testid": "AddToDownloadListV2",
60
60
  onClick: () => {
61
- a({ entityId: t, entityVersionNumber: r });
61
+ d({ entityId: t, entityVersionNumber: i });
62
62
  },
63
63
  className: "ignoreLink",
64
64
  children: /* @__PURE__ */ o(y, { icon: "addToCart" })
65
65
  }
66
66
  )
67
67
  }
68
- ) }) : /* @__PURE__ */ o(i, {});
68
+ ) }) : /* @__PURE__ */ o(r, {});
69
69
  }
70
70
  export {
71
71
  X as default
@@ -1 +1 @@
1
- {"version":3,"file":"AddToDownloadListV2.js","sources":["../../src/components/AddToDownloadListV2.tsx"],"sourcesContent":["import { useGetEntity } from '@/synapse-queries'\nimport { useAddFileToDownloadList } from '@/synapse-queries/download/useDownloadList'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { Link, Tooltip } from '@mui/material'\nimport IconSvg from './IconSvg/IconSvg'\nimport { displayToast } from './ToastMessage/ToastMessage'\n\nexport type AddToDownloadListV2Props = {\n entityId: string\n entityVersionNumber?: number\n}\n\nfunction AddToDownloadListV2(props: AddToDownloadListV2Props) {\n const { entityId, entityVersionNumber } = props\n const { isAuthenticated } = useSynapseContext()\n\n const { data: entity } = useGetEntity(entityId, entityVersionNumber)\n\n const { mutate: addToDownloadList } = useAddFileToDownloadList({\n onSuccess: () => {\n displayToast(\n `${\n entity?.name ?? entityId\n } was successfully added to your Download Cart.`,\n 'success',\n )\n },\n onError: e => {\n displayToast(\n `Unable to add the file to your Download Cart. ${e.reason}`,\n 'danger',\n )\n },\n })\n\n if (!isAuthenticated) {\n return <></>\n }\n\n return (\n <>\n <Tooltip\n title=\"Add this file to your Download Cart\"\n placement=\"right\"\n enterNextDelay={300}\n >\n <Link\n data-testid=\"AddToDownloadListV2\"\n onClick={() => {\n addToDownloadList({ entityId, entityVersionNumber })\n }}\n className=\"ignoreLink\"\n >\n <IconSvg icon={'addToCart'} />\n </Link>\n </Tooltip>\n </>\n )\n}\n\nexport default AddToDownloadListV2\n"],"names":["AddToDownloadListV2","props","entityId","entityVersionNumber","isAuthenticated","useSynapseContext","entity","useGetEntity","addToDownloadList","useAddFileToDownloadList","displayToast","e","jsx","Fragment","Tooltip","Link","IconSvg"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,SAASA,EAAoBC,GAAiC;AAC5D,QAAM,EAAE,UAAAC,GAAU,qBAAAC,EAAA,IAAwBF,GACpC,EAAE,iBAAAG,EAAA,IAAoBC,EAAA,GAEtB,EAAE,MAAMC,EAAA,IAAWC,EAAaL,GAAUC,CAAmB,GAE7D,EAAE,QAAQK,EAAA,IAAsBC,EAAyB;AAAA,IAC7D,WAAW,MAAM;AACf,MAAAC;AAAA,QACE,GACEJ,GAAQ,QAAQJ,CAClB;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAAA,IACA,SAAS,CAAAS,MAAK;AACZ,MAAAD;AAAA,QACE,iDAAiDC,EAAE,MAAM;AAAA,QACzD;AAAA,MAAA;AAAA,IAEJ;AAAA,EAAA,CACD;AAED,SAAKP,IAKH,gBAAAQ,EAAAC,GAAA,EACE,UAAA,gBAAAD;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,WAAU;AAAA,MACV,gBAAgB;AAAA,MAEhB,UAAA,gBAAAF;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,eAAY;AAAA,UACZ,SAAS,MAAM;AACb,YAAAP,EAAkB,EAAE,UAAAN,GAAU,qBAAAC,GAAqB;AAAA,UACrD;AAAA,UACA,WAAU;AAAA,UAEV,UAAA,gBAAAS,EAACI,GAAA,EAAQ,MAAM,YAAA,CAAa;AAAA,QAAA;AAAA,MAAA;AAAA,IAC9B;AAAA,EAAA,GAEJ,IApBO,gBAAAJ,EAAAC,GAAA,EAAE;AAsBb;"}
1
+ {"version":3,"file":"AddToDownloadListV2.js","sources":["../../src/components/AddToDownloadListV2.tsx"],"sourcesContent":["import { useGetEntity } from '@/synapse-queries'\nimport { useAddFileToDownloadList } from '@/synapse-queries/download/useDownloadList'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { Link, Tooltip } from '@mui/material'\nimport IconSvg from './IconSvg/IconSvg'\nimport { displayToast } from './ToastMessage/ToastMessage'\n\nexport type AddToDownloadListV2Props = {\n entityId: string\n entityVersionNumber?: number\n}\n\nfunction AddToDownloadListV2(props: AddToDownloadListV2Props) {\n const { entityId, entityVersionNumber } = props\n const { isAuthenticated } = useSynapseContext()\n\n const { data: entity } = useGetEntity(entityId, entityVersionNumber)\n\n const { mutate: addToDownloadList } = useAddFileToDownloadList({\n onSuccess: () => {\n displayToast(\n `${\n entity?.name ?? entityId\n } was successfully added to your Download List.`,\n 'success',\n )\n },\n onError: e => {\n displayToast(\n `Unable to add the file to your Download List. ${e.reason}`,\n 'danger',\n )\n },\n })\n\n if (!isAuthenticated) {\n return <></>\n }\n\n return (\n <>\n <Tooltip\n title=\"Add this file to your Download List\"\n placement=\"right\"\n enterNextDelay={300}\n >\n <Link\n data-testid=\"AddToDownloadListV2\"\n onClick={() => {\n addToDownloadList({ entityId, entityVersionNumber })\n }}\n className=\"ignoreLink\"\n >\n <IconSvg icon={'addToCart'} />\n </Link>\n </Tooltip>\n </>\n )\n}\n\nexport default AddToDownloadListV2\n"],"names":["AddToDownloadListV2","props","entityId","entityVersionNumber","isAuthenticated","useSynapseContext","entity","useGetEntity","addToDownloadList","useAddFileToDownloadList","displayToast","e","jsx","Fragment","Tooltip","Link","IconSvg"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,SAASA,EAAoBC,GAAiC;AAC5D,QAAM,EAAE,UAAAC,GAAU,qBAAAC,EAAA,IAAwBF,GACpC,EAAE,iBAAAG,EAAA,IAAoBC,EAAA,GAEtB,EAAE,MAAMC,EAAA,IAAWC,EAAaL,GAAUC,CAAmB,GAE7D,EAAE,QAAQK,EAAA,IAAsBC,EAAyB;AAAA,IAC7D,WAAW,MAAM;AACf,MAAAC;AAAA,QACE,GACEJ,GAAQ,QAAQJ,CAClB;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAAA,IACA,SAAS,CAAAS,MAAK;AACZ,MAAAD;AAAA,QACE,iDAAiDC,EAAE,MAAM;AAAA,QACzD;AAAA,MAAA;AAAA,IAEJ;AAAA,EAAA,CACD;AAED,SAAKP,IAKH,gBAAAQ,EAAAC,GAAA,EACE,UAAA,gBAAAD;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,WAAU;AAAA,MACV,gBAAgB;AAAA,MAEhB,UAAA,gBAAAF;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,eAAY;AAAA,UACZ,SAAS,MAAM;AACb,YAAAP,EAAkB,EAAE,UAAAN,GAAU,qBAAAC,GAAqB;AAAA,UACrD;AAAA,UACA,WAAU;AAAA,UAEV,UAAA,gBAAAS,EAACI,GAAA,EAAQ,MAAM,YAAA,CAAa;AAAA,QAAA;AAAA,MAAA;AAAA,IAC9B;AAAA,EAAA,GAEJ,IApBO,gBAAAJ,EAAAC,GAAA,EAAE;AAsBb;"}
@@ -1,4 +1,4 @@
1
- import { jsxs as s, jsx as t, Fragment as d } from "react/jsx-runtime";
1
+ import { jsxs as s, Fragment as d, jsx as t } from "react/jsx-runtime";
2
2
  import * as a from "../../synapse-client/SynapseClient.js";
3
3
  import "@sage-bionetworks/synapse-client/generated/models/ErrorResponseCode";
4
4
  import "@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse";
@@ -1 +1 @@
1
- {"version":3,"file":"TwoFactorEnrollmentForm.d.ts","sourceRoot":"","sources":["../../../src/components/Authentication/TwoFactorEnrollmentForm.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAS5D;;;;GAIG;AACH,iBAAS,YAAY,CAAC,MAAM,EAAE,UAAU,UAEvC;AA6BD,eAAO,MAAM,oBAAoB,+HAC6F,CAAA;AAE9H,MAAM,MAAM,4BAA4B,GAAG;IACzC,UAAU,EAAE,UAAU,CAAA;IACtB,4BAA4B,EAAE,MAAM,IAAI,CAAA;IACxC,aAAa,EAAE,MAAM,IAAI,CAAA;CAC1B,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,KAAK,EAAE,4BAA4B,2CA6NpC;AAED,eAAO,MAAM,yBAAyB;;CAAmB,CAAA"}
1
+ {"version":3,"file":"TwoFactorEnrollmentForm.d.ts","sourceRoot":"","sources":["../../../src/components/Authentication/TwoFactorEnrollmentForm.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAW5D;;;;GAIG;AACH,iBAAS,YAAY,CAAC,MAAM,EAAE,UAAU,UAEvC;AA6BD,eAAO,MAAM,oBAAoB,+HAC6F,CAAA;AAE9H,MAAM,MAAM,4BAA4B,GAAG;IACzC,UAAU,EAAE,UAAU,CAAA;IACtB,4BAA4B,EAAE,MAAM,IAAI,CAAA;IACxC,aAAa,EAAE,MAAM,IAAI,CAAA;CAC1B,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,KAAK,EAAE,4BAA4B,2CA6NpC;AAED,eAAO,MAAM,yBAAyB;;CAAmB,CAAA"}
@@ -2,13 +2,14 @@ import { jsx as t, jsxs as o } from "react/jsx-runtime";
2
2
  import { StyledOuterContainer as I } from "../styled/LeftRightPanel.js";
3
3
  import { useFinishTwoFactorEnrollment as k } from "../../synapse-queries/auth/useTwoFactorEnrollment.js";
4
4
  import { styled as S, Box as s, Paper as E, IconButton as O, Typography as i, Link as a, Stack as y, Divider as x, Button as D } from "@mui/material";
5
- import { toCanvas as G } from "qrcode";
5
+ import * as G from "qrcode";
6
6
  import { useState as p, useRef as R, useEffect as B } from "react";
7
7
  import W from "../FullWidthAlert/FullWidthAlert.js";
8
8
  import _ from "../IconSvg/IconSvg.js";
9
9
  import { SynapseSpinner as M } from "../LoadingScreen/LoadingScreen.js";
10
10
  import Q from "../TextField/TextField.js";
11
11
  import $ from "./TwoFactorSecretDialog.js";
12
+ const { toCanvas: j } = G;
12
13
  function v(e) {
13
14
  return `otpauth://totp/Synapse:${e.username}?secret=${e.secret}&issuer=Sage%20Bionetworks&algorithm=${e.alg}&digits=${e.digits}&period=${e.period}`;
14
15
  }
@@ -36,7 +37,7 @@ const c = S(
36
37
  gap: "18px"
37
38
  }
38
39
  })
39
- ), j = "https://help.synapse.org/docs/Managing-Your-Account.2055405596.html#Adding-Two-Factor-Authentication-(2FA)-to-your-account";
40
+ ), L = "https://help.synapse.org/docs/Managing-Your-Account.2055405596.html#Adding-Two-Factor-Authentication-(2FA)-to-your-account";
40
41
  function J(e) {
41
42
  const { onTwoFactorEnrollmentSuccess: b, onBackClicked: u, totpSecret: r } = e, [l, w] = p(""), [m, C] = p(!1), [A, f] = p(!1), d = R(null), {
42
43
  mutate: F,
@@ -47,7 +48,7 @@ function J(e) {
47
48
  });
48
49
  return B(() => {
49
50
  async function n() {
50
- r && d.current && (await G(d.current, v(r), {
51
+ r && d.current && (await j(d.current, v(r), {
51
52
  version: 10,
52
53
  margin: 0,
53
54
  scale: 3.5
@@ -95,7 +96,7 @@ function J(e) {
95
96
  " or ORCiD account, you may need to use 2FA as part of",
96
97
  "that process as well.",
97
98
  " ",
98
- /* @__PURE__ */ t(a, { href: j, children: "Learn more about 2FA" }),
99
+ /* @__PURE__ */ t(a, { href: L, children: "Learn more about 2FA" }),
99
100
  "."
100
101
  ] })
101
102
  ] }),
@@ -251,7 +252,7 @@ function J(e) {
251
252
  const Z = { toOtpAuthUrl: v };
252
253
  export {
253
254
  Z as EXPORTED_FOR_UNIT_TESTING,
254
- j as TWO_FACTOR_DOCS_LINK,
255
+ L as TWO_FACTOR_DOCS_LINK,
255
256
  J as default
256
257
  };
257
258
  //# sourceMappingURL=TwoFactorEnrollmentForm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TwoFactorEnrollmentForm.js","sources":["../../../src/components/Authentication/TwoFactorEnrollmentForm.tsx"],"sourcesContent":["import { StyledOuterContainer } from '@/components/styled/LeftRightPanel'\nimport { useFinishTwoFactorEnrollment } from '@/synapse-queries/auth/useTwoFactorEnrollment'\nimport { StyledComponent } from '@emotion/styled'\nimport {\n Box,\n BoxProps,\n Button,\n Divider,\n IconButton,\n Link,\n Paper,\n Stack,\n styled,\n Typography,\n} from '@mui/material'\nimport { TotpSecret } from '@sage-bionetworks/synapse-types'\nimport { toCanvas } from 'qrcode'\nimport { useEffect, useRef, useState } from 'react'\nimport FullWidthAlert from '../FullWidthAlert/FullWidthAlert'\nimport IconSvg from '../IconSvg/IconSvg'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport TextField from '../TextField/TextField'\nimport TwoFactorSecretDialog from './TwoFactorSecretDialog'\n\n/**\n * Returns a URL that can be used to generate a QR code that 2FA authenticator apps can interpret.\n * This uses the username fro TotpSecret to create the friendly name for the account in the authenticator app.\n * @param secret\n */\nfunction toOtpAuthUrl(secret: TotpSecret) {\n return `otpauth://totp/Synapse:${secret.username}?secret=${secret.secret}&issuer=Sage%20Bionetworks&algorithm=${secret.alg}&digits=${secret.digits}&period=${secret.period}`\n}\n\nconst Section: StyledComponent<BoxProps> = styled(\n (props: BoxProps) => (\n <Box\n sx={{\n my: 3,\n ...props.sx,\n }}\n {...props}\n />\n ),\n {\n label: 'Section',\n },\n)(() => ({}))\n\nconst SectionInnerGrid = styled(Box, { label: 'SectionInnerGrid' })(\n ({ theme }) => ({\n display: 'grid',\n gridTemplateColumns: 'auto 200px',\n columnGap: theme.spacing(5),\n [theme.breakpoints.down('sm')]: {\n gridTemplateColumns: '1fr',\n gap: '18px',\n },\n }),\n)\n\nexport const TWO_FACTOR_DOCS_LINK =\n 'https://help.synapse.org/docs/Managing-Your-Account.2055405596.html#Adding-Two-Factor-Authentication-(2FA)-to-your-account'\n\nexport type TwoFactorEnrollmentFormProps = {\n totpSecret: TotpSecret\n onTwoFactorEnrollmentSuccess: () => void\n onBackClicked: () => void\n}\n\nexport default function TwoFactorEnrollmentForm(\n props: TwoFactorEnrollmentFormProps,\n) {\n const { onTwoFactorEnrollmentSuccess, onBackClicked, totpSecret } = props\n\n const [totp, setTotp] = useState('')\n const [hasQrCode, setHasQrCode] = useState(false)\n const [showSecretInModal, setShowSecretInModal] = useState(false)\n const qrCodeCanvasElement = useRef<HTMLCanvasElement>(null)\n\n const {\n mutate: finishEnrollment,\n isPending: isFinishingEnrollment,\n error,\n } = useFinishTwoFactorEnrollment({\n onSuccess: onTwoFactorEnrollmentSuccess,\n })\n\n useEffect(() => {\n async function createQrCode() {\n if (totpSecret && qrCodeCanvasElement.current) {\n await toCanvas(qrCodeCanvasElement.current, toOtpAuthUrl(totpSecret), {\n version: 10,\n margin: 0,\n scale: 3.5,\n })\n setHasQrCode(true)\n }\n }\n void createQrCode()\n }, [totpSecret])\n\n return (\n <StyledOuterContainer>\n <Paper\n sx={{\n position: 'relative',\n width: { xs: '100%', md: '800px' },\n py: 6.5,\n px: 8,\n mx: 'auto',\n }}\n >\n {onBackClicked && (\n <IconButton\n type=\"button\"\n onClick={() => {\n onBackClicked()\n }}\n sx={theme => ({\n position: 'absolute',\n top: theme.spacing(2),\n left: theme.spacing(2),\n })}\n >\n <IconSvg\n icon=\"arrowBack\"\n wrap={false}\n sx={{ height: '24px', width: '24px' }}\n />\n </IconButton>\n )}\n <Section>\n <Typography variant=\"headline2\" sx={{ mb: 3 }}>\n Activate Two-factor Authentication\n </Typography>\n <Typography variant=\"body1\">\n After setting up 2FA, you’ll use an authenticator app as part of\n your login process, in addition to your existing password. If you\n log in using your Google\n {/* eslint-disable-next-line no-constant-binary-expression -- Remove conditionality when NIH RAS login is supported */}\n {false && ', NIH RAS,'} or ORCiD account, you may need to use 2FA as\n part of\n {/*those processes*/}\n that process as well.{' '}\n <Link href={TWO_FACTOR_DOCS_LINK}>Learn more about 2FA</Link>.\n </Typography>\n </Section>\n <Section>\n <SectionInnerGrid>\n <Box>\n <Typography variant=\"body1\" sx={{ fontWeight: 700 }}>\n Step 1. Get one of these apps\n </Typography>\n <Typography variant=\"body1\">\n Download and install one of these authentication apps to set up\n 2FA on your mobile device, tablet, or desktop. If you have one\n of these apps already installed, you can skip this step.\n </Typography>\n </Box>\n <Stack\n sx={theme => ({\n justifyContent: 'space-between',\n flexShrink: 0,\n [theme.breakpoints.down('sm')]: {\n gap: '20px',\n },\n })}\n >\n <Link href={'https://authy.com/download/'}>Authy</Link>\n <Link\n href={\n 'https://duo.com/product/multi-factor-authentication-mfa/duo-mobile-app'\n }\n >\n DUO Mobile\n </Link>\n <Link href={'https://googleauthenticator.net/'}>\n Google Authenticator\n </Link>\n <Link\n href={\n 'https://www.microsoft.com/en-us/security/mobile-authenticator-app'\n }\n >\n Microsoft Authenticator\n </Link>\n </Stack>\n </SectionInnerGrid>\n </Section>\n <Divider />\n <Section>\n <SectionInnerGrid>\n <Box>\n <Typography variant=\"body1\" sx={{ fontWeight: 700 }}>\n Step 2. Scan the QR Code\n </Typography>\n <Typography component=\"ol\" variant=\"body1\" sx={{ pl: 2, my: 1 }}>\n <li>Open your authenticator app</li>\n <li>Tap the &quot;+&quot; button</li>\n <li>Use your camera to scan the image to the right</li>\n </Typography>\n <Link\n onClick={() => {\n setShowSecretInModal(true)\n }}\n >\n Can&apos;t use your camera?\n </Link>\n <TwoFactorSecretDialog\n secret={totpSecret?.secret ?? ''}\n open={showSecretInModal}\n onClose={() => setShowSecretInModal(false)}\n />\n </Box>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'middle',\n height: 'auto',\n }}\n >\n {!hasQrCode && <SynapseSpinner size={50} />}\n <canvas\n style={{ display: hasQrCode ? undefined : 'none' }}\n ref={qrCodeCanvasElement}\n />\n </Box>\n </SectionInnerGrid>\n </Section>\n <Divider />\n <Section>\n <SectionInnerGrid>\n <Box>\n <Typography variant=\"body1\" sx={{ fontWeight: 700 }}>\n Step 3. Enter the Verification Code\n </Typography>\n <Typography variant=\"body1\">\n After scanning in the QR code in step 2, your app will provide a\n 6-digit code. Enter it in in the field to the right.\n </Typography>\n </Box>\n <form\n onSubmit={e => {\n e.preventDefault()\n finishEnrollment({\n secretId: totpSecret.secretId,\n totp,\n })\n }}\n >\n <Stack\n direction={'row'}\n sx={{\n gap: 2,\n height: '48px',\n }}\n >\n <TextField\n noWrapInFormControl\n autoFocus\n inputProps={{ maxLength: totpSecret?.digits }}\n value={totp}\n onChange={e => {\n setTotp(e.target.value)\n }}\n />\n <Button\n type={'submit'}\n variant={'contained'}\n sx={{ flexShrink: 0 }}\n disabled={\n isFinishingEnrollment || totp.length != totpSecret?.digits\n }\n >\n Activate\n </Button>\n </Stack>\n </form>\n </SectionInnerGrid>\n </Section>\n {error && (\n <FullWidthAlert\n variant={'danger'}\n isGlobal={false}\n description={error.reason}\n />\n )}\n </Paper>\n </StyledOuterContainer>\n )\n}\n\nexport const EXPORTED_FOR_UNIT_TESTING = { toOtpAuthUrl }\n"],"names":["toOtpAuthUrl","secret","Section","styled","props","jsx","Box","SectionInnerGrid","theme","TWO_FACTOR_DOCS_LINK","TwoFactorEnrollmentForm","onTwoFactorEnrollmentSuccess","onBackClicked","totpSecret","totp","setTotp","useState","hasQrCode","setHasQrCode","showSecretInModal","setShowSecretInModal","qrCodeCanvasElement","useRef","finishEnrollment","isFinishingEnrollment","error","useFinishTwoFactorEnrollment","useEffect","createQrCode","toCanvas","StyledOuterContainer","jsxs","Paper","IconButton","IconSvg","Typography","Link","Stack","Divider","TwoFactorSecretDialog","SynapseSpinner","e","TextField","Button","FullWidthAlert","EXPORTED_FOR_UNIT_TESTING"],"mappings":"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"}
1
+ {"version":3,"file":"TwoFactorEnrollmentForm.js","sources":["../../../src/components/Authentication/TwoFactorEnrollmentForm.tsx"],"sourcesContent":["import { StyledOuterContainer } from '@/components/styled/LeftRightPanel'\nimport { useFinishTwoFactorEnrollment } from '@/synapse-queries/auth/useTwoFactorEnrollment'\nimport { StyledComponent } from '@emotion/styled'\nimport {\n Box,\n BoxProps,\n Button,\n Divider,\n IconButton,\n Link,\n Paper,\n Stack,\n styled,\n Typography,\n} from '@mui/material'\nimport { TotpSecret } from '@sage-bionetworks/synapse-types'\nimport * as qrcode from 'qrcode'\n// qrcode is CJS-only; use namespace import for Vite dev mode CJS interop.\nconst { toCanvas } = qrcode\nimport { useEffect, useRef, useState } from 'react'\nimport FullWidthAlert from '../FullWidthAlert/FullWidthAlert'\nimport IconSvg from '../IconSvg/IconSvg'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport TextField from '../TextField/TextField'\nimport TwoFactorSecretDialog from './TwoFactorSecretDialog'\n\n/**\n * Returns a URL that can be used to generate a QR code that 2FA authenticator apps can interpret.\n * This uses the username fro TotpSecret to create the friendly name for the account in the authenticator app.\n * @param secret\n */\nfunction toOtpAuthUrl(secret: TotpSecret) {\n return `otpauth://totp/Synapse:${secret.username}?secret=${secret.secret}&issuer=Sage%20Bionetworks&algorithm=${secret.alg}&digits=${secret.digits}&period=${secret.period}`\n}\n\nconst Section: StyledComponent<BoxProps> = styled(\n (props: BoxProps) => (\n <Box\n sx={{\n my: 3,\n ...props.sx,\n }}\n {...props}\n />\n ),\n {\n label: 'Section',\n },\n)(() => ({}))\n\nconst SectionInnerGrid = styled(Box, { label: 'SectionInnerGrid' })(\n ({ theme }) => ({\n display: 'grid',\n gridTemplateColumns: 'auto 200px',\n columnGap: theme.spacing(5),\n [theme.breakpoints.down('sm')]: {\n gridTemplateColumns: '1fr',\n gap: '18px',\n },\n }),\n)\n\nexport const TWO_FACTOR_DOCS_LINK =\n 'https://help.synapse.org/docs/Managing-Your-Account.2055405596.html#Adding-Two-Factor-Authentication-(2FA)-to-your-account'\n\nexport type TwoFactorEnrollmentFormProps = {\n totpSecret: TotpSecret\n onTwoFactorEnrollmentSuccess: () => void\n onBackClicked: () => void\n}\n\nexport default function TwoFactorEnrollmentForm(\n props: TwoFactorEnrollmentFormProps,\n) {\n const { onTwoFactorEnrollmentSuccess, onBackClicked, totpSecret } = props\n\n const [totp, setTotp] = useState('')\n const [hasQrCode, setHasQrCode] = useState(false)\n const [showSecretInModal, setShowSecretInModal] = useState(false)\n const qrCodeCanvasElement = useRef<HTMLCanvasElement>(null)\n\n const {\n mutate: finishEnrollment,\n isPending: isFinishingEnrollment,\n error,\n } = useFinishTwoFactorEnrollment({\n onSuccess: onTwoFactorEnrollmentSuccess,\n })\n\n useEffect(() => {\n async function createQrCode() {\n if (totpSecret && qrCodeCanvasElement.current) {\n await toCanvas(qrCodeCanvasElement.current, toOtpAuthUrl(totpSecret), {\n version: 10,\n margin: 0,\n scale: 3.5,\n })\n setHasQrCode(true)\n }\n }\n void createQrCode()\n }, [totpSecret])\n\n return (\n <StyledOuterContainer>\n <Paper\n sx={{\n position: 'relative',\n width: { xs: '100%', md: '800px' },\n py: 6.5,\n px: 8,\n mx: 'auto',\n }}\n >\n {onBackClicked && (\n <IconButton\n type=\"button\"\n onClick={() => {\n onBackClicked()\n }}\n sx={theme => ({\n position: 'absolute',\n top: theme.spacing(2),\n left: theme.spacing(2),\n })}\n >\n <IconSvg\n icon=\"arrowBack\"\n wrap={false}\n sx={{ height: '24px', width: '24px' }}\n />\n </IconButton>\n )}\n <Section>\n <Typography variant=\"headline2\" sx={{ mb: 3 }}>\n Activate Two-factor Authentication\n </Typography>\n <Typography variant=\"body1\">\n After setting up 2FA, you’ll use an authenticator app as part of\n your login process, in addition to your existing password. If you\n log in using your Google\n {/* eslint-disable-next-line no-constant-binary-expression -- Remove conditionality when NIH RAS login is supported */}\n {false && ', NIH RAS,'} or ORCiD account, you may need to use 2FA as\n part of\n {/*those processes*/}\n that process as well.{' '}\n <Link href={TWO_FACTOR_DOCS_LINK}>Learn more about 2FA</Link>.\n </Typography>\n </Section>\n <Section>\n <SectionInnerGrid>\n <Box>\n <Typography variant=\"body1\" sx={{ fontWeight: 700 }}>\n Step 1. Get one of these apps\n </Typography>\n <Typography variant=\"body1\">\n Download and install one of these authentication apps to set up\n 2FA on your mobile device, tablet, or desktop. If you have one\n of these apps already installed, you can skip this step.\n </Typography>\n </Box>\n <Stack\n sx={theme => ({\n justifyContent: 'space-between',\n flexShrink: 0,\n [theme.breakpoints.down('sm')]: {\n gap: '20px',\n },\n })}\n >\n <Link href={'https://authy.com/download/'}>Authy</Link>\n <Link\n href={\n 'https://duo.com/product/multi-factor-authentication-mfa/duo-mobile-app'\n }\n >\n DUO Mobile\n </Link>\n <Link href={'https://googleauthenticator.net/'}>\n Google Authenticator\n </Link>\n <Link\n href={\n 'https://www.microsoft.com/en-us/security/mobile-authenticator-app'\n }\n >\n Microsoft Authenticator\n </Link>\n </Stack>\n </SectionInnerGrid>\n </Section>\n <Divider />\n <Section>\n <SectionInnerGrid>\n <Box>\n <Typography variant=\"body1\" sx={{ fontWeight: 700 }}>\n Step 2. Scan the QR Code\n </Typography>\n <Typography component=\"ol\" variant=\"body1\" sx={{ pl: 2, my: 1 }}>\n <li>Open your authenticator app</li>\n <li>Tap the &quot;+&quot; button</li>\n <li>Use your camera to scan the image to the right</li>\n </Typography>\n <Link\n onClick={() => {\n setShowSecretInModal(true)\n }}\n >\n Can&apos;t use your camera?\n </Link>\n <TwoFactorSecretDialog\n secret={totpSecret?.secret ?? ''}\n open={showSecretInModal}\n onClose={() => setShowSecretInModal(false)}\n />\n </Box>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'middle',\n height: 'auto',\n }}\n >\n {!hasQrCode && <SynapseSpinner size={50} />}\n <canvas\n style={{ display: hasQrCode ? undefined : 'none' }}\n ref={qrCodeCanvasElement}\n />\n </Box>\n </SectionInnerGrid>\n </Section>\n <Divider />\n <Section>\n <SectionInnerGrid>\n <Box>\n <Typography variant=\"body1\" sx={{ fontWeight: 700 }}>\n Step 3. Enter the Verification Code\n </Typography>\n <Typography variant=\"body1\">\n After scanning in the QR code in step 2, your app will provide a\n 6-digit code. Enter it in in the field to the right.\n </Typography>\n </Box>\n <form\n onSubmit={e => {\n e.preventDefault()\n finishEnrollment({\n secretId: totpSecret.secretId,\n totp,\n })\n }}\n >\n <Stack\n direction={'row'}\n sx={{\n gap: 2,\n height: '48px',\n }}\n >\n <TextField\n noWrapInFormControl\n autoFocus\n inputProps={{ maxLength: totpSecret?.digits }}\n value={totp}\n onChange={e => {\n setTotp(e.target.value)\n }}\n />\n <Button\n type={'submit'}\n variant={'contained'}\n sx={{ flexShrink: 0 }}\n disabled={\n isFinishingEnrollment || totp.length != totpSecret?.digits\n }\n >\n Activate\n </Button>\n </Stack>\n </form>\n </SectionInnerGrid>\n </Section>\n {error && (\n <FullWidthAlert\n variant={'danger'}\n isGlobal={false}\n description={error.reason}\n />\n )}\n </Paper>\n </StyledOuterContainer>\n )\n}\n\nexport const EXPORTED_FOR_UNIT_TESTING = { toOtpAuthUrl }\n"],"names":["toCanvas","qrcode","toOtpAuthUrl","secret","Section","styled","props","jsx","Box","SectionInnerGrid","theme","TWO_FACTOR_DOCS_LINK","TwoFactorEnrollmentForm","onTwoFactorEnrollmentSuccess","onBackClicked","totpSecret","totp","setTotp","useState","hasQrCode","setHasQrCode","showSecretInModal","setShowSecretInModal","qrCodeCanvasElement","useRef","finishEnrollment","isFinishingEnrollment","error","useFinishTwoFactorEnrollment","useEffect","createQrCode","StyledOuterContainer","jsxs","Paper","IconButton","IconSvg","Typography","Link","Stack","Divider","TwoFactorSecretDialog","SynapseSpinner","e","TextField","Button","FullWidthAlert","EXPORTED_FOR_UNIT_TESTING"],"mappings":"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"}
@@ -1 +1 @@
1
- ._BasePortalCard__root_tra5b_1.MuiCard-root{position:relative}._BasePortalCard__contentBelow_tra5b_5{margin-top:15px}._BasePortalCard__content_tra5b_5.MuiCardContent-root:last-child{padding:0}._BasePortalCard__media_tra5b_13.MuiCardMedia-root{height:50%}@media(min-width:768px){._BasePortalCard__media_tra5b_13.MuiCardMedia-root{height:60%}}._small_tra5b_22{width:100%;height:250px;min-height:150px}@media(min-width:768px){._small_tra5b_22{width:250px}}._medium_tra5b_33{width:100%;height:400px;min-height:200px}@media(min-width:768px){._medium_tra5b_33{width:400px}}._large_tra5b_44{width:100%;height:500px;min-height:300px}@media(min-width:768px){._large_tra5b_44{width:600px}}
1
+ ._BasePortalCard__root_1hm6w_1.MuiCard-root{position:relative;display:flex;flex-direction:column}._BasePortalCard__contentBelow_1hm6w_7{margin-top:15px}._BasePortalCard__content_1hm6w_7.MuiCardContent-root:last-child{padding:0;flex:1;display:flex;flex-direction:column}._BasePortalCard__media_1hm6w_18{height:50%;flex-shrink:0;overflow:hidden;border-bottom:1px solid rgba(0,0,0,.05)}@media(min-width:768px){._BasePortalCard__media_1hm6w_18{height:60%}}._BasePortalCard__media_1hm6w_18 .MuiCardMedia-root{height:100%}._small_1hm6w_33{width:100%;height:250px;min-height:150px}@media(min-width:768px){._small_1hm6w_33{width:250px}}._medium_1hm6w_44{width:100%;height:400px;min-height:200px}@media(min-width:768px){._medium_1hm6w_44{width:400px}}._large_1hm6w_55{width:100%;height:500px;min-height:300px}@media(min-width:768px){._large_1hm6w_55{width:600px}}
@@ -1,5 +1,4 @@
1
- import React from 'react';
2
- import { ReactNode } from 'react';
1
+ import React, { ReactNode } from 'react';
3
2
  type BasePortalCardProps = {
4
3
  children?: ReactNode;
5
4
  contentBelowCard?: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"BasePortalCard.d.ts","sourceRoot":"","sources":["../../../src/components/BasePortalCard/BasePortalCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGjC,KAAK,mBAAmB,GAAG;IACzB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,gBAAgB,CAAC,EAAE,SAAS,CAAA;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;IACvC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,QAAA,MAAM,cAAc,GAAI,mHASrB,mBAAmB,KAAG,KAAK,CAAC,SAyB9B,CAAA;AAED,eAAe,cAAc,CAAA"}
1
+ {"version":3,"file":"BasePortalCard.d.ts","sourceRoot":"","sources":["../../../src/components/BasePortalCard/BasePortalCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGxC,KAAK,mBAAmB,GAAG;IACzB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,gBAAgB,CAAC,EAAE,SAAS,CAAA;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;IACvC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,QAAA,MAAM,cAAc,GAAI,mHASrB,mBAAmB,KAAG,KAAK,CAAC,SAyB9B,CAAA;AAED,eAAe,cAAc,CAAA"}
@@ -1,42 +1,35 @@
1
- import { jsxs as o, jsx as r } from "react/jsx-runtime";
2
- import n from "@mui/material/Box";
3
- import a from "./BasePortalCard.module.scss.js";
1
+ import { jsxs as s, jsx as r } from "react/jsx-runtime";
4
2
  import { Stack as C, Card as _, CardMedia as p, CardContent as B } from "@mui/material";
5
- const h = ({
6
- borderRadiusPx: s,
7
- boxShadow: t,
8
- children: m,
3
+ import t from "@mui/material/Box";
4
+ import a from "./BasePortalCard.module.scss.js";
5
+ const N = ({
6
+ borderRadiusPx: m,
7
+ boxShadow: d,
8
+ children: l,
9
9
  contentBelowCard: e,
10
- cardSize: d = "medium",
11
- className: l,
12
- backgroundImage: i,
13
- backgroundColor: c
14
- }) => /* @__PURE__ */ o(C, { children: [
15
- /* @__PURE__ */ o(
10
+ cardSize: i = "medium",
11
+ className: c,
12
+ backgroundImage: o,
13
+ backgroundColor: n
14
+ }) => /* @__PURE__ */ s(C, { children: [
15
+ /* @__PURE__ */ s(
16
16
  _,
17
17
  {
18
- className: `${l} ${a.BasePortalCard__root} ${a[d]}`,
18
+ className: `${c} ${a.BasePortalCard__root} ${a[i]}`,
19
19
  sx: {
20
- backgroundColor: c,
21
- borderRadius: s,
22
- boxShadow: t
20
+ backgroundColor: n,
21
+ borderRadius: m,
22
+ boxShadow: d
23
23
  },
24
24
  children: [
25
- /* @__PURE__ */ r(
26
- p,
27
- {
28
- image: i,
29
- component: "img",
30
- className: a.BasePortalCard__media
31
- }
32
- ),
33
- /* @__PURE__ */ r(B, { className: a.BasePortalCard__content, children: m })
25
+ /* @__PURE__ */ r(t, { className: a.BasePortalCard__media, children: o && /* @__PURE__ */ r(p, { image: o, component: "img" }) }),
26
+ /* @__PURE__ */ r(B, { className: a.BasePortalCard__content, children: l })
34
27
  ]
35
28
  }
36
29
  ),
37
- e && /* @__PURE__ */ r(n, { className: a.BasePortalCard__contentBelow, children: e })
30
+ e && /* @__PURE__ */ r(t, { className: a.BasePortalCard__contentBelow, children: e })
38
31
  ] });
39
32
  export {
40
- h as default
33
+ N as default
41
34
  };
42
35
  //# sourceMappingURL=BasePortalCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BasePortalCard.js","sources":["../../../src/components/BasePortalCard/BasePortalCard.tsx"],"sourcesContent":["import React from 'react'\nimport Box from '@mui/material/Box'\nimport styles from './BasePortalCard.module.scss'\nimport { ReactNode } from 'react'\nimport { Card, CardContent, CardMedia, Stack } from '@mui/material'\n\ntype BasePortalCardProps = {\n children?: ReactNode\n contentBelowCard?: ReactNode\n borderRadiusPx?: number\n boxShadow?: string\n cardSize?: 'small' | 'medium' | 'large'\n backgroundImage?: string\n backgroundColor?: string\n className?: string\n}\n\nconst BasePortalCard = ({\n borderRadiusPx,\n boxShadow,\n children,\n contentBelowCard,\n cardSize = 'medium',\n className,\n backgroundImage,\n backgroundColor,\n}: BasePortalCardProps): React.ReactNode => (\n <Stack>\n <Card\n className={`${className} ${styles.BasePortalCard__root} ${styles[cardSize]}`}\n sx={{\n backgroundColor: backgroundColor,\n borderRadius: borderRadiusPx,\n boxShadow: boxShadow,\n }}\n >\n <CardMedia\n image={backgroundImage}\n component=\"img\"\n className={styles.BasePortalCard__media}\n />\n <CardContent className={styles.BasePortalCard__content}>\n {children}\n </CardContent>\n </Card>\n {contentBelowCard && (\n <Box className={styles.BasePortalCard__contentBelow}>\n {contentBelowCard}\n </Box>\n )}\n </Stack>\n)\n\nexport default BasePortalCard\n"],"names":["BasePortalCard","borderRadiusPx","boxShadow","children","contentBelowCard","cardSize","className","backgroundImage","backgroundColor","Stack","jsxs","Card","styles","jsx","CardMedia","CardContent","Box"],"mappings":";;;;AAiBA,MAAMA,IAAiB,CAAC;AAAA,EACtB,gBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,iBAAAC;AACF,wBACGC,GAAA,EACC,UAAA;AAAA,EAAA,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAW,GAAGL,CAAS,IAAIM,EAAO,oBAAoB,IAAIA,EAAOP,CAAQ,CAAC;AAAA,MAC1E,IAAI;AAAA,QACF,iBAAAG;AAAA,QACA,cAAcP;AAAA,QACd,WAAAC;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAA,gBAAAW;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,OAAOP;AAAA,YACP,WAAU;AAAA,YACV,WAAWK,EAAO;AAAA,UAAA;AAAA,QAAA;AAAA,QAEpB,gBAAAC,EAACE,GAAA,EAAY,WAAWH,EAAO,yBAC5B,UAAAT,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAAA,EAEDC,KACC,gBAAAS,EAACG,GAAA,EAAI,WAAWJ,EAAO,8BACpB,UAAAR,EAAA,CACH;AAAA,EAAA,CAEJ;"}
1
+ {"version":3,"file":"BasePortalCard.js","sources":["../../../src/components/BasePortalCard/BasePortalCard.tsx"],"sourcesContent":["import { Card, CardContent, CardMedia, Stack } from '@mui/material'\nimport Box from '@mui/material/Box'\nimport React, { ReactNode } from 'react'\nimport styles from './BasePortalCard.module.scss'\n\ntype BasePortalCardProps = {\n children?: ReactNode\n contentBelowCard?: ReactNode\n borderRadiusPx?: number\n boxShadow?: string\n cardSize?: 'small' | 'medium' | 'large'\n backgroundImage?: string\n backgroundColor?: string\n className?: string\n}\n\nconst BasePortalCard = ({\n borderRadiusPx,\n boxShadow,\n children,\n contentBelowCard,\n cardSize = 'medium',\n className,\n backgroundImage,\n backgroundColor,\n}: BasePortalCardProps): React.ReactNode => (\n <Stack>\n <Card\n className={`${className} ${styles.BasePortalCard__root} ${styles[cardSize]}`}\n sx={{\n backgroundColor: backgroundColor,\n borderRadius: borderRadiusPx,\n boxShadow: boxShadow,\n }}\n >\n <Box className={styles.BasePortalCard__media}>\n {backgroundImage && (\n <CardMedia image={backgroundImage} component=\"img\" />\n )}\n </Box>\n <CardContent className={styles.BasePortalCard__content}>\n {children}\n </CardContent>\n </Card>\n {contentBelowCard && (\n <Box className={styles.BasePortalCard__contentBelow}>\n {contentBelowCard}\n </Box>\n )}\n </Stack>\n)\n\nexport default BasePortalCard\n"],"names":["BasePortalCard","borderRadiusPx","boxShadow","children","contentBelowCard","cardSize","className","backgroundImage","backgroundColor","Stack","jsxs","Card","styles","jsx","Box","CardMedia","CardContent"],"mappings":";;;;AAgBA,MAAMA,IAAiB,CAAC;AAAA,EACtB,gBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,iBAAAC;AACF,wBACGC,GAAA,EACC,UAAA;AAAA,EAAA,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAW,GAAGL,CAAS,IAAIM,EAAO,oBAAoB,IAAIA,EAAOP,CAAQ,CAAC;AAAA,MAC1E,IAAI;AAAA,QACF,iBAAAG;AAAA,QACA,cAAcP;AAAA,QACd,WAAAC;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAA,gBAAAW,EAACC,GAAA,EAAI,WAAWF,EAAO,uBACpB,UAAAL,KACC,gBAAAM,EAACE,GAAA,EAAU,OAAOR,GAAiB,WAAU,MAAA,CAAM,GAEvD;AAAA,QACA,gBAAAM,EAACG,GAAA,EAAY,WAAWJ,EAAO,yBAC5B,UAAAT,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAAA,EAEDC,KACC,gBAAAS,EAACC,GAAA,EAAI,WAAWF,EAAO,8BACpB,UAAAR,EAAA,CACH;AAAA,EAAA,CAEJ;"}