synapse-react-client 4.0.18 → 4.0.20

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 (1609) hide show
  1. package/dist/SWC.index.d.ts +3 -1
  2. package/dist/SWC.index.d.ts.map +1 -1
  3. package/dist/SWC.index.js +3 -1
  4. package/dist/SWC.index.js.map +1 -1
  5. package/dist/aridhia-queries/aridhiaTokenExchange.js.map +1 -1
  6. package/dist/aridhia-queries/useGetAridhiaRequests.js.map +1 -1
  7. package/dist/assets/DefaultColorfulPortalCardBackground.js.map +1 -1
  8. package/dist/assets/GoogleIcon.js.map +1 -1
  9. package/dist/assets/GoogleIcon24.js.map +1 -1
  10. package/dist/assets/homepage/BlinkingLiveIcon.d.ts +1 -1
  11. package/dist/assets/homepage/BlinkingLiveIcon.js.map +1 -1
  12. package/dist/assets/homepage/aacr.js.map +1 -1
  13. package/dist/assets/homepage/cri.js.map +1 -1
  14. package/dist/assets/homepage/ctf.js.map +1 -1
  15. package/dist/assets/homepage/egress.js.map +1 -1
  16. package/dist/assets/homepage/facebook.js.map +1 -1
  17. package/dist/assets/homepage/fisma.js.map +1 -1
  18. package/dist/assets/homepage/gff.js.map +1 -1
  19. package/dist/assets/homepage/github.js.map +1 -1
  20. package/dist/assets/homepage/gray.js.map +1 -1
  21. package/dist/assets/homepage/hipaa-compliant.js.map +1 -1
  22. package/dist/assets/homepage/instagram.js.map +1 -1
  23. package/dist/assets/homepage/linkedin.js.map +1 -1
  24. package/dist/assets/homepage/ml-commons.js.map +1 -1
  25. package/dist/assets/homepage/nih-aging.js.map +1 -1
  26. package/dist/assets/homepage/nih-heart.js.map +1 -1
  27. package/dist/assets/homepage/nih-nci.js.map +1 -1
  28. package/dist/assets/homepage/nih-nimh.js.map +1 -1
  29. package/dist/assets/homepage/ntap.js.map +1 -1
  30. package/dist/assets/homepage/plan-item.js.map +1 -1
  31. package/dist/assets/homepage/powered-by-synapse-feature.js.map +1 -1
  32. package/dist/assets/homepage/precision-governance-feature.js.map +1 -1
  33. package/dist/assets/homepage/python.js.map +1 -1
  34. package/dist/assets/homepage/r.js.map +1 -1
  35. package/dist/assets/homepage/research-credit-feature.js.map +1 -1
  36. package/dist/assets/homepage/seamless-integration-feature.js.map +1 -1
  37. package/dist/assets/homepage/sloan.js.map +1 -1
  38. package/dist/assets/homepage/twitter.js.map +1 -1
  39. package/dist/assets/homepage/users.js.map +1 -1
  40. package/dist/assets/homepage/youtube.js.map +1 -1
  41. package/dist/assets/icons/AccessDataAnywhere.js.map +1 -1
  42. package/dist/assets/icons/AccessPending.js.map +1 -1
  43. package/dist/assets/icons/AccessPendingCloud.js.map +1 -1
  44. package/dist/assets/icons/AddAd.js.map +1 -1
  45. package/dist/assets/icons/AddToList.js.map +1 -1
  46. package/dist/assets/icons/Alert.js.map +1 -1
  47. package/dist/assets/icons/Arrow.js.map +1 -1
  48. package/dist/assets/icons/AwardScroll.js.map +1 -1
  49. package/dist/assets/icons/Baseline.js.map +1 -1
  50. package/dist/assets/icons/Cavatica.js.map +1 -1
  51. package/dist/assets/icons/CertifiedUser.js.map +1 -1
  52. package/dist/assets/icons/Challenge.js.map +1 -1
  53. package/dist/assets/icons/Checkbox/Checked.js.map +1 -1
  54. package/dist/assets/icons/Checkbox/Checked2.js.map +1 -1
  55. package/dist/assets/icons/Checkbox/Indeterminate.js.map +1 -1
  56. package/dist/assets/icons/Checkbox/Indeterminate2.js.map +1 -1
  57. package/dist/assets/icons/Checkbox/Unchecked.js.map +1 -1
  58. package/dist/assets/icons/Checkbox/Unchecked2.js.map +1 -1
  59. package/dist/assets/icons/ClappingHands.js.map +1 -1
  60. package/dist/assets/icons/CloudWarning.js.map +1 -1
  61. package/dist/assets/icons/CommunicateFindings.js.map +1 -1
  62. package/dist/assets/icons/CreateVersion.js.map +1 -1
  63. package/dist/assets/icons/DNA_Two.js.map +1 -1
  64. package/dist/assets/icons/Data2.js.map +1 -1
  65. package/dist/assets/icons/DoubleQuotes.js.map +1 -1
  66. package/dist/assets/icons/EmailAddressAdornment.js.map +1 -1
  67. package/dist/assets/icons/FileWithShield.js.map +1 -1
  68. package/dist/assets/icons/FileWithShield2.js.map +1 -1
  69. package/dist/assets/icons/FrontHand.js.map +1 -1
  70. package/dist/assets/icons/HandWithMoney.js.map +1 -1
  71. package/dist/assets/icons/IconCopy.js.map +1 -1
  72. package/dist/assets/icons/IconMinus.js.map +1 -1
  73. package/dist/assets/icons/IconPlus.js.map +1 -1
  74. package/dist/assets/icons/Java.js.map +1 -1
  75. package/dist/assets/icons/MintDoi.js.map +1 -1
  76. package/dist/assets/icons/MultiFile.js.map +1 -1
  77. package/dist/assets/icons/MultiFile2.js.map +1 -1
  78. package/dist/assets/icons/NoData.js.map +1 -1
  79. package/dist/assets/icons/NoSearchResults.js.map +1 -1
  80. package/dist/assets/icons/ORCIDIcon.js.map +1 -1
  81. package/dist/assets/icons/OpenBook.js.map +1 -1
  82. package/dist/assets/icons/Podium.js.map +1 -1
  83. package/dist/assets/icons/Python.js.map +1 -1
  84. package/dist/assets/icons/QueryStructuredData.js.map +1 -1
  85. package/dist/assets/icons/RLogo.js.map +1 -1
  86. package/dist/assets/icons/RecordProvenance.js.map +1 -1
  87. package/dist/assets/icons/RosetteRibbon.js.map +1 -1
  88. package/dist/assets/icons/SageFullLogo.js.map +1 -1
  89. package/dist/assets/icons/SearchImage.js.map +1 -1
  90. package/dist/assets/icons/ShareYourResearch.js.map +1 -1
  91. package/dist/assets/icons/Sort.js.map +1 -1
  92. package/dist/assets/icons/StarTrophy.js.map +1 -1
  93. package/dist/assets/icons/SynapseFullLogo.js.map +1 -1
  94. package/dist/assets/icons/SynapseIconWhite.js.map +1 -1
  95. package/dist/assets/icons/SynapseLogoName.js.map +1 -1
  96. package/dist/assets/icons/TasksIcon.js.map +1 -1
  97. package/dist/assets/icons/Terminal.js.map +1 -1
  98. package/dist/assets/icons/ThreeStars.js.map +1 -1
  99. package/dist/assets/icons/UnpackagableFile.js.map +1 -1
  100. package/dist/assets/icons/UnpackagableFile2.js.map +1 -1
  101. package/dist/assets/icons/ValidatedProfile.js.map +1 -1
  102. package/dist/assets/icons/account-certified.js.map +1 -1
  103. package/dist/assets/icons/account-enabled-mfa.js.map +1 -1
  104. package/dist/assets/icons/account-validated.js.map +1 -1
  105. package/dist/assets/icons/bioChemicalPhysical.js.map +1 -1
  106. package/dist/assets/icons/chart2.js.map +1 -1
  107. package/dist/assets/icons/columns.js.map +1 -1
  108. package/dist/assets/icons/columnsDarkTheme.js.map +1 -1
  109. package/dist/assets/icons/computationalTool.js.map +1 -1
  110. package/dist/assets/icons/dataReuse.js.map +1 -1
  111. package/dist/assets/icons/emailAddressAdornment2.js.map +1 -1
  112. package/dist/assets/icons/emailWithNotification.js.map +1 -1
  113. package/dist/assets/icons/error_page/maintenance.js.map +1 -1
  114. package/dist/assets/icons/error_page/no-access.js.map +1 -1
  115. package/dist/assets/icons/error_page/unavailable.js.map +1 -1
  116. package/dist/assets/icons/file.js.map +1 -1
  117. package/dist/assets/icons/inSilicoModel.js.map +1 -1
  118. package/dist/assets/icons/institution.js.map +1 -1
  119. package/dist/assets/icons/json-form-tool-no-submissions.js.map +1 -1
  120. package/dist/assets/icons/modelSystem.js.map +1 -1
  121. package/dist/assets/icons/mouse.js.map +1 -1
  122. package/dist/assets/icons/organizations.js.map +1 -1
  123. package/dist/assets/icons/person.js.map +1 -1
  124. package/dist/assets/icons/spatialProfiling.js.map +1 -1
  125. package/dist/assets/icons/standardDataModel.js.map +1 -1
  126. package/dist/assets/icons/study-active.js.map +1 -1
  127. package/dist/assets/icons/study-complete.js.map +1 -1
  128. package/dist/assets/icons/subscribe_plus.js.map +1 -1
  129. package/dist/assets/icons/synapse-logo.js.map +1 -1
  130. package/dist/assets/icons/terms/CheckIcon.js.map +1 -1
  131. package/dist/assets/icons/translational.js.map +1 -1
  132. package/dist/assets/icons/tree_horizontal.js.map +1 -1
  133. package/dist/assets/illustrations/acknowledgement_statements_illustration.js.map +1 -1
  134. package/dist/assets/illustrations/challenges_illustration.js.map +1 -1
  135. package/dist/assets/illustrations/cohort_builder_illustration.js.map +1 -1
  136. package/dist/assets/illustrations/data_access_management_illustration.js.map +1 -1
  137. package/dist/assets/illustrations/datasets_illustration.js.map +1 -1
  138. package/dist/assets/illustrations/diagonalLinePattern.js.map +1 -1
  139. package/dist/assets/illustrations/discussions_illustration.js.map +1 -1
  140. package/dist/assets/illustrations/docker_illustration.js.map +1 -1
  141. package/dist/assets/illustrations/donation_illustration.js.map +1 -1
  142. package/dist/assets/illustrations/favorites_illustration.js.map +1 -1
  143. package/dist/assets/illustrations/files_illustration.js.map +1 -1
  144. package/dist/assets/illustrations/following_illustration.js.map +1 -1
  145. package/dist/assets/illustrations/index.js.map +1 -1
  146. package/dist/assets/illustrations/left_dot_blob_dark_illustration.js.map +1 -1
  147. package/dist/assets/illustrations/left_dot_blob_illustration.js.map +1 -1
  148. package/dist/assets/illustrations/projects_illustration.js.map +1 -1
  149. package/dist/assets/illustrations/right_dot_blob_dark_illustration.js.map +1 -1
  150. package/dist/assets/illustrations/right_dot_blob_illustration.js.map +1 -1
  151. package/dist/assets/illustrations/tables_illustration.js.map +1 -1
  152. package/dist/assets/illustrations/teams_illustration.js.map +1 -1
  153. package/dist/assets/illustrations/trash_can_illustration.js.map +1 -1
  154. package/dist/assets/illustrations/underconstruction_illustration.js.map +1 -1
  155. package/dist/assets/illustrations/wikis_illustration.js.map +1 -1
  156. package/dist/assets/logos/other/ad-workbench-logo.js.map +1 -1
  157. package/dist/assets/logos/other/cavatica-logo.js.map +1 -1
  158. package/dist/assets/logos/other/pluto-logo.js.map +1 -1
  159. package/dist/assets/logos/other/terra-logo.js.map +1 -1
  160. package/dist/assets/mui_components/AccessManagement.js.map +1 -1
  161. package/dist/assets/mui_components/AccountCertified.js.map +1 -1
  162. package/dist/assets/mui_components/AccountRegistered.js.map +1 -1
  163. package/dist/assets/mui_components/AccountValidated.js.map +1 -1
  164. package/dist/assets/mui_components/ActionKey.js.map +1 -1
  165. package/dist/assets/mui_components/BioChemicalPhysical.js.map +1 -1
  166. package/dist/assets/mui_components/Chromatin.js.map +1 -1
  167. package/dist/assets/mui_components/Clinical.js.map +1 -1
  168. package/dist/assets/mui_components/ComputationalTool.js.map +1 -1
  169. package/dist/assets/mui_components/Data.js.map +1 -1
  170. package/dist/assets/mui_components/DataLocked.js.map +1 -1
  171. package/dist/assets/mui_components/DataReuse.js.map +1 -1
  172. package/dist/assets/mui_components/Dataset.js.map +1 -1
  173. package/dist/assets/mui_components/DatasetCollection.js.map +1 -1
  174. package/dist/assets/mui_components/Docker.js.map +1 -1
  175. package/dist/assets/mui_components/GeneExpression.js.map +1 -1
  176. package/dist/assets/mui_components/GeneVariants.js.map +1 -1
  177. package/dist/assets/mui_components/HelpChatBubble.js.map +1 -1
  178. package/dist/assets/mui_components/Imaging.js.map +1 -1
  179. package/dist/assets/mui_components/InSilicoModel.js.map +1 -1
  180. package/dist/assets/mui_components/Kinomics.js.map +1 -1
  181. package/dist/assets/mui_components/LineGraph.js.map +1 -1
  182. package/dist/assets/mui_components/ModelSystem.js.map +1 -1
  183. package/dist/assets/mui_components/Other.js.map +1 -1
  184. package/dist/assets/mui_components/PackagableFile.js.map +1 -1
  185. package/dist/assets/mui_components/PackagableFile2.js.map +1 -1
  186. package/dist/assets/mui_components/Proteomics.js.map +1 -1
  187. package/dist/assets/mui_components/Rat.js.map +1 -1
  188. package/dist/assets/mui_components/SpatialProfiling.js.map +1 -1
  189. package/dist/assets/sustainability/darkDialPosition1.js.map +1 -1
  190. package/dist/assets/sustainability/darkDialPosition2.js.map +1 -1
  191. package/dist/assets/sustainability/darkDialPosition3.js.map +1 -1
  192. package/dist/assets/sustainability/darkDialPosition4.js.map +1 -1
  193. package/dist/assets/sustainability/dialPosition1.js.map +1 -1
  194. package/dist/assets/sustainability/dialPosition2.js.map +1 -1
  195. package/dist/assets/sustainability/dialPosition3.js.map +1 -1
  196. package/dist/assets/sustainability/dialPosition4.js.map +1 -1
  197. package/dist/assets/themed_icons/Active.js.map +1 -1
  198. package/dist/assets/themed_icons/Chart.js.map +1 -1
  199. package/dist/assets/themed_icons/Close.js.map +1 -1
  200. package/dist/assets/themed_icons/Collapse.js.map +1 -1
  201. package/dist/assets/themed_icons/Columns.js.map +1 -1
  202. package/dist/assets/themed_icons/ColumnsDark.js.map +1 -1
  203. package/dist/assets/themed_icons/Database.js.map +1 -1
  204. package/dist/assets/themed_icons/Download.js.map +1 -1
  205. package/dist/assets/themed_icons/Expand.js.map +1 -1
  206. package/dist/assets/themed_icons/Explore.js.map +1 -1
  207. package/dist/assets/themed_icons/ExternalLink.js.map +1 -1
  208. package/dist/assets/themed_icons/Filter.js.map +1 -1
  209. package/dist/assets/themed_icons/Program.js.map +1 -1
  210. package/dist/assets/themed_icons/Project.js.map +1 -1
  211. package/dist/assets/themed_icons/Publication.js.map +1 -1
  212. package/dist/assets/themed_icons/Search.js.map +1 -1
  213. package/dist/assets/themed_icons/Settings.js.map +1 -1
  214. package/dist/assets/themed_icons/SortDown.js.map +1 -1
  215. package/dist/assets/themed_icons/SortUp.js.map +1 -1
  216. package/dist/assets/themed_icons/SqlEditorIcon.js.map +1 -1
  217. package/dist/assets/themed_icons/Study.js.map +1 -1
  218. package/dist/assets/themed_icons/ToolClinical.js.map +1 -1
  219. package/dist/assets/themed_icons/ToolComputational.js.map +1 -1
  220. package/dist/assets/themed_icons/ToolExperimental.js.map +1 -1
  221. package/dist/assets/themed_icons/VerticalDots.js.map +1 -1
  222. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js.map +1 -1
  223. package/dist/components/AccessRequirement/EntityActionsRequired.js.map +1 -1
  224. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.js.map +1 -1
  225. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js.map +1 -1
  226. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js +10 -11
  227. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
  228. package/dist/components/AccessRequirementList/AccessRequirementList.js +73 -76
  229. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  230. package/dist/components/AccessRequirementList/AccessRequirementListItem.js.map +1 -1
  231. package/dist/components/AccessRequirementList/AccessRequirementListUtils.js.map +1 -1
  232. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/CancelRequestDataAccess.js.map +1 -1
  233. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
  234. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js.map +1 -1
  235. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DocumentTemplate.js.map +1 -1
  236. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js.map +1 -1
  237. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItem.js.map +1 -1
  238. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.js.map +1 -1
  239. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestDataAccessSuccess.js.map +1 -1
  240. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
  241. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.js.map +1 -1
  242. package/dist/components/AccessRequirementList/RequirementItem/AuthenticatedRequirement.js.map +1 -1
  243. package/dist/components/AccessRequirementList/RequirementItem/CertificationRequirement.js.map +1 -1
  244. package/dist/components/AccessRequirementList/RequirementItem/LockAccessRequirementItem.js.map +1 -1
  245. package/dist/components/AccessRequirementList/RequirementItem/RequirementItem.js.map +1 -1
  246. package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js.map +1 -1
  247. package/dist/components/AccessRequirementList/RequirementItem/TwoFactorAuthEnabledRequirement.js.map +1 -1
  248. package/dist/components/AccessRequirementList/RequirementItem/UnmanagedACTAccessRequirementItem.js.map +1 -1
  249. package/dist/components/AccessRequirementList/RequirementItem/ValidationRequirement.js.map +1 -1
  250. package/dist/components/AccessRequirementRelatedProjectsList/AccessRequirementRelatedProjectsList.js.map +1 -1
  251. package/dist/components/AccessTokenPage/AccessTokenCard/AccessTokenCard.js.map +1 -1
  252. package/dist/components/AccessTokenPage/AccessTokenPage.js.map +1 -1
  253. package/dist/components/AccessTokenPage/CreateAccessTokenModal.js.map +1 -1
  254. package/dist/components/AccountLevelBadge/AccountLevelBadge.js.map +1 -1
  255. package/dist/components/AccountLevelBadges/AccountLevelBadges.js.map +1 -1
  256. package/dist/components/AccountLevelBadges/useRevokeCertificationUI.js.map +1 -1
  257. package/dist/components/AcknowledgementsPage/AcknowledgementsDialog.js.map +1 -1
  258. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
  259. package/dist/components/AcknowledgementsPage/StudyAcknowledgement.js.map +1 -1
  260. package/dist/components/AcknowledgementsPage/StudyAcknowledgements.js.map +1 -1
  261. package/dist/components/AclEditor/AclEditor.js.map +1 -1
  262. package/dist/components/AclEditor/AclEditor.test-utils.js.map +1 -1
  263. package/dist/components/AclEditor/AclEditorSkeleton.js.map +1 -1
  264. package/dist/components/AclEditor/PermissionLevelMenu.js.map +1 -1
  265. package/dist/components/AclEditor/ReadOnlyPermissionLevel.js.map +1 -1
  266. package/dist/components/AclEditor/ResourceAccessAndUserGroupHeader.js +2 -4
  267. package/dist/components/AclEditor/ResourceAccessAndUserGroupHeader.js.map +1 -1
  268. package/dist/components/AclEditor/ResourceAccessItem.js.map +1 -1
  269. package/dist/components/AclEditor/useSortResourceAccessList.js.map +1 -1
  270. package/dist/components/AclEditor/useUpdateAcl.js.map +1 -1
  271. package/dist/components/AdaptiveTwoColumnLayout/AdaptiveTwoColumnLayout.js.map +1 -1
  272. package/dist/components/AddToDownloadListV2.js.map +1 -1
  273. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  274. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js.map +1 -1
  275. package/dist/components/Authentication/AuthenticationMethodSelection.js.map +1 -1
  276. package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
  277. package/dist/components/Authentication/LoginFlowBackButton.js.map +1 -1
  278. package/dist/components/Authentication/LoginForm.js.map +1 -1
  279. package/dist/components/Authentication/LoginMethod.js.map +1 -1
  280. package/dist/components/Authentication/LoginMethodButton.js.map +1 -1
  281. package/dist/components/Authentication/Logout.js.map +1 -1
  282. package/dist/components/Authentication/OneTimePasswordForm.js.map +1 -1
  283. package/dist/components/Authentication/PasswordField.js.map +1 -1
  284. package/dist/components/Authentication/RecoveryCodeForm.js.map +1 -1
  285. package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
  286. package/dist/components/Authentication/RegenerateBackupCodesWarning.js.map +1 -1
  287. package/dist/components/Authentication/Reset2FAWarning.js.map +1 -1
  288. package/dist/components/Authentication/StandaloneLoginForm.js.map +1 -1
  289. package/dist/components/Authentication/TOTPForm.js.map +1 -1
  290. package/dist/components/Authentication/TwoFactorAuthSettingsPanel.js.map +1 -1
  291. package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
  292. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  293. package/dist/components/Authentication/TwoFactorSecretDialog.js.map +1 -1
  294. package/dist/components/Authentication/UsernamePasswordForm.js.map +1 -1
  295. package/dist/components/BasePortalCard/BasePortalCard.js.map +1 -1
  296. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js.map +1 -1
  297. package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  298. package/dist/components/CTASectionWrapper/CTASectionWrapper.js.map +1 -1
  299. package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js.map +1 -1
  300. package/dist/components/CardContainer/CardContainer.js.map +1 -1
  301. package/dist/components/CardContainerLogic/CardContainerLogic.js.map +1 -1
  302. package/dist/components/CardDeck/CardDeck.Desktop.js.map +1 -1
  303. package/dist/components/CardDeck/CardDeck.Mobile.js.map +1 -1
  304. package/dist/components/CardDeck/CardDeck.js.map +1 -1
  305. package/dist/components/CardDeck/TableQueryCardDeck.js.map +1 -1
  306. package/dist/components/CardGridWithLinks/CardGridWithLinks.js.map +1 -1
  307. package/dist/components/CertificationQuiz/CertificationAnswer.js.map +1 -1
  308. package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
  309. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js.map +1 -1
  310. package/dist/components/ChallengeDetailPage/ChallengeDetailPage.js.map +1 -1
  311. package/dist/components/ChallengeRegisterButton/ChallengeRegisterButton.js.map +1 -1
  312. package/dist/components/ChallengeRequirementsModal/ChallengeRequirementsModal.js.map +1 -1
  313. package/dist/components/ChallengeSubmission/AddExternalRepo.js.map +1 -1
  314. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js.map +1 -1
  315. package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
  316. package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js +62 -64
  317. package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js.map +1 -1
  318. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
  319. package/dist/components/ChallengeSubmission/EvaluationQueueList.js.map +1 -1
  320. package/dist/components/ChallengeSubmission/SubmissionCommitList.js.map +1 -1
  321. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
  322. package/dist/components/ChallengeTeamWizard/ChallengeTeamSearch.js.map +1 -1
  323. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js.map +1 -1
  324. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js +96 -102
  325. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js.map +1 -1
  326. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
  327. package/dist/components/ChallengeTeamWizard/MembershipRequestForm.js.map +1 -1
  328. package/dist/components/ChallengeTeamWizard/OpenMembershipInvitation.js.map +1 -1
  329. package/dist/components/ChallengeTeamWizard/RegistrationSuccessful.js.map +1 -1
  330. package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js.map +1 -1
  331. package/dist/components/ChallengeTeamWizard/useCreateAndRegisterChallengeTeam.js.map +1 -1
  332. package/dist/components/ChangePassword/ChangePassword.js.map +1 -1
  333. package/dist/components/ChangePassword/ChangePasswordWithToken.js.map +1 -1
  334. package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
  335. package/dist/components/CitationPopover/CitationPopover.js.map +1 -1
  336. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  337. package/dist/components/CitationPopover/CitationPopoverUtils.js.map +1 -1
  338. package/dist/components/CitationPopover/useCitation.js.map +1 -1
  339. package/dist/components/ColorGradient/ColorGradient.js.map +1 -1
  340. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.js.map +1 -1
  341. package/dist/components/ColumnFilter/ColumnFilter.js.map +1 -1
  342. package/dist/components/ComponentCollapse.js.map +1 -1
  343. package/dist/components/ConfirmationDialog/ConfirmationDialog.js.map +1 -1
  344. package/dist/components/CookiesNotification/CookiePreferencesDialog.js.map +1 -1
  345. package/dist/components/CookiesNotification/CookiesNotification.d.ts.map +1 -1
  346. package/dist/components/CookiesNotification/CookiesNotification.js +9 -9
  347. package/dist/components/CookiesNotification/CookiesNotification.js.map +1 -1
  348. package/dist/components/CopyToClipboardIcon.js.map +1 -1
  349. package/dist/components/CopyToClipboardInput/CopyToClipboardInput.js.map +1 -1
  350. package/dist/components/CopyToClipboardString/CopyToClipboardString.js.map +1 -1
  351. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js.map +1 -1
  352. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizardUtils.js.map +1 -1
  353. package/dist/components/CreateProjectModal/CreateProjectModal.js.map +1 -1
  354. package/dist/components/CreateProjectModal/ProjectVisibilityRadioGroup.js.map +1 -1
  355. package/dist/components/CreateTableViewWizard/CreateTableViewWizard.js.map +1 -1
  356. package/dist/components/CreateTableViewWizard/CreateTableViewWizardUtils.js.map +1 -1
  357. package/dist/components/CreateTableViewWizard/TableNameForm.js.map +1 -1
  358. package/dist/components/CreateTableViewWizard/TableTypeSelection.js.map +1 -1
  359. package/dist/components/CreateTableViewWizard/ViewTypeSelection.js.map +1 -1
  360. package/dist/components/CrispChat/CrispChat.js.map +1 -1
  361. package/dist/components/DataExplorer/DataExplorer.css +1 -0
  362. package/dist/components/DataExplorer/DataExplorer.d.ts +13 -0
  363. package/dist/components/DataExplorer/DataExplorer.d.ts.map +1 -0
  364. package/dist/components/DataExplorer/DataExplorer.js +116 -0
  365. package/dist/components/DataExplorer/DataExplorer.js.map +1 -0
  366. package/dist/components/DataExplorer/DataExplorer.module.js +22 -0
  367. package/dist/components/DataExplorer/DataExplorer.module.js.map +1 -0
  368. package/dist/components/DataExplorer/DataExplorer.module.scss +156 -0
  369. package/dist/components/DataGrid/DataGrid.js +72 -72
  370. package/dist/components/DataGrid/DataGrid.js.map +1 -1
  371. package/dist/components/DataGrid/DataGridTypes.js.map +1 -1
  372. package/dist/components/DataGrid/DataGridWebSocket.d.ts +2 -0
  373. package/dist/components/DataGrid/DataGridWebSocket.d.ts.map +1 -1
  374. package/dist/components/DataGrid/DataGridWebSocket.js +9 -10
  375. package/dist/components/DataGrid/DataGridWebSocket.js.map +1 -1
  376. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js.map +1 -1
  377. package/dist/components/DataGrid/StartGridSession.js.map +1 -1
  378. package/dist/components/DataGrid/SynapseGrid.d.ts +3 -1
  379. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  380. package/dist/components/DataGrid/SynapseGrid.js +219 -211
  381. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  382. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts.map +1 -1
  383. package/dist/components/DataGrid/columns/AutocompleteColumn.js +106 -102
  384. package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
  385. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.d.ts.map +1 -1
  386. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js +97 -89
  387. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js.map +1 -1
  388. package/dist/components/DataGrid/columns/DateTimeColumn.js.map +1 -1
  389. package/dist/components/DataGrid/columns/GridAutocompleteChip.js.map +1 -1
  390. package/dist/components/DataGrid/columns/useGridAutocompleteState.d.ts +19 -8
  391. package/dist/components/DataGrid/columns/useGridAutocompleteState.d.ts.map +1 -1
  392. package/dist/components/DataGrid/columns/useGridAutocompleteState.js +64 -43
  393. package/dist/components/DataGrid/columns/useGridAutocompleteState.js.map +1 -1
  394. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js.map +1 -1
  395. package/dist/components/DataGrid/components/ExportCsvFromGridButton.js.map +1 -1
  396. package/dist/components/DataGrid/components/GridMenuButton/GridMenuButton.js.map +1 -1
  397. package/dist/components/DataGrid/components/GridSessionSelectionField.js.map +1 -1
  398. package/dist/components/DataGrid/components/UploadCsvToGridButton.js.map +1 -1
  399. package/dist/components/DataGrid/components/UploadCsvToGridDialog.d.ts.map +1 -1
  400. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js +9 -9
  401. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js.map +1 -1
  402. package/dist/components/DataGrid/components/ValidationAlert.js.map +1 -1
  403. package/dist/components/DataGrid/components/contextMenu.js.map +1 -1
  404. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js +2 -0
  405. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js.map +1 -1
  406. package/dist/components/DataGrid/hooks/useExportDataGridToCsv.js.map +1 -1
  407. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.d.ts.map +1 -1
  408. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.js +8 -1
  409. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.js.map +1 -1
  410. package/dist/components/DataGrid/hooks/useGridReplicaUsers.js.map +1 -1
  411. package/dist/components/DataGrid/hooks/useGridUndoRedo.js.map +1 -1
  412. package/dist/components/DataGrid/hooks/useRemoteSelections.js.map +1 -1
  413. package/dist/components/DataGrid/hooks/useStack.js.map +1 -1
  414. package/dist/components/DataGrid/useCRDTModelView.js.map +1 -1
  415. package/dist/components/DataGrid/useDataGridWebsocket.d.ts +2 -0
  416. package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
  417. package/dist/components/DataGrid/useDataGridWebsocket.js +12 -2
  418. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  419. package/dist/components/DataGrid/useInitializeGridConnection.js.map +1 -1
  420. package/dist/components/DataGrid/useMergeGridWithRecordSet.js.map +1 -1
  421. package/dist/components/DataGrid/useMergeGridWithSource.js.map +1 -1
  422. package/dist/components/DataGrid/useMergeGridWithTable.js.map +1 -1
  423. package/dist/components/DataGrid/utils/DataGridUtils.js.map +1 -1
  424. package/dist/components/DataGrid/utils/MessageCounter.js.map +1 -1
  425. package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
  426. package/dist/components/DataGrid/utils/calculateColumnWidth.js.map +1 -1
  427. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  428. package/dist/components/DataGrid/utils/computeReplicaSelectionModel.js.map +1 -1
  429. package/dist/components/DataGrid/utils/convertActionToModelChange.js.map +1 -1
  430. package/dist/components/DataGrid/utils/createTestModel.js.map +1 -1
  431. package/dist/components/DataGrid/utils/enrichRowsWithChangeInfo.js.map +1 -1
  432. package/dist/components/DataGrid/utils/extractColumnValidationMessages.js.map +1 -1
  433. package/dist/components/DataGrid/utils/getCellAuthorSid.js.map +1 -1
  434. package/dist/components/DataGrid/utils/getCellClassName.js.map +1 -1
  435. package/dist/components/DataGrid/utils/getChangeTooltipText.js.map +1 -1
  436. package/dist/components/DataGrid/utils/getEmptyValue.js.map +1 -1
  437. package/dist/components/DataGrid/utils/getReplicaCategory.js.map +1 -1
  438. package/dist/components/DataGrid/utils/isValidationUpToDateForRow.js.map +1 -1
  439. package/dist/components/DataGrid/utils/json-rx/JsonRx.js.map +1 -1
  440. package/dist/components/DataGrid/utils/json-rx/JsonRxMessage.js.map +1 -1
  441. package/dist/components/DataGrid/utils/json-rx/JsonRxNotification.js.map +1 -1
  442. package/dist/components/DataGrid/utils/json-rx/JsonRxRequest.js.map +1 -1
  443. package/dist/components/DataGrid/utils/json-rx/JsonRxRequestComplete.js.map +1 -1
  444. package/dist/components/DataGrid/utils/json-rx/JsonRxResponse.js.map +1 -1
  445. package/dist/components/DataGrid/utils/json-rx/JsonRxResponseComplete.js.map +1 -1
  446. package/dist/components/DataGrid/utils/logicalTimestampToString.js.map +1 -1
  447. package/dist/components/DataGrid/utils/mapOperationsToModelChanges.js.map +1 -1
  448. package/dist/components/DataGrid/utils/modelColsToGrid.js.map +1 -1
  449. package/dist/components/DataGrid/utils/modelRowsToGrid.js.map +1 -1
  450. package/dist/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType.js.map +1 -1
  451. package/dist/components/DataGrid/utils/replicaSelectionToGridSelection.js.map +1 -1
  452. package/dist/components/DataGrid/utils/schemaAwarePasteValue.js.map +1 -1
  453. package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
  454. package/dist/components/DatasetJsonLdScript.js.map +1 -1
  455. package/dist/components/DateTimePicker/DateTimePicker.js.map +1 -1
  456. package/dist/components/Dialog/ConfirmCloseWithoutSavingDialog.js.map +1 -1
  457. package/dist/components/DialogBase.js.map +1 -1
  458. package/dist/components/DirectDownload/DirectDownload.js.map +1 -1
  459. package/dist/components/DirectDownload/FileEntityDirectDownload.js.map +1 -1
  460. package/dist/components/DirectDownloadButton.js.map +1 -1
  461. package/dist/components/DownloadCart/ActionRequiredCard/ActionRequiredCard.js.map +1 -1
  462. package/dist/components/DownloadCart/ActionRequiredListItem.js.map +1 -1
  463. package/dist/components/DownloadCart/AvailableForDownloadTable.js.map +1 -1
  464. package/dist/components/DownloadCart/CreatePackageV2.js.map +1 -1
  465. package/dist/components/DownloadCart/DirectProgrammaticDownload.js.map +1 -1
  466. package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
  467. package/dist/components/DownloadCart/DownloadDetails.js.map +1 -1
  468. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  469. package/dist/components/DownloadCart/DownloadListActionsRequired.js.map +1 -1
  470. package/dist/components/DownloadCart/DownloadListStats.js.map +1 -1
  471. package/dist/components/DownloadCart/DownloadListTable.js.map +1 -1
  472. package/dist/components/DownloadCart/EnableTwoFaRequirementCard.js.map +1 -1
  473. package/dist/components/DownloadCart/MeetAccessRequirementCard.js.map +1 -1
  474. package/dist/components/DownloadCart/RequestDownloadCard.js.map +1 -1
  475. package/dist/components/DownloadCart/ShowDownloadV2.js.map +1 -1
  476. package/dist/components/DownloadCart/TableQueryActionsRequired.js.map +1 -1
  477. package/dist/components/DownloadCart/fileNameUtils.js.map +1 -1
  478. package/dist/components/DraggableDialog/DraggableDialog.js.map +1 -1
  479. package/dist/components/DropdownSelect/DropdownSelect.js.map +1 -1
  480. package/dist/components/DynamicForm/DynamicForm.js.map +1 -1
  481. package/dist/components/DynamicForm/DynamicFormModal.js.map +1 -1
  482. package/dist/components/Ecosystem/EcosystemCard.js.map +1 -1
  483. package/dist/components/Ecosystem/EcosystemLayout.js.map +1 -1
  484. package/dist/components/Ecosystem/EcosystemSkeleton.js.map +1 -1
  485. package/dist/components/Ecosystem/TableQueryEcosystem.js.map +1 -1
  486. package/dist/components/EntityAclEditor/CreateOrDeleteLocalSharingSettingsButton.js.map +1 -1
  487. package/dist/components/EntityAclEditor/EntityAclEditor.js.map +1 -1
  488. package/dist/components/EntityAclEditor/EntityAclEditorModal.js.map +1 -1
  489. package/dist/components/EntityAclEditor/InheritanceMessage.js.map +1 -1
  490. package/dist/components/EntityAclEditor/OpenData.js.map +1 -1
  491. package/dist/components/EntityAclEditor/useNotifyNewACLUsers.js.map +1 -1
  492. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +68 -70
  493. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  494. package/dist/components/EntityCitation/EntityCitation.js.map +1 -1
  495. package/dist/components/EntityCitation/EntityCitationUtils.js.map +1 -1
  496. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +32 -35
  497. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  498. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
  499. package/dist/components/EntityFinder/Breadcrumbs.js.map +1 -1
  500. package/dist/components/EntityFinder/EntityFinder.js +134 -136
  501. package/dist/components/EntityFinder/EntityFinder.js.map +1 -1
  502. package/dist/components/EntityFinder/EntityFinderModal.js.map +1 -1
  503. package/dist/components/EntityFinder/EntityIdTextField.js.map +1 -1
  504. package/dist/components/EntityFinder/VersionSelectionType.js.map +1 -1
  505. package/dist/components/EntityFinder/details/EntityDetailsList.js +20 -20
  506. package/dist/components/EntityFinder/details/EntityDetailsList.js.map +1 -1
  507. package/dist/components/EntityFinder/details/configurations/EntityChildrenDetails.js.map +1 -1
  508. package/dist/components/EntityFinder/details/configurations/FavoritesDetails.js.map +1 -1
  509. package/dist/components/EntityFinder/details/configurations/ProjectListDetails.js.map +1 -1
  510. package/dist/components/EntityFinder/details/configurations/ReferenceDetails.js.map +1 -1
  511. package/dist/components/EntityFinder/details/configurations/SearchDetails.js.map +1 -1
  512. package/dist/components/EntityFinder/details/view/DetailsView.js +67 -67
  513. package/dist/components/EntityFinder/details/view/DetailsView.js.map +1 -1
  514. package/dist/components/EntityFinder/details/view/VersionColumnHeader.js +1 -1
  515. package/dist/components/EntityFinder/details/view/VersionColumnHeader.js.map +1 -1
  516. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js.map +1 -1
  517. package/dist/components/EntityFinder/details/view/table/CreatedOnCell.js.map +1 -1
  518. package/dist/components/EntityFinder/details/view/table/DateCell.js.map +1 -1
  519. package/dist/components/EntityFinder/details/view/table/EntityBadgeIconsCell.js.map +1 -1
  520. package/dist/components/EntityFinder/details/view/table/EntityFinderCheckboxCell.js.map +1 -1
  521. package/dist/components/EntityFinder/details/view/table/EntityFinderVersionCell.js.map +1 -1
  522. package/dist/components/EntityFinder/details/view/table/EntityNameCell.js.map +1 -1
  523. package/dist/components/EntityFinder/details/view/table/EntityTypeCell.js.map +1 -1
  524. package/dist/components/EntityFinder/details/view/table/FileEntityDirectDownloadCell.js.map +1 -1
  525. package/dist/components/EntityFinder/details/view/table/FileEntityMD5Cell.js.map +1 -1
  526. package/dist/components/EntityFinder/details/view/table/FileEntitySizeCell.js.map +1 -1
  527. package/dist/components/EntityFinder/details/view/table/ModifiedByCell.js.map +1 -1
  528. package/dist/components/EntityFinder/details/view/table/ModifiedOnCell.js.map +1 -1
  529. package/dist/components/EntityFinder/details/view/table/ParentProjectCell.js.map +1 -1
  530. package/dist/components/EntityFinder/details/view/table/UserBadgeCell.js.map +1 -1
  531. package/dist/components/EntityFinder/tree/EntityTree.js +80 -80
  532. package/dist/components/EntityFinder/tree/EntityTree.js.map +1 -1
  533. package/dist/components/EntityFinder/tree/VirtualizedTree.js +31 -31
  534. package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
  535. package/dist/components/EntityFinder/useEntitySelection.js.map +1 -1
  536. package/dist/components/EntityForm/EntityForm.js.map +1 -1
  537. package/dist/components/EntityHeaderTable/DebouncedInput.js.map +1 -1
  538. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  539. package/dist/components/EntityHeaderTable/EntityHeaderTableCellRenderers.js.map +1 -1
  540. package/dist/components/EntityHeaderTable/Filter.js.map +1 -1
  541. package/dist/components/EntityHeaderTable/useEntityHeaderTableState.js.map +1 -1
  542. package/dist/components/EntityIcon.js.map +1 -1
  543. package/dist/components/EntityLink.js.map +1 -1
  544. package/dist/components/EntitySubjectsSelector/EntitySubjectsSelector.js.map +1 -1
  545. package/dist/components/EntityTreeTable/EntityTreeTable.js.map +1 -1
  546. package/dist/components/EntityTreeTable/components/AutoLoadMore.js.map +1 -1
  547. package/dist/components/EntityTreeTable/components/ColumnHeaders.js.map +1 -1
  548. package/dist/components/EntityTreeTable/components/EntityBadgeIconsCell.js.map +1 -1
  549. package/dist/components/EntityTreeTable/components/EntityNameCell.js.map +1 -1
  550. package/dist/components/EntityTreeTable/components/EntityTreeTableContext.js.map +1 -1
  551. package/dist/components/EntityTreeTable/components/EntityTreeTableRow.js.map +1 -1
  552. package/dist/components/EntityTreeTable/components/EntityTreeTableView.js.map +1 -1
  553. package/dist/components/EntityTreeTable/components/IdCell.js.map +1 -1
  554. package/dist/components/EntityTreeTable/components/IdColumnHeader.js.map +1 -1
  555. package/dist/components/EntityTreeTable/hooks/useEntityTreeState.js.map +1 -1
  556. package/dist/components/EntityTreeTable/hooks/useTableColumns.js.map +1 -1
  557. package/dist/components/EntityTreeTable/hooks/useTableData.js.map +1 -1
  558. package/dist/components/EntityTreeTable/hooks/useTreeOperationsWithDirectFetch.js.map +1 -1
  559. package/dist/components/EntityUpload/EntityUpload.js.map +1 -1
  560. package/dist/components/EntityUpload/EntityUploadModal.js +29 -31
  561. package/dist/components/EntityUpload/EntityUploadModal.js.map +1 -1
  562. package/dist/components/EntityUpload/EntityUploadPromptDialog.js.map +1 -1
  563. package/dist/components/EntityUpload/ExternalObjectStoreCredentialsForm.js.map +1 -1
  564. package/dist/components/EntityUpload/FileUploadProgress.js.map +1 -1
  565. package/dist/components/EntityUpload/LinkToURL.js.map +1 -1
  566. package/dist/components/EntityUpload/ProjectStorageLimitAlert.js.map +1 -1
  567. package/dist/components/EntityViewScopeEditor/EntityViewMaskEditor.js.map +1 -1
  568. package/dist/components/EntityViewScopeEditor/EntityViewScopeEditor.js.map +1 -1
  569. package/dist/components/EntityViewScopeEditor/EntityViewScopeEditorModal.js.map +1 -1
  570. package/dist/components/Evaluation/CreatedOnByUserDiv.js.map +1 -1
  571. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.js.map +1 -1
  572. package/dist/components/Evaluation/EvaluationCard.js.map +1 -1
  573. package/dist/components/Evaluation/EvaluationEditor.js.map +1 -1
  574. package/dist/components/Evaluation/EvaluationEditorPage.js.map +1 -1
  575. package/dist/components/Evaluation/EvaluationRoundEditor.js.map +1 -1
  576. package/dist/components/Evaluation/EvaluationRoundEditorDropdown.js.map +1 -1
  577. package/dist/components/Evaluation/EvaluationRoundEditorList.js.map +1 -1
  578. package/dist/components/Evaluation/input_models/models.js.map +1 -1
  579. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptions.js.map +1 -1
  580. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js.map +1 -1
  581. package/dist/components/EvaluationFinder/EvaluationFinder.js.map +1 -1
  582. package/dist/components/ExperimentalMode/ExperimentalMode.d.ts.map +1 -1
  583. package/dist/components/ExperimentalMode/ExperimentalMode.js +24 -30
  584. package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
  585. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
  586. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  587. package/dist/components/FeaturedDataTabs/FacetPlotsCardGrid.js.map +1 -1
  588. package/dist/components/FeaturedDataTabs/FeaturedDataPlots.js.map +1 -1
  589. package/dist/components/FeaturedDataTabs/FeaturedDataTabs.js.map +1 -1
  590. package/dist/components/FeaturedDataTabs/QueryPerFacetPlotsCard.js.map +1 -1
  591. package/dist/components/FeaturedDataTabs/SingleQueryFacetPlotsCards.js.map +1 -1
  592. package/dist/components/FeaturedResearch/FeaturedResearch.js +16 -18
  593. package/dist/components/FeaturedResearch/FeaturedResearch.js.map +1 -1
  594. package/dist/components/FeaturedToolsList/FeaturedToolCard.js.map +1 -1
  595. package/dist/components/FeaturedToolsList/FeaturedToolsList.js.map +1 -1
  596. package/dist/components/FilePreview/EntityPreview.js.map +1 -1
  597. package/dist/components/FilePreview/FileEntityPreview.js.map +1 -1
  598. package/dist/components/FilePreview/FileHandleContentRenderer.js.map +1 -1
  599. package/dist/components/FilePreview/HtmlPreview/HtmlPreview.js.map +1 -1
  600. package/dist/components/FilePreview/PdfPreview.js.map +1 -1
  601. package/dist/components/FilePreview/PreviewRendererType.js.map +1 -1
  602. package/dist/components/FilePreview/PreviewUtils.js.map +1 -1
  603. package/dist/components/FileUpload/FileUpload.js.map +1 -1
  604. package/dist/components/Forum/DiscussionReply.js.map +1 -1
  605. package/dist/components/Forum/DiscussionSearchResult.js.map +1 -1
  606. package/dist/components/Forum/DiscussionThread.js.map +1 -1
  607. package/dist/components/Forum/ForumPage.js.map +1 -1
  608. package/dist/components/Forum/ForumTable.js.map +1 -1
  609. package/dist/components/Forum/ForumThreadEditor.js.map +1 -1
  610. package/dist/components/Forum/SubscribersModal.js.map +1 -1
  611. package/dist/components/ForumSearch/ForumSearch.js.map +1 -1
  612. package/dist/components/FullTextSearch/FullTextSearch.js.map +1 -1
  613. package/dist/components/FullTextSearch/FullTextSearchUtils.js.map +1 -1
  614. package/dist/components/FullWidthAlert/FullWidthAlert.js.map +1 -1
  615. package/dist/components/GenericCard/BioregistryRules.js.map +1 -1
  616. package/dist/components/GenericCard/CardUtils.js.map +1 -1
  617. package/dist/components/GenericCard/CollapsibleDescription.js.map +1 -1
  618. package/dist/components/GenericCard/CroissantButton/CroissantButton.js.map +1 -1
  619. package/dist/components/GenericCard/GenericCard.js.map +1 -1
  620. package/dist/components/GenericCard/GenericCardActionButton.js.map +1 -1
  621. package/dist/components/GenericCard/GenericCardIcon.js.map +1 -1
  622. package/dist/components/GenericCard/GenericCardTitle.js.map +1 -1
  623. package/dist/components/GenericCard/LabelMaybeWithIcon.js.map +1 -1
  624. package/dist/components/GenericCard/Linkify.js.map +1 -1
  625. package/dist/components/GenericCard/PortalDOI/PortalDOI.js.map +1 -1
  626. package/dist/components/GenericCard/PortalDOI/PortalDOIUtils.js.map +1 -1
  627. package/dist/components/GenericCard/SynapseCardLabel.js +1 -1
  628. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  629. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  630. package/dist/components/GenericCard/useResolvedSynapseEntity.js.map +1 -1
  631. package/dist/components/Goals/Goals.Desktop.js.map +1 -1
  632. package/dist/components/Goals/Goals.Mobile.js.map +1 -1
  633. package/dist/components/Goals/Goals.js +25 -27
  634. package/dist/components/Goals/Goals.js.map +1 -1
  635. package/dist/components/GoalsV2/GoalsV2.Desktop.js.map +1 -1
  636. package/dist/components/GoalsV2/GoalsV2.Mobile.js.map +1 -1
  637. package/dist/components/GoalsV2/GoalsV2.js +14 -16
  638. package/dist/components/GoalsV2/GoalsV2.js.map +1 -1
  639. package/dist/components/GoalsV3/GoalsV3.Desktop.js.map +1 -1
  640. package/dist/components/GoalsV3/GoalsV3.Mobile.js.map +1 -1
  641. package/dist/components/GoalsV3/GoalsV3.js +14 -16
  642. package/dist/components/GoalsV3/GoalsV3.js.map +1 -1
  643. package/dist/components/GoogleAnalytics/GoogleAnalytics.js.map +1 -1
  644. package/dist/components/GoogleMap/GoogleMap.js.map +1 -1
  645. package/dist/components/GoogleMap/SynapseUserMarker.js.map +1 -1
  646. package/dist/components/HasAccess/AccessIcon.js +10 -10
  647. package/dist/components/HasAccess/AccessIcon.js.map +1 -1
  648. package/dist/components/HasAccess/HasAccessV2.js.map +1 -1
  649. package/dist/components/HasAccess/useHasAccess.js.map +1 -1
  650. package/dist/components/HeaderCard/HeaderCardV2.js.map +1 -1
  651. package/dist/components/HeaderCard.js.map +1 -1
  652. package/dist/components/HelpPopover/HelpPopover.js.map +1 -1
  653. package/dist/components/HexGrid/HexGrid.js.map +1 -1
  654. package/dist/components/IDUReport/IDUReport.js.map +1 -1
  655. package/dist/components/IDUReport/IDUReportSubmissionInfo.js.map +1 -1
  656. package/dist/components/Icon/Icon.js.map +1 -1
  657. package/dist/components/IconList.js.map +1 -1
  658. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  659. package/dist/components/IconSvgButton.js.map +1 -1
  660. package/dist/components/ImageCardGridWithLinks/ImageCardGridWithLinks.js +7 -9
  661. package/dist/components/ImageCardGridWithLinks/ImageCardGridWithLinks.js.map +1 -1
  662. package/dist/components/ImageFromSynapseTable.js.map +1 -1
  663. package/dist/components/InteractiveCopyIdsIcon.js.map +1 -1
  664. package/dist/components/JSONArrayEditor/JSONArrayEditor.js.map +1 -1
  665. package/dist/components/JSONArrayEditor/JSONArrayEditorModal.js.map +1 -1
  666. package/dist/components/JSONArrayEditor/useParseCsv.js.map +1 -1
  667. package/dist/components/JsonLdScript.js.map +1 -1
  668. package/dist/components/JsonSchemaForm/JsonSchemaForm.js.map +1 -1
  669. package/dist/components/JsonSchemaForm/templates/ArrayFieldDescriptionTemplate.js.map +1 -1
  670. package/dist/components/JsonSchemaForm/templates/ArrayFieldItemButtonTemplate.js.map +1 -1
  671. package/dist/components/JsonSchemaForm/templates/ArrayFieldItemTemplate.js.map +1 -1
  672. package/dist/components/JsonSchemaForm/templates/ArrayFieldTemplate.js.map +1 -1
  673. package/dist/components/JsonSchemaForm/templates/ArrayFieldTitleTemplate.js.map +1 -1
  674. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js.map +1 -1
  675. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js.map +1 -1
  676. package/dist/components/JsonSchemaForm/templates/DescriptionFieldTemplate.js.map +1 -1
  677. package/dist/components/JsonSchemaForm/templates/ErrorListTemplate.js.map +1 -1
  678. package/dist/components/JsonSchemaForm/templates/FieldDescriptionTable.js.map +1 -1
  679. package/dist/components/JsonSchemaForm/templates/FieldErrorTemplate.js.map +1 -1
  680. package/dist/components/JsonSchemaForm/templates/FieldTemplate.js.map +1 -1
  681. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  682. package/dist/components/JsonSchemaForm/widgets/BooleanWidget.js.map +1 -1
  683. package/dist/components/JsonSchemaForm/widgets/DateTimeWidget.js.map +1 -1
  684. package/dist/components/JsonSchemaForm/widgets/SelectWidget.js.map +1 -1
  685. package/dist/components/LoadingScreen/LoadingScreen.js.map +1 -1
  686. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.js.map +1 -1
  687. package/dist/components/Markdown/GovernanceMarkdownGithub.js.map +1 -1
  688. package/dist/components/Markdown/MarkdownCollapse.js.map +1 -1
  689. package/dist/components/Markdown/MarkdownEditor.js.map +1 -1
  690. package/dist/components/Markdown/MarkdownGithub.js.map +1 -1
  691. package/dist/components/Markdown/MarkdownPopover.js.map +1 -1
  692. package/dist/components/Markdown/MarkdownSynapse.d.ts.map +1 -1
  693. package/dist/components/Markdown/MarkdownSynapse.js +75 -106
  694. package/dist/components/Markdown/MarkdownSynapse.js.map +1 -1
  695. package/dist/components/Markdown/MarkdownUtils.d.ts +14 -4
  696. package/dist/components/Markdown/MarkdownUtils.d.ts.map +1 -1
  697. package/dist/components/Markdown/MarkdownUtils.js +38 -37
  698. package/dist/components/Markdown/MarkdownUtils.js.map +1 -1
  699. package/dist/components/Markdown/MarkdownWidget.js.map +1 -1
  700. package/dist/components/Markdown/SynapseWikiContext.js.map +1 -1
  701. package/dist/components/Markdown/UserMentionModal.js.map +1 -1
  702. package/dist/components/Markdown/widget/Bookmarks.js.map +1 -1
  703. package/dist/components/Markdown/widget/MarkdownButton.js.map +1 -1
  704. package/dist/components/Markdown/widget/MarkdownEntityPreview.js.map +1 -1
  705. package/dist/components/Markdown/widget/MarkdownIDUReport.js.map +1 -1
  706. package/dist/components/Markdown/widget/MarkdownProvenanceGraph.js.map +1 -1
  707. package/dist/components/Markdown/widget/MarkdownSynapseImage.js.map +1 -1
  708. package/dist/components/Markdown/widget/MarkdownSynapsePlot.js.map +1 -1
  709. package/dist/components/Markdown/widget/MarkdownSynapseTable.js.map +1 -1
  710. package/dist/components/Markdown/widget/MarkdownTableOfContents.js.map +1 -1
  711. package/dist/components/Markdown/widget/MarkdownUserOrTeamBadge.js.map +1 -1
  712. package/dist/components/Markdown/widget/MarkdownVideo.js.map +1 -1
  713. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  714. package/dist/components/ModalDownload/ModalDownload.FormSchema.js.map +1 -1
  715. package/dist/components/ModalDownload/ModalDownload.js.map +1 -1
  716. package/dist/components/MuiContainer.js.map +1 -1
  717. package/dist/components/OAuthClientAclEditor/OAuthAclEditorModal.js.map +1 -1
  718. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js.map +1 -1
  719. package/dist/components/OAuthClientManagement/CreateOAuthClient.js.map +1 -1
  720. package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
  721. package/dist/components/OrientationBanner/OrientationBanner.js.map +1 -1
  722. package/dist/components/PageProgress/PageProgress.js.map +1 -1
  723. package/dist/components/Plot/BarPlot.js.map +1 -1
  724. package/dist/components/Plot/DotPlot.js.map +1 -1
  725. package/dist/components/Plot/Plot.d.ts +12 -1
  726. package/dist/components/Plot/Plot.d.ts.map +1 -1
  727. package/dist/components/Plot/Plot.js +5 -1
  728. package/dist/components/Plot/Plot.js.map +1 -1
  729. package/dist/components/Plot/PlotPanelHeader.js.map +1 -1
  730. package/dist/components/Plot/SynapsePlot.js.map +1 -1
  731. package/dist/components/Plot/SynapseSankeyPlot.d.ts +12 -0
  732. package/dist/components/Plot/SynapseSankeyPlot.d.ts.map +1 -0
  733. package/dist/components/Plot/SynapseSankeyPlot.js +54 -0
  734. package/dist/components/Plot/SynapseSankeyPlot.js.map +1 -0
  735. package/dist/components/Plot/ThemesPlot.js.map +1 -1
  736. package/dist/components/Plot/UpsetPlot.js.map +1 -1
  737. package/dist/components/Plot/index.d.ts +3 -1
  738. package/dist/components/Plot/index.d.ts.map +1 -1
  739. package/dist/components/Plot/index.js +2 -1
  740. package/dist/components/Plot/safe-react-plotly-factory.js.map +1 -1
  741. package/dist/components/PortalAclEditor/PortalAclEditor.js.map +1 -1
  742. package/dist/components/PortalAclEditor/PortalAclEditorModal.js.map +1 -1
  743. package/dist/components/PortalFeatureHighlights/PortalFeatureHighlights.js.map +1 -1
  744. package/dist/components/PortalFeaturedPartners/PortalFeaturedPartners.js +4 -6
  745. package/dist/components/PortalFeaturedPartners/PortalFeaturedPartners.js.map +1 -1
  746. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.js.map +1 -1
  747. package/dist/components/PortalList/CreatePortalModal.js.map +1 -1
  748. package/dist/components/PortalList/PortalCard.js.map +1 -1
  749. package/dist/components/PortalList/PortalList.js.map +1 -1
  750. package/dist/components/PortalSectionHeader/PortalSectionHeader.js.map +1 -1
  751. package/dist/components/ProgrammaticInstructionsModal/ProgrammaticInstructionsModal.js +69 -69
  752. package/dist/components/ProgrammaticInstructionsModal/ProgrammaticInstructionsModal.js.map +1 -1
  753. package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js.map +1 -1
  754. package/dist/components/Programs/Programs.Desktop.js.map +1 -1
  755. package/dist/components/Programs/Programs.Mobile.js.map +1 -1
  756. package/dist/components/Programs/Programs.js.map +1 -1
  757. package/dist/components/ProjectStorage/ProjectDataAvailability.js.map +1 -1
  758. package/dist/components/ProvenanceGraph/ActivityNodeLabel.js.map +1 -1
  759. package/dist/components/ProvenanceGraph/EntityNodeLabel.js.map +1 -1
  760. package/dist/components/ProvenanceGraph/EntityPlaceholderNodeLabel.js.map +1 -1
  761. package/dist/components/ProvenanceGraph/ExpandGraphNodeLabel.js.map +1 -1
  762. package/dist/components/ProvenanceGraph/ExternalGraphNodeLabel.js.map +1 -1
  763. package/dist/components/ProvenanceGraph/ProvenanceEntityIcon.js.map +1 -1
  764. package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js.map +1 -1
  765. package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
  766. package/dist/components/ProvenanceGraph/ProvenanceGraphUtils.js.map +1 -1
  767. package/dist/components/ProvenanceGraph/ProvenanceUtils.js +13 -13
  768. package/dist/components/ProvenanceGraph/ProvenanceUtils.js.map +1 -1
  769. package/dist/components/ProvenanceGraph/UndefinedNodeLabel.js.map +1 -1
  770. package/dist/components/QueryContext/QueryContext.js.map +1 -1
  771. package/dist/components/QueryCount/QueryCount.js.map +1 -1
  772. package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
  773. package/dist/components/QuerySortSelector.js.map +1 -1
  774. package/dist/components/QueryVisualizationWrapper/NoContentPlaceholder.js.map +1 -1
  775. package/dist/components/QueryVisualizationWrapper/QueryVisualizationContext.js.map +1 -1
  776. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.d.ts.map +1 -1
  777. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js +67 -65
  778. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
  779. package/dist/components/QueryWrapper/QueryWrapper.js +27 -27
  780. package/dist/components/QueryWrapper/QueryWrapper.js.map +1 -1
  781. package/dist/components/QueryWrapper/QueryWrapperLoadingScreen.js.map +1 -1
  782. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js.map +1 -1
  783. package/dist/components/QueryWrapper/TableRowSelectionState.js.map +1 -1
  784. package/dist/components/QueryWrapper/ViewMoreQueryResultsButton.js.map +1 -1
  785. package/dist/components/QueryWrapper/generateEncodedPathAndQueryForSelectedFacetURL.js.map +1 -1
  786. package/dist/components/QueryWrapper/useComputeRowSelectionPrimaryKey.js.map +1 -1
  787. package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js.map +1 -1
  788. package/dist/components/QueryWrapper/useGetQueryMetadata.js.map +1 -1
  789. package/dist/components/QueryWrapper/useHasFacetedSelectColumn.js.map +1 -1
  790. package/dist/components/QueryWrapper/useOnQueryDataChange.js.map +1 -1
  791. package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
  792. package/dist/components/QueryWrapperPlotNav/LastUpdatedOn.js.map +1 -1
  793. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +1 -1
  794. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
  795. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +1 -0
  796. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  797. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js.map +1 -1
  798. package/dist/components/QueryWrapperPlotNav/RowSetView.js.map +1 -1
  799. package/dist/components/QueryWrapperPlotNav/UseRowSet.js.map +1 -1
  800. package/dist/components/RORInstitutionField/RORInstitutionField.js.map +1 -1
  801. package/dist/components/RecentPublicationsGrid/RecentPublicationsGrid.js +6 -8
  802. package/dist/components/RecentPublicationsGrid/RecentPublicationsGrid.js.map +1 -1
  803. package/dist/components/RegisterPageLogoutPrompt/RegisterPageLogoutPrompt.js.map +1 -1
  804. package/dist/components/ReleaseCard/ReleaseCard.js.map +1 -1
  805. package/dist/components/ReleaseCard/ReleaseCardLarge.js.map +1 -1
  806. package/dist/components/ReleaseCard/ReleaseCardMedium.js.map +1 -1
  807. package/dist/components/ReleaseCard/ReleaseCardUtils.js.map +1 -1
  808. package/dist/components/RenderIfInView/RenderIfInView.js.map +1 -1
  809. package/dist/components/ResizableContainer/ResizableContainer.js.map +1 -1
  810. package/dist/components/ResizableContainer/hooks/useResizable.js.map +1 -1
  811. package/dist/components/Resources/Resources.Desktop.js.map +1 -1
  812. package/dist/components/Resources/Resources.Mobile.js.map +1 -1
  813. package/dist/components/Resources/Resources.js +8 -11
  814. package/dist/components/Resources/Resources.js.map +1 -1
  815. package/dist/components/RowDataTable/RowDataTable.js.map +1 -1
  816. package/dist/components/RowDataTable/RowDataTableWithQuery.js.map +1 -1
  817. package/dist/components/RssFeedCards/RssFeedCards.js.map +1 -1
  818. package/dist/components/SageResourcesPopover/SageResourcesPopover.js.map +1 -1
  819. package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.js.map +1 -1
  820. package/dist/components/SchemaDrivenAnnotationEditor/SchemaDrivenAnnotationEditor.js.map +1 -1
  821. package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.js.map +1 -1
  822. package/dist/components/SchemaDrivenAnnotationEditor/field/SynapseAnnotationsRJSFObjectField.js.map +1 -1
  823. package/dist/components/SchemaDrivenAnnotationEditor/template/AdditionalPropertyContext.js.map +1 -1
  824. package/dist/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.js.map +1 -1
  825. package/dist/components/SchemaDrivenAnnotationEditor/template/SynapseAnnotationsWrapIfAdditionalTemplate.js.map +1 -1
  826. package/dist/components/SchemaDrivenAnnotationEditor/widget/TextWidget.js.map +1 -1
  827. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
  828. package/dist/components/SearchQueryWrapper/SearchQueryWrapper.js.map +1 -1
  829. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.d.ts +1 -1
  830. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.d.ts.map +1 -1
  831. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.js +1 -0
  832. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.js.map +1 -1
  833. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  834. package/dist/components/SetBasicAccessRequirementFields/AccessRequirementTextInstructions.js.map +1 -1
  835. package/dist/components/SetBasicAccessRequirementFields/AccessRequirementWikiInstructions.js.map +1 -1
  836. package/dist/components/SetBasicAccessRequirementFields/AccessorRequirements.js.map +1 -1
  837. package/dist/components/SetBasicAccessRequirementFields/GovernanceUtils.js.map +1 -1
  838. package/dist/components/SetBasicAccessRequirementFields/SetBasicAccessRequirementFields.js.map +1 -1
  839. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
  840. package/dist/components/ShareThisPage/ShareThisPage.js.map +1 -1
  841. package/dist/components/ShowMore/ShowMore.js.map +1 -1
  842. package/dist/components/SignInButton.js.map +1 -1
  843. package/dist/components/SignInRequiredModal/SignInRequiredModal.js.map +1 -1
  844. package/dist/components/Skeleton/SkeletonButton.js.map +1 -1
  845. package/dist/components/Skeleton/SkeletonInlineBlock.js.map +1 -1
  846. package/dist/components/Skeleton/SkeletonParagraph.js.map +1 -1
  847. package/dist/components/Skeleton/SkeletonTable.js.map +1 -1
  848. package/dist/components/SmartLink/SmartButton.js.map +1 -1
  849. package/dist/components/SmartLink/SmartLink.js.map +1 -1
  850. package/dist/components/SmartLink/useSmartLink.js.map +1 -1
  851. package/dist/components/SourceAppImage.js.map +1 -1
  852. package/dist/components/SpinnerButton/SpinnerButton.js.map +1 -1
  853. package/dist/components/SqlDefinedTableEditor/SqlDefinedTableEditor.js.map +1 -1
  854. package/dist/components/SqlDefinedTableEditor/SqlDefinedTableEditorModal.js.map +1 -1
  855. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.d.ts +1 -1
  856. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.d.ts.map +1 -1
  857. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js.map +1 -1
  858. package/dist/components/StatisticsPlot.js.map +1 -1
  859. package/dist/components/StepperDialog/StepperDialog.js.map +1 -1
  860. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  861. package/dist/components/SubmissionViewScopeEditor/SubmissionViewScopeEditor.js.map +1 -1
  862. package/dist/components/SubmissionViewScopeEditor/SubmissionViewScopeEditorModal.js.map +1 -1
  863. package/dist/components/SubscriptionPage/ForumTopic.js.map +1 -1
  864. package/dist/components/SubscriptionPage/SubscriptionItem.js.map +1 -1
  865. package/dist/components/SubscriptionPage/SubscriptionPage.js.map +1 -1
  866. package/dist/components/SubscriptionPage/ThreadTopic.js.map +1 -1
  867. package/dist/components/SubscriptionPage/Topic.js.map +1 -1
  868. package/dist/components/SubsectionRowRenderer/SubsectionRowRenderer.js.map +1 -1
  869. package/dist/components/SustainabilityScorecard/Dial.js.map +1 -1
  870. package/dist/components/SustainabilityScorecard/DialLayout.js.map +1 -1
  871. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
  872. package/dist/components/SustainabilityScorecard/SustainabilityScorecardSummary.js.map +1 -1
  873. package/dist/components/SustainabilityScorecard/SustainabilityScorecardUtils.js.map +1 -1
  874. package/dist/components/SynapseChat/AccessLevelMenu.js.map +1 -1
  875. package/dist/components/SynapseChat/GridAgentChat.js.map +1 -1
  876. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  877. package/dist/components/SynapseChat/SynapseChatDialog.js.map +1 -1
  878. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  879. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  880. package/dist/components/SynapseChat/SynapsePortalChatDialog.js.map +1 -1
  881. package/dist/components/SynapseChat/extractMessageFromTraceEvent.js.map +1 -1
  882. package/dist/components/SynapseChat/useChatState.js.map +1 -1
  883. package/dist/components/SynapseFooter/SynapseFooter.js.map +1 -1
  884. package/dist/components/SynapseFooter/SynapseLinksColumn.js.map +1 -1
  885. package/dist/components/SynapseForm/DataDebug.js.map +1 -1
  886. package/dist/components/SynapseForm/Header.js.map +1 -1
  887. package/dist/components/SynapseForm/NavButtons.js.map +1 -1
  888. package/dist/components/SynapseForm/StepsSideNav.js.map +1 -1
  889. package/dist/components/SynapseForm/SummaryTable.js.map +1 -1
  890. package/dist/components/SynapseForm/SynapseForm.js.map +1 -1
  891. package/dist/components/SynapseForm/SynapseFormCheckboxWidget.js.map +1 -1
  892. package/dist/components/SynapseForm/SynapseFormCheckboxesWidget.js.map +1 -1
  893. package/dist/components/SynapseForm/SynapseFormRadioWidget.js.map +1 -1
  894. package/dist/components/SynapseForm/SynapseFormSubmissionGrid.js.map +1 -1
  895. package/dist/components/SynapseForm/SynapseFormUtils.js.map +1 -1
  896. package/dist/components/SynapseForm/SynapseFormWrapper.js.map +1 -1
  897. package/dist/components/SynapseForm/WarningDialog.js.map +1 -1
  898. package/dist/components/SynapseForm/types.js.map +1 -1
  899. package/dist/components/SynapseForm/useGetFormPropsFromSearchParams.js.map +1 -1
  900. package/dist/components/SynapseHomepageV2/FloatingBlobsBackground.js.map +1 -1
  901. package/dist/components/SynapseHomepageV2/HomepageStyles.js.map +1 -1
  902. package/dist/components/SynapseHomepageV2/SynapseByTheNumbers.js.map +1 -1
  903. package/dist/components/SynapseHomepageV2/SynapseByTheNumbersItem.js.map +1 -1
  904. package/dist/components/SynapseHomepageV2/SynapseFeatureItem.js.map +1 -1
  905. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js.map +1 -1
  906. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasets.js.map +1 -1
  907. package/dist/components/SynapseHomepageV2/SynapseFeatures.js.map +1 -1
  908. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js +18 -21
  909. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js.map +1 -1
  910. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js.map +1 -1
  911. package/dist/components/SynapseHomepageV2/SynapseHomepageSearch.js.map +1 -1
  912. package/dist/components/SynapseHomepageV2/SynapseHomepageV2.js.map +1 -1
  913. package/dist/components/SynapseHomepageV2/SynapseHotdrops.js.map +1 -1
  914. package/dist/components/SynapseHomepageV2/SynapseHotdropsItem.js.map +1 -1
  915. package/dist/components/SynapseHomepageV2/SynapseInAction.js.map +1 -1
  916. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
  917. package/dist/components/SynapseHomepageV2/SynapsePartners.js.map +1 -1
  918. package/dist/components/SynapseHomepageV2/SynapsePlan.js.map +1 -1
  919. package/dist/components/SynapseHomepageV2/SynapsePlanContent.js.map +1 -1
  920. package/dist/components/SynapseHomepageV2/SynapsePlans.js.map +1 -1
  921. package/dist/components/SynapseHomepageV2/SynapsePlansPage.js.map +1 -1
  922. package/dist/components/SynapseHomepageV2/SynapseSearchChips.js.map +1 -1
  923. package/dist/components/SynapseHomepageV2/SynapseTrendingProjects.js.map +1 -1
  924. package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js.map +1 -1
  925. package/dist/components/SynapseHomepageV2/WordPressNews.js.map +1 -1
  926. package/dist/components/SynapseHomepageV2/WordPressNewsItem.js.map +1 -1
  927. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +78 -78
  928. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  929. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  930. package/dist/components/SynapseSearchPageResults/HasAccessChip.js.map +1 -1
  931. package/dist/components/SynapseSearchPageResults/HighlightedTypography.js.map +1 -1
  932. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanel.js.map +1 -1
  933. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js.map +1 -1
  934. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.js.map +1 -1
  935. package/dist/components/SynapseSearchPageResults/SynapseSearchPage.js.map +1 -1
  936. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
  937. package/dist/components/SynapseSearchPageResults/SynapseSearchPageRouter.js.map +1 -1
  938. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js.map +1 -1
  939. package/dist/components/SynapseSearchPageResults/chipStyles.js.map +1 -1
  940. package/dist/components/SynapseTable/CustomControls/CustomControlButton.js.map +1 -1
  941. package/dist/components/SynapseTable/CustomControls/CustomControlPanel.js.map +1 -1
  942. package/dist/components/SynapseTable/CustomControls/CustomControls.js.map +1 -1
  943. package/dist/components/SynapseTable/EntityIDColumnCopyIcon.js.map +1 -1
  944. package/dist/components/SynapseTable/ExpandCollapseButton.js.map +1 -1
  945. package/dist/components/SynapseTable/ExpandableTableDataCell.js.map +1 -1
  946. package/dist/components/SynapseTable/NoContentAvailable.js.map +1 -1
  947. package/dist/components/SynapseTable/NoContentPlaceholderType.js.map +1 -1
  948. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +4 -4
  949. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  950. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js.map +1 -1
  951. package/dist/components/SynapseTable/SearchResultsNotFound.js.map +1 -1
  952. package/dist/components/SynapseTable/SearchV2.js.map +1 -1
  953. package/dist/components/SynapseTable/SqlEditor.js.map +1 -1
  954. package/dist/components/SynapseTable/SynapseTable.js.map +1 -1
  955. package/dist/components/SynapseTable/SynapseTableCell/EntityIdList.js.map +1 -1
  956. package/dist/components/SynapseTable/SynapseTableCell/EvaluationIdRenderer.js.map +1 -1
  957. package/dist/components/SynapseTable/SynapseTableCell/JSON/ComplexJSONRenderer.js.map +1 -1
  958. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONArrayRenderer.js.map +1 -1
  959. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONObjectRenderer.js.map +1 -1
  960. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONPrimitiveRenderer.js.map +1 -1
  961. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONRendererUtils.js.map +1 -1
  962. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONTableCellRenderer.js.map +1 -1
  963. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js.map +1 -1
  964. package/dist/components/SynapseTable/SynapseTableCell/UserIdList.js.map +1 -1
  965. package/dist/components/SynapseTable/SynapseTableConstants.js.map +1 -1
  966. package/dist/components/SynapseTable/SynapseTableContext.js.map +1 -1
  967. package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
  968. package/dist/components/SynapseTable/SynapseTableUtils.js.map +1 -1
  969. package/dist/components/SynapseTable/TableIsEmpty.js.map +1 -1
  970. package/dist/components/SynapseTable/TablePagination.js.map +1 -1
  971. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
  972. package/dist/components/SynapseTable/TopLevelControls/TopLevelControlsUtils.js.map +1 -1
  973. package/dist/components/SynapseTable/datasets/DatasetEditorCheckboxCell.js.map +1 -1
  974. package/dist/components/SynapseTable/datasets/DatasetEditorUtils.js.map +1 -1
  975. package/dist/components/SynapseTable/datasets/DatasetEditorVersionCell.js.map +1 -1
  976. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +131 -133
  977. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  978. package/dist/components/SynapseTable/datasets/EntityFetchErrorCell.js.map +1 -1
  979. package/dist/components/SynapseTable/export/ADDiscoveryPortalInstructions.js.map +1 -1
  980. package/dist/components/SynapseTable/export/ExportToAnalysisPlatformDialog.js +48 -51
  981. package/dist/components/SynapseTable/export/ExportToAnalysisPlatformDialog.js.map +1 -1
  982. package/dist/components/SynapseTable/export/ExternalAnalysisPlatformInstructions.js.map +1 -1
  983. package/dist/components/SynapseTable/export/ExternalAnalysisPlatformsConstants.js.map +1 -1
  984. package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js.map +1 -1
  985. package/dist/components/SynapseTable/export/ExternalPlatformDisclaimer.js.map +1 -1
  986. package/dist/components/SynapseTable/table-top/ColumnSelection.js.map +1 -1
  987. package/dist/components/SynapseTable/table-top/DownloadLoginModal.js.map +1 -1
  988. package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
  989. package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
  990. package/dist/components/SynapseTable/useTableSort.js.map +1 -1
  991. package/dist/components/SystemUseNotification/SystemUseNotification.js.map +1 -1
  992. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +12 -12
  993. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  994. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/DefaultValueField.js.map +1 -1
  995. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/FieldWithRecommendedMinimum.js.map +1 -1
  996. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/MultiValueField.js +4 -4
  997. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/MultiValueField.js.map +1 -1
  998. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
  999. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditor.js.map +1 -1
  1000. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorTestUtils.js.map +1 -1
  1001. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  1002. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +32 -32
  1003. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  1004. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js.map +1 -1
  1005. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.js.map +1 -1
  1006. package/dist/components/TableColumnSchemaEditor/Validators/BooleanSchema.js.map +1 -1
  1007. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.js.map +1 -1
  1008. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js.map +1 -1
  1009. package/dist/components/TableColumnSchemaEditor/Validators/DefaultValueValidator.js.map +1 -1
  1010. package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.js.map +1 -1
  1011. package/dist/components/TableColumnSchemaEditor/Validators/EntityIdSchema.js.map +1 -1
  1012. package/dist/components/TableColumnSchemaEditor/Validators/EnumValuesValidator.js.map +1 -1
  1013. package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.js.map +1 -1
  1014. package/dist/components/TableColumnSchemaEditor/Validators/OptionalStringSchema.js.map +1 -1
  1015. package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.js.map +1 -1
  1016. package/dist/components/TableFeedCards/TableFeedCards.js.map +1 -1
  1017. package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
  1018. package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js.map +1 -1
  1019. package/dist/components/TanStackTable/StyledTanStackTable.js.map +1 -1
  1020. package/dist/components/TanStackTable/StyledVirtualTanStackTable.js.map +1 -1
  1021. package/dist/components/TanStackTable/TableBody.js.map +1 -1
  1022. package/dist/components/TanStackTable/TableCellRenderer.js.map +1 -1
  1023. package/dist/components/TanStackTable/TanStackTableUtils.js.map +1 -1
  1024. package/dist/components/TeamBadge.js.map +1 -1
  1025. package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js.map +1 -1
  1026. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
  1027. package/dist/components/TemplateComponent.js.map +1 -1
  1028. package/dist/components/TemporaryBanner/TemporaryBanner.js.map +1 -1
  1029. package/dist/components/TermsAndConditions/TermsAndConditions.js.map +1 -1
  1030. package/dist/components/TermsAndConditions/TermsAndConditionsItem.js.map +1 -1
  1031. package/dist/components/TextField/TextField.js.map +1 -1
  1032. package/dist/components/TextField/TextFieldWithWordLimit.js.map +1 -1
  1033. package/dist/components/TextToComponentCollapse.js.map +1 -1
  1034. package/dist/components/ThemeGallery/ThemeGallery.js.map +1 -1
  1035. package/dist/components/TimelinePlot/TimelineLegendItem.js.map +1 -1
  1036. package/dist/components/TimelinePlot/TimelinePhase.js.map +1 -1
  1037. package/dist/components/TimelinePlot/TimelinePlot.js.map +1 -1
  1038. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js.map +1 -1
  1039. package/dist/components/TimelinePlot/phasesQueryResponseData.js.map +1 -1
  1040. package/dist/components/ToastMessage/ToastMessage.js.map +1 -1
  1041. package/dist/components/TotalQueryResults.js.map +1 -1
  1042. package/dist/components/UserCard/Avatar.js.map +1 -1
  1043. package/dist/components/UserCard/UserBadge.js.map +1 -1
  1044. package/dist/components/UserCard/UserCard.js.map +1 -1
  1045. package/dist/components/UserCard/UserCardContextMenu.js.map +1 -1
  1046. package/dist/components/UserCard/UserCardLarge.js.map +1 -1
  1047. package/dist/components/UserCard/UserCardMedium.js.map +1 -1
  1048. package/dist/components/UserCardList/UserCardList.js.map +1 -1
  1049. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Desktop.js.map +1 -1
  1050. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Mobile.js.map +1 -1
  1051. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.js.map +1 -1
  1052. package/dist/components/UserCardList/UserCardListRotate.js.map +1 -1
  1053. package/dist/components/UserOrTeamBadge/UserOrTeamBadge.js.map +1 -1
  1054. package/dist/components/UserOrTeamBadge/useUserOrTeam.js.map +1 -1
  1055. package/dist/components/UserProfileLinks/UserChallenges.js.map +1 -1
  1056. package/dist/components/UserProfileLinks/UserProfileLinks.js.map +1 -1
  1057. package/dist/components/UserProfileLinks/UserProjects.js.map +1 -1
  1058. package/dist/components/UserProfileLinks/UserTeams.js.map +1 -1
  1059. package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -1
  1060. package/dist/components/Webhook/CreateWebhookModal.js.map +1 -1
  1061. package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
  1062. package/dist/components/Webhook/WebhookVerificationDialog.js.map +1 -1
  1063. package/dist/components/WikiMarkdownEditor/WikiMarkdownEditor.js.map +1 -1
  1064. package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js.map +1 -1
  1065. package/dist/components/WizardChoiceButton/WizardChoiceButton.js.map +1 -1
  1066. package/dist/components/WizardChoiceButton/WizardChoiceButtonDescription.js.map +1 -1
  1067. package/dist/components/WizardChoiceButton/WizardChoiceButtonGroup.js.map +1 -1
  1068. package/dist/components/WordPress/WordPressLatestPostChip.js.map +1 -1
  1069. package/dist/components/WordPress/useWordPressCategories.js.map +1 -1
  1070. package/dist/components/WordPress/useWordPressPosts.js.map +1 -1
  1071. package/dist/components/dataaccess/AccessApprovalsTable.js.map +1 -1
  1072. package/dist/components/dataaccess/AccessHistoryDashboard.js.map +1 -1
  1073. package/dist/components/dataaccess/AccessRequestSubmissionTable.js.map +1 -1
  1074. package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
  1075. package/dist/components/dataaccess/AccessRequirementSearchBox/AccessRequirementSearchBox.js.map +1 -1
  1076. package/dist/components/dataaccess/AccessRequirementTable.js.map +1 -1
  1077. package/dist/components/dataaccess/AccessSubmissionDashboard.js.map +1 -1
  1078. package/dist/components/dataaccess/RejectDataAccessRequestModal.js.map +1 -1
  1079. package/dist/components/dataaccess/RejectProfileValidationRequestModal.js.map +1 -1
  1080. package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
  1081. package/dist/components/dataaccess/SubmissionPage/ApproveSubmissionConfirmationModal.js.map +1 -1
  1082. package/dist/components/dataaccess/SubmissionPage/CancelDataAccessRequestConfirmationModal.js.map +1 -1
  1083. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js.map +1 -1
  1084. package/dist/components/dataaccess/UseAccessRequirementTable.js.map +1 -1
  1085. package/dist/components/dataaccess/UserAccessRequestHistory/SubmissionSortStateTranslator.js.map +1 -1
  1086. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js.map +1 -1
  1087. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js.map +1 -1
  1088. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.js.map +1 -1
  1089. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  1090. package/dist/components/doi/DoiFormSchemas.js.map +1 -1
  1091. package/dist/components/doi/PrivateEntityDoiWarning.js.map +1 -1
  1092. package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js.map +1 -1
  1093. package/dist/components/download_list/DownloadConfirmationUI.js +30 -32
  1094. package/dist/components/download_list/DownloadConfirmationUI.js.map +1 -1
  1095. package/dist/components/download_list/DownloadConfirmationUtils.js.map +1 -1
  1096. package/dist/components/download_list/DownloadDetails.js.map +1 -1
  1097. package/dist/components/download_list/index.js.map +1 -1
  1098. package/dist/components/entity/metadata/AnnotationsTable.js.map +1 -1
  1099. package/dist/components/entity/metadata/EntityAnnotationKey.js.map +1 -1
  1100. package/dist/components/entity/metadata/EntityModal.js.map +1 -1
  1101. package/dist/components/entity/metadata/MetadataTable.js.map +1 -1
  1102. package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
  1103. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  1104. package/dist/components/entity/page/breadcrumbs/EntityPageBreadcrumbs.js.map +1 -1
  1105. package/dist/components/entity/page/title_bar/CitationsDialog.js.map +1 -1
  1106. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js.map +1 -1
  1107. package/dist/components/entity/page/title_bar/EntityTitleBarVersionInfo.js.map +1 -1
  1108. package/dist/components/entity/page/title_bar/TitleBarProperties.js.map +1 -1
  1109. package/dist/components/entity/page/title_bar/useDataCiteUsage.js.map +1 -1
  1110. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
  1111. package/dist/components/entity/page/title_bar/useGetMentions.js.map +1 -1
  1112. package/dist/components/error/ErrorBanner.js.map +1 -1
  1113. package/dist/components/error/ErrorChip.js.map +1 -1
  1114. package/dist/components/error/ErrorPage.js +24 -24
  1115. package/dist/components/error/ErrorPage.js.map +1 -1
  1116. package/dist/components/error/RouteErrorBoundary.js.map +1 -1
  1117. package/dist/components/error/SendMessageToEntityOwnerDialog.js.map +1 -1
  1118. package/dist/components/error/SynapseObjectDOIInfo.js.map +1 -1
  1119. package/dist/components/favorites/FavoriteButton.js.map +1 -1
  1120. package/dist/components/favorites/FavoritesPage.js.map +1 -1
  1121. package/dist/components/file/upload/BasicFileHandleUpload.js.map +1 -1
  1122. package/dist/components/file/upload/MultiFileUploadProgress.js.map +1 -1
  1123. package/dist/components/file/upload/UploadFilePanel.js.map +1 -1
  1124. package/dist/components/form/RadioGroupWithOtherString.js.map +1 -1
  1125. package/dist/components/home_page/ExpandableContent.js.map +1 -1
  1126. package/dist/components/index.js +48 -47
  1127. package/dist/components/layout/InfiniteTableLayout.js.map +1 -1
  1128. package/dist/components/layout/SWCHeader.js.map +1 -1
  1129. package/dist/components/layout/SWCPageLayout.js.map +1 -1
  1130. package/dist/components/menu/ComplexMenu.js.map +1 -1
  1131. package/dist/components/menu/DropdownMenu.js.map +1 -1
  1132. package/dist/components/row_renderers/Dataset.js.map +1 -1
  1133. package/dist/components/row_renderers/Funder.js.map +1 -1
  1134. package/dist/components/row_renderers/ObservationCard.js.map +1 -1
  1135. package/dist/components/row_renderers/utils/CardFooter.js.map +1 -1
  1136. package/dist/components/row_renderers/utils/ChipContainer.js.map +1 -1
  1137. package/dist/components/styled/HoverPopover.js.map +1 -1
  1138. package/dist/components/styled/InlineBadge.js.map +1 -1
  1139. package/dist/components/styled/InputSizedButton.js.map +1 -1
  1140. package/dist/components/styled/LargeButton.js.map +1 -1
  1141. package/dist/components/styled/LeftRightPanel.js.map +1 -1
  1142. package/dist/components/styled/LightTooltip.js.map +1 -1
  1143. package/dist/components/styled/StyledFormControl.js.map +1 -1
  1144. package/dist/components/styled/StyledPopover.js.map +1 -1
  1145. package/dist/components/styled/StyledTableContainer.js.map +1 -1
  1146. package/dist/components/styled/WideButton.js.map +1 -1
  1147. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.d.ts +18 -0
  1148. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.d.ts.map +1 -0
  1149. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js +113 -0
  1150. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js.map +1 -0
  1151. package/dist/components/table/CsvPreview/CsvPreview.js.map +1 -1
  1152. package/dist/components/table/CsvPreview/CsvPreviewDialog.d.ts +5 -5
  1153. package/dist/components/table/CsvPreview/CsvPreviewDialog.d.ts.map +1 -1
  1154. package/dist/components/table/CsvPreview/CsvPreviewDialog.js +27 -76
  1155. package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
  1156. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.d.ts +19 -0
  1157. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.d.ts.map +1 -0
  1158. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js +41 -0
  1159. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js.map +1 -0
  1160. package/dist/components/table/CsvPreview/CsvUploadPreviewContent.d.ts +12 -0
  1161. package/dist/components/table/CsvPreview/CsvUploadPreviewContent.d.ts.map +1 -0
  1162. package/dist/components/table/CsvPreview/CsvUploadPreviewContent.js +25 -0
  1163. package/dist/components/table/CsvPreview/CsvUploadPreviewContent.js.map +1 -0
  1164. package/dist/components/table/CsvPreview/UpdateTableWithCsvDialog.d.ts +18 -0
  1165. package/dist/components/table/CsvPreview/UpdateTableWithCsvDialog.d.ts.map +1 -0
  1166. package/dist/components/table/CsvPreview/UpdateTableWithCsvDialog.js +55 -0
  1167. package/dist/components/table/CsvPreview/UpdateTableWithCsvDialog.js.map +1 -0
  1168. package/dist/components/table/CsvPreview/useCreateTableFromCsv.d.ts +19 -0
  1169. package/dist/components/table/CsvPreview/useCreateTableFromCsv.d.ts.map +1 -0
  1170. package/dist/components/table/CsvPreview/useCreateTableFromCsv.js +35 -0
  1171. package/dist/components/table/CsvPreview/useCreateTableFromCsv.js.map +1 -0
  1172. package/dist/components/table/CsvPreview/useCsvUploadPreview.d.ts +22 -0
  1173. package/dist/components/table/CsvPreview/useCsvUploadPreview.d.ts.map +1 -0
  1174. package/dist/components/table/CsvPreview/useCsvUploadPreview.js +32 -0
  1175. package/dist/components/table/CsvPreview/useCsvUploadPreview.js.map +1 -0
  1176. package/dist/components/table/CsvPreview/useUploadCsvToExistingTable.d.ts +14 -0
  1177. package/dist/components/table/CsvPreview/useUploadCsvToExistingTable.d.ts.map +1 -0
  1178. package/dist/components/table/CsvPreview/useUploadCsvToExistingTable.js +23 -0
  1179. package/dist/components/table/CsvPreview/useUploadCsvToExistingTable.js.map +1 -0
  1180. package/dist/components/table/CsvTableDescriptorForm/CsvTableDescriptorForm.js.map +1 -1
  1181. package/dist/components/trash/TrashCanList.js.map +1 -1
  1182. package/dist/components/utils/Blocker.js.map +1 -1
  1183. package/dist/components/utils/ConditionalWrapper.js.map +1 -1
  1184. package/dist/components/utils/VisibilityObserver.js.map +1 -1
  1185. package/dist/components/widgets/ElementWithTooltip.js.map +1 -1
  1186. package/dist/components/widgets/EntityColumnImage.js.map +1 -1
  1187. package/dist/components/widgets/FileHandleLink.js.map +1 -1
  1188. package/dist/components/widgets/ImageFileHandle.js.map +1 -1
  1189. package/dist/components/widgets/LoginAwareButton.js.map +1 -1
  1190. package/dist/components/widgets/Range.js.map +1 -1
  1191. package/dist/components/widgets/RangeSlider/RangeSlider.js.map +1 -1
  1192. package/dist/components/widgets/SynapseImage.js.map +1 -1
  1193. package/dist/components/widgets/SynapseVideo.js.map +1 -1
  1194. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  1195. package/dist/components/widgets/facet-nav/FacetPlotLegendList.js.map +1 -1
  1196. package/dist/components/widgets/facet-nav/FacetPlotLegendTable.js.map +1 -1
  1197. package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.js.map +1 -1
  1198. package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
  1199. package/dist/components/widgets/facet-nav/PlotsContainerSkeleton.js.map +1 -1
  1200. package/dist/components/widgets/facet-nav/SelectionCriteriaPill.js.map +1 -1
  1201. package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js.map +1 -1
  1202. package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
  1203. package/dist/components/widgets/query-filter/CombinedRangeFacetFilter.js.map +1 -1
  1204. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
  1205. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterDropdown.js.map +1 -1
  1206. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js.map +1 -1
  1207. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterSkeleton.js.map +1 -1
  1208. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js.map +1 -1
  1209. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.js.map +1 -1
  1210. package/dist/components/widgets/query-filter/FacetChip.js.map +1 -1
  1211. package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
  1212. package/dist/components/widgets/query-filter/FacetFilterHeader.js.map +1 -1
  1213. package/dist/components/widgets/query-filter/FacetFilterSkeleton.js.map +1 -1
  1214. package/dist/components/widgets/query-filter/FacetFilterUtils.js.map +1 -1
  1215. package/dist/components/widgets/query-filter/JsonColumnFacetFilters.js.map +1 -1
  1216. package/dist/components/widgets/query-filter/RangeFacetFilter.js +3 -3
  1217. package/dist/components/widgets/query-filter/RangeFacetFilter.js.map +1 -1
  1218. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js +41 -41
  1219. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js.map +1 -1
  1220. package/dist/features/curator/GridPage/GridPage.js.map +1 -1
  1221. package/dist/features/curator/GridPage/components/GridPageRouter.js.map +1 -1
  1222. package/dist/features/curator/GridPage/components/GridPageTitle.js.map +1 -1
  1223. package/dist/features/curator/GridPage/components/UpdateGridPageSearchParamsForm.js.map +1 -1
  1224. package/dist/features/curator/dashboard/CuratorDashboard.js.map +1 -1
  1225. package/dist/features/curator/dashboard/components/CurationTaskCard.js.map +1 -1
  1226. package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -1
  1227. package/dist/features/curator/dashboard/components/UserOrTeamChip.js.map +1 -1
  1228. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts +5 -0
  1229. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts.map +1 -1
  1230. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +227 -181
  1231. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
  1232. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts.map +1 -1
  1233. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +3 -0
  1234. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  1235. package/dist/features/entity/metadata-task/components/MetadataTasksPage.d.ts.map +1 -1
  1236. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +37 -34
  1237. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
  1238. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
  1239. package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.js.map +1 -1
  1240. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js.map +1 -1
  1241. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.js.map +1 -1
  1242. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.d.ts.map +1 -1
  1243. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +1 -1
  1244. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js.map +1 -1
  1245. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js.map +1 -1
  1246. package/dist/features/entity/metadata-task/utils/constants.d.ts +11 -3
  1247. package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -1
  1248. package/dist/features/entity/metadata-task/utils/constants.js +2 -2
  1249. package/dist/features/entity/metadata-task/utils/constants.js.map +1 -1
  1250. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.js.map +1 -1
  1251. package/dist/features/entity/metadata-task/utils/getGridSourceIdForTask.js.map +1 -1
  1252. package/dist/features/entity/metadata-task/utils/getLatestGridSessionForSource.js.map +1 -1
  1253. package/dist/features/entity/metadata-task/utils/taskHasAssignee.js.map +1 -1
  1254. package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js.map +1 -1
  1255. package/dist/index.js +54 -53
  1256. package/dist/index.js.map +1 -1
  1257. package/dist/mocks/MockAccessApprovals.js.map +1 -1
  1258. package/dist/mocks/MockSynapseContext.js.map +1 -1
  1259. package/dist/mocks/accessRequirement/mockAccessRequirementAcls.js.map +1 -1
  1260. package/dist/mocks/accessRequirement/mockAccessRequirements.js.map +1 -1
  1261. package/dist/mocks/applicationSessionContext/MockApplicationSessionContext.js.map +1 -1
  1262. package/dist/mocks/challenge/mockChallenge.js.map +1 -1
  1263. package/dist/mocks/chat/mockChat.js.map +1 -1
  1264. package/dist/mocks/curation/mockCurationTask.js.map +1 -1
  1265. package/dist/mocks/dataaccess/MockDataAccessRequest.js.map +1 -1
  1266. package/dist/mocks/dataaccess/MockResearchProject.js.map +1 -1
  1267. package/dist/mocks/dataaccess/MockSubmission.js.map +1 -1
  1268. package/dist/mocks/dataaccess/mockAccessRequest.js.map +1 -1
  1269. package/dist/mocks/discussion/mock_discussion.js.map +1 -1
  1270. package/dist/mocks/doi/MockDoi.js.map +1 -1
  1271. package/dist/mocks/entity/index.js.map +1 -1
  1272. package/dist/mocks/entity/mockDataset.js.map +1 -1
  1273. package/dist/mocks/entity/mockDatasetCollection.js.map +1 -1
  1274. package/dist/mocks/entity/mockEntity.js.map +1 -1
  1275. package/dist/mocks/entity/mockEvaluationQueue.js.map +1 -1
  1276. package/dist/mocks/entity/mockFileEntity.js.map +1 -1
  1277. package/dist/mocks/entity/mockFileEntityACLVariants.js.map +1 -1
  1278. package/dist/mocks/entity/mockFileView.js.map +1 -1
  1279. package/dist/mocks/entity/mockGeneratedEntityData.js.map +1 -1
  1280. package/dist/mocks/entity/mockProject.js.map +1 -1
  1281. package/dist/mocks/entity/mockProjectView.js.map +1 -1
  1282. package/dist/mocks/entity/mockReleaseCardsTable.js.map +1 -1
  1283. package/dist/mocks/entity/mockRootEntity.js.map +1 -1
  1284. package/dist/mocks/entity/mockTableEntity.js.map +1 -1
  1285. package/dist/mocks/faker/fakerUtils.js.map +1 -1
  1286. package/dist/mocks/faker/generateDiscussion.js.map +1 -1
  1287. package/dist/mocks/faker/generateEvaluation.js.map +1 -1
  1288. package/dist/mocks/faker/generateFakeEntity.js.map +1 -1
  1289. package/dist/mocks/faker/generateSubscription.js.map +1 -1
  1290. package/dist/mocks/mockAnnotationColumns.js.map +1 -1
  1291. package/dist/mocks/mockCertificationQuiz.js.map +1 -1
  1292. package/dist/mocks/mockDataCatalogQuery.js.map +1 -1
  1293. package/dist/mocks/mockFileViewQuery.js.map +1 -1
  1294. package/dist/mocks/mockOAuthClientAcls.js.map +1 -1
  1295. package/dist/mocks/mockQueryResponseData.js.map +1 -1
  1296. package/dist/mocks/mockQueryResponseDataWithManyEnumFacets.js.map +1 -1
  1297. package/dist/mocks/mockSchema.js.map +1 -1
  1298. package/dist/mocks/mockSearchQueryData.js.map +1 -1
  1299. package/dist/mocks/mockShortIo.js.map +1 -1
  1300. package/dist/mocks/mockSourceAppConfigQuery.js.map +1 -1
  1301. package/dist/mocks/mockSubscription.js.map +1 -1
  1302. package/dist/mocks/mockWiki.js.map +1 -1
  1303. package/dist/mocks/mockWikiPageKey.js.map +1 -1
  1304. package/dist/mocks/mock_drug_tool_data.js.map +1 -1
  1305. package/dist/mocks/mock_file_handle.js.map +1 -1
  1306. package/dist/mocks/mock_file_statistics.js.map +1 -1
  1307. package/dist/mocks/mock_has_access_data.js.map +1 -1
  1308. package/dist/mocks/mock_upload_destination.js.map +1 -1
  1309. package/dist/mocks/msw/handlers/accessRequirementAclHandlers.js.map +1 -1
  1310. package/dist/mocks/msw/handlers/accessRequirementHandlers.js.map +1 -1
  1311. package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
  1312. package/dist/mocks/msw/handlers/authHandlers.js.map +1 -1
  1313. package/dist/mocks/msw/handlers/challengeHandlers.js.map +1 -1
  1314. package/dist/mocks/msw/handlers/changePasswordHandlers.js.map +1 -1
  1315. package/dist/mocks/msw/handlers/chatHandlers.js.map +1 -1
  1316. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js.map +1 -1
  1317. package/dist/mocks/msw/handlers/dataciteHandlers.js.map +1 -1
  1318. package/dist/mocks/msw/handlers/discussionHandlers.js.map +1 -1
  1319. package/dist/mocks/msw/handlers/doiHandlers.js.map +1 -1
  1320. package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
  1321. package/dist/mocks/msw/handlers/evaluationHandlers.js.map +1 -1
  1322. package/dist/mocks/msw/handlers/featureFlagHandlers.js.map +1 -1
  1323. package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
  1324. package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
  1325. package/dist/mocks/msw/handlers/messageHandlers.js.map +1 -1
  1326. package/dist/mocks/msw/handlers/oauthClientAclHandlers.js.map +1 -1
  1327. package/dist/mocks/msw/handlers/personalAccessTokenHandlers.js.map +1 -1
  1328. package/dist/mocks/msw/handlers/projectStorageHandlers.js.map +1 -1
  1329. package/dist/mocks/msw/handlers/realmHandlers.js.map +1 -1
  1330. package/dist/mocks/msw/handlers/researchProjectHandlers.js.map +1 -1
  1331. package/dist/mocks/msw/handlers/resetTwoFactorAuthHandlers.js.map +1 -1
  1332. package/dist/mocks/msw/handlers/schemaHandlers.js.map +1 -1
  1333. package/dist/mocks/msw/handlers/searchQueryHandlers.js.map +1 -1
  1334. package/dist/mocks/msw/handlers/shortIoHandlers.js.map +1 -1
  1335. package/dist/mocks/msw/handlers/subscriptionHandlers.js.map +1 -1
  1336. package/dist/mocks/msw/handlers/tableQueryHandlers.js.map +1 -1
  1337. package/dist/mocks/msw/handlers/tableQueryService.js.map +1 -1
  1338. package/dist/mocks/msw/handlers/teamHandlers.js.map +1 -1
  1339. package/dist/mocks/msw/handlers/termsOfServiceHandlers.js.map +1 -1
  1340. package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
  1341. package/dist/mocks/msw/handlers/webhookHandlers.js.map +1 -1
  1342. package/dist/mocks/msw/handlers/wikiHandlers.js.map +1 -1
  1343. package/dist/mocks/msw/handlers.js.map +1 -1
  1344. package/dist/mocks/msw/server.d.ts +1 -1
  1345. package/dist/mocks/msw/server.d.ts.map +1 -1
  1346. package/dist/mocks/msw/server.js.map +1 -1
  1347. package/dist/mocks/msw/util/BasicMockedCrudService.js.map +1 -1
  1348. package/dist/mocks/oauth/MockClient.js.map +1 -1
  1349. package/dist/mocks/personalAccessToken/mockPersonalAccessToken.js.map +1 -1
  1350. package/dist/mocks/projectStorage/mockProjectStorageLimits.js.map +1 -1
  1351. package/dist/mocks/provenance/mockActivity.js.map +1 -1
  1352. package/dist/mocks/query/defaultFileViewColumnModels.js.map +1 -1
  1353. package/dist/mocks/query/mockFeaturedDataTabsQueryData.js.map +1 -1
  1354. package/dist/mocks/query/mockHomepageQueryResultData.js.map +1 -1
  1355. package/dist/mocks/query/mockProjectViewQueryResults.js.map +1 -1
  1356. package/dist/mocks/query/mockRejectionReasonsTableQueryResultBundle.js.map +1 -1
  1357. package/dist/mocks/query/mockReleaseCardsTableQueryResultBundle.js.map +1 -1
  1358. package/dist/mocks/query/mockUserCardTableQueryResultBundle.js.map +1 -1
  1359. package/dist/mocks/query/mock_query_data.js.map +1 -1
  1360. package/dist/mocks/query/syn16787123.js.map +1 -1
  1361. package/dist/mocks/query/syn17328596.js.map +1 -1
  1362. package/dist/mocks/query/syn51735464.js.map +1 -1
  1363. package/dist/mocks/query/syn51735464GroupBySpecies.js.map +1 -1
  1364. package/dist/mocks/realm/mockRealmPrincipal.js.map +1 -1
  1365. package/dist/mocks/team/mockTeam.js.map +1 -1
  1366. package/dist/mocks/termsOfService/mockTermsOfService.js.map +1 -1
  1367. package/dist/mocks/user/mock_user_profile.js.map +1 -1
  1368. package/dist/mocks/usergroup/mockUserGroup.js.map +1 -1
  1369. package/dist/ror-client/index.js.map +1 -1
  1370. package/dist/stories/ColorPaletteInspector.js.map +1 -1
  1371. package/dist/stories/ToastDemo.js.map +1 -1
  1372. package/dist/stories/stubs/Alert/MuiAlert.js.map +1 -1
  1373. package/dist/stories/stubs/Button/MuiButton.js.map +1 -1
  1374. package/dist/stories/stubs/Dialog/MuiDialog.js.map +1 -1
  1375. package/dist/stories/stubs/TextField/MuiTextField.js.map +1 -1
  1376. package/dist/stories/stubs/Tooltip/MuiTooltip.js.map +1 -1
  1377. package/dist/synapse-client/HttpClient.js.map +1 -1
  1378. package/dist/synapse-client/SynapseClient.d.ts.map +1 -1
  1379. package/dist/synapse-client/SynapseClient.js +61 -69
  1380. package/dist/synapse-client/SynapseClient.js.map +1 -1
  1381. package/dist/synapse-client/SynapseClientUtils.js.map +1 -1
  1382. package/dist/synapse-queries/InfiniteQueryUtils.js.map +1 -1
  1383. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  1384. package/dist/synapse-queries/QueryFilterUtils.js.map +1 -1
  1385. package/dist/synapse-queries/QueryMatching.test-utils.js.map +1 -1
  1386. package/dist/synapse-queries/asynchronous/usePollAsynchronousJob.js.map +1 -1
  1387. package/dist/synapse-queries/auth/useChangePassword.js.map +1 -1
  1388. package/dist/synapse-queries/auth/useOIDC.js.map +1 -1
  1389. package/dist/synapse-queries/auth/useResetPassword.js.map +1 -1
  1390. package/dist/synapse-queries/auth/useTwoFactorEnrollment.js.map +1 -1
  1391. package/dist/synapse-queries/challenge/useChallenge.js.map +1 -1
  1392. package/dist/synapse-queries/chat/useChat.js.map +1 -1
  1393. package/dist/synapse-queries/croissant/useGetCroissantUrl.js.map +1 -1
  1394. package/dist/synapse-queries/curation/task/useCurationTask.d.ts +1 -0
  1395. package/dist/synapse-queries/curation/task/useCurationTask.d.ts.map +1 -1
  1396. package/dist/synapse-queries/curation/task/useCurationTask.js +12 -2
  1397. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  1398. package/dist/synapse-queries/dataaccess/useAccessApprovals.js.map +1 -1
  1399. package/dist/synapse-queries/dataaccess/useAccessRequirements.js.map +1 -1
  1400. package/dist/synapse-queries/dataaccess/useDataAccessSubmission.js.map +1 -1
  1401. package/dist/synapse-queries/dataaccess/useGetApprovedSubmissionInfo.js.map +1 -1
  1402. package/dist/synapse-queries/dataaccess/useRestrictionInformation.js.map +1 -1
  1403. package/dist/synapse-queries/docker/useGetDockerTag.js.map +1 -1
  1404. package/dist/synapse-queries/doi/useDOI.js.map +1 -1
  1405. package/dist/synapse-queries/download/useDownloadList.js.map +1 -1
  1406. package/dist/synapse-queries/entity/useActionsRequiredForTableQuery.js.map +1 -1
  1407. package/dist/synapse-queries/entity/useEntity.js.map +1 -1
  1408. package/dist/synapse-queries/entity/useEntityBoundSchema.js.map +1 -1
  1409. package/dist/synapse-queries/entity/useEntityBundle.js.map +1 -1
  1410. package/dist/synapse-queries/entity/useExportTableQueryToAnalysisPlatform.js.map +1 -1
  1411. package/dist/synapse-queries/entity/useExportToADWorkbench.js.map +1 -1
  1412. package/dist/synapse-queries/entity/useExportToCavatica.js.map +1 -1
  1413. package/dist/synapse-queries/entity/useExportToPluto.js.map +1 -1
  1414. package/dist/synapse-queries/entity/useExportToTerra.js.map +1 -1
  1415. package/dist/synapse-queries/entity/useGetEntityActionsRequired.js.map +1 -1
  1416. package/dist/synapse-queries/entity/useGetEntityChallenge.js.map +1 -1
  1417. package/dist/synapse-queries/entity/useGetEntityChildren.js.map +1 -1
  1418. package/dist/synapse-queries/entity/useGetEntityForum.js.map +1 -1
  1419. package/dist/synapse-queries/entity/useGetEntityHeaders.js.map +1 -1
  1420. package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
  1421. package/dist/synapse-queries/entity/useProjectStorage.js.map +1 -1
  1422. package/dist/synapse-queries/entity/useSchema.js.map +1 -1
  1423. package/dist/synapse-queries/evaluation/useEvaluation.js.map +1 -1
  1424. package/dist/synapse-queries/featureflags/useGetFeatureFlag.js.map +1 -1
  1425. package/dist/synapse-queries/file/UploadToS3.js.map +1 -1
  1426. package/dist/synapse-queries/file/useDirectUploadToS3.js.map +1 -1
  1427. package/dist/synapse-queries/file/useFileHandle.js.map +1 -1
  1428. package/dist/synapse-queries/file/useFiles.js.map +1 -1
  1429. package/dist/synapse-queries/file/useSynapseMultipartUpload.js.map +1 -1
  1430. package/dist/synapse-queries/file/useUploadDestination.js.map +1 -1
  1431. package/dist/synapse-queries/forum/useForum.js.map +1 -1
  1432. package/dist/synapse-queries/forum/useReply.js.map +1 -1
  1433. package/dist/synapse-queries/forum/useThread.js.map +1 -1
  1434. package/dist/synapse-queries/github/useGithub.js.map +1 -1
  1435. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
  1436. package/dist/synapse-queries/grid/useExportGrid.js.map +1 -1
  1437. package/dist/synapse-queries/grid/useGridPresignedUrl.js.map +1 -1
  1438. package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
  1439. package/dist/synapse-queries/grid/useImportCsvIntoGrid.js.map +1 -1
  1440. package/dist/synapse-queries/message/useMessage.js.map +1 -1
  1441. package/dist/synapse-queries/oauth/useOAuthClient.js.map +1 -1
  1442. package/dist/synapse-queries/portal/useListPortals.js.map +1 -1
  1443. package/dist/synapse-queries/portal/usePortal.js.map +1 -1
  1444. package/dist/synapse-queries/provenance/useGetActivityForEntity.js.map +1 -1
  1445. package/dist/synapse-queries/realm/useRealmPrincipals.js.map +1 -1
  1446. package/dist/synapse-queries/ror/index.js.map +1 -1
  1447. package/dist/synapse-queries/search/useSearch.js.map +1 -1
  1448. package/dist/synapse-queries/search/useSuggestion.js.map +1 -1
  1449. package/dist/synapse-queries/subscription/useSubscription.js.map +1 -1
  1450. package/dist/synapse-queries/table/useColumnModel.js.map +1 -1
  1451. package/dist/synapse-queries/table/useDefiningSql.js.map +1 -1
  1452. package/dist/synapse-queries/table/useDownloadTable.js.map +1 -1
  1453. package/dist/synapse-queries/table/useGetCsvPreview.js.map +1 -1
  1454. package/dist/synapse-queries/table/useTableUpdateTransaction.js.map +1 -1
  1455. package/dist/synapse-queries/team/useTeam.js.map +1 -1
  1456. package/dist/synapse-queries/team/useTeamList.js.map +1 -1
  1457. package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
  1458. package/dist/synapse-queries/termsOfService/useTermsOfService.js.map +1 -1
  1459. package/dist/synapse-queries/trash/useTrashCan.js.map +1 -1
  1460. package/dist/synapse-queries/user/useCertificationQuiz.js.map +1 -1
  1461. package/dist/synapse-queries/user/useFavorites.js.map +1 -1
  1462. package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
  1463. package/dist/synapse-queries/user/useGetUserProjects.js.map +1 -1
  1464. package/dist/synapse-queries/user/useGetUserTeams.js.map +1 -1
  1465. package/dist/synapse-queries/user/usePersonalAccessToken.js.map +1 -1
  1466. package/dist/synapse-queries/user/useProjects.js.map +1 -1
  1467. package/dist/synapse-queries/user/useRevokeCertification.js.map +1 -1
  1468. package/dist/synapse-queries/user/useUserBundle.js.map +1 -1
  1469. package/dist/synapse-queries/user/useUserGroupHeader.js.map +1 -1
  1470. package/dist/synapse-queries/verificationSubmission/useVerificationSubmission.js.map +1 -1
  1471. package/dist/synapse-queries/webhook/useWebhook.js.map +1 -1
  1472. package/dist/synapse-queries/wiki/useWiki.js.map +1 -1
  1473. package/dist/testutils/ComponentToBePassedPropsCustomMatcher.js.map +1 -1
  1474. package/dist/testutils/IsEditingStoreTestUtils.js +17 -0
  1475. package/dist/testutils/IsEditingStoreTestUtils.js.map +1 -0
  1476. package/dist/testutils/LocationTracker.js.map +1 -1
  1477. package/dist/testutils/MarkdownSynapseUtils.js.map +1 -1
  1478. package/dist/testutils/ReactQueryMockUtils.js.map +1 -1
  1479. package/dist/testutils/TestingLibraryUtils.js +18 -16
  1480. package/dist/testutils/TestingLibraryUtils.js.map +1 -1
  1481. package/dist/testutils/muiDatePickerMock.js.map +1 -1
  1482. package/dist/testutils/vitest.setup.js.map +1 -1
  1483. package/dist/theme/DefaultTheme.js.map +1 -1
  1484. package/dist/theme/ThemeProvider.js.map +1 -1
  1485. package/dist/theme/mergeTheme.js.map +1 -1
  1486. package/dist/theme/palette/Palettes.js.map +1 -1
  1487. package/dist/theme/spreadSx.js.map +1 -1
  1488. package/dist/theme/typography/Link.js.map +1 -1
  1489. package/dist/theme/typography/Typography.js.map +1 -1
  1490. package/dist/tsconfig.build.tsbuildinfo +1 -1
  1491. package/dist/utils/APIConstants.js.map +1 -1
  1492. package/dist/utils/AppUtils/AppUtils.d.ts.map +1 -1
  1493. package/dist/utils/AppUtils/AppUtils.js +11 -11
  1494. package/dist/utils/AppUtils/AppUtils.js.map +1 -1
  1495. package/dist/utils/AppUtils/session/ApplicationSessionContext.js.map +1 -1
  1496. package/dist/utils/AppUtils/session/ApplicationSessionManager.js.map +1 -1
  1497. package/dist/utils/AppUtils/session/AuthenticationGuard.js.map +1 -1
  1498. package/dist/utils/AppUtils/session/SessionInitializedGuard.js.map +1 -1
  1499. package/dist/utils/AppUtils/session/SynapseSessionManager.js.map +1 -1
  1500. package/dist/utils/AppUtils/session/useSessionManager.js.map +1 -1
  1501. package/dist/utils/ContentTypeUtils.js.map +1 -1
  1502. package/dist/utils/OrientationBannerConstants.js.map +1 -1
  1503. package/dist/utils/PermissionLevelToAccessType.js.map +1 -1
  1504. package/dist/utils/SynapseConstants.js.map +1 -1
  1505. package/dist/utils/analytics/sendAnalyticsEvent.js.map +1 -1
  1506. package/dist/utils/analytics/sendSearchEvent.js.map +1 -1
  1507. package/dist/utils/analytics/useGoogleAnalytics.js.map +1 -1
  1508. package/dist/utils/appendFinalQueryParamKey.js.map +1 -1
  1509. package/dist/utils/challenge/evaluation/EvaluationUtils.js.map +1 -1
  1510. package/dist/utils/context/AridhiaContext.js.map +1 -1
  1511. package/dist/utils/context/DocumentMetadataContext.js.map +1 -1
  1512. package/dist/utils/context/FullContextProvider.js.map +1 -1
  1513. package/dist/utils/context/GlobalIsEditingContext.js.map +1 -1
  1514. package/dist/utils/context/SynapseContext.js.map +1 -1
  1515. package/dist/utils/featureflag/FeatureFlags.d.ts +2 -1
  1516. package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
  1517. package/dist/utils/featureflag/FeatureFlags.js +1 -1
  1518. package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
  1519. package/dist/utils/functions/AccessControlListUtils.js.map +1 -1
  1520. package/dist/utils/functions/ArrayUtils.js.map +1 -1
  1521. package/dist/utils/functions/DateFormatter.js.map +1 -1
  1522. package/dist/utils/functions/DateTimeUtils.js.map +1 -1
  1523. package/dist/utils/functions/EntityTypeUtils.js.map +1 -1
  1524. package/dist/utils/functions/FileHandleUtils.js.map +1 -1
  1525. package/dist/utils/functions/GridApiUtils.js.map +1 -1
  1526. package/dist/utils/functions/IsEqualTreatUndefinedAsMissing.js.map +1 -1
  1527. package/dist/utils/functions/IsExternalLink.js.map +1 -1
  1528. package/dist/utils/functions/ObjectUtils.js.map +1 -1
  1529. package/dist/utils/functions/QueryFilterUtils.js.map +1 -1
  1530. package/dist/utils/functions/RealmUtils.js.map +1 -1
  1531. package/dist/utils/functions/RegularExpressions.js.map +1 -1
  1532. package/dist/utils/functions/ResolveLinkEntity.js.map +1 -1
  1533. package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
  1534. package/dist/utils/functions/SanitizeHtmlUtils.test-utils.js.map +1 -1
  1535. package/dist/utils/functions/SqlFunctions.js.map +1 -1
  1536. package/dist/utils/functions/StringUtils.js.map +1 -1
  1537. package/dist/utils/functions/TableColumnSchemaUtils.js.map +1 -1
  1538. package/dist/utils/functions/calculateFriendlyFileSize.js.map +1 -1
  1539. package/dist/utils/functions/colorPalette.js.map +1 -1
  1540. package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
  1541. package/dist/utils/functions/dispatchDownloadListChangeEvent.js.map +1 -1
  1542. package/dist/utils/functions/generateCsrfToken.js.map +1 -1
  1543. package/dist/utils/functions/getDataFromFromStorage.js.map +1 -1
  1544. package/dist/utils/functions/getEndpoint.js +3 -3
  1545. package/dist/utils/functions/getEndpoint.js.map +1 -1
  1546. package/dist/utils/functions/getPrincipalDisplayName.js.map +1 -1
  1547. package/dist/utils/functions/getSynapseEntityUrl.js.map +1 -1
  1548. package/dist/utils/functions/getSynapseWebClientLink.js.map +1 -1
  1549. package/dist/utils/functions/getUserData.js.map +1 -1
  1550. package/dist/utils/functions/queryUtils.js.map +1 -1
  1551. package/dist/utils/functions/testDownloadSpeed.js.map +1 -1
  1552. package/dist/utils/functions/unCamelCase.js.map +1 -1
  1553. package/dist/utils/hooks/useConfirmItems.js.map +1 -1
  1554. package/dist/utils/hooks/useCookiePreferences.d.ts.map +1 -1
  1555. package/dist/utils/hooks/useCookiePreferences.js +24 -23
  1556. package/dist/utils/hooks/useCookiePreferences.js.map +1 -1
  1557. package/dist/utils/hooks/useCreateShortUrl.js.map +1 -1
  1558. package/dist/utils/hooks/useDebouncedEffect.js.map +1 -1
  1559. package/dist/utils/hooks/useDetectSSOCode.js.map +1 -1
  1560. package/dist/utils/hooks/useDirectDownloadHandler.js.map +1 -1
  1561. package/dist/utils/hooks/useGetEntityMetadata.js.map +1 -1
  1562. package/dist/utils/hooks/useGetGoalData.js +2 -4
  1563. package/dist/utils/hooks/useGetGoalData.js.map +1 -1
  1564. package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
  1565. package/dist/utils/hooks/useGetIsAllSelectedInfiniteList.js.map +1 -1
  1566. package/dist/utils/hooks/useImageUrlUtils.js.map +1 -1
  1567. package/dist/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.js.map +1 -1
  1568. package/dist/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.js.map +1 -1
  1569. package/dist/utils/hooks/useImmutableTableQuery/useTableQueryReducer.js.map +1 -1
  1570. package/dist/utils/hooks/useIsBot.js.map +1 -1
  1571. package/dist/utils/hooks/useJsonLdScriptElement.js.map +1 -1
  1572. package/dist/utils/hooks/useListState.js.map +1 -1
  1573. package/dist/utils/hooks/useLogin.js.map +1 -1
  1574. package/dist/utils/hooks/useMediaPrintOnly.js.map +1 -1
  1575. package/dist/utils/hooks/useMutuallyExclusiveState.js.map +1 -1
  1576. package/dist/utils/hooks/useNativeSearchParams.js.map +1 -1
  1577. package/dist/utils/hooks/useOneSageURL.js.map +1 -1
  1578. package/dist/utils/hooks/useOverlay.js.map +1 -1
  1579. package/dist/utils/hooks/usePreFetchResource.js.map +1 -1
  1580. package/dist/utils/hooks/useQuerySearchParam.js.map +1 -1
  1581. package/dist/utils/hooks/useScrollFadeTransition.js.map +1 -1
  1582. package/dist/utils/hooks/useSet.js.map +1 -1
  1583. package/dist/utils/hooks/useShowDesktop.js.map +1 -1
  1584. package/dist/utils/hooks/useSourceAppConfigs.js.map +1 -1
  1585. package/dist/utils/hooks/useTableImageUrl.js.map +1 -1
  1586. package/dist/utils/hooks/useTraceUpdate.js.map +1 -1
  1587. package/dist/utils/hooks/useTrackTransientListItems.js.map +1 -1
  1588. package/dist/utils/hooks/useUploadFileEntity/getActiveUploadCount.js.map +1 -1
  1589. package/dist/utils/hooks/useUploadFileEntity/getFileEntityIdWithSameName.js.map +1 -1
  1590. package/dist/utils/hooks/useUploadFileEntity/useCreateFolderPath.js.map +1 -1
  1591. package/dist/utils/hooks/useUploadFileEntity/useCreatePathsAndGetParentId.js.map +1 -1
  1592. package/dist/utils/hooks/useUploadFileEntity/useLinkFileEntityToURL.js.map +1 -1
  1593. package/dist/utils/hooks/useUploadFileEntity/usePrepareFileEntityUpload.js.map +1 -1
  1594. package/dist/utils/hooks/useUploadFileEntity/useTrackFileUploads.js.map +1 -1
  1595. package/dist/utils/hooks/useUploadFileEntity/useUploadFileEntities.js.map +1 -1
  1596. package/dist/utils/hooks/useUploadFileEntity/useUploadFiles.js.map +1 -1
  1597. package/dist/utils/hooks/useUploadFileEntity/willUploadsExceedStorageLimit.js.map +1 -1
  1598. package/dist/utils/html/TargetEnum.js.map +1 -1
  1599. package/dist/utils/jsonschema/SchemaAnnotationUtils.js.map +1 -1
  1600. package/dist/utils/jsonschema/getEnumeratedValues.js.map +1 -1
  1601. package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.js.map +1 -1
  1602. package/dist/utils/jsonschema/getRequiredAttributes.js.map +1 -1
  1603. package/dist/utils/jsonschema/getSchemaForProperty.js.map +1 -1
  1604. package/dist/utils/jsonschema/getSchemaPropertyInfo.js.map +1 -1
  1605. package/dist/utils/jsonschema/getType.js.map +1 -1
  1606. package/dist/utils/searchDefaults.js.map +1 -1
  1607. package/dist/utils/slots/SlotUtils.js.map +1 -1
  1608. package/dist/utils/types/IsType.js.map +1 -1
  1609. package/package.json +67 -66
@@ -1 +1 @@
1
- {"version":3,"file":"UserCardMedium.js","names":[],"sources":["../../../src/components/UserCard/UserCardMedium.tsx"],"sourcesContent":["import IconCopy from '@/assets/icons/IconCopy'\nimport ValidatedProfileIcon from '@/assets/icons/ValidatedProfile'\nimport { useGetUserBundle } from '@/synapse-queries/user/useUserBundle'\nimport { SynapseConstants } from '@/utils'\nimport { PRODUCTION_ENDPOINT_CONFIG } from '@/utils/functions/getEndpoint'\nimport { Card, IconButton, Skeleton, Tooltip } from '@mui/material'\nimport { UserProfile } from '@sage-bionetworks/synapse-types'\nimport {\n MouseEvent,\n MutableRefObject,\n SyntheticEvent,\n useRef,\n useState,\n} from 'react'\nimport IconSvg from '../IconSvg/IconSvg'\nimport { SkeletonTable } from '../Skeleton/SkeletonTable'\nimport { ToastMessage } from '../ToastMessage/ToastMessage'\nimport { Avatar } from './Avatar'\nimport UserCardContextMenu, { MenuAction } from './UserCardContextMenu'\nimport { UserCardLarge } from './UserCardLarge'\nimport { copyStringToClipboard } from '@/utils/functions/StringUtils'\n\nexport type UserCardMediumProps = {\n userProfile: UserProfile\n menuActions?: MenuAction[]\n imageURL?: string\n hideEmail?: boolean\n isLarge?: boolean\n link?: string\n openLinkInNewTab?: boolean\n disableLink?: boolean\n isCertified?: boolean\n isValidated?: boolean\n isLoadingAvatar?: boolean\n}\n\n/**\n * Function handles copying to clipboard the user's email address\n *\n * @param {string} value the email address of the user\n * @returns\n */\nconst copyToClipboard =\n (\n ref: MutableRefObject<HTMLElement | null>,\n value: string,\n onCopy: () => void,\n ) =>\n (event: SyntheticEvent) => {\n event.preventDefault()\n\n copyStringToClipboard(value).then(() => {\n onCopy()\n })\n }\n\nexport function UserCardMedium({\n userProfile,\n menuActions,\n isLarge = false,\n imageURL,\n hideEmail = false,\n disableLink = false,\n link,\n openLinkInNewTab = false,\n isValidated,\n isCertified,\n isLoadingAvatar,\n}: UserCardMediumProps) {\n const [menuAnchorEl, setMenuAnchorEl] = useState<null | HTMLElement>(null)\n const isContextMenuOpen = Boolean(menuAnchorEl)\n const handleMenuClick = (event: MouseEvent<HTMLButtonElement>) => {\n setMenuAnchorEl(event.currentTarget)\n }\n const handleMenuClose = () => {\n setMenuAnchorEl(null)\n }\n const [showModal, setShowModal] = useState(false)\n\n const copyToClipboardRef = useRef<HTMLParagraphElement>(null)\n\n const onCopyToClipboard = () => {\n // show modal and hide after 4 seconds, the timing is per Material Design\n setShowModal(true)\n // hide after 4 seconds\n setTimeout(() => {\n setShowModal(false)\n }, 4000)\n }\n\n const { ownerId } = userProfile\n const { displayName, userName, firstName, lastName, position, company } =\n userProfile\n\n const { data: userBundle } = useGetUserBundle(\n ownerId,\n SynapseConstants.USER_BUNDLE_MASK_ORCID,\n )\n\n const ORCID = userBundle?.ORCID\n\n let name = ''\n const linkLocation = link\n ? link\n : `${PRODUCTION_ENDPOINT_CONFIG.PORTAL}Profile:${ownerId}`\n // linkLocation is overriden by custom click handler\n const email = userName ? `${userName}@synapse.org` : undefined\n if (displayName) {\n name = displayName\n } else if (firstName && lastName) {\n name = `${firstName} ${lastName}`\n } else if (userName) {\n name = userName\n }\n const avatar = (\n <Avatar\n userProfile={userProfile}\n imageURL={imageURL}\n avatarSize={'LARGE'}\n isLoadingAvatar={isLoadingAvatar}\n />\n )\n const mediumCard = (\n <>\n {!hideEmail && (\n <ToastMessage\n show={showModal}\n text=\"Email address copied to clipboard\"\n autohide={true}\n ></ToastMessage>\n )}\n {disableLink && avatar}\n {!disableLink && (\n <a\n href={linkLocation}\n target={openLinkInNewTab ? '_blank' : ''}\n rel={openLinkInNewTab ? 'noreferrer' : ''}\n className={`SRC-no-border-bottom-imp ${\n isLarge ? 'SRC-isLargeCard' : ''\n }`}\n >\n {avatar}\n </a>\n )}\n <div className=\"SRC-cardContent\">\n <p className=\"SRC-eqHeightRow SRC-userCardName\">\n {/*\n make the header clickable for all cards\n consolidate click events\n */}\n <a\n href={linkLocation}\n target={openLinkInNewTab ? '_blank' : ''}\n rel={openLinkInNewTab ? 'noreferrer' : ''}\n tabIndex={0}\n className={'SRC-hand-cursor'}\n >\n {name}\n </a>\n {isValidated && (\n <Tooltip\n title=\"This user profile has been validated.\"\n placement=\"bottom\"\n enterNextDelay={300}\n >\n <span>{ValidatedProfileIcon}</span>\n </Tooltip>\n )}\n </p>\n {(position || company) && (\n <p>\n {position} {position ? ' / ' : ''} {company}\n </p>\n )}\n {!hideEmail && !!email && (\n <p\n ref={copyToClipboardRef}\n className={`SRC-hand-cursor SRC-eqHeightRow SRC-inlineFlex SRC-emailText SRC-cardSvg`}\n onClick={copyToClipboard(\n copyToClipboardRef,\n email,\n onCopyToClipboard,\n )}\n onKeyPress={copyToClipboard(\n copyToClipboardRef,\n email,\n onCopyToClipboard,\n )}\n tabIndex={0}\n >\n <span style={{ paddingRight: '5px', paddingBottom: '2px' }}>\n <a className={`link`}>{`${userName}@synapse.org`}</a>\n </span>\n <IconCopy />\n </p>\n )}\n {ORCID && (\n <a\n href={ORCID}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ width: 'fit-content' }}\n tabIndex={0}\n >\n View ORCID\n </a>\n )}\n </div>\n {/* conditionally render menu actions, if there are no actions then we don't show the button */}\n {menuActions && menuActions.length > 0 && (\n <>\n <IconButton\n role=\"menu\"\n tabIndex={0}\n onClick={handleMenuClick}\n sx={{ mx: 1 }}\n >\n <IconSvg icon=\"verticalEllipsis\" wrap={false} />\n </IconButton>\n <UserCardContextMenu\n menuActions={menuActions}\n userProfile={userProfile}\n anchorEl={menuAnchorEl}\n onClose={handleMenuClose}\n open={isContextMenuOpen}\n />\n </>\n )}\n </>\n )\n\n if (!isLarge) {\n return (\n <Card\n className={`SRC-userCard SRC-userCardMediumUp`}\n sx={theme => ({\n [theme.breakpoints.down('sm')]: {\n '&.SRC-userCard': {\n minWidth: 'unset',\n padding: '0 16px',\n width: '100%',\n },\n },\n })}\n >\n {mediumCard}\n </Card>\n )\n }\n // else return medium card inside large component\n // when the component is large we have to set the click handler to wrap both the top and bottom portion\n return (\n <Card>\n <div className={`SRC-userCard SRC-userCardMediumUp`}>{mediumCard}</div>\n {isLarge && (\n <UserCardLarge userProfile={userProfile} isCertified={isCertified} />\n )}\n </Card>\n )\n}\n\nexport function LoadingUserCardMedium() {\n return (\n <Card\n className=\"SRC-userCard SRC-userCardMediumUp\"\n style={{ width: '380px' }}\n >\n <Skeleton variant=\"circular\" width=\"80px\" height=\"80px\" />\n <div style={{ width: '250px' }}>\n <SkeletonTable numCols={1} numRows={2} />\n </div>\n </Card>\n )\n}\n\nexport default UserCardMedium\n"],"mappings":"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"}
1
+ {"version":3,"file":"UserCardMedium.js","names":[],"sources":["../../../src/components/UserCard/UserCardMedium.tsx"],"sourcesContent":["import IconCopy from '@/assets/icons/IconCopy'\nimport ValidatedProfileIcon from '@/assets/icons/ValidatedProfile'\nimport { useGetUserBundle } from '@/synapse-queries/user/useUserBundle'\nimport { SynapseConstants } from '@/utils'\nimport { PRODUCTION_ENDPOINT_CONFIG } from '@/utils/functions/getEndpoint'\nimport { Card, IconButton, Skeleton, Tooltip } from '@mui/material'\nimport { UserProfile } from '@sage-bionetworks/synapse-types'\nimport {\n MouseEvent,\n MutableRefObject,\n SyntheticEvent,\n useRef,\n useState,\n} from 'react'\nimport IconSvg from '../IconSvg/IconSvg'\nimport { SkeletonTable } from '../Skeleton/SkeletonTable'\nimport { ToastMessage } from '../ToastMessage/ToastMessage'\nimport { Avatar } from './Avatar'\nimport UserCardContextMenu, { MenuAction } from './UserCardContextMenu'\nimport { UserCardLarge } from './UserCardLarge'\nimport { copyStringToClipboard } from '@/utils/functions/StringUtils'\n\nexport type UserCardMediumProps = {\n userProfile: UserProfile\n menuActions?: MenuAction[]\n imageURL?: string\n hideEmail?: boolean\n isLarge?: boolean\n link?: string\n openLinkInNewTab?: boolean\n disableLink?: boolean\n isCertified?: boolean\n isValidated?: boolean\n isLoadingAvatar?: boolean\n}\n\n/**\n * Function handles copying to clipboard the user's email address\n *\n * @param {string} value the email address of the user\n * @returns\n */\nconst copyToClipboard =\n (\n ref: MutableRefObject<HTMLElement | null>,\n value: string,\n onCopy: () => void,\n ) =>\n (event: SyntheticEvent) => {\n event.preventDefault()\n\n copyStringToClipboard(value).then(() => {\n onCopy()\n })\n }\n\nexport function UserCardMedium({\n userProfile,\n menuActions,\n isLarge = false,\n imageURL,\n hideEmail = false,\n disableLink = false,\n link,\n openLinkInNewTab = false,\n isValidated,\n isCertified,\n isLoadingAvatar,\n}: UserCardMediumProps) {\n const [menuAnchorEl, setMenuAnchorEl] = useState<null | HTMLElement>(null)\n const isContextMenuOpen = Boolean(menuAnchorEl)\n const handleMenuClick = (event: MouseEvent<HTMLButtonElement>) => {\n setMenuAnchorEl(event.currentTarget)\n }\n const handleMenuClose = () => {\n setMenuAnchorEl(null)\n }\n const [showModal, setShowModal] = useState(false)\n\n const copyToClipboardRef = useRef<HTMLParagraphElement>(null)\n\n const onCopyToClipboard = () => {\n // show modal and hide after 4 seconds, the timing is per Material Design\n setShowModal(true)\n // hide after 4 seconds\n setTimeout(() => {\n setShowModal(false)\n }, 4000)\n }\n\n const { ownerId } = userProfile\n const { displayName, userName, firstName, lastName, position, company } =\n userProfile\n\n const { data: userBundle } = useGetUserBundle(\n ownerId,\n SynapseConstants.USER_BUNDLE_MASK_ORCID,\n )\n\n const ORCID = userBundle?.ORCID\n\n let name = ''\n const linkLocation = link\n ? link\n : `${PRODUCTION_ENDPOINT_CONFIG.PORTAL}Profile:${ownerId}`\n // linkLocation is overriden by custom click handler\n const email = userName ? `${userName}@synapse.org` : undefined\n if (displayName) {\n name = displayName\n } else if (firstName && lastName) {\n name = `${firstName} ${lastName}`\n } else if (userName) {\n name = userName\n }\n const avatar = (\n <Avatar\n userProfile={userProfile}\n imageURL={imageURL}\n avatarSize={'LARGE'}\n isLoadingAvatar={isLoadingAvatar}\n />\n )\n const mediumCard = (\n <>\n {!hideEmail && (\n <ToastMessage\n show={showModal}\n text=\"Email address copied to clipboard\"\n autohide={true}\n ></ToastMessage>\n )}\n {disableLink && avatar}\n {!disableLink && (\n <a\n href={linkLocation}\n target={openLinkInNewTab ? '_blank' : ''}\n rel={openLinkInNewTab ? 'noreferrer' : ''}\n className={`SRC-no-border-bottom-imp ${\n isLarge ? 'SRC-isLargeCard' : ''\n }`}\n >\n {avatar}\n </a>\n )}\n <div className=\"SRC-cardContent\">\n <p className=\"SRC-eqHeightRow SRC-userCardName\">\n {/*\n make the header clickable for all cards\n consolidate click events\n */}\n <a\n href={linkLocation}\n target={openLinkInNewTab ? '_blank' : ''}\n rel={openLinkInNewTab ? 'noreferrer' : ''}\n tabIndex={0}\n className={'SRC-hand-cursor'}\n >\n {name}\n </a>\n {isValidated && (\n <Tooltip\n title=\"This user profile has been validated.\"\n placement=\"bottom\"\n enterNextDelay={300}\n >\n <span>{ValidatedProfileIcon}</span>\n </Tooltip>\n )}\n </p>\n {(position || company) && (\n <p>\n {position} {position ? ' / ' : ''} {company}\n </p>\n )}\n {!hideEmail && !!email && (\n <p\n ref={copyToClipboardRef}\n className={`SRC-hand-cursor SRC-eqHeightRow SRC-inlineFlex SRC-emailText SRC-cardSvg`}\n onClick={copyToClipboard(\n copyToClipboardRef,\n email,\n onCopyToClipboard,\n )}\n onKeyPress={copyToClipboard(\n copyToClipboardRef,\n email,\n onCopyToClipboard,\n )}\n tabIndex={0}\n >\n <span style={{ paddingRight: '5px', paddingBottom: '2px' }}>\n <a className={`link`}>{`${userName}@synapse.org`}</a>\n </span>\n <IconCopy />\n </p>\n )}\n {ORCID && (\n <a\n href={ORCID}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ width: 'fit-content' }}\n tabIndex={0}\n >\n View ORCID\n </a>\n )}\n </div>\n {/* conditionally render menu actions, if there are no actions then we don't show the button */}\n {menuActions && menuActions.length > 0 && (\n <>\n <IconButton\n role=\"menu\"\n tabIndex={0}\n onClick={handleMenuClick}\n sx={{ mx: 1 }}\n >\n <IconSvg icon=\"verticalEllipsis\" wrap={false} />\n </IconButton>\n <UserCardContextMenu\n menuActions={menuActions}\n userProfile={userProfile}\n anchorEl={menuAnchorEl}\n onClose={handleMenuClose}\n open={isContextMenuOpen}\n />\n </>\n )}\n </>\n )\n\n if (!isLarge) {\n return (\n <Card\n className={`SRC-userCard SRC-userCardMediumUp`}\n sx={theme => ({\n [theme.breakpoints.down('sm')]: {\n '&.SRC-userCard': {\n minWidth: 'unset',\n padding: '0 16px',\n width: '100%',\n },\n },\n })}\n >\n {mediumCard}\n </Card>\n )\n }\n // else return medium card inside large component\n // when the component is large we have to set the click handler to wrap both the top and bottom portion\n return (\n <Card>\n <div className={`SRC-userCard SRC-userCardMediumUp`}>{mediumCard}</div>\n {isLarge && (\n <UserCardLarge userProfile={userProfile} isCertified={isCertified} />\n )}\n </Card>\n )\n}\n\nexport function LoadingUserCardMedium() {\n return (\n <Card\n className=\"SRC-userCard SRC-userCardMediumUp\"\n style={{ width: '380px' }}\n >\n <Skeleton variant=\"circular\" width=\"80px\" height=\"80px\" />\n <div style={{ width: '250px' }}>\n <SkeletonTable numCols={1} numRows={2} />\n </div>\n </Card>\n )\n}\n\nexport default UserCardMedium\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserCardList.js","names":[],"sources":["../../../src/components/UserCardList/UserCardList.tsx"],"sourcesContent":["import { UserProfileList } from '@/synapse-client/SynapseClient'\nimport { getUserProfileWithProfilePicAttached } from '@/utils/functions/getUserData'\nimport { MEDIUM_USER_CARD, UserCardSize } from '@/utils/SynapseConstants'\nimport {\n ColumnTypeEnum,\n RowSet,\n UserProfile,\n} from '@sage-bionetworks/synapse-types'\nimport { without } from 'lodash-es'\nimport { Component } from 'react'\nimport UserCard from '../UserCard/UserCard'\n\nexport type UserCardListProps = {\n /* The list of user IDs or null values to render. For null values, the card will be rendered with table data supplied by `firstName`, `lastName`, and `institution` columns supplied by the data prop. */\n list: (string | null)[]\n size?: UserCardSize\n // Data should not be needed, however, it gives the option to fill in a user profile with other column\n // fields. This is required specifically by AMP-AD Explore/People page\n rowSet?: RowSet\n}\n\nexport type UserCardListState = {\n userProfileMap: Record<string, UserProfile>\n}\nexport class UserCardList extends Component<\n UserCardListProps,\n UserCardListState\n> {\n constructor(props: UserCardListProps) {\n super(props)\n this.state = {\n userProfileMap: {},\n }\n this.update = this.update.bind(this)\n }\n\n componentDidMount() {\n const { list } = this.props\n this.update(list)\n }\n\n componentDidUpdate(prevProps: UserCardListProps) {\n const priorListOfIds = prevProps.list\n const newValues = without(\n this.props.list.filter(el => el),\n ...priorListOfIds,\n )\n // check that the props have changed by seeing that at least one element is different\n if (newValues.length > 0) {\n this.update(newValues)\n }\n }\n\n update(list: (string | null)[]) {\n getUserProfileWithProfilePicAttached(\n list.filter((el): el is string => !!el),\n )\n .then((data: UserProfileList) => {\n const newEntries: Record<string, UserProfile> = {}\n data.list.forEach(el => {\n const { ownerId } = el\n newEntries[ownerId] = el\n })\n this.setState({\n userProfileMap: { ...this.state.userProfileMap, ...newEntries },\n })\n })\n .catch((err: string) => {\n console.error('Error on batch call =', err)\n })\n }\n\n /**\n * Given data this will find rows where there is no userId columnType and create faux user profiles\n * using firstName, lastName, and institution (company in UserProfile object).\n * @param {RowSet} rowSet\n * @returns list of UserProfiles with firstName, lastName, company, userName (first letter of firstName) filled out.\n * @memberof UserCardList\n */\n manuallyExtractData(rowSet: RowSet) {\n const firstNameIndex = rowSet.headers.findIndex(\n el => el.name === 'firstName',\n )\n const lastNameIndex = rowSet.headers.findIndex(el => el.name === 'lastName')\n const institutionIndex = rowSet.headers.findIndex(\n el => el.name === 'institution',\n )\n const ownerId = rowSet.headers.findIndex(\n el => el.columnType === ColumnTypeEnum.USERID,\n )\n const nullOwnerIdsRows = rowSet.rows.filter(el => !el.values[ownerId])\n return nullOwnerIdsRows.map<Omit<UserProfile, 'ownerId'>>(el => {\n const values = el.values\n return {\n firstName: values[firstNameIndex] ?? '',\n lastName: values[lastNameIndex] ?? '',\n company: values[institutionIndex] ?? undefined,\n ownerId: null,\n userName: values[firstNameIndex]\n ? (values[firstNameIndex][0] ?? '')\n : '',\n }\n })\n }\n\n render() {\n const { size = MEDIUM_USER_CARD, rowSet, list } = this.props\n const { userProfileMap = {} } = this.state\n const fauxUserProfilesList = rowSet && this.manuallyExtractData(rowSet)\n let fauxUserProfileIndex = 0\n return (\n <div className=\"SRC-card-grid-row\">\n {\n // we loop through the list from the props because thats the 'active set of data' whereas the data stored in state could be stale\n list.map(ownerId => {\n const userProfile = ownerId != null ? userProfileMap[ownerId] : null\n if (userProfile) {\n return (\n <div\n key={JSON.stringify(userProfile)}\n className=\"SRC-grid-item SRC-narrow-grid-item\"\n >\n <UserCard\n size={size}\n preSignedURL={userProfile.clientPreSignedURL}\n userProfile={userProfile}\n />\n </div>\n )\n }\n const fauxUserProfile =\n fauxUserProfilesList && fauxUserProfilesList[fauxUserProfileIndex]\n if (!fauxUserProfile) {\n // This could happen in one of two cases:\n // - The props just updated with a new userlist where the data is being gathered for this particular user\n // OR there is no mapping for this user\n return false\n }\n fauxUserProfileIndex += 1\n return (\n <div\n key={JSON.stringify(fauxUserProfile)}\n className=\"SRC-grid-item SRC-narrow-grid-item\"\n >\n <UserCard\n disableLink={true}\n hideEmail={true}\n size={size}\n // TODO: Modify UserCard to accept a fake profile with no ownerId field, and remove this cast.\n userProfile={fauxUserProfile as UserProfile}\n />\n </div>\n )\n })\n }\n </div>\n )\n }\n}\nexport default UserCardList\n"],"mappings":";;;;;;;;AAwBA,IAAa,IAAb,cAAkC,EAGhC;CACA,YAAY,GAA0B;AAKpC,EAJA,MAAM,EAAM,EACZ,KAAK,QAAQ,EACX,gBAAgB,EAAE,EACnB,EACD,KAAK,SAAS,KAAK,OAAO,KAAK,KAAK;;CAGtC,oBAAoB;EAClB,IAAM,EAAE,YAAS,KAAK;AACtB,OAAK,OAAO,EAAK;;CAGnB,mBAAmB,GAA8B;EAC/C,IAAM,IAAiB,EAAU,MAC3B,IAAY,EAChB,KAAK,MAAM,KAAK,QAAO,MAAM,EAAG,EAChC,GAAG,EACJ;AAED,EAAI,EAAU,SAAS,KACrB,KAAK,OAAO,EAAU;;CAI1B,OAAO,GAAyB;AAC9B,IACE,EAAK,QAAQ,MAAqB,CAAC,CAAC,EAAG,CACxC,CACE,MAAM,MAA0B;GAC/B,IAAM,IAA0C,EAAE;AAKlD,GAJA,EAAK,KAAK,SAAQ,MAAM;IACtB,IAAM,EAAE,eAAY;AACpB,MAAW,KAAW;KACtB,EACF,KAAK,SAAS,EACZ,gBAAgB;IAAE,GAAG,KAAK,MAAM;IAAgB,GAAG;IAAY,EAChE,CAAC;IACF,CACD,OAAO,MAAgB;AACtB,WAAQ,MAAM,yBAAyB,EAAI;IAC3C;;CAUN,oBAAoB,GAAgB;EAClC,IAAM,IAAiB,EAAO,QAAQ,WACpC,MAAM,EAAG,SAAS,YACnB,EACK,IAAgB,EAAO,QAAQ,WAAU,MAAM,EAAG,SAAS,WAAW,EACtE,IAAmB,EAAO,QAAQ,WACtC,MAAM,EAAG,SAAS,cACnB,EACK,IAAU,EAAO,QAAQ,WAC7B,MAAM,EAAG,eAAe,EAAe,OACxC;AAED,SADyB,EAAO,KAAK,QAAO,MAAM,CAAC,EAAG,OAAO,GACtD,CAAiB,KAAkC,MAAM;GAC9D,IAAM,IAAS,EAAG;AAClB,UAAO;IACL,WAAW,EAAO,MAAmB;IACrC,UAAU,EAAO,MAAkB;IACnC,SAAS,EAAO,MAAqB,KAAA;IACrC,SAAS;IACT,UAAU,EAAO,KACZ,EAAO,GAAgB,MAAM,KAC9B;IACL;IACD;;CAGJ,SAAS;EACP,IAAM,EAAE,UAAO,GAAkB,WAAQ,YAAS,KAAK,OACjD,EAAE,oBAAiB,EAAE,KAAK,KAAK,OAC/B,IAAuB,KAAU,KAAK,oBAAoB,EAAO,EACnE,IAAuB;AAC3B,SACE,kBAAC,OAAD;GAAK,WAAU;aAGX,EAAK,KAAI,MAAW;IAClB,IAAM,IAAc,KAAW,OAAiC,OAA1B,EAAe;AACrD,QAAI,EACF,QACE,kBAAC,OAAD;KAEE,WAAU;eAEV,kBAAC,GAAD;MACQ;MACN,cAAc,EAAY;MACb;MACb,CAAA;KACE,EARC,KAAK,UAAU,EAAY,CAQ5B;IAGV,IAAM,IACJ,KAAwB,EAAqB;AAQ/C,WAPK,KAML,KAAwB,GAEtB,kBAAC,OAAD;KAEE,WAAU;eAEV,kBAAC,GAAD;MACE,aAAa;MACb,WAAW;MACL;MAEN,aAAa;MACb,CAAA;KACE,EAVC,KAAK,UAAU,EAAgB,CAUhC,IAfC;KAiBT;GAEA,CAAA"}
1
+ {"version":3,"file":"UserCardList.js","names":[],"sources":["../../../src/components/UserCardList/UserCardList.tsx"],"sourcesContent":["import { UserProfileList } from '@/synapse-client/SynapseClient'\nimport { getUserProfileWithProfilePicAttached } from '@/utils/functions/getUserData'\nimport { MEDIUM_USER_CARD, UserCardSize } from '@/utils/SynapseConstants'\nimport {\n ColumnTypeEnum,\n RowSet,\n UserProfile,\n} from '@sage-bionetworks/synapse-types'\nimport { without } from 'lodash-es'\nimport { Component } from 'react'\nimport UserCard from '../UserCard/UserCard'\n\nexport type UserCardListProps = {\n /* The list of user IDs or null values to render. For null values, the card will be rendered with table data supplied by `firstName`, `lastName`, and `institution` columns supplied by the data prop. */\n list: (string | null)[]\n size?: UserCardSize\n // Data should not be needed, however, it gives the option to fill in a user profile with other column\n // fields. This is required specifically by AMP-AD Explore/People page\n rowSet?: RowSet\n}\n\nexport type UserCardListState = {\n userProfileMap: Record<string, UserProfile>\n}\nexport class UserCardList extends Component<\n UserCardListProps,\n UserCardListState\n> {\n constructor(props: UserCardListProps) {\n super(props)\n this.state = {\n userProfileMap: {},\n }\n this.update = this.update.bind(this)\n }\n\n componentDidMount() {\n const { list } = this.props\n this.update(list)\n }\n\n componentDidUpdate(prevProps: UserCardListProps) {\n const priorListOfIds = prevProps.list\n const newValues = without(\n this.props.list.filter(el => el),\n ...priorListOfIds,\n )\n // check that the props have changed by seeing that at least one element is different\n if (newValues.length > 0) {\n this.update(newValues)\n }\n }\n\n update(list: (string | null)[]) {\n getUserProfileWithProfilePicAttached(\n list.filter((el): el is string => !!el),\n )\n .then((data: UserProfileList) => {\n const newEntries: Record<string, UserProfile> = {}\n data.list.forEach(el => {\n const { ownerId } = el\n newEntries[ownerId] = el\n })\n this.setState({\n userProfileMap: { ...this.state.userProfileMap, ...newEntries },\n })\n })\n .catch((err: string) => {\n console.error('Error on batch call =', err)\n })\n }\n\n /**\n * Given data this will find rows where there is no userId columnType and create faux user profiles\n * using firstName, lastName, and institution (company in UserProfile object).\n * @param {RowSet} rowSet\n * @returns list of UserProfiles with firstName, lastName, company, userName (first letter of firstName) filled out.\n * @memberof UserCardList\n */\n manuallyExtractData(rowSet: RowSet) {\n const firstNameIndex = rowSet.headers.findIndex(\n el => el.name === 'firstName',\n )\n const lastNameIndex = rowSet.headers.findIndex(el => el.name === 'lastName')\n const institutionIndex = rowSet.headers.findIndex(\n el => el.name === 'institution',\n )\n const ownerId = rowSet.headers.findIndex(\n el => el.columnType === ColumnTypeEnum.USERID,\n )\n const nullOwnerIdsRows = rowSet.rows.filter(el => !el.values[ownerId])\n return nullOwnerIdsRows.map<Omit<UserProfile, 'ownerId'>>(el => {\n const values = el.values\n return {\n firstName: values[firstNameIndex] ?? '',\n lastName: values[lastNameIndex] ?? '',\n company: values[institutionIndex] ?? undefined,\n ownerId: null,\n userName: values[firstNameIndex]\n ? (values[firstNameIndex][0] ?? '')\n : '',\n }\n })\n }\n\n render() {\n const { size = MEDIUM_USER_CARD, rowSet, list } = this.props\n const { userProfileMap = {} } = this.state\n const fauxUserProfilesList = rowSet && this.manuallyExtractData(rowSet)\n let fauxUserProfileIndex = 0\n return (\n <div className=\"SRC-card-grid-row\">\n {\n // we loop through the list from the props because thats the 'active set of data' whereas the data stored in state could be stale\n list.map(ownerId => {\n const userProfile = ownerId != null ? userProfileMap[ownerId] : null\n if (userProfile) {\n return (\n <div\n key={JSON.stringify(userProfile)}\n className=\"SRC-grid-item SRC-narrow-grid-item\"\n >\n <UserCard\n size={size}\n preSignedURL={userProfile.clientPreSignedURL}\n userProfile={userProfile}\n />\n </div>\n )\n }\n const fauxUserProfile =\n fauxUserProfilesList && fauxUserProfilesList[fauxUserProfileIndex]\n if (!fauxUserProfile) {\n // This could happen in one of two cases:\n // - The props just updated with a new userlist where the data is being gathered for this particular user\n // OR there is no mapping for this user\n return false\n }\n fauxUserProfileIndex += 1\n return (\n <div\n key={JSON.stringify(fauxUserProfile)}\n className=\"SRC-grid-item SRC-narrow-grid-item\"\n >\n <UserCard\n disableLink={true}\n hideEmail={true}\n size={size}\n // TODO: Modify UserCard to accept a fake profile with no ownerId field, and remove this cast.\n userProfile={fauxUserProfile as UserProfile}\n />\n </div>\n )\n })\n }\n </div>\n )\n }\n}\nexport default UserCardList\n"],"mappings":";;;;;;;;AAwBA,IAAa,IAAb,cAAkC,EAGhC;CACA,YAAY,GAA0B;EAKpC,AAJA,MAAM,CAAK,GACX,KAAK,QAAQ,EACX,gBAAgB,CAAC,EACnB,GACA,KAAK,SAAS,KAAK,OAAO,KAAK,IAAI;CACrC;CAEA,oBAAoB;EAClB,IAAM,EAAE,YAAS,KAAK;EACtB,KAAK,OAAO,CAAI;CAClB;CAEA,mBAAmB,GAA8B;EAC/C,IAAM,IAAiB,EAAU,MAC3B,IAAY,EAChB,KAAK,MAAM,KAAK,QAAO,MAAM,CAAE,GAC/B,GAAG,CACL;EAEA,AAAI,EAAU,SAAS,KACrB,KAAK,OAAO,CAAS;CAEzB;CAEA,OAAO,GAAyB;EAC9B,EACE,EAAK,QAAQ,MAAqB,CAAC,CAAC,CAAE,CACxC,EACG,MAAM,MAA0B;GAC/B,IAAM,IAA0C,CAAC;GAKjD,AAJA,EAAK,KAAK,SAAQ,MAAM;IACtB,IAAM,EAAE,eAAY;IACpB,EAAW,KAAW;GACxB,CAAC,GACD,KAAK,SAAS,EACZ,gBAAgB;IAAE,GAAG,KAAK,MAAM;IAAgB,GAAG;GAAW,EAChE,CAAC;EACH,CAAC,EACA,OAAO,MAAgB;GACtB,QAAQ,MAAM,yBAAyB,CAAG;EAC5C,CAAC;CACL;CASA,oBAAoB,GAAgB;EAClC,IAAM,IAAiB,EAAO,QAAQ,WACpC,MAAM,EAAG,SAAS,WACpB,GACM,IAAgB,EAAO,QAAQ,WAAU,MAAM,EAAG,SAAS,UAAU,GACrE,IAAmB,EAAO,QAAQ,WACtC,MAAM,EAAG,SAAS,aACpB,GACM,IAAU,EAAO,QAAQ,WAC7B,MAAM,EAAG,eAAe,EAAe,MACzC;EAEA,OADyB,EAAO,KAAK,QAAO,MAAM,CAAC,EAAG,OAAO,EACtD,EAAiB,KAAkC,MAAM;GAC9D,IAAM,IAAS,EAAG;GAClB,OAAO;IACL,WAAW,EAAO,MAAmB;IACrC,UAAU,EAAO,MAAkB;IACnC,SAAS,EAAO,MAAqB,KAAA;IACrC,SAAS;IACT,UAAU,EAAO,KACZ,EAAO,GAAgB,MAAM,KAC9B;GACN;EACF,CAAC;CACH;CAEA,SAAS;EACP,IAAM,EAAE,UAAO,GAAkB,WAAQ,YAAS,KAAK,OACjD,EAAE,oBAAiB,CAAC,MAAM,KAAK,OAC/B,IAAuB,KAAU,KAAK,oBAAoB,CAAM,GAClE,IAAuB;EAC3B,OACE,kBAAC,OAAD;GAAK,WAAU;aAGX,EAAK,KAAI,MAAW;IAClB,IAAM,IAAc,KAAW,OAAiC,OAA1B,EAAe;IACrD,IAAI,GACF,OACE,kBAAC,OAAD;KAEE,WAAU;eAEV,kBAAC,GAAD;MACQ;MACN,cAAc,EAAY;MACb;KACd,CAAA;IACE,GARE,KAAK,UAAU,CAAW,CAQ5B;IAGT,IAAM,IACJ,KAAwB,EAAqB;IAQ/C,OAPK,KAML,KAAwB,GAEtB,kBAAC,OAAD;KAEE,WAAU;eAEV,kBAAC,GAAD;MACE,aAAa;MACb,WAAW;MACL;MAEN,aAAa;KACd,CAAA;IACE,GAVE,KAAK,UAAU,CAAe,CAUhC,KAfE;GAiBX,CAAC;EAEA,CAAA;CAET;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserCardListGroups.Desktop.js","names":[],"sources":["../../../../src/components/UserCardList/UserCardListGroups/UserCardListGroups.Desktop.tsx"],"sourcesContent":["import { useState } from 'react'\nimport UserCardListRotate from '../UserCardListRotate'\nimport { FacetColumnValuesRequest } from '@sage-bionetworks/synapse-types'\nimport { UserCardListGroupsProps } from './UserCardListGroups'\n\nexport default function UserCardListGroupsDesktop(\n props: UserCardListGroupsProps,\n) {\n const [selectedGroupIndex, setSelectedGroupIndex] = useState<number>(0)\n const { columnName, facetValues, ...rest } = props\n const selectedFacet: FacetColumnValuesRequest = {\n columnName,\n facetValues: [facetValues[selectedGroupIndex]],\n concreteType:\n 'org.sagebionetworks.repo.model.table.FacetColumnValuesRequest',\n }\n return (\n <div className=\"control-container\">\n <div className=\"button-container\">\n {facetValues?.map((el, curIndex) => {\n return (\n <button\n className={selectedGroupIndex === curIndex ? 'isSelected' : ''}\n onClick={() => setSelectedGroupIndex(curIndex)}\n key={el}\n >\n {el}\n </button>\n )\n })}\n {/*\n This button keeps the border line in the button container running from top to bottom,\n it doesn't have any functionality.\n */}\n <button className=\"gap-fill\" />\n </div>\n <div className=\"content-container\">\n <UserCardListRotate\n key={`UserCardListGroup-${selectedGroupIndex}`}\n {...rest}\n selectedFacets={[selectedFacet]}\n />\n </div>\n </div>\n )\n}\n"],"mappings":";;;;AAKA,SAAwB,EACtB,GACA;CACA,IAAM,CAAC,GAAoB,KAAyB,EAAiB,EAAE,EACjE,EAAE,eAAY,gBAAa,GAAG,MAAS,GACvC,IAA0C;EAC9C;EACA,aAAa,CAAC,EAAY,GAAoB;EAC9C,cACE;EACH;AACD,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,GAAa,KAAK,GAAI,MAEnB,kBAAC,UAAD;IACE,WAAW,MAAuB,IAAW,eAAe;IAC5D,eAAe,EAAsB,EAAS;cAG7C;IACM,EAHF,EAGE,CAEX,EAKF,kBAAC,UAAD,EAAQ,WAAU,YAAa,CAAA,CAC3B;MACN,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,GAAD;IAEE,GAAI;IACJ,gBAAgB,CAAC,EAAc;IAC/B,EAHK,qBAAqB,IAG1B;GACE,CAAA,CACF"}
1
+ {"version":3,"file":"UserCardListGroups.Desktop.js","names":[],"sources":["../../../../src/components/UserCardList/UserCardListGroups/UserCardListGroups.Desktop.tsx"],"sourcesContent":["import { useState } from 'react'\nimport UserCardListRotate from '../UserCardListRotate'\nimport { FacetColumnValuesRequest } from '@sage-bionetworks/synapse-types'\nimport { UserCardListGroupsProps } from './UserCardListGroups'\n\nexport default function UserCardListGroupsDesktop(\n props: UserCardListGroupsProps,\n) {\n const [selectedGroupIndex, setSelectedGroupIndex] = useState<number>(0)\n const { columnName, facetValues, ...rest } = props\n const selectedFacet: FacetColumnValuesRequest = {\n columnName,\n facetValues: [facetValues[selectedGroupIndex]],\n concreteType:\n 'org.sagebionetworks.repo.model.table.FacetColumnValuesRequest',\n }\n return (\n <div className=\"control-container\">\n <div className=\"button-container\">\n {facetValues?.map((el, curIndex) => {\n return (\n <button\n className={selectedGroupIndex === curIndex ? 'isSelected' : ''}\n onClick={() => setSelectedGroupIndex(curIndex)}\n key={el}\n >\n {el}\n </button>\n )\n })}\n {/*\n This button keeps the border line in the button container running from top to bottom,\n it doesn't have any functionality.\n */}\n <button className=\"gap-fill\" />\n </div>\n <div className=\"content-container\">\n <UserCardListRotate\n key={`UserCardListGroup-${selectedGroupIndex}`}\n {...rest}\n selectedFacets={[selectedFacet]}\n />\n </div>\n </div>\n )\n}\n"],"mappings":";;;;AAKA,SAAwB,EACtB,GACA;CACA,IAAM,CAAC,GAAoB,KAAyB,EAAiB,CAAC,GAChE,EAAE,eAAY,gBAAa,GAAG,MAAS,GACvC,IAA0C;EAC9C;EACA,aAAa,CAAC,EAAY,EAAmB;EAC7C,cACE;CACJ;CACA,OACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,GAAa,KAAK,GAAI,MAEnB,kBAAC,UAAD;IACE,WAAW,MAAuB,IAAW,eAAe;IAC5D,eAAe,EAAsB,CAAQ;cAG5C;GACK,GAHD,CAGC,CAEX,GAKD,kBAAC,UAAD,EAAQ,WAAU,WAAY,CAAA,CAC3B;MACL,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,GAAD;IAEE,GAAI;IACJ,gBAAgB,CAAC,CAAa;GAC/B,GAHM,qBAAqB,GAG3B;EACE,CAAA,CACF;;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserCardListGroups.Mobile.js","names":[],"sources":["../../../../src/components/UserCardList/UserCardListGroups/UserCardListGroups.Mobile.tsx"],"sourcesContent":["import UserCardListRotate from '../UserCardListRotate'\nimport { FacetColumnValuesRequest } from '@sage-bionetworks/synapse-types'\nimport ExpandableContent from '../../home_page/ExpandableContent'\nimport { UserCardListGroupsProps } from './UserCardListGroups'\n\nexport default function UserCardListGroupsMobile(\n props: UserCardListGroupsProps,\n) {\n const { columnName, facetValues, ...rest } = props\n return (\n <div>\n {facetValues?.map((el, curIndex) => {\n const facetValue = facetValues[curIndex]\n const selectedFacet: FacetColumnValuesRequest = {\n columnName,\n facetValues: [facetValue],\n concreteType:\n 'org.sagebionetworks.repo.model.table.FacetColumnValuesRequest',\n }\n const content = (\n <UserCardListRotate {...rest} selectedFacets={[selectedFacet]} />\n )\n const title = <> {facetValue} </>\n return (\n <ExpandableContent\n key={`UserCardListGroup-Mobile-${curIndex}`}\n title={title}\n content={content}\n />\n )\n })}\n </div>\n )\n}\n"],"mappings":";;;;AAKA,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,eAAY,gBAAa,GAAG,MAAS;AAC7C,QACE,kBAAC,OAAD,EAAA,UACG,GAAa,KAAK,GAAI,MAAa;EAClC,IAAM,IAAa,EAAY,IACzB,IAA0C;GAC9C;GACA,aAAa,CAAC,EAAW;GACzB,cACE;GACH,EACK,IACJ,kBAAC,GAAD;GAAoB,GAAI;GAAM,gBAAgB,CAAC,EAAc;GAAI,CAAA;AAGnE,SACE,kBAAC,GAAD;GAES,OAJG,kBAAA,GAAA,EAAA,UAAA;IAAE;IAAE;IAAW;IAAI,EAAA,CAItB;GACE;GACT,EAHK,4BAA4B,IAGjC;GAEJ,EACE,CAAA"}
1
+ {"version":3,"file":"UserCardListGroups.Mobile.js","names":[],"sources":["../../../../src/components/UserCardList/UserCardListGroups/UserCardListGroups.Mobile.tsx"],"sourcesContent":["import UserCardListRotate from '../UserCardListRotate'\nimport { FacetColumnValuesRequest } from '@sage-bionetworks/synapse-types'\nimport ExpandableContent from '../../home_page/ExpandableContent'\nimport { UserCardListGroupsProps } from './UserCardListGroups'\n\nexport default function UserCardListGroupsMobile(\n props: UserCardListGroupsProps,\n) {\n const { columnName, facetValues, ...rest } = props\n return (\n <div>\n {facetValues?.map((el, curIndex) => {\n const facetValue = facetValues[curIndex]\n const selectedFacet: FacetColumnValuesRequest = {\n columnName,\n facetValues: [facetValue],\n concreteType:\n 'org.sagebionetworks.repo.model.table.FacetColumnValuesRequest',\n }\n const content = (\n <UserCardListRotate {...rest} selectedFacets={[selectedFacet]} />\n )\n const title = <> {facetValue} </>\n return (\n <ExpandableContent\n key={`UserCardListGroup-Mobile-${curIndex}`}\n title={title}\n content={content}\n />\n )\n })}\n </div>\n )\n}\n"],"mappings":";;;;AAKA,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,eAAY,gBAAa,GAAG,MAAS;CAC7C,OACE,kBAAC,OAAD,EAAA,UACG,GAAa,KAAK,GAAI,MAAa;EAClC,IAAM,IAAa,EAAY,IACzB,IAA0C;GAC9C;GACA,aAAa,CAAC,CAAU;GACxB,cACE;EACJ,GACM,IACJ,kBAAC,GAAD;GAAoB,GAAI;GAAM,gBAAgB,CAAC,CAAa;EAAI,CAAA;EAGlE,OACE,kBAAC,GAAD;GAES,OAJG,kBAAA,GAAA,EAAA,UAAA;IAAE;IAAE;IAAW;GAAG,EAAA,CAIrB;GACE;EACV,GAHM,4BAA4B,GAGlC;CAEL,CAAC,EACE,CAAA;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserCardListGroups.js","names":[],"sources":["../../../../src/components/UserCardList/UserCardListGroups/UserCardListGroups.tsx"],"sourcesContent":["import LargeButton from '@/components/styled/LargeButton'\nimport useShowDesktop from '@/utils/hooks/useShowDesktop'\nimport { UserCardSize } from '@/utils/SynapseConstants'\nimport UserCardListGroupsDesktop from './UserCardListGroups.Desktop'\nimport UserCardListGroupsMobile from './UserCardListGroups.Mobile'\n\nexport type UserCardListGroupsProps = {\n sql: string\n columnName: string\n facetValues: string[]\n size: UserCardSize\n summaryLink?: string\n summaryLinkText?: string\n count: number\n useQueryResultUserData?: boolean\n}\n\nexport default function UserCardListGroups(props: UserCardListGroupsProps) {\n const { summaryLink, summaryLinkText, ...rest } = props\n const showDesktop = useShowDesktop()\n return (\n <div className={`UserCardListGroups${showDesktop ? '__Desktop' : ''}`}>\n <div>\n {showDesktop ? (\n <UserCardListGroupsDesktop {...rest} />\n ) : (\n <UserCardListGroupsMobile {...rest} />\n )}\n {summaryLink && summaryLinkText && (\n <div className=\"UserCardListGroups__summary\">\n <LargeButton\n color=\"secondary\"\n variant=\"contained\"\n href={summaryLink}\n >\n {summaryLinkText}\n </LargeButton>\n </div>\n )}\n </div>\n </div>\n )\n}\n"],"mappings":";;;;;;AAiBA,SAAwB,EAAmB,GAAgC;CACzE,IAAM,EAAE,gBAAa,oBAAiB,GAAG,MAAS,GAC5C,IAAc,GAAgB;AACpC,QACE,kBAAC,OAAD;EAAK,WAAW,qBAAqB,IAAc,cAAc;YAC/D,kBAAC,OAAD,EAAA,UAAA,CAEI,EADD,IACE,IAEA,GAFD,EAA2B,GAAI,GAAQ,CAED,EAEvC,KAAe,KACd,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,GAAD;IACE,OAAM;IACN,SAAQ;IACR,MAAM;cAEL;IACW,CAAA;GACV,CAAA,CAEJ,EAAA,CAAA;EACF,CAAA"}
1
+ {"version":3,"file":"UserCardListGroups.js","names":[],"sources":["../../../../src/components/UserCardList/UserCardListGroups/UserCardListGroups.tsx"],"sourcesContent":["import LargeButton from '@/components/styled/LargeButton'\nimport useShowDesktop from '@/utils/hooks/useShowDesktop'\nimport { UserCardSize } from '@/utils/SynapseConstants'\nimport UserCardListGroupsDesktop from './UserCardListGroups.Desktop'\nimport UserCardListGroupsMobile from './UserCardListGroups.Mobile'\n\nexport type UserCardListGroupsProps = {\n sql: string\n columnName: string\n facetValues: string[]\n size: UserCardSize\n summaryLink?: string\n summaryLinkText?: string\n count: number\n useQueryResultUserData?: boolean\n}\n\nexport default function UserCardListGroups(props: UserCardListGroupsProps) {\n const { summaryLink, summaryLinkText, ...rest } = props\n const showDesktop = useShowDesktop()\n return (\n <div className={`UserCardListGroups${showDesktop ? '__Desktop' : ''}`}>\n <div>\n {showDesktop ? (\n <UserCardListGroupsDesktop {...rest} />\n ) : (\n <UserCardListGroupsMobile {...rest} />\n )}\n {summaryLink && summaryLinkText && (\n <div className=\"UserCardListGroups__summary\">\n <LargeButton\n color=\"secondary\"\n variant=\"contained\"\n href={summaryLink}\n >\n {summaryLinkText}\n </LargeButton>\n </div>\n )}\n </div>\n </div>\n )\n}\n"],"mappings":";;;;;;AAiBA,SAAwB,EAAmB,GAAgC;CACzE,IAAM,EAAE,gBAAa,oBAAiB,GAAG,MAAS,GAC5C,IAAc,EAAe;CACnC,OACE,kBAAC,OAAD;EAAK,WAAW,qBAAqB,IAAc,cAAc;YAC/D,kBAAC,OAAD,EAAA,UAAA,CAEI,EADD,IACE,IAEA,GAFD,EAA2B,GAAI,EAAO,CAED,GAEtC,KAAe,KACd,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,GAAD;IACE,OAAM;IACN,SAAQ;IACR,MAAM;cAEL;GACU,CAAA;EACV,CAAA,CAEJ,EAAA,CAAA;CACF,CAAA;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserCardListRotate.js","names":[],"sources":["../../../src/components/UserCardList/UserCardListRotate.tsx"],"sourcesContent":["import LargeButton from '@/components/styled/LargeButton'\nimport SynapseClient from '@/synapse-client'\nimport { SynapseConstants } from '@/utils'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport {\n getAdditionalFilters,\n parseEntityIdFromSqlStatement,\n SQLOperator,\n} from '@/utils/functions/SqlFunctions'\nimport { LARGE_USER_CARD, UserCardSize } from '@/utils/SynapseConstants'\nimport {\n ColumnTypeEnum,\n FacetColumnRequest,\n QueryBundleRequest,\n QueryResultBundle,\n} from '@sage-bionetworks/synapse-types'\nimport { useState } from 'react'\nimport { useDeepCompareEffectNoCheck } from 'use-deep-compare-effect'\nimport { LoadingUserCardMedium } from '../UserCard/UserCardMedium'\nimport UserCardList from './UserCardList'\n\nconst STORED_UID_KEY = 'sage_rotate_uids'\nconst DEFAULT_DISPLAY_COUNT = 3\n\nexport type UserCardListRotateProps = {\n sql: string\n count: number\n useQueryResultUserData?: boolean\n size?: UserCardSize\n summaryLink?: string\n summaryLinkText?: string\n selectedFacets?: FacetColumnRequest[]\n sqlOperator?: SQLOperator\n searchParams?: Record<string, string>\n additionalFiltersSessionStorageKey?: string\n}\n\nexport const getDisplayIds = (\n ids: string[] = [],\n count: number = DEFAULT_DISPLAY_COUNT,\n storageUidKey: string,\n) => {\n let storedIds: string[] = []\n let newIds: string[] = []\n const storedIdsStr = localStorage.getItem(storageUidKey)\n if (storedIdsStr != null) {\n storedIds = JSON.parse(storedIdsStr)\n }\n if (!storedIds.length) {\n // no stuff in storage\n newIds = ids.slice(0, count)\n localStorage.setItem(storageUidKey, JSON.stringify(newIds))\n return newIds\n } else {\n // has stuff in storage\n const filtered = ids.filter(item => !storedIds.includes(item))\n if (filtered.length >= count) {\n newIds = filtered.slice(0, count)\n localStorage.setItem(\n storageUidKey,\n JSON.stringify(storedIds.concat(newIds)),\n )\n return newIds\n } else {\n localStorage.removeItem(storageUidKey)\n const part = ids.slice(0, count - filtered.length)\n localStorage.setItem(storageUidKey, JSON.stringify(part))\n return filtered.concat(part)\n }\n }\n}\n\nexport function UserCardListRotate({\n sql,\n count,\n useQueryResultUserData = false,\n size = LARGE_USER_CARD,\n summaryLink,\n summaryLinkText,\n selectedFacets,\n searchParams,\n sqlOperator,\n additionalFiltersSessionStorageKey,\n}: UserCardListRotateProps) {\n const { accessToken } = useSynapseContext()\n const [userIds, setUserIds] = useState<string[]>([])\n const [queryData, setQueryData] = useState<QueryResultBundle>()\n const [isLoading, setIsLoading] = useState<boolean>()\n let mounted = true\n const storageUidKey = `${STORED_UID_KEY}-${sql}-${JSON.stringify(\n selectedFacets,\n )}`\n useDeepCompareEffectNoCheck(() => {\n const fetchData = async function () {\n setIsLoading(true)\n const entityId = parseEntityIdFromSqlStatement(sql)\n const additionalFilters = getAdditionalFilters(\n searchParams,\n sqlOperator,\n additionalFiltersSessionStorageKey,\n )\n const partMask = SynapseConstants.BUNDLE_MASK_QUERY_RESULTS\n const request: QueryBundleRequest = {\n partMask,\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId,\n query: {\n sql,\n additionalFilters,\n selectedFacets,\n },\n }\n\n const queryResultBundle = await SynapseClient.getFullQueryTableResults(\n request,\n accessToken,\n )\n const { queryResult } = queryResultBundle\n if (queryResult?.queryResults.rows) {\n // find the column that has the USER_ID in it.\n const ownerIdColumnIndex = queryResult.queryResults.headers.findIndex(\n el => el.columnType === ColumnTypeEnum.USERID,\n )\n const ids: string[] = queryResult.queryResults.rows\n .map(d => d.values[ownerIdColumnIndex])\n .filter((id): id is string => id !== null)\n if (mounted) {\n const newIds = getDisplayIds(ids, count, storageUidKey)\n setUserIds(newIds)\n if (useQueryResultUserData) {\n setQueryData(queryResultBundle)\n }\n setIsLoading(false)\n }\n } else {\n console.log('UserCardListRotate: Error getting data')\n }\n }\n fetchData()\n\n return () => {\n mounted = false\n }\n }, [sql, selectedFacets, count, accessToken, searchParams, sqlOperator])\n\n return (\n <div className=\"UserCardListRotate\">\n {isLoading && <LoadingUserCardMedium />}\n {!isLoading && userIds.length === 0 && (\n <p className=\"font-italic\">No one was found.</p>\n )}\n {!isLoading && userIds.length > 0 && (\n <UserCardList\n list={userIds}\n size={size}\n rowSet={queryData?.queryResult?.queryResults}\n />\n )}\n {summaryLink && summaryLinkText && (\n <div className=\"UserCardListRotate__summary\">\n <LargeButton color=\"secondary\" variant=\"contained\" href={summaryLink}>\n {summaryLinkText}\n </LargeButton>\n </div>\n )}\n </div>\n )\n}\n\nexport default UserCardListRotate\n"],"mappings":";;;;;;;;;;;;;AAqBA,IAAM,IAAiB,oBACjB,IAAwB,GAejB,KACX,IAAgB,EAAE,EAClB,IAAgB,GAChB,MACG;CACH,IAAI,IAAsB,EAAE,EACxB,IAAmB,EAAE,EACnB,IAAe,aAAa,QAAQ,EAAc;AAIxD,KAHI,KAAgB,SAClB,IAAY,KAAK,MAAM,EAAa,GAEjC,EAAU,QAKR;EAEL,IAAM,IAAW,EAAI,QAAO,MAAQ,CAAC,EAAU,SAAS,EAAK,CAAC;AAC9D,MAAI,EAAS,UAAU,EAMrB,QALA,IAAS,EAAS,MAAM,GAAG,EAAM,EACjC,aAAa,QACX,GACA,KAAK,UAAU,EAAU,OAAO,EAAO,CAAC,CACzC,EACM;EACF;AACL,gBAAa,WAAW,EAAc;GACtC,IAAM,IAAO,EAAI,MAAM,GAAG,IAAQ,EAAS,OAAO;AAElD,UADA,aAAa,QAAQ,GAAe,KAAK,UAAU,EAAK,CAAC,EAClD,EAAS,OAAO,EAAK;;OAf9B,QAFA,IAAS,EAAI,MAAM,GAAG,EAAM,EAC5B,aAAa,QAAQ,GAAe,KAAK,UAAU,EAAO,CAAC,EACpD;;AAoBX,SAAgB,EAAmB,EACjC,QACA,UACA,4BAAyB,IACzB,UAAO,GACP,gBACA,oBACA,mBACA,iBACA,gBACA,yCAC0B;CAC1B,IAAM,EAAE,mBAAgB,GAAmB,EACrC,CAAC,GAAS,KAAc,EAAmB,EAAE,CAAC,EAC9C,CAAC,GAAW,KAAgB,GAA6B,EACzD,CAAC,GAAW,KAAgB,GAAmB,EACjD,IAAU,IACR,IAAgB,GAAG,EAAe,GAAG,EAAI,GAAG,KAAK,UACrD,EACD;AAsDD,QArDA,SA8CE,iBA7CoC;AAClC,IAAa,GAAK;EAQlB,IAAM,IAA8B;GAClC,UAAA;GACA,cAAc;GACd,UAVe,EAA8B,EAU7C;GACA,OAAO;IACL;IACA,mBAZsB,EACxB,GACA,GACA,EASE;IACA;IACD;GACF,EAEK,IAAoB,MAAM,EAAc,yBAC5C,GACA,EACD,EACK,EAAE,mBAAgB;AACxB,MAAI,GAAa,aAAa,MAAM;GAElC,IAAM,IAAqB,EAAY,aAAa,QAAQ,WAC1D,MAAM,EAAG,eAAe,EAAe,OACxC,EACK,IAAgB,EAAY,aAAa,KAC5C,KAAI,MAAK,EAAE,OAAO,GAAoB,CACtC,QAAQ,MAAqB,MAAO,KAAK;AAC5C,GAAI,MAEF,EADe,EAAc,GAAK,GAAO,EAC9B,CAAO,EACd,KACF,EAAa,EAAkB,EAEjC,EAAa,GAAM;QAGrB,SAAQ,IAAI,yCAAyC;IAG9C,QAEE;AACX,MAAU;KAEX;EAAC;EAAK;EAAgB;EAAO;EAAa;EAAc;EAAY,CAAC,EAGtE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACG,KAAa,kBAAC,GAAD,EAAyB,CAAA;GACtC,CAAC,KAAa,EAAQ,WAAW,KAChC,kBAAC,KAAD;IAAG,WAAU;cAAc;IAAqB,CAAA;GAEjD,CAAC,KAAa,EAAQ,SAAS,KAC9B,kBAAC,GAAD;IACE,MAAM;IACA;IACN,QAAQ,GAAW,aAAa;IAChC,CAAA;GAEH,KAAe,KACd,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD;KAAa,OAAM;KAAY,SAAQ;KAAY,MAAM;eACtD;KACW,CAAA;IACV,CAAA;GAEJ"}
1
+ {"version":3,"file":"UserCardListRotate.js","names":[],"sources":["../../../src/components/UserCardList/UserCardListRotate.tsx"],"sourcesContent":["import LargeButton from '@/components/styled/LargeButton'\nimport SynapseClient from '@/synapse-client'\nimport { SynapseConstants } from '@/utils'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport {\n getAdditionalFilters,\n parseEntityIdFromSqlStatement,\n SQLOperator,\n} from '@/utils/functions/SqlFunctions'\nimport { LARGE_USER_CARD, UserCardSize } from '@/utils/SynapseConstants'\nimport {\n ColumnTypeEnum,\n FacetColumnRequest,\n QueryBundleRequest,\n QueryResultBundle,\n} from '@sage-bionetworks/synapse-types'\nimport { useState } from 'react'\nimport { useDeepCompareEffectNoCheck } from 'use-deep-compare-effect'\nimport { LoadingUserCardMedium } from '../UserCard/UserCardMedium'\nimport UserCardList from './UserCardList'\n\nconst STORED_UID_KEY = 'sage_rotate_uids'\nconst DEFAULT_DISPLAY_COUNT = 3\n\nexport type UserCardListRotateProps = {\n sql: string\n count: number\n useQueryResultUserData?: boolean\n size?: UserCardSize\n summaryLink?: string\n summaryLinkText?: string\n selectedFacets?: FacetColumnRequest[]\n sqlOperator?: SQLOperator\n searchParams?: Record<string, string>\n additionalFiltersSessionStorageKey?: string\n}\n\nexport const getDisplayIds = (\n ids: string[] = [],\n count: number = DEFAULT_DISPLAY_COUNT,\n storageUidKey: string,\n) => {\n let storedIds: string[] = []\n let newIds: string[] = []\n const storedIdsStr = localStorage.getItem(storageUidKey)\n if (storedIdsStr != null) {\n storedIds = JSON.parse(storedIdsStr)\n }\n if (!storedIds.length) {\n // no stuff in storage\n newIds = ids.slice(0, count)\n localStorage.setItem(storageUidKey, JSON.stringify(newIds))\n return newIds\n } else {\n // has stuff in storage\n const filtered = ids.filter(item => !storedIds.includes(item))\n if (filtered.length >= count) {\n newIds = filtered.slice(0, count)\n localStorage.setItem(\n storageUidKey,\n JSON.stringify(storedIds.concat(newIds)),\n )\n return newIds\n } else {\n localStorage.removeItem(storageUidKey)\n const part = ids.slice(0, count - filtered.length)\n localStorage.setItem(storageUidKey, JSON.stringify(part))\n return filtered.concat(part)\n }\n }\n}\n\nexport function UserCardListRotate({\n sql,\n count,\n useQueryResultUserData = false,\n size = LARGE_USER_CARD,\n summaryLink,\n summaryLinkText,\n selectedFacets,\n searchParams,\n sqlOperator,\n additionalFiltersSessionStorageKey,\n}: UserCardListRotateProps) {\n const { accessToken } = useSynapseContext()\n const [userIds, setUserIds] = useState<string[]>([])\n const [queryData, setQueryData] = useState<QueryResultBundle>()\n const [isLoading, setIsLoading] = useState<boolean>()\n let mounted = true\n const storageUidKey = `${STORED_UID_KEY}-${sql}-${JSON.stringify(\n selectedFacets,\n )}`\n useDeepCompareEffectNoCheck(() => {\n const fetchData = async function () {\n setIsLoading(true)\n const entityId = parseEntityIdFromSqlStatement(sql)\n const additionalFilters = getAdditionalFilters(\n searchParams,\n sqlOperator,\n additionalFiltersSessionStorageKey,\n )\n const partMask = SynapseConstants.BUNDLE_MASK_QUERY_RESULTS\n const request: QueryBundleRequest = {\n partMask,\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId,\n query: {\n sql,\n additionalFilters,\n selectedFacets,\n },\n }\n\n const queryResultBundle = await SynapseClient.getFullQueryTableResults(\n request,\n accessToken,\n )\n const { queryResult } = queryResultBundle\n if (queryResult?.queryResults.rows) {\n // find the column that has the USER_ID in it.\n const ownerIdColumnIndex = queryResult.queryResults.headers.findIndex(\n el => el.columnType === ColumnTypeEnum.USERID,\n )\n const ids: string[] = queryResult.queryResults.rows\n .map(d => d.values[ownerIdColumnIndex])\n .filter((id): id is string => id !== null)\n if (mounted) {\n const newIds = getDisplayIds(ids, count, storageUidKey)\n setUserIds(newIds)\n if (useQueryResultUserData) {\n setQueryData(queryResultBundle)\n }\n setIsLoading(false)\n }\n } else {\n console.log('UserCardListRotate: Error getting data')\n }\n }\n fetchData()\n\n return () => {\n mounted = false\n }\n }, [sql, selectedFacets, count, accessToken, searchParams, sqlOperator])\n\n return (\n <div className=\"UserCardListRotate\">\n {isLoading && <LoadingUserCardMedium />}\n {!isLoading && userIds.length === 0 && (\n <p className=\"font-italic\">No one was found.</p>\n )}\n {!isLoading && userIds.length > 0 && (\n <UserCardList\n list={userIds}\n size={size}\n rowSet={queryData?.queryResult?.queryResults}\n />\n )}\n {summaryLink && summaryLinkText && (\n <div className=\"UserCardListRotate__summary\">\n <LargeButton color=\"secondary\" variant=\"contained\" href={summaryLink}>\n {summaryLinkText}\n </LargeButton>\n </div>\n )}\n </div>\n )\n}\n\nexport default UserCardListRotate\n"],"mappings":";;;;;;;;;;;;;AAqBA,IAAM,IAAiB,oBACjB,IAAwB,GAejB,KACX,IAAgB,CAAC,GACjB,IAAgB,GAChB,MACG;CACH,IAAI,IAAsB,CAAC,GACvB,IAAmB,CAAC,GAClB,IAAe,aAAa,QAAQ,CAAa;CAIvD,IAHI,KAAgB,SAClB,IAAY,KAAK,MAAM,CAAY,IAEhC,EAAU,QAKR;EAEL,IAAM,IAAW,EAAI,QAAO,MAAQ,CAAC,EAAU,SAAS,CAAI,CAAC;EAC7D,IAAI,EAAS,UAAU,GAMrB,OALA,IAAS,EAAS,MAAM,GAAG,CAAK,GAChC,aAAa,QACX,GACA,KAAK,UAAU,EAAU,OAAO,CAAM,CAAC,CACzC,GACO;EACF;GACL,aAAa,WAAW,CAAa;GACrC,IAAM,IAAO,EAAI,MAAM,GAAG,IAAQ,EAAS,MAAM;GAEjD,OADA,aAAa,QAAQ,GAAe,KAAK,UAAU,CAAI,CAAC,GACjD,EAAS,OAAO,CAAI;EAC7B;CACF,OAjBE,OAFA,IAAS,EAAI,MAAM,GAAG,CAAK,GAC3B,aAAa,QAAQ,GAAe,KAAK,UAAU,CAAM,CAAC,GACnD;AAkBX;AAEA,SAAgB,EAAmB,EACjC,QACA,UACA,4BAAyB,IACzB,UAAO,GACP,gBACA,oBACA,mBACA,iBACA,gBACA,yCAC0B;CAC1B,IAAM,EAAE,mBAAgB,EAAkB,GACpC,CAAC,GAAS,KAAc,EAAmB,CAAC,CAAC,GAC7C,CAAC,GAAW,KAAgB,EAA4B,GACxD,CAAC,GAAW,KAAgB,EAAkB,GAChD,IAAU,IACR,IAAgB,GAAG,EAAe,GAAG,EAAI,GAAG,KAAK,UACrD,CACF;CAsDA,OArDA,SA8CE,iBA7CoC;EAClC,EAAa,EAAI;EAQjB,IAAM,IAA8B;GAClC,UAAA;GACA,cAAc;GACd,UAVe,EAA8B,CAU7C;GACA,OAAO;IACL;IACA,mBAZsB,EACxB,GACA,GACA,CASE;IACA;GACF;EACF,GAEM,IAAoB,MAAM,EAAc,yBAC5C,GACA,CACF,GACM,EAAE,mBAAgB;EACxB,IAAI,GAAa,aAAa,MAAM;GAElC,IAAM,IAAqB,EAAY,aAAa,QAAQ,WAC1D,MAAM,EAAG,eAAe,EAAe,MACzC,GACM,IAAgB,EAAY,aAAa,KAC5C,KAAI,MAAK,EAAE,OAAO,EAAmB,EACrC,QAAQ,MAAqB,MAAO,IAAI;GAC3C,AAAI,MAEF,EADe,EAAc,GAAK,GAAO,CAC9B,CAAM,GACb,KACF,EAAa,CAAiB,GAEhC,EAAa,EAAK;EAEtB,OACE,QAAQ,IAAI,wCAAwC;CAExD,EACU,SAEG;EACX,IAAU;CACZ,IACC;EAAC;EAAK;EAAgB;EAAO;EAAa;EAAc;CAAW,CAAC,GAGrE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACG,KAAa,kBAAC,GAAD,CAAwB,CAAA;GACrC,CAAC,KAAa,EAAQ,WAAW,KAChC,kBAAC,KAAD;IAAG,WAAU;cAAc;GAAoB,CAAA;GAEhD,CAAC,KAAa,EAAQ,SAAS,KAC9B,kBAAC,GAAD;IACE,MAAM;IACA;IACN,QAAQ,GAAW,aAAa;GACjC,CAAA;GAEF,KAAe,KACd,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD;KAAa,OAAM;KAAY,SAAQ;KAAY,MAAM;eACtD;IACU,CAAA;GACV,CAAA;EAEJ;;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserOrTeamBadge.js","names":[],"sources":["../../../src/components/UserOrTeamBadge/UserOrTeamBadge.tsx"],"sourcesContent":["import { Skeleton } from '@mui/material'\nimport { UserGroupHeader } from '@sage-bionetworks/synapse-types'\nimport TeamBadge from '../TeamBadge'\nimport { UserBadge } from '../UserCard/UserBadge'\nimport { useUserOrTeam } from './useUserOrTeam'\n\nexport type UserOrTeamBadgeProps = {\n /* The principal ID of the user or team. Required if userGroupHeader is undefined. */\n principalId?: string | number\n /* The userGroupHeader of the user or team. Required if principalId is undefined. */\n userGroupHeader?: UserGroupHeader\n showFullName?: boolean\n disableHref?: boolean\n showCardOnHover?: boolean\n openLinkInNewTab?: boolean\n}\n\nexport default function UserOrTeamBadge(props: UserOrTeamBadgeProps) {\n const {\n principalId,\n disableHref,\n showCardOnHover,\n showFullName,\n userGroupHeader: providedUserGroupHeader,\n openLinkInNewTab,\n } = props\n\n const { userGroupHeader } = useUserOrTeam(\n principalId,\n providedUserGroupHeader,\n )\n\n const resolvedPrincipalId = principalId ?? providedUserGroupHeader?.ownerId\n\n if (resolvedPrincipalId == null && providedUserGroupHeader == null) {\n console.error(\n 'Expected one of principalId or userGroupHeader to be defined but both were null or undefined',\n )\n return <></>\n } else if (userGroupHeader === undefined) {\n return <Skeleton width={125} height={30} />\n } else if (userGroupHeader.isIndividual) {\n return (\n <UserBadge\n userId={resolvedPrincipalId!.toString()}\n disableLink={disableHref}\n showFullName={showFullName}\n showCardOnHover={showCardOnHover}\n openLinkInNewTab={openLinkInNewTab}\n />\n )\n } else {\n return (\n <TeamBadge\n teamId={resolvedPrincipalId!}\n teamName={userGroupHeader.userName}\n disableHref={disableHref}\n openLinkInNewTab={openLinkInNewTab}\n />\n )\n }\n}\n"],"mappings":";;;;;;AAiBA,SAAwB,EAAgB,GAA6B;CACnE,IAAM,EACJ,gBACA,gBACA,oBACA,iBACA,iBAAiB,GACjB,wBACE,GAEE,EAAE,uBAAoB,EAC1B,GACA,EACD,EAEK,IAAsB,KAAe,GAAyB;AAoBlE,QAlBE,KAAuB,QAAQ,KAA2B,QAC5D,QAAQ,MACN,+FACD,EACM,kBAAA,GAAA,EAAK,CAAA,IACH,MAAoB,KAAA,IACtB,kBAAC,GAAD;EAAU,OAAO;EAAK,QAAQ;EAAM,CAAA,GAClC,EAAgB,eAEvB,kBAAC,GAAD;EACE,QAAQ,EAAqB,UAAU;EACvC,aAAa;EACC;EACG;EACC;EAClB,CAAA,GAIF,kBAAC,GAAD;EACE,QAAQ;EACR,UAAU,EAAgB;EACb;EACK;EAClB,CAAA"}
1
+ {"version":3,"file":"UserOrTeamBadge.js","names":[],"sources":["../../../src/components/UserOrTeamBadge/UserOrTeamBadge.tsx"],"sourcesContent":["import { Skeleton } from '@mui/material'\nimport { UserGroupHeader } from '@sage-bionetworks/synapse-types'\nimport TeamBadge from '../TeamBadge'\nimport { UserBadge } from '../UserCard/UserBadge'\nimport { useUserOrTeam } from './useUserOrTeam'\n\nexport type UserOrTeamBadgeProps = {\n /* The principal ID of the user or team. Required if userGroupHeader is undefined. */\n principalId?: string | number\n /* The userGroupHeader of the user or team. Required if principalId is undefined. */\n userGroupHeader?: UserGroupHeader\n showFullName?: boolean\n disableHref?: boolean\n showCardOnHover?: boolean\n openLinkInNewTab?: boolean\n}\n\nexport default function UserOrTeamBadge(props: UserOrTeamBadgeProps) {\n const {\n principalId,\n disableHref,\n showCardOnHover,\n showFullName,\n userGroupHeader: providedUserGroupHeader,\n openLinkInNewTab,\n } = props\n\n const { userGroupHeader } = useUserOrTeam(\n principalId,\n providedUserGroupHeader,\n )\n\n const resolvedPrincipalId = principalId ?? providedUserGroupHeader?.ownerId\n\n if (resolvedPrincipalId == null && providedUserGroupHeader == null) {\n console.error(\n 'Expected one of principalId or userGroupHeader to be defined but both were null or undefined',\n )\n return <></>\n } else if (userGroupHeader === undefined) {\n return <Skeleton width={125} height={30} />\n } else if (userGroupHeader.isIndividual) {\n return (\n <UserBadge\n userId={resolvedPrincipalId!.toString()}\n disableLink={disableHref}\n showFullName={showFullName}\n showCardOnHover={showCardOnHover}\n openLinkInNewTab={openLinkInNewTab}\n />\n )\n } else {\n return (\n <TeamBadge\n teamId={resolvedPrincipalId!}\n teamName={userGroupHeader.userName}\n disableHref={disableHref}\n openLinkInNewTab={openLinkInNewTab}\n />\n )\n }\n}\n"],"mappings":";;;;;;AAiBA,SAAwB,EAAgB,GAA6B;CACnE,IAAM,EACJ,gBACA,gBACA,oBACA,iBACA,iBAAiB,GACjB,wBACE,GAEE,EAAE,uBAAoB,EAC1B,GACA,CACF,GAEM,IAAsB,KAAe,GAAyB;CAoBlE,OAlBE,KAAuB,QAAQ,KAA2B,QAC5D,QAAQ,MACN,8FACF,GACO,kBAAA,GAAA,CAAI,CAAA,KACF,MAAoB,KAAA,IACtB,kBAAC,GAAD;EAAU,OAAO;EAAK,QAAQ;CAAK,CAAA,IACjC,EAAgB,eAEvB,kBAAC,GAAD;EACE,QAAQ,EAAqB,SAAS;EACtC,aAAa;EACC;EACG;EACC;CACnB,CAAA,IAID,kBAAC,GAAD;EACE,QAAQ;EACR,UAAU,EAAgB;EACb;EACK;CACnB,CAAA;AAGP"}
@@ -1 +1 @@
1
- {"version":3,"file":"useUserOrTeam.js","names":[],"sources":["../../../src/components/UserOrTeamBadge/useUserOrTeam.tsx"],"sourcesContent":["import {\n useGetProfileImage,\n useGetStablePresignedUrl,\n} from '@/synapse-queries/file/useFiles'\nimport { useGetUserGroupHeader } from '@/synapse-queries/user/useUserGroupHeader'\nimport { useGetRealmPrincipals } from '@/synapse-queries/realm/useRealmPrincipals'\nimport { useGetTeam } from '@/synapse-queries/team/useTeam'\nimport { useCreateUrlForData } from '@/utils/hooks/usePreFetchResource'\nimport {\n FileHandleAssociateType,\n UserGroupHeader,\n UserProfile,\n} from '@sage-bionetworks/synapse-types'\nimport { Avatar as MUIAvatar } from '@mui/material'\nimport React, { useMemo } from 'react'\nimport { Avatar, AvatarSize } from '../UserCard/Avatar'\nimport IconSvg from '../IconSvg/IconSvg'\n\nexport type UseUserOrTeamResult = {\n /** The lightweight header for the resolved principal (user or team). Undefined while loading. */\n userGroupHeader: UserGroupHeader | undefined\n /** True while the `userGroupHeader` is being fetched. */\n isLoading: boolean\n /**\n * A stable React component that renders the icon for the resolved principal.\n *\n * - **Individual user**: renders an `Avatar` with the user's profile image, falling back to\n * colored initials when no image is available.\n * - **Regular team**: renders a team icon (`IconSvg icon=\"team\"`), or the team's custom image\n * when `Team.icon` (a file-handle ID) is set.\n * - **Public / authenticated-users group**: renders a globe icon (`IconSvg icon=\"public\"`).\n *\n * Accepts an optional `avatarSize` prop (`'SMALL' | 'MEDIUM' | 'LARGE'`, default `'SMALL'`)\n * for caller-controlled sizing. Returns `null` while the principal's identity has not yet\n * been resolved (i.e., while `isLoading` is true).\n */\n IconComponent: React.ComponentType<{ avatarSize?: AvatarSize }>\n /**\n * Identifies Synapse realm special groups.\n *\n * - `'authenticatedUsers'` — the principal is the \"All registered Synapse users\" group.\n * - `'publicGroup'` — the principal is the \"Anyone on the web\" group.\n * - `null` — the principal is an individual user, a regular team, or realm data is still loading.\n */\n specialGroupType: 'authenticatedUsers' | 'publicGroup' | null\n}\n\nfunction UserAvatarIcon({\n ownerId,\n syntheticProfile,\n avatarSize = 'SMALL',\n}: {\n ownerId: string\n syntheticProfile: UserProfile\n avatarSize?: AvatarSize\n}) {\n const { data: blob, isLoading } = useGetProfileImage(ownerId)\n const imageURL = useCreateUrlForData(blob)\n return (\n <Avatar\n userProfile={syntheticProfile}\n imageURL={imageURL}\n avatarSize={avatarSize}\n showCardOnHover={false}\n isLoadingAvatar={isLoading}\n />\n )\n}\n\nconst avatarSizePx: Record<AvatarSize, number> = {\n SMALL: 20,\n MEDIUM: 30,\n LARGE: 80,\n}\n\nfunction TeamAvatarIcon({\n ownerId,\n isPublicGroup,\n avatarSize = 'SMALL',\n}: {\n ownerId: string\n isPublicGroup: boolean\n avatarSize?: AvatarSize\n}) {\n const { data: team } = useGetTeam(ownerId, { enabled: !isPublicGroup })\n\n const { dataUrl: teamIconUrl } =\n useGetStablePresignedUrl(\n {\n fileHandleId: team?.icon ?? '',\n associateObjectId: ownerId,\n associateObjectType: FileHandleAssociateType.TeamAttachment,\n },\n false,\n { enabled: !isPublicGroup && !!team?.icon },\n ) ?? {}\n\n const size = avatarSizePx[avatarSize]\n\n if (isPublicGroup) {\n return <IconSvg icon=\"public\" wrap={false} sx={{ fontSize: size }} />\n }\n\n if (teamIconUrl) {\n return (\n <MUIAvatar\n src={teamIconUrl}\n sx={{ width: size, height: size, bgcolor: 'background.default' }}\n />\n )\n }\n\n return <IconSvg icon=\"team\" wrap={false} sx={{ fontSize: size }} />\n}\n\n/**\n * Resolves a Synapse principal (user or team) by ID and returns display data plus a\n * ready-to-render icon component.\n *\n * @param principalId - The numeric or string Synapse principal ID. If omitted, falls back to\n * `providedUserGroupHeader.ownerId`. Pass `undefined` when the ID is not yet known — the\n * hook will return `isLoading: false` with all fields undefined/null until an ID is provided.\n * @param providedUserGroupHeader - An already-fetched `UserGroupHeader`. When supplied, the\n * network fetch for the header is skipped entirely and this value is used directly. Useful\n * when the caller already has header data (e.g., from a list response).\n */\nexport function useUserOrTeam(\n principalId?: string | number,\n providedUserGroupHeader?: UserGroupHeader,\n): UseUserOrTeamResult {\n const resolvedPrincipalId = (\n principalId ??\n providedUserGroupHeader?.ownerId ??\n ''\n ).toString()\n\n const { data: fetchedUserGroupHeader, isLoading } = useGetUserGroupHeader(\n resolvedPrincipalId,\n { enabled: !providedUserGroupHeader && !!resolvedPrincipalId },\n )\n\n const userGroupHeader = providedUserGroupHeader ?? fetchedUserGroupHeader\n\n const ownerId = userGroupHeader?.ownerId\n const isIndividual = userGroupHeader?.isIndividual\n const userName = userGroupHeader?.userName\n const firstName = userGroupHeader?.firstName\n\n const { data: realmPrincipals } = useGetRealmPrincipals()\n\n const specialGroupType: 'authenticatedUsers' | 'publicGroup' | null =\n isIndividual === false\n ? realmPrincipals?.authenticatedUsers === resolvedPrincipalId\n ? 'authenticatedUsers'\n : realmPrincipals?.publicGroup === resolvedPrincipalId\n ? 'publicGroup'\n : null\n : null\n\n const isPublicGroup = specialGroupType !== null\n\n const IconComponent = useMemo<\n React.ComponentType<{\n avatarSize?: AvatarSize\n }>\n >(() => {\n if (ownerId == null || isIndividual == null) return () => null\n\n if (isIndividual) {\n const syntheticProfile = {\n ownerId,\n userName,\n firstName,\n } as unknown as UserProfile\n return ({ avatarSize }: { avatarSize?: AvatarSize }) => (\n <UserAvatarIcon\n ownerId={ownerId}\n syntheticProfile={syntheticProfile}\n avatarSize={avatarSize}\n />\n )\n } else {\n return ({ avatarSize }: { avatarSize?: AvatarSize }) => (\n <TeamAvatarIcon\n ownerId={ownerId}\n isPublicGroup={isPublicGroup}\n avatarSize={avatarSize}\n />\n )\n }\n }, [ownerId, isIndividual, userName, firstName, isPublicGroup])\n\n return { userGroupHeader, isLoading, IconComponent, specialGroupType }\n}\n"],"mappings":";;;;;;;;;;;;AA+CA,SAAS,EAAe,EACtB,YACA,qBACA,gBAAa,WAKZ;CACD,IAAM,EAAE,MAAM,GAAM,iBAAc,EAAmB,EAAQ;AAE7D,QACE,kBAAC,GAAD;EACE,aAAa;EACH,UAJG,EAAoB,EAIvB;EACE;EACZ,iBAAiB;EACjB,iBAAiB;EACjB,CAAA;;AAIN,IAAM,IAA2C;CAC/C,OAAO;CACP,QAAQ;CACR,OAAO;CACR;AAED,SAAS,EAAe,EACtB,YACA,kBACA,gBAAa,WAKZ;CACD,IAAM,EAAE,MAAM,MAAS,EAAW,GAAS,EAAE,SAAS,CAAC,GAAe,CAAC,EAEjE,EAAE,SAAS,MACf,EACE;EACE,cAAc,GAAM,QAAQ;EAC5B,mBAAmB;EACnB,qBAAqB,EAAwB;EAC9C,EACD,IACA,EAAE,SAAS,CAAC,KAAiB,CAAC,CAAC,GAAM,MAAM,CAC5C,IAAI,EAAE,EAEH,IAAO,EAAa;AAe1B,QAbI,IACK,kBAAC,GAAD;EAAS,MAAK;EAAS,MAAM;EAAO,IAAI,EAAE,UAAU,GAAM;EAAI,CAAA,GAGnE,IAEA,kBAAC,GAAD;EACE,KAAK;EACL,IAAI;GAAE,OAAO;GAAM,QAAQ;GAAM,SAAS;GAAsB;EAChE,CAAA,GAIC,kBAAC,GAAD;EAAS,MAAK;EAAO,MAAM;EAAO,IAAI,EAAE,UAAU,GAAM;EAAI,CAAA;;AAcrE,SAAgB,EACd,GACA,GACqB;CACrB,IAAM,KACJ,KACA,GAAyB,WACzB,IACA,UAAU,EAEN,EAAE,MAAM,GAAwB,iBAAc,EAClD,GACA,EAAE,SAAS,CAAC,KAA2B,CAAC,CAAC,GAAqB,CAC/D,EAEK,IAAkB,KAA2B,GAE7C,IAAU,GAAiB,SAC3B,IAAe,GAAiB,cAChC,IAAW,GAAiB,UAC5B,IAAY,GAAiB,WAE7B,EAAE,MAAM,MAAoB,GAAuB,EAEnD,IACJ,MAAiB,KACb,GAAiB,uBAAuB,IACtC,uBACA,GAAiB,gBAAgB,IAC/B,gBACA,OACJ,MAEA,IAAgB,MAAqB;AAiC3C,QAAO;EAAE;EAAiB;EAAW,eA/Bf,QAId;AACN,OAAI,KAAW,QAAQ,KAAgB,KAAM,cAAa;AAE1D,OAAI,GAAc;IAChB,IAAM,IAAmB;KACvB;KACA;KACA;KACD;AACD,YAAQ,EAAE,oBACR,kBAAC,GAAD;KACW;KACS;KACN;KACZ,CAAA;SAGJ,SAAQ,EAAE,oBACR,kBAAC,GAAD;IACW;IACM;IACH;IACZ,CAAA;KAGL;GAAC;GAAS;GAAc;GAAU;GAAW;GAAc,CAEzB;EAAe;EAAkB"}
1
+ {"version":3,"file":"useUserOrTeam.js","names":[],"sources":["../../../src/components/UserOrTeamBadge/useUserOrTeam.tsx"],"sourcesContent":["import {\n useGetProfileImage,\n useGetStablePresignedUrl,\n} from '@/synapse-queries/file/useFiles'\nimport { useGetUserGroupHeader } from '@/synapse-queries/user/useUserGroupHeader'\nimport { useGetRealmPrincipals } from '@/synapse-queries/realm/useRealmPrincipals'\nimport { useGetTeam } from '@/synapse-queries/team/useTeam'\nimport { useCreateUrlForData } from '@/utils/hooks/usePreFetchResource'\nimport {\n FileHandleAssociateType,\n UserGroupHeader,\n UserProfile,\n} from '@sage-bionetworks/synapse-types'\nimport { Avatar as MUIAvatar } from '@mui/material'\nimport React, { useMemo } from 'react'\nimport { Avatar, AvatarSize } from '../UserCard/Avatar'\nimport IconSvg from '../IconSvg/IconSvg'\n\nexport type UseUserOrTeamResult = {\n /** The lightweight header for the resolved principal (user or team). Undefined while loading. */\n userGroupHeader: UserGroupHeader | undefined\n /** True while the `userGroupHeader` is being fetched. */\n isLoading: boolean\n /**\n * A stable React component that renders the icon for the resolved principal.\n *\n * - **Individual user**: renders an `Avatar` with the user's profile image, falling back to\n * colored initials when no image is available.\n * - **Regular team**: renders a team icon (`IconSvg icon=\"team\"`), or the team's custom image\n * when `Team.icon` (a file-handle ID) is set.\n * - **Public / authenticated-users group**: renders a globe icon (`IconSvg icon=\"public\"`).\n *\n * Accepts an optional `avatarSize` prop (`'SMALL' | 'MEDIUM' | 'LARGE'`, default `'SMALL'`)\n * for caller-controlled sizing. Returns `null` while the principal's identity has not yet\n * been resolved (i.e., while `isLoading` is true).\n */\n IconComponent: React.ComponentType<{ avatarSize?: AvatarSize }>\n /**\n * Identifies Synapse realm special groups.\n *\n * - `'authenticatedUsers'` — the principal is the \"All registered Synapse users\" group.\n * - `'publicGroup'` — the principal is the \"Anyone on the web\" group.\n * - `null` — the principal is an individual user, a regular team, or realm data is still loading.\n */\n specialGroupType: 'authenticatedUsers' | 'publicGroup' | null\n}\n\nfunction UserAvatarIcon({\n ownerId,\n syntheticProfile,\n avatarSize = 'SMALL',\n}: {\n ownerId: string\n syntheticProfile: UserProfile\n avatarSize?: AvatarSize\n}) {\n const { data: blob, isLoading } = useGetProfileImage(ownerId)\n const imageURL = useCreateUrlForData(blob)\n return (\n <Avatar\n userProfile={syntheticProfile}\n imageURL={imageURL}\n avatarSize={avatarSize}\n showCardOnHover={false}\n isLoadingAvatar={isLoading}\n />\n )\n}\n\nconst avatarSizePx: Record<AvatarSize, number> = {\n SMALL: 20,\n MEDIUM: 30,\n LARGE: 80,\n}\n\nfunction TeamAvatarIcon({\n ownerId,\n isPublicGroup,\n avatarSize = 'SMALL',\n}: {\n ownerId: string\n isPublicGroup: boolean\n avatarSize?: AvatarSize\n}) {\n const { data: team } = useGetTeam(ownerId, { enabled: !isPublicGroup })\n\n const { dataUrl: teamIconUrl } =\n useGetStablePresignedUrl(\n {\n fileHandleId: team?.icon ?? '',\n associateObjectId: ownerId,\n associateObjectType: FileHandleAssociateType.TeamAttachment,\n },\n false,\n { enabled: !isPublicGroup && !!team?.icon },\n ) ?? {}\n\n const size = avatarSizePx[avatarSize]\n\n if (isPublicGroup) {\n return <IconSvg icon=\"public\" wrap={false} sx={{ fontSize: size }} />\n }\n\n if (teamIconUrl) {\n return (\n <MUIAvatar\n src={teamIconUrl}\n sx={{ width: size, height: size, bgcolor: 'background.default' }}\n />\n )\n }\n\n return <IconSvg icon=\"team\" wrap={false} sx={{ fontSize: size }} />\n}\n\n/**\n * Resolves a Synapse principal (user or team) by ID and returns display data plus a\n * ready-to-render icon component.\n *\n * @param principalId - The numeric or string Synapse principal ID. If omitted, falls back to\n * `providedUserGroupHeader.ownerId`. Pass `undefined` when the ID is not yet known — the\n * hook will return `isLoading: false` with all fields undefined/null until an ID is provided.\n * @param providedUserGroupHeader - An already-fetched `UserGroupHeader`. When supplied, the\n * network fetch for the header is skipped entirely and this value is used directly. Useful\n * when the caller already has header data (e.g., from a list response).\n */\nexport function useUserOrTeam(\n principalId?: string | number,\n providedUserGroupHeader?: UserGroupHeader,\n): UseUserOrTeamResult {\n const resolvedPrincipalId = (\n principalId ??\n providedUserGroupHeader?.ownerId ??\n ''\n ).toString()\n\n const { data: fetchedUserGroupHeader, isLoading } = useGetUserGroupHeader(\n resolvedPrincipalId,\n { enabled: !providedUserGroupHeader && !!resolvedPrincipalId },\n )\n\n const userGroupHeader = providedUserGroupHeader ?? fetchedUserGroupHeader\n\n const ownerId = userGroupHeader?.ownerId\n const isIndividual = userGroupHeader?.isIndividual\n const userName = userGroupHeader?.userName\n const firstName = userGroupHeader?.firstName\n\n const { data: realmPrincipals } = useGetRealmPrincipals()\n\n const specialGroupType: 'authenticatedUsers' | 'publicGroup' | null =\n isIndividual === false\n ? realmPrincipals?.authenticatedUsers === resolvedPrincipalId\n ? 'authenticatedUsers'\n : realmPrincipals?.publicGroup === resolvedPrincipalId\n ? 'publicGroup'\n : null\n : null\n\n const isPublicGroup = specialGroupType !== null\n\n const IconComponent = useMemo<\n React.ComponentType<{\n avatarSize?: AvatarSize\n }>\n >(() => {\n if (ownerId == null || isIndividual == null) return () => null\n\n if (isIndividual) {\n const syntheticProfile = {\n ownerId,\n userName,\n firstName,\n } as unknown as UserProfile\n return ({ avatarSize }: { avatarSize?: AvatarSize }) => (\n <UserAvatarIcon\n ownerId={ownerId}\n syntheticProfile={syntheticProfile}\n avatarSize={avatarSize}\n />\n )\n } else {\n return ({ avatarSize }: { avatarSize?: AvatarSize }) => (\n <TeamAvatarIcon\n ownerId={ownerId}\n isPublicGroup={isPublicGroup}\n avatarSize={avatarSize}\n />\n )\n }\n }, [ownerId, isIndividual, userName, firstName, isPublicGroup])\n\n return { userGroupHeader, isLoading, IconComponent, specialGroupType }\n}\n"],"mappings":";;;;;;;;;;;;AA+CA,SAAS,EAAe,EACtB,YACA,qBACA,gBAAa,WAKZ;CACD,IAAM,EAAE,MAAM,GAAM,iBAAc,EAAmB,CAAO;CAE5D,OACE,kBAAC,GAAD;EACE,aAAa;EACH,UAJG,EAAoB,CAIvB;EACE;EACZ,iBAAiB;EACjB,iBAAiB;CAClB,CAAA;AAEL;AAEA,IAAM,IAA2C;CAC/C,OAAO;CACP,QAAQ;CACR,OAAO;AACT;AAEA,SAAS,EAAe,EACtB,YACA,kBACA,gBAAa,WAKZ;CACD,IAAM,EAAE,MAAM,MAAS,EAAW,GAAS,EAAE,SAAS,CAAC,EAAc,CAAC,GAEhE,EAAE,SAAS,MACf,EACE;EACE,cAAc,GAAM,QAAQ;EAC5B,mBAAmB;EACnB,qBAAqB,EAAwB;CAC/C,GACA,IACA,EAAE,SAAS,CAAC,KAAiB,CAAC,CAAC,GAAM,KAAK,CAC5C,KAAK,CAAC,GAEF,IAAO,EAAa;CAe1B,OAbI,IACK,kBAAC,GAAD;EAAS,MAAK;EAAS,MAAM;EAAO,IAAI,EAAE,UAAU,EAAK;CAAI,CAAA,IAGlE,IAEA,kBAAC,GAAD;EACE,KAAK;EACL,IAAI;GAAE,OAAO;GAAM,QAAQ;GAAM,SAAS;EAAqB;CAChE,CAAA,IAIE,kBAAC,GAAD;EAAS,MAAK;EAAO,MAAM;EAAO,IAAI,EAAE,UAAU,EAAK;CAAI,CAAA;AACpE;AAaA,SAAgB,EACd,GACA,GACqB;CACrB,IAAM,KACJ,KACA,GAAyB,WACzB,IACA,SAAS,GAEL,EAAE,MAAM,GAAwB,iBAAc,EAClD,GACA,EAAE,SAAS,CAAC,KAA2B,CAAC,CAAC,EAAoB,CAC/D,GAEM,IAAkB,KAA2B,GAE7C,IAAU,GAAiB,SAC3B,IAAe,GAAiB,cAChC,IAAW,GAAiB,UAC5B,IAAY,GAAiB,WAE7B,EAAE,MAAM,MAAoB,EAAsB,GAElD,IACJ,MAAiB,KACb,GAAiB,uBAAuB,IACtC,uBACA,GAAiB,gBAAgB,IAC/B,gBACA,OACJ,MAEA,IAAgB,MAAqB;CAiC3C,OAAO;EAAE;EAAiB;EAAW,eA/Bf,QAId;GACN,IAAI,KAAW,QAAQ,KAAgB,MAAM,aAAa;GAE1D,IAAI,GAAc;IAChB,IAAM,IAAmB;KACvB;KACA;KACA;IACF;IACA,QAAQ,EAAE,oBACR,kBAAC,GAAD;KACW;KACS;KACN;IACb,CAAA;GAEL,OACE,QAAQ,EAAE,oBACR,kBAAC,GAAD;IACW;IACM;IACH;GACb,CAAA;EAGP,GAAG;GAAC;GAAS;GAAc;GAAU;GAAW;EAAa,CAExB;EAAe;CAAiB;AACvE"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserChallenges.js","names":[],"sources":["../../../src/components/UserProfileLinks/UserChallenges.tsx"],"sourcesContent":["import { useGetUserChallengesInfinite } from '@/synapse-queries/user/useGetUserChallenges'\nimport { PRODUCTION_ENDPOINT_CONFIG } from '@/utils/functions/getEndpoint'\nimport { ChallengeWithProjectHeader } from '@sage-bionetworks/synapse-types'\nimport { useEffect } from 'react'\nimport { useErrorHandler } from 'react-error-boundary'\nimport { useInView } from 'react-intersection-observer'\nimport { SkeletonTable } from '../Skeleton/SkeletonTable'\n\nexport type UserChallengesProps = {\n userId: string\n}\n\nexport default function UserChallenges({ userId }: UserChallengesProps) {\n const handleError = useErrorHandler()\n // Load the next page when this ref comes into view.\n const { ref, inView } = useInView()\n const {\n data,\n status,\n isFetching,\n isLoading,\n hasNextPage,\n fetchNextPage,\n isError,\n error: newError,\n } = useGetUserChallengesInfinite(userId)\n\n useEffect(() => {\n if (isError && newError) {\n handleError(newError)\n }\n }, [isError, newError, handleError])\n\n useEffect(() => {\n if (\n status === 'success' &&\n !isFetching &&\n hasNextPage &&\n fetchNextPage &&\n inView\n ) {\n fetchNextPage()\n }\n }, [status, isFetching, hasNextPage, fetchNextPage, inView])\n\n const allRows = data?.pages.flatMap(page => page.results) ?? []\n\n return (\n <>\n {allRows.length > 0 && (\n <>\n {allRows.map((item: ChallengeWithProjectHeader) => {\n if (item && item.challenge && item.projectHeader) {\n // another option may be to use an EntityLink\n return (\n <p key={`user-challenge-list-item-${item.challenge.projectId}`}>\n <a\n target=\"_self\"\n rel=\"noopener noreferrer\"\n href={`${PRODUCTION_ENDPOINT_CONFIG.PORTAL}Synapse:${item.challenge.projectId}/challenge`}\n >\n {item.projectHeader.name}\n </a>\n </p>\n )\n } else return false\n })}\n {/* To trigger loading the next page */}\n <div ref={ref} />\n </>\n )}\n {!isFetching && allRows.length == 0 && <div>Empty</div>}\n {isLoading && <SkeletonTable numRows={5} numCols={1} />}\n </>\n )\n}\n"],"mappings":";;;;;;;;AAYA,SAAwB,EAAe,EAAE,aAA+B;CACtE,IAAM,IAAc,GAAiB,EAE/B,EAAE,QAAK,cAAW,GAAW,EAC7B,EACJ,SACA,WACA,eACA,cACA,gBACA,kBACA,YACA,OAAO,MACL,EAA6B,EAAO;AAQxC,CANA,QAAgB;AACd,EAAI,KAAW,KACb,EAAY,EAAS;IAEtB;EAAC;EAAS;EAAU;EAAY,CAAC,EAEpC,QAAgB;AACd,EACE,MAAW,aACX,CAAC,KACD,KACA,KACA,KAEA,GAAe;IAEhB;EAAC;EAAQ;EAAY;EAAa;EAAe;EAAO,CAAC;CAE5D,IAAM,IAAU,GAAM,MAAM,SAAQ,MAAQ,EAAK,QAAQ,IAAI,EAAE;AAE/D,QACE,kBAAA,GAAA,EAAA,UAAA;EACG,EAAQ,SAAS,KAChB,kBAAA,GAAA,EAAA,UAAA,CACG,EAAQ,KAAK,MACR,KAAQ,EAAK,aAAa,EAAK,gBAG/B,kBAAC,KAAD,EAAA,UACE,kBAAC,KAAD;GACE,QAAO;GACP,KAAI;GACJ,MAAM,GAAG,EAA2B,OAAO,UAAU,EAAK,UAAU,UAAU;aAE7E,EAAK,cAAc;GAClB,CAAA,EACF,EARI,4BAA4B,EAAK,UAAU,YAQ/C,GAEM,GACd,EAEF,kBAAC,OAAD,EAAU,QAAO,CAAA,CAChB,EAAA,CAAA;EAEJ,CAAC,KAAc,EAAQ,UAAU,KAAK,kBAAC,OAAD,EAAA,UAAK,SAAW,CAAA;EACtD,KAAa,kBAAC,GAAD;GAAe,SAAS;GAAG,SAAS;GAAK,CAAA;EACtD,EAAA,CAAA"}
1
+ {"version":3,"file":"UserChallenges.js","names":[],"sources":["../../../src/components/UserProfileLinks/UserChallenges.tsx"],"sourcesContent":["import { useGetUserChallengesInfinite } from '@/synapse-queries/user/useGetUserChallenges'\nimport { PRODUCTION_ENDPOINT_CONFIG } from '@/utils/functions/getEndpoint'\nimport { ChallengeWithProjectHeader } from '@sage-bionetworks/synapse-types'\nimport { useEffect } from 'react'\nimport { useErrorHandler } from 'react-error-boundary'\nimport { useInView } from 'react-intersection-observer'\nimport { SkeletonTable } from '../Skeleton/SkeletonTable'\n\nexport type UserChallengesProps = {\n userId: string\n}\n\nexport default function UserChallenges({ userId }: UserChallengesProps) {\n const handleError = useErrorHandler()\n // Load the next page when this ref comes into view.\n const { ref, inView } = useInView()\n const {\n data,\n status,\n isFetching,\n isLoading,\n hasNextPage,\n fetchNextPage,\n isError,\n error: newError,\n } = useGetUserChallengesInfinite(userId)\n\n useEffect(() => {\n if (isError && newError) {\n handleError(newError)\n }\n }, [isError, newError, handleError])\n\n useEffect(() => {\n if (\n status === 'success' &&\n !isFetching &&\n hasNextPage &&\n fetchNextPage &&\n inView\n ) {\n fetchNextPage()\n }\n }, [status, isFetching, hasNextPage, fetchNextPage, inView])\n\n const allRows = data?.pages.flatMap(page => page.results) ?? []\n\n return (\n <>\n {allRows.length > 0 && (\n <>\n {allRows.map((item: ChallengeWithProjectHeader) => {\n if (item && item.challenge && item.projectHeader) {\n // another option may be to use an EntityLink\n return (\n <p key={`user-challenge-list-item-${item.challenge.projectId}`}>\n <a\n target=\"_self\"\n rel=\"noopener noreferrer\"\n href={`${PRODUCTION_ENDPOINT_CONFIG.PORTAL}Synapse:${item.challenge.projectId}/challenge`}\n >\n {item.projectHeader.name}\n </a>\n </p>\n )\n } else return false\n })}\n {/* To trigger loading the next page */}\n <div ref={ref} />\n </>\n )}\n {!isFetching && allRows.length == 0 && <div>Empty</div>}\n {isLoading && <SkeletonTable numRows={5} numCols={1} />}\n </>\n )\n}\n"],"mappings":";;;;;;;;AAYA,SAAwB,EAAe,EAAE,aAA+B;CACtE,IAAM,IAAc,EAAgB,GAE9B,EAAE,QAAK,cAAW,EAAU,GAC5B,EACJ,SACA,WACA,eACA,cACA,gBACA,kBACA,YACA,OAAO,MACL,EAA6B,CAAM;CAQvC,AANA,QAAgB;EACd,AAAI,KAAW,KACb,EAAY,CAAQ;CAExB,GAAG;EAAC;EAAS;EAAU;CAAW,CAAC,GAEnC,QAAgB;EACd,AACE,MAAW,aACX,CAAC,KACD,KACA,KACA,KAEA,EAAc;CAElB,GAAG;EAAC;EAAQ;EAAY;EAAa;EAAe;CAAM,CAAC;CAE3D,IAAM,IAAU,GAAM,MAAM,SAAQ,MAAQ,EAAK,OAAO,KAAK,CAAC;CAE9D,OACE,kBAAA,GAAA,EAAA,UAAA;EACG,EAAQ,SAAS,KAChB,kBAAA,GAAA,EAAA,UAAA,CACG,EAAQ,KAAK,MACR,KAAQ,EAAK,aAAa,EAAK,gBAG/B,kBAAC,KAAD,EAAA,UACE,kBAAC,KAAD;GACE,QAAO;GACP,KAAI;GACJ,MAAM,GAAG,EAA2B,OAAO,UAAU,EAAK,UAAU,UAAU;aAE7E,EAAK,cAAc;EACnB,CAAA,EACF,GARK,4BAA4B,EAAK,UAAU,WAQhD,IAEO,EACf,GAED,kBAAC,OAAD,EAAU,OAAM,CAAA,CAChB,EAAA,CAAA;EAEH,CAAC,KAAc,EAAQ,UAAU,KAAK,kBAAC,OAAD,EAAA,UAAK,QAAU,CAAA;EACrD,KAAa,kBAAC,GAAD;GAAe,SAAS;GAAG,SAAS;EAAI,CAAA;CACtD,EAAA,CAAA;AAEN"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserProfileLinks.js","names":[],"sources":["../../../src/components/UserProfileLinks/UserProfileLinks.tsx"],"sourcesContent":["import { useGetUserProfile } from '@/synapse-queries'\nimport Skeleton from '@mui/material/Skeleton'\nimport Typography from '@mui/material/Typography'\nimport { Box } from '@mui/system'\nimport { ReactNode, useMemo, useState } from 'react'\nimport { SynapseErrorBoundary } from '../error/ErrorBanner'\nimport IconSvg, { IconName } from '../IconSvg/IconSvg'\nimport UserChallenges from './UserChallenges'\nimport UserProjects from './UserProjects'\nimport UserTeams from './UserTeams'\n\ntype UserProfileLinkConfig = {\n name: 'Projects' | 'Teams' | 'Challenges'\n iconName: IconName\n render: ReactNode\n}\n\nexport type UserProfileLinksProps = {\n userId: string\n}\n\nexport function UserProfileLinks({ userId }: UserProfileLinksProps) {\n const [currentTab, setCurrentTab] =\n useState<UserProfileLinkConfig['name']>('Projects')\n const { data: userProfile } = useGetUserProfile(userId)\n\n const userProfileLinksConfig: UserProfileLinkConfig[] = useMemo(\n () => [\n {\n name: 'Projects',\n iconName: 'dashboard',\n render: <UserProjects userId={userId} />,\n },\n {\n name: 'Teams',\n iconName: 'peopleTwoTone',\n render: <UserTeams userId={userId} />,\n },\n {\n name: 'Challenges',\n iconName: 'challengesTwoTone',\n render: <UserChallenges userId={userId} />,\n },\n ],\n [userId],\n )\n\n return (\n <div className=\"UserProfileLinks\">\n <Typography variant=\"headline2\" className=\"title\">\n {userProfile && <>{userProfile?.userName}&apos;s Items</>}\n {!userProfile && <Skeleton width=\"75%\" />}\n </Typography>\n <Box\n className=\"Tabs\"\n sx={theme => ({\n [theme.breakpoints.down('sm')]: {\n flexDirection: 'column',\n gap: '8px',\n },\n })}\n >\n {userProfileLinksConfig.map(config => {\n return (\n <Box\n className=\"Tab\"\n role=\"tab\"\n sx={theme => ({\n [theme.breakpoints.down('sm')]: {\n minHeight: '45px',\n },\n })}\n key={config.name}\n onClick={e => {\n e.stopPropagation()\n setCurrentTab(config.name)\n }}\n aria-selected={currentTab === config.name}\n >\n <Typography variant=\"buttonLink\">\n <IconSvg icon={config.iconName} /> {config.name}\n </Typography>\n </Box>\n )\n })}\n </Box>\n <div className=\"TabContent\">\n <SynapseErrorBoundary>\n {\n userProfileLinksConfig.find(config => currentTab === config.name)\n ?.render\n }\n </SynapseErrorBoundary>\n </div>\n </div>\n )\n}\n\nexport default UserProfileLinks\n"],"mappings":";;;;;;;;;;;;;AAqBA,SAAgB,EAAiB,EAAE,aAAiC;CAClE,IAAM,CAAC,GAAY,KACjB,EAAwC,WAAW,EAC/C,EAAE,MAAM,MAAgB,EAAkB,EAAO,EAEjD,IAAkD,QAChD;EACJ;GACE,MAAM;GACN,UAAU;GACV,QAAQ,kBAAC,GAAD,EAAsB,WAAU,CAAA;GACzC;EACD;GACE,MAAM;GACN,UAAU;GACV,QAAQ,kBAAC,GAAD,EAAmB,WAAU,CAAA;GACtC;EACD;GACE,MAAM;GACN,UAAU;GACV,QAAQ,kBAAC,GAAD,EAAwB,WAAU,CAAA;GAC3C;EACF,EACD,CAAC,EAAO,CACT;AAED,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,GAAD;IAAY,SAAQ;IAAY,WAAU;cAA1C,CACG,KAAe,kBAAA,GAAA,EAAA,UAAA,CAAG,GAAa,UAAS,WAAgB,EAAA,CAAA,EACxD,CAAC,KAAe,kBAAC,GAAD,EAAU,OAAM,OAAQ,CAAA,CAC9B;;GACb,kBAAC,GAAD;IACE,WAAU;IACV,KAAI,OAAU,GACX,EAAM,YAAY,KAAK,KAAK,GAAG;KAC9B,eAAe;KACf,KAAK;KACN,EACF;cAEA,EAAuB,KAAI,MAExB,kBAAC,GAAD;KACE,WAAU;KACV,MAAK;KACL,KAAI,OAAU,GACX,EAAM,YAAY,KAAK,KAAK,GAAG,EAC9B,WAAW,QACZ,EACF;KAED,UAAS,MAAK;AAEZ,MADA,EAAE,iBAAiB,EACnB,EAAc,EAAO,KAAK;;KAE5B,iBAAe,MAAe,EAAO;eAErC,kBAAC,GAAD;MAAY,SAAQ;gBAApB;OACE,kBAAC,GAAD,EAAS,MAAM,EAAO,UAAY,CAAA;;OAAE,EAAO;OAChC;;KACT,EAVC,EAAO,KAUR,CAER;IACE,CAAA;GACN,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,EAAA,UAEI,EAAuB,MAAK,MAAU,MAAe,EAAO,KAAK,EAC7D,QAEe,CAAA;IACnB,CAAA;GACF"}
1
+ {"version":3,"file":"UserProfileLinks.js","names":[],"sources":["../../../src/components/UserProfileLinks/UserProfileLinks.tsx"],"sourcesContent":["import { useGetUserProfile } from '@/synapse-queries'\nimport Skeleton from '@mui/material/Skeleton'\nimport Typography from '@mui/material/Typography'\nimport { Box } from '@mui/system'\nimport { ReactNode, useMemo, useState } from 'react'\nimport { SynapseErrorBoundary } from '../error/ErrorBanner'\nimport IconSvg, { IconName } from '../IconSvg/IconSvg'\nimport UserChallenges from './UserChallenges'\nimport UserProjects from './UserProjects'\nimport UserTeams from './UserTeams'\n\ntype UserProfileLinkConfig = {\n name: 'Projects' | 'Teams' | 'Challenges'\n iconName: IconName\n render: ReactNode\n}\n\nexport type UserProfileLinksProps = {\n userId: string\n}\n\nexport function UserProfileLinks({ userId }: UserProfileLinksProps) {\n const [currentTab, setCurrentTab] =\n useState<UserProfileLinkConfig['name']>('Projects')\n const { data: userProfile } = useGetUserProfile(userId)\n\n const userProfileLinksConfig: UserProfileLinkConfig[] = useMemo(\n () => [\n {\n name: 'Projects',\n iconName: 'dashboard',\n render: <UserProjects userId={userId} />,\n },\n {\n name: 'Teams',\n iconName: 'peopleTwoTone',\n render: <UserTeams userId={userId} />,\n },\n {\n name: 'Challenges',\n iconName: 'challengesTwoTone',\n render: <UserChallenges userId={userId} />,\n },\n ],\n [userId],\n )\n\n return (\n <div className=\"UserProfileLinks\">\n <Typography variant=\"headline2\" className=\"title\">\n {userProfile && <>{userProfile?.userName}&apos;s Items</>}\n {!userProfile && <Skeleton width=\"75%\" />}\n </Typography>\n <Box\n className=\"Tabs\"\n sx={theme => ({\n [theme.breakpoints.down('sm')]: {\n flexDirection: 'column',\n gap: '8px',\n },\n })}\n >\n {userProfileLinksConfig.map(config => {\n return (\n <Box\n className=\"Tab\"\n role=\"tab\"\n sx={theme => ({\n [theme.breakpoints.down('sm')]: {\n minHeight: '45px',\n },\n })}\n key={config.name}\n onClick={e => {\n e.stopPropagation()\n setCurrentTab(config.name)\n }}\n aria-selected={currentTab === config.name}\n >\n <Typography variant=\"buttonLink\">\n <IconSvg icon={config.iconName} /> {config.name}\n </Typography>\n </Box>\n )\n })}\n </Box>\n <div className=\"TabContent\">\n <SynapseErrorBoundary>\n {\n userProfileLinksConfig.find(config => currentTab === config.name)\n ?.render\n }\n </SynapseErrorBoundary>\n </div>\n </div>\n )\n}\n\nexport default UserProfileLinks\n"],"mappings":";;;;;;;;;;;;;AAqBA,SAAgB,EAAiB,EAAE,aAAiC;CAClE,IAAM,CAAC,GAAY,KACjB,EAAwC,UAAU,GAC9C,EAAE,MAAM,MAAgB,EAAkB,CAAM,GAEhD,IAAkD,QAChD;EACJ;GACE,MAAM;GACN,UAAU;GACV,QAAQ,kBAAC,GAAD,EAAsB,UAAS,CAAA;EACzC;EACA;GACE,MAAM;GACN,UAAU;GACV,QAAQ,kBAAC,GAAD,EAAmB,UAAS,CAAA;EACtC;EACA;GACE,MAAM;GACN,UAAU;GACV,QAAQ,kBAAC,GAAD,EAAwB,UAAS,CAAA;EAC3C;CACF,GACA,CAAC,CAAM,CACT;CAEA,OACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,GAAD;IAAY,SAAQ;IAAY,WAAU;cAA1C,CACG,KAAe,kBAAA,GAAA,EAAA,UAAA,CAAG,GAAa,UAAS,UAAe,EAAA,CAAA,GACvD,CAAC,KAAe,kBAAC,GAAD,EAAU,OAAM,MAAO,CAAA,CAC9B;;GACZ,kBAAC,GAAD;IACE,WAAU;IACV,KAAI,OAAU,GACX,EAAM,YAAY,KAAK,IAAI,IAAI;KAC9B,eAAe;KACf,KAAK;IACP,EACF;cAEC,EAAuB,KAAI,MAExB,kBAAC,GAAD;KACE,WAAU;KACV,MAAK;KACL,KAAI,OAAU,GACX,EAAM,YAAY,KAAK,IAAI,IAAI,EAC9B,WAAW,OACb,EACF;KAEA,UAAS,MAAK;MAEZ,AADA,EAAE,gBAAgB,GAClB,EAAc,EAAO,IAAI;KAC3B;KACA,iBAAe,MAAe,EAAO;eAErC,kBAAC,GAAD;MAAY,SAAQ;gBAApB;OACE,kBAAC,GAAD,EAAS,MAAM,EAAO,SAAW,CAAA;OAAC;OAAE,EAAO;MACjC;;IACT,GAVE,EAAO,IAUT,CAER;GACE,CAAA;GACL,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,EAAA,UAEI,EAAuB,MAAK,MAAU,MAAe,EAAO,IAAI,GAC5D,OAEc,CAAA;GACnB,CAAA;EACF;;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserProjects.js","names":[],"sources":["../../../src/components/UserProfileLinks/UserProjects.tsx"],"sourcesContent":["import { useGetUserProjectsInfinite } from '@/synapse-queries/user/useGetUserProjects'\nimport { PRODUCTION_ENDPOINT_CONFIG } from '@/utils/functions/getEndpoint'\nimport {\n GetProjectsParameters,\n ProjectHeader,\n} from '@sage-bionetworks/synapse-types'\nimport { useEffect } from 'react'\nimport { useErrorHandler } from 'react-error-boundary'\nimport { useInView } from 'react-intersection-observer'\nimport { SkeletonTable } from '../Skeleton/SkeletonTable'\n\nexport type UserProjectsProps = {\n userId: string\n}\n\nexport default function UserProjects({ userId }: UserProjectsProps) {\n const handleError = useErrorHandler()\n // Load the next page when this ref comes into view.\n const { ref, inView } = useInView()\n const getProjectsParameters: GetProjectsParameters = {}\n const {\n data,\n status,\n isFetching,\n isLoading,\n hasNextPage,\n fetchNextPage,\n isError,\n error: newError,\n } = useGetUserProjectsInfinite(userId, getProjectsParameters)\n\n useEffect(() => {\n if (isError && newError) {\n handleError(newError)\n }\n }, [isError, newError, handleError])\n\n useEffect(() => {\n if (\n status === 'success' &&\n !isFetching &&\n hasNextPage &&\n fetchNextPage &&\n inView\n ) {\n fetchNextPage()\n }\n }, [status, isFetching, hasNextPage, fetchNextPage, inView])\n\n const allRows = data?.pages.flatMap(page => page.results) ?? []\n\n return (\n <>\n {allRows.length > 0 && (\n <>\n {allRows.map((item: ProjectHeader) => {\n if (item) {\n // another option would be to use an EntityLink\n return (\n <p key={`user-project-list-item-${item.id}`}>\n <a\n target=\"_self\"\n rel=\"noopener noreferrer\"\n href={`${PRODUCTION_ENDPOINT_CONFIG.PORTAL}Synapse:${item.id}`}\n >\n {item.name}\n </a>\n </p>\n )\n } else return false\n })}\n {/* To trigger loading the next page */}\n <div ref={ref} />\n </>\n )}\n {!isFetching && allRows.length == 0 && <div>Empty</div>}\n {isLoading && <SkeletonTable numRows={5} numCols={1} />}\n </>\n )\n}\n"],"mappings":";;;;;;;;AAeA,SAAwB,EAAa,EAAE,aAA6B;CAClE,IAAM,IAAc,GAAiB,EAE/B,EAAE,QAAK,cAAW,GAAW,EAE7B,EACJ,SACA,WACA,eACA,cACA,gBACA,kBACA,YACA,OAAO,MACL,EAA2B,GAAQ,EAAA,CAAsB;AAQ7D,CANA,QAAgB;AACd,EAAI,KAAW,KACb,EAAY,EAAS;IAEtB;EAAC;EAAS;EAAU;EAAY,CAAC,EAEpC,QAAgB;AACd,EACE,MAAW,aACX,CAAC,KACD,KACA,KACA,KAEA,GAAe;IAEhB;EAAC;EAAQ;EAAY;EAAa;EAAe;EAAO,CAAC;CAE5D,IAAM,IAAU,GAAM,MAAM,SAAQ,MAAQ,EAAK,QAAQ,IAAI,EAAE;AAE/D,QACE,kBAAA,GAAA,EAAA,UAAA;EACG,EAAQ,SAAS,KAChB,kBAAA,GAAA,EAAA,UAAA,CACG,EAAQ,KAAK,MACR,IAGA,kBAAC,KAAD,EAAA,UACE,kBAAC,KAAD;GACE,QAAO;GACP,KAAI;GACJ,MAAM,GAAG,EAA2B,OAAO,UAAU,EAAK;aAEzD,EAAK;GACJ,CAAA,EACF,EARI,0BAA0B,EAAK,KAQnC,GAEM,GACd,EAEF,kBAAC,OAAD,EAAU,QAAO,CAAA,CAChB,EAAA,CAAA;EAEJ,CAAC,KAAc,EAAQ,UAAU,KAAK,kBAAC,OAAD,EAAA,UAAK,SAAW,CAAA;EACtD,KAAa,kBAAC,GAAD;GAAe,SAAS;GAAG,SAAS;GAAK,CAAA;EACtD,EAAA,CAAA"}
1
+ {"version":3,"file":"UserProjects.js","names":[],"sources":["../../../src/components/UserProfileLinks/UserProjects.tsx"],"sourcesContent":["import { useGetUserProjectsInfinite } from '@/synapse-queries/user/useGetUserProjects'\nimport { PRODUCTION_ENDPOINT_CONFIG } from '@/utils/functions/getEndpoint'\nimport {\n GetProjectsParameters,\n ProjectHeader,\n} from '@sage-bionetworks/synapse-types'\nimport { useEffect } from 'react'\nimport { useErrorHandler } from 'react-error-boundary'\nimport { useInView } from 'react-intersection-observer'\nimport { SkeletonTable } from '../Skeleton/SkeletonTable'\n\nexport type UserProjectsProps = {\n userId: string\n}\n\nexport default function UserProjects({ userId }: UserProjectsProps) {\n const handleError = useErrorHandler()\n // Load the next page when this ref comes into view.\n const { ref, inView } = useInView()\n const getProjectsParameters: GetProjectsParameters = {}\n const {\n data,\n status,\n isFetching,\n isLoading,\n hasNextPage,\n fetchNextPage,\n isError,\n error: newError,\n } = useGetUserProjectsInfinite(userId, getProjectsParameters)\n\n useEffect(() => {\n if (isError && newError) {\n handleError(newError)\n }\n }, [isError, newError, handleError])\n\n useEffect(() => {\n if (\n status === 'success' &&\n !isFetching &&\n hasNextPage &&\n fetchNextPage &&\n inView\n ) {\n fetchNextPage()\n }\n }, [status, isFetching, hasNextPage, fetchNextPage, inView])\n\n const allRows = data?.pages.flatMap(page => page.results) ?? []\n\n return (\n <>\n {allRows.length > 0 && (\n <>\n {allRows.map((item: ProjectHeader) => {\n if (item) {\n // another option would be to use an EntityLink\n return (\n <p key={`user-project-list-item-${item.id}`}>\n <a\n target=\"_self\"\n rel=\"noopener noreferrer\"\n href={`${PRODUCTION_ENDPOINT_CONFIG.PORTAL}Synapse:${item.id}`}\n >\n {item.name}\n </a>\n </p>\n )\n } else return false\n })}\n {/* To trigger loading the next page */}\n <div ref={ref} />\n </>\n )}\n {!isFetching && allRows.length == 0 && <div>Empty</div>}\n {isLoading && <SkeletonTable numRows={5} numCols={1} />}\n </>\n )\n}\n"],"mappings":";;;;;;;;AAeA,SAAwB,EAAa,EAAE,aAA6B;CAClE,IAAM,IAAc,EAAgB,GAE9B,EAAE,QAAK,cAAW,EAAU,GAE5B,EACJ,SACA,WACA,eACA,cACA,gBACA,kBACA,YACA,OAAO,MACL,EAA2B,GAAQ,CAAA,CAAqB;CAQ5D,AANA,QAAgB;EACd,AAAI,KAAW,KACb,EAAY,CAAQ;CAExB,GAAG;EAAC;EAAS;EAAU;CAAW,CAAC,GAEnC,QAAgB;EACd,AACE,MAAW,aACX,CAAC,KACD,KACA,KACA,KAEA,EAAc;CAElB,GAAG;EAAC;EAAQ;EAAY;EAAa;EAAe;CAAM,CAAC;CAE3D,IAAM,IAAU,GAAM,MAAM,SAAQ,MAAQ,EAAK,OAAO,KAAK,CAAC;CAE9D,OACE,kBAAA,GAAA,EAAA,UAAA;EACG,EAAQ,SAAS,KAChB,kBAAA,GAAA,EAAA,UAAA,CACG,EAAQ,KAAK,MACR,IAGA,kBAAC,KAAD,EAAA,UACE,kBAAC,KAAD;GACE,QAAO;GACP,KAAI;GACJ,MAAM,GAAG,EAA2B,OAAO,UAAU,EAAK;aAEzD,EAAK;EACL,CAAA,EACF,GARK,0BAA0B,EAAK,IAQpC,IAEO,EACf,GAED,kBAAC,OAAD,EAAU,OAAM,CAAA,CAChB,EAAA,CAAA;EAEH,CAAC,KAAc,EAAQ,UAAU,KAAK,kBAAC,OAAD,EAAA,UAAK,QAAU,CAAA;EACrD,KAAa,kBAAC,GAAD;GAAe,SAAS;GAAG,SAAS;EAAI,CAAA;CACtD,EAAA,CAAA;AAEN"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserTeams.js","names":[],"sources":["../../../src/components/UserProfileLinks/UserTeams.tsx"],"sourcesContent":["import { useGetUserTeamsInfinite } from '@/synapse-queries/user/useGetUserTeams'\nimport { PRODUCTION_ENDPOINT_CONFIG } from '@/utils/functions/getEndpoint'\nimport { Team } from '@sage-bionetworks/synapse-types'\nimport { useEffect } from 'react'\nimport { useErrorHandler } from 'react-error-boundary'\nimport { useInView } from 'react-intersection-observer'\nimport { SkeletonTable } from '../Skeleton/SkeletonTable'\n\nexport type UserTeamsProps = {\n userId: string\n}\n\nexport default function UserTeams({ userId }: UserTeamsProps) {\n const handleError = useErrorHandler()\n // Load the next page when this ref comes into view.\n const { ref, inView } = useInView()\n const {\n data,\n status,\n isFetching,\n isLoading,\n hasNextPage,\n fetchNextPage,\n isError,\n error: newError,\n } = useGetUserTeamsInfinite(userId)\n\n useEffect(() => {\n if (isError && newError) {\n handleError(newError)\n }\n }, [isError, newError, handleError])\n\n useEffect(() => {\n if (\n status === 'success' &&\n !isFetching &&\n hasNextPage &&\n fetchNextPage &&\n inView\n ) {\n fetchNextPage()\n }\n }, [status, isFetching, hasNextPage, fetchNextPage, inView])\n\n const allRows = data?.pages.flatMap(page => page.results) ?? []\n\n return (\n <>\n {allRows.length > 0 && (\n <>\n {allRows.map((item: Team) => {\n if (item) {\n // another option would be to use an EntityLink\n return (\n <p key={`user-team-list-item-${item.id}`}>\n <a\n target=\"_self\"\n rel=\"noopener noreferrer\"\n href={`${PRODUCTION_ENDPOINT_CONFIG.PORTAL}Team:${item.id}`}\n >\n {item.name}\n </a>\n </p>\n )\n } else return false\n })}\n {/* To trigger loading the next page */}\n <div ref={ref} />\n </>\n )}\n {!isFetching && allRows.length == 0 && <div>Empty</div>}\n {isLoading && <SkeletonTable numRows={5} numCols={1} />}\n </>\n )\n}\n"],"mappings":";;;;;;;;AAYA,SAAwB,EAAU,EAAE,aAA0B;CAC5D,IAAM,IAAc,GAAiB,EAE/B,EAAE,QAAK,cAAW,GAAW,EAC7B,EACJ,SACA,WACA,eACA,cACA,gBACA,kBACA,YACA,OAAO,MACL,EAAwB,EAAO;AAQnC,CANA,QAAgB;AACd,EAAI,KAAW,KACb,EAAY,EAAS;IAEtB;EAAC;EAAS;EAAU;EAAY,CAAC,EAEpC,QAAgB;AACd,EACE,MAAW,aACX,CAAC,KACD,KACA,KACA,KAEA,GAAe;IAEhB;EAAC;EAAQ;EAAY;EAAa;EAAe;EAAO,CAAC;CAE5D,IAAM,IAAU,GAAM,MAAM,SAAQ,MAAQ,EAAK,QAAQ,IAAI,EAAE;AAE/D,QACE,kBAAA,GAAA,EAAA,UAAA;EACG,EAAQ,SAAS,KAChB,kBAAA,GAAA,EAAA,UAAA,CACG,EAAQ,KAAK,MACR,IAGA,kBAAC,KAAD,EAAA,UACE,kBAAC,KAAD;GACE,QAAO;GACP,KAAI;GACJ,MAAM,GAAG,EAA2B,OAAO,OAAO,EAAK;aAEtD,EAAK;GACJ,CAAA,EACF,EARI,uBAAuB,EAAK,KAQhC,GAEM,GACd,EAEF,kBAAC,OAAD,EAAU,QAAO,CAAA,CAChB,EAAA,CAAA;EAEJ,CAAC,KAAc,EAAQ,UAAU,KAAK,kBAAC,OAAD,EAAA,UAAK,SAAW,CAAA;EACtD,KAAa,kBAAC,GAAD;GAAe,SAAS;GAAG,SAAS;GAAK,CAAA;EACtD,EAAA,CAAA"}
1
+ {"version":3,"file":"UserTeams.js","names":[],"sources":["../../../src/components/UserProfileLinks/UserTeams.tsx"],"sourcesContent":["import { useGetUserTeamsInfinite } from '@/synapse-queries/user/useGetUserTeams'\nimport { PRODUCTION_ENDPOINT_CONFIG } from '@/utils/functions/getEndpoint'\nimport { Team } from '@sage-bionetworks/synapse-types'\nimport { useEffect } from 'react'\nimport { useErrorHandler } from 'react-error-boundary'\nimport { useInView } from 'react-intersection-observer'\nimport { SkeletonTable } from '../Skeleton/SkeletonTable'\n\nexport type UserTeamsProps = {\n userId: string\n}\n\nexport default function UserTeams({ userId }: UserTeamsProps) {\n const handleError = useErrorHandler()\n // Load the next page when this ref comes into view.\n const { ref, inView } = useInView()\n const {\n data,\n status,\n isFetching,\n isLoading,\n hasNextPage,\n fetchNextPage,\n isError,\n error: newError,\n } = useGetUserTeamsInfinite(userId)\n\n useEffect(() => {\n if (isError && newError) {\n handleError(newError)\n }\n }, [isError, newError, handleError])\n\n useEffect(() => {\n if (\n status === 'success' &&\n !isFetching &&\n hasNextPage &&\n fetchNextPage &&\n inView\n ) {\n fetchNextPage()\n }\n }, [status, isFetching, hasNextPage, fetchNextPage, inView])\n\n const allRows = data?.pages.flatMap(page => page.results) ?? []\n\n return (\n <>\n {allRows.length > 0 && (\n <>\n {allRows.map((item: Team) => {\n if (item) {\n // another option would be to use an EntityLink\n return (\n <p key={`user-team-list-item-${item.id}`}>\n <a\n target=\"_self\"\n rel=\"noopener noreferrer\"\n href={`${PRODUCTION_ENDPOINT_CONFIG.PORTAL}Team:${item.id}`}\n >\n {item.name}\n </a>\n </p>\n )\n } else return false\n })}\n {/* To trigger loading the next page */}\n <div ref={ref} />\n </>\n )}\n {!isFetching && allRows.length == 0 && <div>Empty</div>}\n {isLoading && <SkeletonTable numRows={5} numCols={1} />}\n </>\n )\n}\n"],"mappings":";;;;;;;;AAYA,SAAwB,EAAU,EAAE,aAA0B;CAC5D,IAAM,IAAc,EAAgB,GAE9B,EAAE,QAAK,cAAW,EAAU,GAC5B,EACJ,SACA,WACA,eACA,cACA,gBACA,kBACA,YACA,OAAO,MACL,EAAwB,CAAM;CAQlC,AANA,QAAgB;EACd,AAAI,KAAW,KACb,EAAY,CAAQ;CAExB,GAAG;EAAC;EAAS;EAAU;CAAW,CAAC,GAEnC,QAAgB;EACd,AACE,MAAW,aACX,CAAC,KACD,KACA,KACA,KAEA,EAAc;CAElB,GAAG;EAAC;EAAQ;EAAY;EAAa;EAAe;CAAM,CAAC;CAE3D,IAAM,IAAU,GAAM,MAAM,SAAQ,MAAQ,EAAK,OAAO,KAAK,CAAC;CAE9D,OACE,kBAAA,GAAA,EAAA,UAAA;EACG,EAAQ,SAAS,KAChB,kBAAA,GAAA,EAAA,UAAA,CACG,EAAQ,KAAK,MACR,IAGA,kBAAC,KAAD,EAAA,UACE,kBAAC,KAAD;GACE,QAAO;GACP,KAAI;GACJ,MAAM,GAAG,EAA2B,OAAO,OAAO,EAAK;aAEtD,EAAK;EACL,CAAA,EACF,GARK,uBAAuB,EAAK,IAQjC,IAEO,EACf,GAED,kBAAC,OAAD,EAAU,OAAM,CAAA,CAChB,EAAA,CAAA;EAEH,CAAC,KAAc,EAAQ,UAAU,KAAK,kBAAC,OAAD,EAAA,UAAK,QAAU,CAAA;EACrD,KAAa,kBAAC,GAAD;GAAe,SAAS;GAAG,SAAS;EAAI,CAAA;CACtD,EAAA,CAAA;AAEN"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserSearchBox.js","names":[],"sources":["../../../src/components/UserSearchBox/UserSearchBox.tsx"],"sourcesContent":["import {\n useGetUserGroupHeader,\n useSearchUserGroupHeaders,\n} from '@/synapse-queries'\nimport { useDebouncedEffect } from '@/utils/hooks/useDebouncedEffect'\nimport { Autocomplete, Box, Skeleton, TextField } from '@mui/material'\nimport { TYPE_FILTER, UserGroupHeader } from '@sage-bionetworks/synapse-types'\nimport { useMemo, useState } from 'react'\nimport UserOrTeamBadge from '../UserOrTeamBadge/UserOrTeamBadge'\n\nexport type UserSearchBoxProps = {\n /* id for the input element, for associating with a <label> */\n inputId?: string\n /* The initial principal ID (uncontrolled). Ignored if `value` is provided. */\n defaultValue?: string\n onChange?: (\n principalId: string | null,\n header: UserGroupHeader | null,\n ) => void\n typeFilter?: TYPE_FILTER\n filterPredicate?: (item: UserGroupHeader) => boolean\n placeholder?: string\n autoFocus?: boolean\n /**\n * The principal ID of the currently selected user or team.\n * - `undefined`: uncontrolled — the component manages its own selection state\n * - `null`: controlled with no selection (clears the field)\n * - string: controlled with the given principal ID selected\n */\n value?: string | null\n}\n\n/**\n * Autocomplete component used to search for and select a user or team.\n */\nfunction UserSearchBox(props: UserSearchBoxProps) {\n const {\n inputId,\n defaultValue = null,\n onChange,\n filterPredicate,\n typeFilter,\n placeholder,\n autoFocus = false,\n value: valueProp,\n } = props\n\n const isControlled = valueProp !== undefined\n\n const [inputValue, setInputValue] = useState('')\n const [debouncedInput, setDebouncedInput] = useState('')\n useDebouncedEffect(\n () => {\n setDebouncedInput(inputValue)\n },\n [inputValue],\n 500,\n )\n\n // Tracks whether the dropdown is open, used to toggle between badge display\n // and text-input search mode.\n const [isSearching, setIsSearching] = useState(false)\n\n // Resolve defaultValue principalId → UserGroupHeader for the initial uncontrolled state\n const { data: defaultUserGroupHeader, isLoading: isLoadingDefaultValue } =\n useGetUserGroupHeader(defaultValue ?? '', {\n enabled: !!defaultValue && !isControlled,\n })\n\n // Resolve controlled string principalId → UserGroupHeader\n const controlledPrincipalId =\n isControlled && typeof valueProp === 'string' ? valueProp : null\n\n const {\n data: resolvedControlledHeader,\n isLoading: isLoadingControlledValue,\n } = useGetUserGroupHeader(controlledPrincipalId ?? '', {\n enabled: !!controlledPrincipalId,\n })\n\n // Internal state for uncontrolled mode.\n // undefined = user hasn't interacted yet → falls back to defaultUserGroupHeader\n // null = user explicitly cleared the selection\n // header = user's current selection\n const [internalValue, setInternalValue] = useState<\n UserGroupHeader | null | undefined\n >(undefined)\n\n const controlledValue =\n typeof valueProp === 'string' ? (resolvedControlledHeader ?? null) : null\n const uncontrolledValue =\n internalValue !== undefined\n ? internalValue\n : (defaultUserGroupHeader ?? null)\n const resolvedValue: UserGroupHeader | null = isControlled\n ? controlledValue\n : uncontrolledValue\n\n // Show the badge in the input field when a value is selected and the user\n // is not actively searching.\n const showBadge = resolvedValue !== null && !isSearching\n\n const isSearchEnabled = !!debouncedInput\n const { data, isLoading } = useSearchUserGroupHeaders(\n debouncedInput,\n typeFilter,\n {\n enabled: isSearchEnabled,\n },\n )\n\n const options = useMemo(\n () => (data ?? []).filter(filterPredicate ?? (() => true)),\n [data, filterPredicate],\n )\n\n const placeholderText = useMemo(() => {\n if (placeholder !== undefined) {\n return placeholder\n } else if (typeFilter == TYPE_FILTER.USERS_ONLY) {\n return 'Name (first and last)'\n } else if (typeFilter == TYPE_FILTER.TEAMS_ONLY) {\n return 'Team name'\n } else {\n return 'Name (first and last) or team name'\n }\n }, [placeholder, typeFilter])\n\n if (isLoadingDefaultValue || isLoadingControlledValue) {\n return <Skeleton width=\"100%\" />\n }\n\n return (\n <Autocomplete<UserGroupHeader, false, false, false>\n id={inputId}\n value={resolvedValue}\n inputValue={inputValue}\n onInputChange={(_event, newInputValue, reason) => {\n if (reason === 'selectOption' || reason === 'reset') {\n // After an option is selected/removed, clear the input text so it's ready for the next search.\n setInputValue('')\n } else {\n setInputValue(newInputValue)\n }\n }}\n // When a value is selected, clicking the badge area should re-open the search.\n openOnFocus={resolvedValue !== null}\n onOpen={() => {\n setIsSearching(true)\n }}\n onClose={() => setIsSearching(false)}\n options={options}\n filterOptions={x => x}\n loading={isLoading || inputValue !== debouncedInput}\n isOptionEqualToValue={(option, val) => option.ownerId === val.ownerId}\n getOptionLabel={option => option.userName}\n renderOption={(optionProps, option) => (\n <li {...optionProps} key={option.ownerId}>\n <UserOrTeamBadge\n userGroupHeader={option}\n disableHref\n showFullName\n showCardOnHover={false}\n />\n </li>\n )}\n renderInput={({\n inputProps: inputPropsFromParams,\n InputProps: InputPropsFromParams,\n ...params\n }) => (\n <TextField\n {...params}\n placeholder={showBadge ? undefined : placeholderText}\n autoFocus={autoFocus}\n slotProps={{\n htmlInput: {\n ...inputPropsFromParams,\n // While the badge is displayed, hide the underlying input text and cursor.\n // Merge custom styles with parent styles to preserve mouse selection and other behaviors.\n style: {\n ...inputPropsFromParams.style,\n ...(showBadge ? { color: 'transparent' } : {}),\n },\n },\n input: {\n ...InputPropsFromParams,\n startAdornment: showBadge ? (\n <Box sx={{ ml: 1 }}>\n <UserOrTeamBadge\n userGroupHeader={resolvedValue}\n disableHref\n showFullName\n showCardOnHover={false}\n />\n </Box>\n ) : undefined,\n },\n }}\n />\n )}\n onChange={(_event, newValue) => {\n if (!isControlled) {\n setInternalValue(newValue)\n }\n onChange?.(\n newValue?.ownerId != null ? newValue.ownerId.toString() : null,\n newValue ?? null,\n )\n }}\n noOptionsText={\n isLoading || inputValue !== debouncedInput ? 'Loading…' : 'No options'\n }\n clearOnEscape\n />\n )\n}\n\nexport default UserSearchBox\n"],"mappings":";;;;;;;;;AAmCA,SAAS,EAAc,GAA2B;CAChD,IAAM,EACJ,YACA,kBAAe,MACf,aACA,oBACA,eACA,gBACA,eAAY,IACZ,OAAO,MACL,GAEE,IAAe,MAAc,KAAA,GAE7B,CAAC,GAAY,KAAiB,EAAS,GAAG,EAC1C,CAAC,GAAgB,KAAqB,EAAS,GAAG;AACxD,SACQ;AACJ,IAAkB,EAAW;IAE/B,CAAC,EAAW,EACZ,IACD;CAID,IAAM,CAAC,GAAa,KAAkB,EAAS,GAAM,EAG/C,EAAE,MAAM,GAAwB,WAAW,MAC/C,EAAsB,KAAgB,IAAI,EACxC,SAAS,CAAC,CAAC,KAAgB,CAAC,GAC7B,CAAC,EAGE,IACJ,KAAgB,OAAO,KAAc,WAAW,IAAY,MAExD,EACJ,MAAM,GACN,WAAW,MACT,EAAsB,KAAyB,IAAI,EACrD,SAAS,CAAC,CAAC,GACZ,CAAC,EAMI,CAAC,GAAe,KAAoB,EAExC,KAAA,EAAU,EAQN,IAAwC,IAL5C,OAAO,KAAc,WAAY,KAA4B,OAAQ,OAErE,MAAkB,KAAA,IAEb,KAA0B,OAD3B,GAQA,IAAY,MAAkB,QAAQ,CAAC,GAGvC,EAAE,SAAM,iBAAc,EAC1B,GACA,GACA,EACE,SAAS,CALY,CAAC,GAMvB,CACF,EAEK,IAAU,SACP,KAAQ,EAAE,EAAE,OAAO,YAA0B,IAAM,EAC1D,CAAC,GAAM,EAAgB,CACxB,EAEK,IAAkB,QAClB,MAAgB,KAAA,IAET,KAAc,EAAY,aAC5B,0BACE,KAAc,EAAY,aAC5B,cAEA,uCANA,GAQR,CAAC,GAAa,EAAW,CAAC;AAM7B,QAJI,KAAyB,IACpB,kBAAC,GAAD,EAAU,OAAM,QAAS,CAAA,GAIhC,kBAAC,GAAD;EACE,IAAI;EACJ,OAAO;EACK;EACZ,gBAAgB,GAAQ,GAAe,MAAW;AAChD,GAEE,EAFE,MAAW,kBAAkB,MAAW,UAE5B,KAEA,EAAc;;EAIhC,aAAa,MAAkB;EAC/B,cAAc;AACZ,KAAe,GAAK;;EAEtB,eAAe,EAAe,GAAM;EAC3B;EACT,gBAAe,MAAK;EACpB,SAAS,KAAa,MAAe;EACrC,uBAAuB,GAAQ,MAAQ,EAAO,YAAY,EAAI;EAC9D,iBAAgB,MAAU,EAAO;EACjC,eAAe,GAAa,MAC1B,kBAAC,MAAD;GAAI,GAAI;GAAa,KAAK,EAAO;GAO5B,EANH,kBAAC,GAAD;GACE,iBAAiB;GACjB,aAAA;GACA,cAAA;GACA,iBAAiB;GACjB,CAAA,CACC;EAEP,cAAc,EACZ,YAAY,GACZ,YAAY,GACZ,GAAG,QAEH,kBAAC,GAAD;GACE,GAAI;GACJ,aAAa,IAAY,KAAA,IAAY;GAC1B;GACX,WAAW;IACT,WAAW;KACT,GAAG;KAGH,OAAO;MACL,GAAG,EAAqB;MACxB,GAAI,IAAY,EAAE,OAAO,eAAe,GAAG,EAAE;MAC9C;KACF;IACD,OAAO;KACL,GAAG;KACH,gBAAgB,IACd,kBAAC,GAAD;MAAK,IAAI,EAAE,IAAI,GAAG;gBAChB,kBAAC,GAAD;OACE,iBAAiB;OACjB,aAAA;OACA,cAAA;OACA,iBAAiB;OACjB,CAAA;MACE,CAAA,GACJ,KAAA;KACL;IACF;GACD,CAAA;EAEJ,WAAW,GAAQ,MAAa;AAI9B,GAHK,KACH,EAAiB,EAAS,EAE5B,IACE,GAAU,WAAW,OAAqC,OAA9B,EAAS,QAAQ,UAAU,EACvD,KAAY,KACb;;EAEH,eACE,KAAa,MAAe,IAAiB,aAAa;EAE5D,eAAA;EACA,CAAA"}
1
+ {"version":3,"file":"UserSearchBox.js","names":[],"sources":["../../../src/components/UserSearchBox/UserSearchBox.tsx"],"sourcesContent":["import {\n useGetUserGroupHeader,\n useSearchUserGroupHeaders,\n} from '@/synapse-queries'\nimport { useDebouncedEffect } from '@/utils/hooks/useDebouncedEffect'\nimport { Autocomplete, Box, Skeleton, TextField } from '@mui/material'\nimport { TYPE_FILTER, UserGroupHeader } from '@sage-bionetworks/synapse-types'\nimport { useMemo, useState } from 'react'\nimport UserOrTeamBadge from '../UserOrTeamBadge/UserOrTeamBadge'\n\nexport type UserSearchBoxProps = {\n /* id for the input element, for associating with a <label> */\n inputId?: string\n /* The initial principal ID (uncontrolled). Ignored if `value` is provided. */\n defaultValue?: string\n onChange?: (\n principalId: string | null,\n header: UserGroupHeader | null,\n ) => void\n typeFilter?: TYPE_FILTER\n filterPredicate?: (item: UserGroupHeader) => boolean\n placeholder?: string\n autoFocus?: boolean\n /**\n * The principal ID of the currently selected user or team.\n * - `undefined`: uncontrolled — the component manages its own selection state\n * - `null`: controlled with no selection (clears the field)\n * - string: controlled with the given principal ID selected\n */\n value?: string | null\n}\n\n/**\n * Autocomplete component used to search for and select a user or team.\n */\nfunction UserSearchBox(props: UserSearchBoxProps) {\n const {\n inputId,\n defaultValue = null,\n onChange,\n filterPredicate,\n typeFilter,\n placeholder,\n autoFocus = false,\n value: valueProp,\n } = props\n\n const isControlled = valueProp !== undefined\n\n const [inputValue, setInputValue] = useState('')\n const [debouncedInput, setDebouncedInput] = useState('')\n useDebouncedEffect(\n () => {\n setDebouncedInput(inputValue)\n },\n [inputValue],\n 500,\n )\n\n // Tracks whether the dropdown is open, used to toggle between badge display\n // and text-input search mode.\n const [isSearching, setIsSearching] = useState(false)\n\n // Resolve defaultValue principalId → UserGroupHeader for the initial uncontrolled state\n const { data: defaultUserGroupHeader, isLoading: isLoadingDefaultValue } =\n useGetUserGroupHeader(defaultValue ?? '', {\n enabled: !!defaultValue && !isControlled,\n })\n\n // Resolve controlled string principalId → UserGroupHeader\n const controlledPrincipalId =\n isControlled && typeof valueProp === 'string' ? valueProp : null\n\n const {\n data: resolvedControlledHeader,\n isLoading: isLoadingControlledValue,\n } = useGetUserGroupHeader(controlledPrincipalId ?? '', {\n enabled: !!controlledPrincipalId,\n })\n\n // Internal state for uncontrolled mode.\n // undefined = user hasn't interacted yet → falls back to defaultUserGroupHeader\n // null = user explicitly cleared the selection\n // header = user's current selection\n const [internalValue, setInternalValue] = useState<\n UserGroupHeader | null | undefined\n >(undefined)\n\n const controlledValue =\n typeof valueProp === 'string' ? (resolvedControlledHeader ?? null) : null\n const uncontrolledValue =\n internalValue !== undefined\n ? internalValue\n : (defaultUserGroupHeader ?? null)\n const resolvedValue: UserGroupHeader | null = isControlled\n ? controlledValue\n : uncontrolledValue\n\n // Show the badge in the input field when a value is selected and the user\n // is not actively searching.\n const showBadge = resolvedValue !== null && !isSearching\n\n const isSearchEnabled = !!debouncedInput\n const { data, isLoading } = useSearchUserGroupHeaders(\n debouncedInput,\n typeFilter,\n {\n enabled: isSearchEnabled,\n },\n )\n\n const options = useMemo(\n () => (data ?? []).filter(filterPredicate ?? (() => true)),\n [data, filterPredicate],\n )\n\n const placeholderText = useMemo(() => {\n if (placeholder !== undefined) {\n return placeholder\n } else if (typeFilter == TYPE_FILTER.USERS_ONLY) {\n return 'Name (first and last)'\n } else if (typeFilter == TYPE_FILTER.TEAMS_ONLY) {\n return 'Team name'\n } else {\n return 'Name (first and last) or team name'\n }\n }, [placeholder, typeFilter])\n\n if (isLoadingDefaultValue || isLoadingControlledValue) {\n return <Skeleton width=\"100%\" />\n }\n\n return (\n <Autocomplete<UserGroupHeader, false, false, false>\n id={inputId}\n value={resolvedValue}\n inputValue={inputValue}\n onInputChange={(_event, newInputValue, reason) => {\n if (reason === 'selectOption' || reason === 'reset') {\n // After an option is selected/removed, clear the input text so it's ready for the next search.\n setInputValue('')\n } else {\n setInputValue(newInputValue)\n }\n }}\n // When a value is selected, clicking the badge area should re-open the search.\n openOnFocus={resolvedValue !== null}\n onOpen={() => {\n setIsSearching(true)\n }}\n onClose={() => setIsSearching(false)}\n options={options}\n filterOptions={x => x}\n loading={isLoading || inputValue !== debouncedInput}\n isOptionEqualToValue={(option, val) => option.ownerId === val.ownerId}\n getOptionLabel={option => option.userName}\n renderOption={(optionProps, option) => (\n <li {...optionProps} key={option.ownerId}>\n <UserOrTeamBadge\n userGroupHeader={option}\n disableHref\n showFullName\n showCardOnHover={false}\n />\n </li>\n )}\n renderInput={({\n inputProps: inputPropsFromParams,\n InputProps: InputPropsFromParams,\n ...params\n }) => (\n <TextField\n {...params}\n placeholder={showBadge ? undefined : placeholderText}\n autoFocus={autoFocus}\n slotProps={{\n htmlInput: {\n ...inputPropsFromParams,\n // While the badge is displayed, hide the underlying input text and cursor.\n // Merge custom styles with parent styles to preserve mouse selection and other behaviors.\n style: {\n ...inputPropsFromParams.style,\n ...(showBadge ? { color: 'transparent' } : {}),\n },\n },\n input: {\n ...InputPropsFromParams,\n startAdornment: showBadge ? (\n <Box sx={{ ml: 1 }}>\n <UserOrTeamBadge\n userGroupHeader={resolvedValue}\n disableHref\n showFullName\n showCardOnHover={false}\n />\n </Box>\n ) : undefined,\n },\n }}\n />\n )}\n onChange={(_event, newValue) => {\n if (!isControlled) {\n setInternalValue(newValue)\n }\n onChange?.(\n newValue?.ownerId != null ? newValue.ownerId.toString() : null,\n newValue ?? null,\n )\n }}\n noOptionsText={\n isLoading || inputValue !== debouncedInput ? 'Loading…' : 'No options'\n }\n clearOnEscape\n />\n )\n}\n\nexport default UserSearchBox\n"],"mappings":";;;;;;;;;AAmCA,SAAS,EAAc,GAA2B;CAChD,IAAM,EACJ,YACA,kBAAe,MACf,aACA,oBACA,eACA,gBACA,eAAY,IACZ,OAAO,MACL,GAEE,IAAe,MAAc,KAAA,GAE7B,CAAC,GAAY,KAAiB,EAAS,EAAE,GACzC,CAAC,GAAgB,KAAqB,EAAS,EAAE;CACvD,QACQ;EACJ,EAAkB,CAAU;CAC9B,GACA,CAAC,CAAU,GACX,GACF;CAIA,IAAM,CAAC,GAAa,KAAkB,EAAS,EAAK,GAG9C,EAAE,MAAM,GAAwB,WAAW,MAC/C,EAAsB,KAAgB,IAAI,EACxC,SAAS,CAAC,CAAC,KAAgB,CAAC,EAC9B,CAAC,GAGG,IACJ,KAAgB,OAAO,KAAc,WAAW,IAAY,MAExD,EACJ,MAAM,GACN,WAAW,MACT,EAAsB,KAAyB,IAAI,EACrD,SAAS,CAAC,CAAC,EACb,CAAC,GAMK,CAAC,GAAe,KAAoB,EAExC,KAAA,CAAS,GAQL,IAAwC,IAL5C,OAAO,KAAc,WAAY,KAA4B,OAAQ,OAErE,MAAkB,KAAA,IAEb,KAA0B,OAD3B,GAQA,IAAY,MAAkB,QAAQ,CAAC,GAGvC,EAAE,SAAM,iBAAc,EAC1B,GACA,GACA,EACE,SAAS,CALY,CAAC,EAMxB,CACF,GAEM,IAAU,SACP,KAAQ,CAAC,GAAG,OAAO,YAA0B,GAAK,GACzD,CAAC,GAAM,CAAe,CACxB,GAEM,IAAkB,QAClB,MAAgB,KAAA,IAET,KAAc,EAAY,aAC5B,0BACE,KAAc,EAAY,aAC5B,cAEA,uCANA,GAQR,CAAC,GAAa,CAAU,CAAC;CAM5B,OAJI,KAAyB,IACpB,kBAAC,GAAD,EAAU,OAAM,OAAQ,CAAA,IAI/B,kBAAC,GAAD;EACE,IAAI;EACJ,OAAO;EACK;EACZ,gBAAgB,GAAQ,GAAe,MAAW;GAChD,AAEE,EAFE,MAAW,kBAAkB,MAAW,UAE5B,KAEA,CAAa;EAE/B;EAEA,aAAa,MAAkB;EAC/B,cAAc;GACZ,EAAe,EAAI;EACrB;EACA,eAAe,EAAe,EAAK;EAC1B;EACT,gBAAe,MAAK;EACpB,SAAS,KAAa,MAAe;EACrC,uBAAuB,GAAQ,MAAQ,EAAO,YAAY,EAAI;EAC9D,iBAAgB,MAAU,EAAO;EACjC,eAAe,GAAa,MAC1B,kBAAC,MAAD;GAAI,GAAI;GAAa,KAAK,EAAO;EAO7B,GANF,kBAAC,GAAD;GACE,iBAAiB;GACjB,aAAA;GACA,cAAA;GACA,iBAAiB;EAClB,CAAA,CACC;EAEN,cAAc,EACZ,YAAY,GACZ,YAAY,GACZ,GAAG,QAEH,kBAAC,GAAD;GACE,GAAI;GACJ,aAAa,IAAY,KAAA,IAAY;GAC1B;GACX,WAAW;IACT,WAAW;KACT,GAAG;KAGH,OAAO;MACL,GAAG,EAAqB;MACxB,GAAI,IAAY,EAAE,OAAO,cAAc,IAAI,CAAC;KAC9C;IACF;IACA,OAAO;KACL,GAAG;KACH,gBAAgB,IACd,kBAAC,GAAD;MAAK,IAAI,EAAE,IAAI,EAAE;gBACf,kBAAC,GAAD;OACE,iBAAiB;OACjB,aAAA;OACA,cAAA;OACA,iBAAiB;MAClB,CAAA;KACE,CAAA,IACH,KAAA;IACN;GACF;EACD,CAAA;EAEH,WAAW,GAAQ,MAAa;GAI9B,AAHK,KACH,EAAiB,CAAQ,GAE3B,IACE,GAAU,WAAW,OAAqC,OAA9B,EAAS,QAAQ,SAAS,GACtD,KAAY,IACd;EACF;EACA,eACE,KAAa,MAAe,IAAiB,aAAa;EAE5D,eAAA;CACD,CAAA;AAEL"}
@@ -1 +1 @@
1
- {"version":3,"file":"CreateWebhookModal.js","names":[],"sources":["../../../src/components/Webhook/CreateWebhookModal.tsx"],"sourcesContent":["import {\n useCreateWebhook,\n useDeleteWebhook,\n useUpdateWebhook,\n} from '@/synapse-queries/webhook/useWebhook'\nimport DeleteTwoToneIcon from '@mui/icons-material/DeleteTwoTone'\nimport SearchOutlined from '@mui/icons-material/SearchOutlined'\nimport {\n Alert,\n Box,\n Button,\n Checkbox,\n FormControlLabel,\n FormGroup,\n Grid,\n IconButton,\n InputLabel,\n Link,\n Switch,\n TextField,\n Typography,\n} from '@mui/material'\nimport {\n ErrorResponseCode,\n SynapseEventType,\n SynapseObjectType,\n Webhook,\n WebhookVerificationStatus,\n} from '@sage-bionetworks/synapse-client'\nimport { upperFirst } from 'lodash-es'\nimport { Fragment, PropsWithChildren, useEffect, useState } from 'react'\nimport { ConfirmationDialog } from '../ConfirmationDialog/ConfirmationDialog'\nimport { EntityFinderModal } from '../EntityFinder/EntityFinderModal'\nimport { FinderScope } from '../EntityFinder/tree/EntityTree'\nimport { VersionSelectionType } from '../EntityFinder/VersionSelectionType'\nimport { HelpPopover } from '../HelpPopover/HelpPopover'\nimport { displayToast } from '../ToastMessage/ToastMessage'\n\ntype CreateWebhookModalProps = {\n initialData?: Webhook\n open: boolean\n onClose: () => void\n}\n\nconst NEW_ENDPOINT_DOMAIN_REQUEST_TITLE = encodeURIComponent(\n 'Request to add new domain for webhook verification',\n)\nconst NEW_ENDPOINT_DOMAIN_REQUEST_SUMMARY = encodeURIComponent(\n '<Please provide the domain(s) you wish to use and any additional details related to your request.>',\n)\nconst NEW_ENDPOINT_CONTACT_FORM_URL = `https://sagebionetworks.jira.com/servicedesk/customer/portal/9/group/16/create/85?summary=${NEW_ENDPOINT_DOMAIN_REQUEST_TITLE}&description=${NEW_ENDPOINT_DOMAIN_REQUEST_SUMMARY}`\n\nfunction UpdateWarningWrapper(props: PropsWithChildren) {\n return (\n <Box\n sx={{\n mt: '10px',\n py: 2,\n px: 4,\n backgroundColor: 'rgb(178, 36, 42, 0.03)',\n }}\n >\n <Typography sx={{ my: 1 }} color=\"error\" variant=\"headline3\" gutterBottom>\n DANGER ZONE\n </Typography>\n <Typography variant=\"body1\" gutterBottom>\n Editing the following information will require you to re-verify the\n webhook.\n </Typography>\n {props.children}\n </Box>\n )\n}\n\nexport default function CreateWebhookModal(props: CreateWebhookModalProps) {\n const { initialData, open, onClose } = props\n\n // Form state\n const objectType: SynapseObjectType = SynapseObjectType.ENTITY // Currently only entities can be selected\n const [objectId, setObjectId] = useState<string>('')\n const [eventTypes, setEventTypes] = useState<Set<SynapseEventType>>(new Set())\n const [invokeEndpoint, setInvokeEndpoint] = useState<string>('')\n const [enabled, setEnabled] = useState(true)\n\n useEffect(() => {\n setObjectId(initialData?.objectId || '')\n setEventTypes(\n new Set(initialData?.eventTypes || []) as Set<SynapseEventType>,\n )\n setInvokeEndpoint(initialData?.invokeEndpoint || '')\n setEnabled(initialData?.isEnabled ?? true)\n }, [initialData])\n\n const [showEntityFinder, setShowEntityFinder] = useState(false)\n const [showDeleteConfirmation, setShowDeleteConfirmation] = useState(false)\n\n const {\n mutate: createWebhook,\n isPending: isCreatePending,\n error: createError,\n } = useCreateWebhook({\n onSuccess: () => {\n displayToast('Webhook created', 'success')\n onClose()\n },\n })\n\n const {\n mutate: updateWebhook,\n isPending: isUpdatePending,\n error: updateError,\n } = useUpdateWebhook({\n onSuccess: () => {\n displayToast('Webhook updated', 'success')\n onClose()\n },\n })\n\n const {\n mutate: deleteWebhook,\n isPending: isDeletePending,\n error: deleteError,\n } = useDeleteWebhook({\n onSuccess: () => {\n displayToast('Webhook deleted', 'info')\n setShowDeleteConfirmation(false)\n onClose()\n },\n })\n\n const isPending = isCreatePending || isUpdatePending\n const error = createError || updateError\n\n function handleConfirm() {\n if (initialData) {\n updateWebhook({\n webhookId: initialData.id!,\n createOrUpdateWebhookRequest: {\n objectType,\n objectId,\n eventTypes,\n invokeEndpoint,\n isEnabled: enabled,\n },\n })\n } else {\n createWebhook({\n objectType,\n objectId,\n eventTypes,\n invokeEndpoint,\n isEnabled: enabled,\n })\n }\n }\n\n function handleDelete() {\n if (initialData) {\n deleteWebhook(initialData.id!)\n }\n }\n\n // If the user attempts to use a domain that has not been added to the allowlist, link to a form to create a request.\n const showRequestDomainForm =\n error &&\n error.errorResponse &&\n 'errorCode' in error.errorResponse &&\n error.errorResponse.errorCode ===\n ErrorResponseCode.UNSUPPORTED_WEBHOOK_DOMAIN\n\n // Wrap certain fields in a wrapper if they will require re-verifying the webhook\n const RevalidationFieldsWrapper =\n initialData &&\n initialData.verificationStatus === WebhookVerificationStatus.VERIFIED\n ? UpdateWarningWrapper\n : Fragment\n\n return (\n <ConfirmationDialog\n open={open}\n title={'Create New Webhook'}\n maxWidth={'md'}\n onCancel={onClose}\n onConfirm={() => {\n handleConfirm()\n }}\n confirmButtonProps={{\n children: `${initialData ? 'Update' : 'Create'} Webhook`,\n disabled: isPending,\n }}\n cancelButtonProps={{\n disabled: isPending,\n }}\n content={\n <>\n <Grid container spacing={2}>\n <Grid size={12}>\n <Typography variant={'body1'} gutterBottom>\n Specify the ID of the entity and the types of events you would\n like to receive. Once you complete this step, Synapse will send\n a verification code to the endpoint you specify. After you\n verify your webhook, Synapse will send your chosen events to the\n verified endpoint.\n </Typography>\n </Grid>\n <Grid\n size={{\n xs: 12,\n md: 6,\n }}\n >\n <EntityFinderModal\n configuration={{\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n selectMultiple: false,\n treeOnly: false,\n versionSelection: VersionSelectionType.DISALLOWED,\n }}\n show={showEntityFinder}\n onCancel={() => {\n setShowEntityFinder(false)\n }}\n title={'Select item for Webhook'}\n promptCopy={\n 'Select an item to associate with the webhook. The webhook can be used to receive programmatic alerts when the item is updated.'\n }\n onConfirm={selected => {\n setObjectId(selected[0].targetId)\n setShowEntityFinder(false)\n }}\n confirmButtonCopy={'Select'}\n />\n <TextField\n required\n label={\n <>\n Entity ID\n <HelpPopover\n containerSx={{\n position: 'fixed',\n ml: '15px',\n fontSize: '12px',\n }}\n markdownText={\n 'The ID of a Synapse entity for which to receive events. For folders and projects, matching events are published to the webhook endpoint for any entity in their hierarchy.'\n }\n />\n </>\n }\n type=\"text\"\n fullWidth\n value={objectId}\n onChange={e => {\n setObjectId(e.target.value)\n }}\n slotProps={{\n input: {\n endAdornment: (\n <IconButton onClick={() => setShowEntityFinder(true)}>\n <SearchOutlined />\n </IconButton>\n ),\n },\n }}\n />\n </Grid>\n <Grid size={6}>\n <FormControlLabel\n control={<Switch />}\n labelPlacement={'top'}\n label={<InputLabel>Enabled</InputLabel>}\n checked={enabled}\n onChange={(_e, checked) => {\n setEnabled(checked)\n }}\n />\n </Grid>\n <Grid\n size={{\n xs: 12,\n md: 6,\n }}\n >\n <FormGroup>\n <InputLabel required>Events</InputLabel>\n {Object.values(SynapseEventType).map(eventType => (\n <FormControlLabel\n control={<Checkbox />}\n label={upperFirst(eventType.toLowerCase())}\n key={eventType}\n checked={eventTypes.has(eventType)}\n onChange={(_e, checked) => {\n setEventTypes(curr => {\n if (checked) {\n const newSet = new Set(curr)\n newSet.add(eventType)\n return newSet\n } else {\n curr.delete(eventType)\n return new Set<SynapseEventType>(curr)\n }\n })\n }}\n />\n ))}\n </FormGroup>\n </Grid>\n <Grid size={12}>\n <RevalidationFieldsWrapper>\n <TextField\n label={'Endpoint'}\n fullWidth\n value={invokeEndpoint}\n onChange={e => setInvokeEndpoint(e.target.value)}\n required\n placeholder={'https://'}\n />\n {initialData && (\n <>\n <Button\n onClick={() => {\n setShowDeleteConfirmation(true)\n }}\n color=\"error\"\n variant={'outlined'}\n startIcon={<DeleteTwoToneIcon />}\n sx={{ my: 2 }}\n >\n Delete Webhook\n </Button>\n <ConfirmationDialog\n title={'Confirm Delete Webhook?'}\n onCancel={() => setShowDeleteConfirmation(false)}\n open={showDeleteConfirmation}\n content={\n <>\n <Typography variant={'body1'}>\n Are you sure you want to delete this webhook? This\n action cannot be undone.\n </Typography>\n {deleteError && (\n <Alert severity=\"error\" sx={{ mt: 2 }}>\n {deleteError.reason}\n </Alert>\n )}\n </>\n }\n onConfirm={() => {\n handleDelete()\n }}\n confirmButtonProps={{\n children: 'Delete',\n color: 'error',\n disabled: isDeletePending,\n }}\n cancelButtonProps={{ disabled: isDeletePending }}\n />\n </>\n )}\n </RevalidationFieldsWrapper>\n </Grid>\n </Grid>\n\n {error && (\n <Alert severity=\"error\" sx={{ my: 2 }}>\n {showRequestDomainForm && (\n <>\n Synapse only permits configuring webhooks on verified domains,\n which are specified in the{' '}\n <Link\n href={\n 'https://rest-docs.synapse.org/rest/index.html#org.sagebionetworks.repo.web.controller.WebhookController'\n }\n target={'_blank'}\n >\n REST documentation\n </Link>\n . You have entered a domain that has not been verified.{' '}\n <Link href={NEW_ENDPOINT_CONTACT_FORM_URL} target={'_blank'}>\n Please fill out this form to request verification for your\n webhook domain\n </Link>\n .\n </>\n )}\n {!showRequestDomainForm && error.reason}\n </Alert>\n )}\n </>\n }\n />\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CreateWebhookModal.js","names":[],"sources":["../../../src/components/Webhook/CreateWebhookModal.tsx"],"sourcesContent":["import {\n useCreateWebhook,\n useDeleteWebhook,\n useUpdateWebhook,\n} from '@/synapse-queries/webhook/useWebhook'\nimport DeleteTwoToneIcon from '@mui/icons-material/DeleteTwoTone'\nimport SearchOutlined from '@mui/icons-material/SearchOutlined'\nimport {\n Alert,\n Box,\n Button,\n Checkbox,\n FormControlLabel,\n FormGroup,\n Grid,\n IconButton,\n InputLabel,\n Link,\n Switch,\n TextField,\n Typography,\n} from '@mui/material'\nimport {\n ErrorResponseCode,\n SynapseEventType,\n SynapseObjectType,\n Webhook,\n WebhookVerificationStatus,\n} from '@sage-bionetworks/synapse-client'\nimport { upperFirst } from 'lodash-es'\nimport { Fragment, PropsWithChildren, useEffect, useState } from 'react'\nimport { ConfirmationDialog } from '../ConfirmationDialog/ConfirmationDialog'\nimport { EntityFinderModal } from '../EntityFinder/EntityFinderModal'\nimport { FinderScope } from '../EntityFinder/tree/EntityTree'\nimport { VersionSelectionType } from '../EntityFinder/VersionSelectionType'\nimport { HelpPopover } from '../HelpPopover/HelpPopover'\nimport { displayToast } from '../ToastMessage/ToastMessage'\n\ntype CreateWebhookModalProps = {\n initialData?: Webhook\n open: boolean\n onClose: () => void\n}\n\nconst NEW_ENDPOINT_DOMAIN_REQUEST_TITLE = encodeURIComponent(\n 'Request to add new domain for webhook verification',\n)\nconst NEW_ENDPOINT_DOMAIN_REQUEST_SUMMARY = encodeURIComponent(\n '<Please provide the domain(s) you wish to use and any additional details related to your request.>',\n)\nconst NEW_ENDPOINT_CONTACT_FORM_URL = `https://sagebionetworks.jira.com/servicedesk/customer/portal/9/group/16/create/85?summary=${NEW_ENDPOINT_DOMAIN_REQUEST_TITLE}&description=${NEW_ENDPOINT_DOMAIN_REQUEST_SUMMARY}`\n\nfunction UpdateWarningWrapper(props: PropsWithChildren) {\n return (\n <Box\n sx={{\n mt: '10px',\n py: 2,\n px: 4,\n backgroundColor: 'rgb(178, 36, 42, 0.03)',\n }}\n >\n <Typography sx={{ my: 1 }} color=\"error\" variant=\"headline3\" gutterBottom>\n DANGER ZONE\n </Typography>\n <Typography variant=\"body1\" gutterBottom>\n Editing the following information will require you to re-verify the\n webhook.\n </Typography>\n {props.children}\n </Box>\n )\n}\n\nexport default function CreateWebhookModal(props: CreateWebhookModalProps) {\n const { initialData, open, onClose } = props\n\n // Form state\n const objectType: SynapseObjectType = SynapseObjectType.ENTITY // Currently only entities can be selected\n const [objectId, setObjectId] = useState<string>('')\n const [eventTypes, setEventTypes] = useState<Set<SynapseEventType>>(new Set())\n const [invokeEndpoint, setInvokeEndpoint] = useState<string>('')\n const [enabled, setEnabled] = useState(true)\n\n useEffect(() => {\n setObjectId(initialData?.objectId || '')\n setEventTypes(\n new Set(initialData?.eventTypes || []) as Set<SynapseEventType>,\n )\n setInvokeEndpoint(initialData?.invokeEndpoint || '')\n setEnabled(initialData?.isEnabled ?? true)\n }, [initialData])\n\n const [showEntityFinder, setShowEntityFinder] = useState(false)\n const [showDeleteConfirmation, setShowDeleteConfirmation] = useState(false)\n\n const {\n mutate: createWebhook,\n isPending: isCreatePending,\n error: createError,\n } = useCreateWebhook({\n onSuccess: () => {\n displayToast('Webhook created', 'success')\n onClose()\n },\n })\n\n const {\n mutate: updateWebhook,\n isPending: isUpdatePending,\n error: updateError,\n } = useUpdateWebhook({\n onSuccess: () => {\n displayToast('Webhook updated', 'success')\n onClose()\n },\n })\n\n const {\n mutate: deleteWebhook,\n isPending: isDeletePending,\n error: deleteError,\n } = useDeleteWebhook({\n onSuccess: () => {\n displayToast('Webhook deleted', 'info')\n setShowDeleteConfirmation(false)\n onClose()\n },\n })\n\n const isPending = isCreatePending || isUpdatePending\n const error = createError || updateError\n\n function handleConfirm() {\n if (initialData) {\n updateWebhook({\n webhookId: initialData.id!,\n createOrUpdateWebhookRequest: {\n objectType,\n objectId,\n eventTypes,\n invokeEndpoint,\n isEnabled: enabled,\n },\n })\n } else {\n createWebhook({\n objectType,\n objectId,\n eventTypes,\n invokeEndpoint,\n isEnabled: enabled,\n })\n }\n }\n\n function handleDelete() {\n if (initialData) {\n deleteWebhook(initialData.id!)\n }\n }\n\n // If the user attempts to use a domain that has not been added to the allowlist, link to a form to create a request.\n const showRequestDomainForm =\n error &&\n error.errorResponse &&\n 'errorCode' in error.errorResponse &&\n error.errorResponse.errorCode ===\n ErrorResponseCode.UNSUPPORTED_WEBHOOK_DOMAIN\n\n // Wrap certain fields in a wrapper if they will require re-verifying the webhook\n const RevalidationFieldsWrapper =\n initialData &&\n initialData.verificationStatus === WebhookVerificationStatus.VERIFIED\n ? UpdateWarningWrapper\n : Fragment\n\n return (\n <ConfirmationDialog\n open={open}\n title={'Create New Webhook'}\n maxWidth={'md'}\n onCancel={onClose}\n onConfirm={() => {\n handleConfirm()\n }}\n confirmButtonProps={{\n children: `${initialData ? 'Update' : 'Create'} Webhook`,\n disabled: isPending,\n }}\n cancelButtonProps={{\n disabled: isPending,\n }}\n content={\n <>\n <Grid container spacing={2}>\n <Grid size={12}>\n <Typography variant={'body1'} gutterBottom>\n Specify the ID of the entity and the types of events you would\n like to receive. Once you complete this step, Synapse will send\n a verification code to the endpoint you specify. After you\n verify your webhook, Synapse will send your chosen events to the\n verified endpoint.\n </Typography>\n </Grid>\n <Grid\n size={{\n xs: 12,\n md: 6,\n }}\n >\n <EntityFinderModal\n configuration={{\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n selectMultiple: false,\n treeOnly: false,\n versionSelection: VersionSelectionType.DISALLOWED,\n }}\n show={showEntityFinder}\n onCancel={() => {\n setShowEntityFinder(false)\n }}\n title={'Select item for Webhook'}\n promptCopy={\n 'Select an item to associate with the webhook. The webhook can be used to receive programmatic alerts when the item is updated.'\n }\n onConfirm={selected => {\n setObjectId(selected[0].targetId)\n setShowEntityFinder(false)\n }}\n confirmButtonCopy={'Select'}\n />\n <TextField\n required\n label={\n <>\n Entity ID\n <HelpPopover\n containerSx={{\n position: 'fixed',\n ml: '15px',\n fontSize: '12px',\n }}\n markdownText={\n 'The ID of a Synapse entity for which to receive events. For folders and projects, matching events are published to the webhook endpoint for any entity in their hierarchy.'\n }\n />\n </>\n }\n type=\"text\"\n fullWidth\n value={objectId}\n onChange={e => {\n setObjectId(e.target.value)\n }}\n slotProps={{\n input: {\n endAdornment: (\n <IconButton onClick={() => setShowEntityFinder(true)}>\n <SearchOutlined />\n </IconButton>\n ),\n },\n }}\n />\n </Grid>\n <Grid size={6}>\n <FormControlLabel\n control={<Switch />}\n labelPlacement={'top'}\n label={<InputLabel>Enabled</InputLabel>}\n checked={enabled}\n onChange={(_e, checked) => {\n setEnabled(checked)\n }}\n />\n </Grid>\n <Grid\n size={{\n xs: 12,\n md: 6,\n }}\n >\n <FormGroup>\n <InputLabel required>Events</InputLabel>\n {Object.values(SynapseEventType).map(eventType => (\n <FormControlLabel\n control={<Checkbox />}\n label={upperFirst(eventType.toLowerCase())}\n key={eventType}\n checked={eventTypes.has(eventType)}\n onChange={(_e, checked) => {\n setEventTypes(curr => {\n if (checked) {\n const newSet = new Set(curr)\n newSet.add(eventType)\n return newSet\n } else {\n curr.delete(eventType)\n return new Set<SynapseEventType>(curr)\n }\n })\n }}\n />\n ))}\n </FormGroup>\n </Grid>\n <Grid size={12}>\n <RevalidationFieldsWrapper>\n <TextField\n label={'Endpoint'}\n fullWidth\n value={invokeEndpoint}\n onChange={e => setInvokeEndpoint(e.target.value)}\n required\n placeholder={'https://'}\n />\n {initialData && (\n <>\n <Button\n onClick={() => {\n setShowDeleteConfirmation(true)\n }}\n color=\"error\"\n variant={'outlined'}\n startIcon={<DeleteTwoToneIcon />}\n sx={{ my: 2 }}\n >\n Delete Webhook\n </Button>\n <ConfirmationDialog\n title={'Confirm Delete Webhook?'}\n onCancel={() => setShowDeleteConfirmation(false)}\n open={showDeleteConfirmation}\n content={\n <>\n <Typography variant={'body1'}>\n Are you sure you want to delete this webhook? This\n action cannot be undone.\n </Typography>\n {deleteError && (\n <Alert severity=\"error\" sx={{ mt: 2 }}>\n {deleteError.reason}\n </Alert>\n )}\n </>\n }\n onConfirm={() => {\n handleDelete()\n }}\n confirmButtonProps={{\n children: 'Delete',\n color: 'error',\n disabled: isDeletePending,\n }}\n cancelButtonProps={{ disabled: isDeletePending }}\n />\n </>\n )}\n </RevalidationFieldsWrapper>\n </Grid>\n </Grid>\n\n {error && (\n <Alert severity=\"error\" sx={{ my: 2 }}>\n {showRequestDomainForm && (\n <>\n Synapse only permits configuring webhooks on verified domains,\n which are specified in the{' '}\n <Link\n href={\n 'https://rest-docs.synapse.org/rest/index.html#org.sagebionetworks.repo.web.controller.WebhookController'\n }\n target={'_blank'}\n >\n REST documentation\n </Link>\n . You have entered a domain that has not been verified.{' '}\n <Link href={NEW_ENDPOINT_CONTACT_FORM_URL} target={'_blank'}>\n Please fill out this form to request verification for your\n webhook domain\n </Link>\n .\n </>\n )}\n {!showRequestDomainForm && error.reason}\n </Alert>\n )}\n </>\n }\n />\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"WebhookDashboard.js","names":[],"sources":["../../../src/components/Webhook/WebhookDashboard.tsx"],"sourcesContent":["import InfiniteTableLayout from '@/components/layout/InfiniteTableLayout'\nimport {\n useGetWebhooksInfinite,\n useResendVerificationCode,\n} from '@/synapse-queries/webhook/useWebhook'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport { AddCircleTwoTone } from '@mui/icons-material'\nimport {\n Box,\n Button,\n Link,\n Stack,\n Typography,\n useMediaQuery,\n useTheme,\n} from '@mui/material'\nimport {\n SynapseObjectType,\n Webhook,\n WebhookVerificationStatus,\n} from '@sage-bionetworks/synapse-client'\nimport {\n createColumnHelper,\n getCoreRowModel,\n useReactTable,\n} from '@tanstack/react-table'\nimport dayjs from 'dayjs'\nimport { upperFirst } from 'lodash-es'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { EntityLink } from '../EntityLink'\nimport { HelpPopover } from '../HelpPopover/HelpPopover'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport StyledTanStackTable from '../TanStackTable/StyledTanStackTable'\nimport CreateWebhookModal from './CreateWebhookModal'\nimport { WebhookVerificationDialog } from './WebhookVerificationDialog'\n\nconst WEBHOOK_CAN_RESEND_CODE_STATES: WebhookVerificationStatus[] = [\n WebhookVerificationStatus.FAILED,\n WebhookVerificationStatus.REVOKED,\n]\n\nconst columnHelper = createColumnHelper<Webhook>()\n\nfunction getWebhookTableColumns(\n onClickVerifyWebhook: (webhook: Webhook) => void,\n onClickResendVerificationCode: (webhook: Webhook) => void,\n onClickEditWebhook: (webhook: Webhook) => void,\n) {\n return [\n columnHelper.accessor('id', {\n header: 'ID',\n size: 75,\n cell: ctx => ctx.cell.getValue(),\n }),\n columnHelper.display({\n header: 'Object',\n cell: ctx => {\n if (ctx.row.original.objectType === SynapseObjectType.ENTITY) {\n return (\n <>\n <EntityLink entity={ctx.row.original.objectId!} /> (syn\n {ctx.row.original.objectId})\n </>\n )\n }\n return `${ctx.row.original.objectType}: ${ctx.row.original.objectId}`\n },\n }),\n columnHelper.accessor('eventTypes', {\n header: 'Event Type(s)',\n cell: ctx => (\n <Stack>\n {Array.from<string>(ctx.cell.getValue()!)\n .map(s => s.toLowerCase())\n .map(upperFirst)\n .map(val => (\n <span key={val}>{val}</span>\n ))}\n </Stack>\n ),\n }),\n columnHelper.accessor('isEnabled', {\n header: 'Enabled',\n size: 10,\n cell: ctx => (ctx.cell.getValue() ? 'Yes' : 'No'),\n }),\n columnHelper.accessor('createdOn', {\n header: 'Created On',\n cell: ({ getValue }) => formatDate(dayjs(getValue())),\n }),\n columnHelper.accessor('modifiedOn', {\n header: 'Modified On',\n cell: ({ getValue }) => formatDate(dayjs(getValue())),\n }),\n columnHelper.accessor('verificationStatus', {\n header: 'Verification Status',\n cell: ctx => (\n <Stack\n sx={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: 1,\n }}\n >\n {ctx.row.original.verificationStatus === 'PENDING' && (\n // useEffect above will trigger a refetch until this resolves\n <SynapseSpinner size={20} />\n )}\n {ctx.row.original.verificationStatus !==\n WebhookVerificationStatus.PENDING &&\n upperFirst(\n (ctx.row.original.verificationStatus || '')\n .toLowerCase()\n .replaceAll('_', ' '),\n )}\n {ctx.row.original.verificationMsg && (\n <HelpPopover markdownText={ctx.row.original.verificationMsg} />\n )}\n </Stack>\n ),\n }),\n columnHelper.display({\n id: 'actions',\n header: 'Actions',\n size: 10,\n meta: {\n textAlign: 'right',\n },\n cell: ctx => (\n <Stack\n sx={{\n flexDirection: 'row',\n justifyContent: 'flex-end',\n alignItems: 'center',\n gap: 2,\n }}\n >\n {ctx.row.original.verificationStatus ===\n WebhookVerificationStatus.CODE_SENT && (\n <Button\n variant={'outlined'}\n onClick={() => {\n onClickVerifyWebhook(ctx.row.original)\n }}\n >\n Verify code\n </Button>\n )}\n\n {WEBHOOK_CAN_RESEND_CODE_STATES.includes(\n ctx.row.original.verificationStatus as WebhookVerificationStatus,\n ) && (\n <Button\n variant={'outlined'}\n onClick={() => {\n onClickResendVerificationCode(ctx.row.original)\n }}\n >\n Resend code\n </Button>\n )}\n <Button\n size=\"small\"\n variant=\"contained\"\n onClick={() => {\n onClickEditWebhook(ctx.row.original)\n }}\n >\n Edit\n </Button>\n </Stack>\n ),\n }),\n ]\n}\n\nexport default function WebhookDashboard() {\n const [showCreateModal, setShowCreateModal] = useState(false)\n const [showVerificationDialog, setShowVerificationDialog] = useState(false)\n const [webhookToUpdate, setWebhookToUpdate] = useState<Webhook | undefined>(\n undefined,\n )\n\n const theme = useTheme()\n const hideOptionalColumns = useMediaQuery(theme.breakpoints.down('md'))\n\n const {\n data: infiniteData,\n refetch,\n hasNextPage,\n fetchNextPage,\n isFetchingNextPage,\n isLoading,\n } = useGetWebhooksInfinite()\n const webhooks = useMemo(\n () => infiniteData?.pages.flatMap(page => page.page!) ?? [],\n [infiniteData],\n )\n\n // If the Webhook verification status is PENDING, Synapse may not have sent the verification code, or may have not reported a response.\n // Refetch on an interval to check if the verification status has changed.\n useEffect(() => {\n let intervalId: NodeJS.Timeout\n if (webhooks.some(webhook => webhook.verificationStatus === 'PENDING')) {\n intervalId = setInterval(() => {\n void refetch()\n }, 2500)\n }\n return () => clearInterval(intervalId)\n }, [refetch, webhooks])\n\n const { mutate: resendVerificationCode } = useResendVerificationCode()\n\n const onClickVerifyWebhook = useCallback((webhook: Webhook) => {\n setWebhookToUpdate(webhook)\n setShowVerificationDialog(true)\n }, [])\n const onClickEditWebhook = useCallback((webhook: Webhook) => {\n setWebhookToUpdate(webhook)\n setShowCreateModal(true)\n }, [])\n const onClickResendVerificationCode = useCallback(\n (webhook: Webhook) => {\n resendVerificationCode(webhook.id!)\n },\n [resendVerificationCode],\n )\n\n const columns = useMemo(\n () =>\n getWebhookTableColumns(\n onClickVerifyWebhook,\n onClickResendVerificationCode,\n onClickEditWebhook,\n ),\n [onClickEditWebhook, onClickResendVerificationCode, onClickVerifyWebhook],\n )\n\n const webhookTable = useReactTable<Webhook>({\n data: webhooks,\n columns: columns,\n state: {\n columnVisibility: {\n createdOn: !hideOptionalColumns,\n modifiedOn: !hideOptionalColumns,\n },\n },\n getCoreRowModel: getCoreRowModel(),\n })\n\n const isEmpty = !isLoading && webhookTable.getRowModel().rows.length === 0\n\n return (\n <div>\n <WebhookVerificationDialog\n key={webhookToUpdate?.id}\n open={showVerificationDialog}\n onClose={() => setShowVerificationDialog(false)}\n webhookId={webhookToUpdate?.id!}\n />\n <Typography variant={'headline3'}>Webhook Dashboard</Typography>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n my: 2,\n gap: 3,\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n }}\n >\n <div>\n <Typography variant={'body1'} gutterBottom>\n Webhooks can be used to programmatically receive alerts that are\n triggered by events in Synapse. A webhook can specify a Synapse\n entity to receive events related to that entity. For entities that\n represent a container (folder and project), matching events are\n published to the webhook endpoint for any entity in its hierarchy.\n </Typography>\n <Typography variant={'body1'} gutterBottom>\n For more information, see the{' '}\n <Link\n href={\n 'http://dev.release.rest.doc.sagebase.org.s3-website-us-east-1.amazonaws.com/index.html#org.sagebionetworks.repo.web.controller.WebhookController'\n }\n target={'blank'}\n >\n Synapse API REST Docs section on Webhooks\n </Link>\n .\n </Typography>\n </div>\n <Button\n size=\"large\"\n variant=\"contained\"\n startIcon={<AddCircleTwoTone />}\n onClick={() => {\n setWebhookToUpdate(undefined)\n setShowCreateModal(true)\n }}\n sx={{ flexShrink: 0 }}\n >\n Create Webhook\n </Button>\n <CreateWebhookModal\n initialData={webhookToUpdate}\n open={showCreateModal}\n onClose={() => setShowCreateModal(false)}\n />\n </Box>\n <InfiniteTableLayout\n table={<StyledTanStackTable table={webhookTable} />}\n isLoading={isLoading}\n noResults={\n <Typography variant=\"body1\">\n You have not created any webhooks. Click &quot;Create Webhook&quot;\n above to begin.\n </Typography>\n }\n isEmpty={isEmpty}\n hasNextPage={hasNextPage}\n onFetchNextPageClicked={() => {\n void fetchNextPage()\n }}\n isFetchingNextPage={isFetchingNextPage}\n />\n </div>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"WebhookDashboard.js","names":[],"sources":["../../../src/components/Webhook/WebhookDashboard.tsx"],"sourcesContent":["import InfiniteTableLayout from '@/components/layout/InfiniteTableLayout'\nimport {\n useGetWebhooksInfinite,\n useResendVerificationCode,\n} from '@/synapse-queries/webhook/useWebhook'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport { AddCircleTwoTone } from '@mui/icons-material'\nimport {\n Box,\n Button,\n Link,\n Stack,\n Typography,\n useMediaQuery,\n useTheme,\n} from '@mui/material'\nimport {\n SynapseObjectType,\n Webhook,\n WebhookVerificationStatus,\n} from '@sage-bionetworks/synapse-client'\nimport {\n createColumnHelper,\n getCoreRowModel,\n useReactTable,\n} from '@tanstack/react-table'\nimport dayjs from 'dayjs'\nimport { upperFirst } from 'lodash-es'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { EntityLink } from '../EntityLink'\nimport { HelpPopover } from '../HelpPopover/HelpPopover'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport StyledTanStackTable from '../TanStackTable/StyledTanStackTable'\nimport CreateWebhookModal from './CreateWebhookModal'\nimport { WebhookVerificationDialog } from './WebhookVerificationDialog'\n\nconst WEBHOOK_CAN_RESEND_CODE_STATES: WebhookVerificationStatus[] = [\n WebhookVerificationStatus.FAILED,\n WebhookVerificationStatus.REVOKED,\n]\n\nconst columnHelper = createColumnHelper<Webhook>()\n\nfunction getWebhookTableColumns(\n onClickVerifyWebhook: (webhook: Webhook) => void,\n onClickResendVerificationCode: (webhook: Webhook) => void,\n onClickEditWebhook: (webhook: Webhook) => void,\n) {\n return [\n columnHelper.accessor('id', {\n header: 'ID',\n size: 75,\n cell: ctx => ctx.cell.getValue(),\n }),\n columnHelper.display({\n header: 'Object',\n cell: ctx => {\n if (ctx.row.original.objectType === SynapseObjectType.ENTITY) {\n return (\n <>\n <EntityLink entity={ctx.row.original.objectId!} /> (syn\n {ctx.row.original.objectId})\n </>\n )\n }\n return `${ctx.row.original.objectType}: ${ctx.row.original.objectId}`\n },\n }),\n columnHelper.accessor('eventTypes', {\n header: 'Event Type(s)',\n cell: ctx => (\n <Stack>\n {Array.from<string>(ctx.cell.getValue()!)\n .map(s => s.toLowerCase())\n .map(upperFirst)\n .map(val => (\n <span key={val}>{val}</span>\n ))}\n </Stack>\n ),\n }),\n columnHelper.accessor('isEnabled', {\n header: 'Enabled',\n size: 10,\n cell: ctx => (ctx.cell.getValue() ? 'Yes' : 'No'),\n }),\n columnHelper.accessor('createdOn', {\n header: 'Created On',\n cell: ({ getValue }) => formatDate(dayjs(getValue())),\n }),\n columnHelper.accessor('modifiedOn', {\n header: 'Modified On',\n cell: ({ getValue }) => formatDate(dayjs(getValue())),\n }),\n columnHelper.accessor('verificationStatus', {\n header: 'Verification Status',\n cell: ctx => (\n <Stack\n sx={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: 1,\n }}\n >\n {ctx.row.original.verificationStatus === 'PENDING' && (\n // useEffect above will trigger a refetch until this resolves\n <SynapseSpinner size={20} />\n )}\n {ctx.row.original.verificationStatus !==\n WebhookVerificationStatus.PENDING &&\n upperFirst(\n (ctx.row.original.verificationStatus || '')\n .toLowerCase()\n .replaceAll('_', ' '),\n )}\n {ctx.row.original.verificationMsg && (\n <HelpPopover markdownText={ctx.row.original.verificationMsg} />\n )}\n </Stack>\n ),\n }),\n columnHelper.display({\n id: 'actions',\n header: 'Actions',\n size: 10,\n meta: {\n textAlign: 'right',\n },\n cell: ctx => (\n <Stack\n sx={{\n flexDirection: 'row',\n justifyContent: 'flex-end',\n alignItems: 'center',\n gap: 2,\n }}\n >\n {ctx.row.original.verificationStatus ===\n WebhookVerificationStatus.CODE_SENT && (\n <Button\n variant={'outlined'}\n onClick={() => {\n onClickVerifyWebhook(ctx.row.original)\n }}\n >\n Verify code\n </Button>\n )}\n\n {WEBHOOK_CAN_RESEND_CODE_STATES.includes(\n ctx.row.original.verificationStatus as WebhookVerificationStatus,\n ) && (\n <Button\n variant={'outlined'}\n onClick={() => {\n onClickResendVerificationCode(ctx.row.original)\n }}\n >\n Resend code\n </Button>\n )}\n <Button\n size=\"small\"\n variant=\"contained\"\n onClick={() => {\n onClickEditWebhook(ctx.row.original)\n }}\n >\n Edit\n </Button>\n </Stack>\n ),\n }),\n ]\n}\n\nexport default function WebhookDashboard() {\n const [showCreateModal, setShowCreateModal] = useState(false)\n const [showVerificationDialog, setShowVerificationDialog] = useState(false)\n const [webhookToUpdate, setWebhookToUpdate] = useState<Webhook | undefined>(\n undefined,\n )\n\n const theme = useTheme()\n const hideOptionalColumns = useMediaQuery(theme.breakpoints.down('md'))\n\n const {\n data: infiniteData,\n refetch,\n hasNextPage,\n fetchNextPage,\n isFetchingNextPage,\n isLoading,\n } = useGetWebhooksInfinite()\n const webhooks = useMemo(\n () => infiniteData?.pages.flatMap(page => page.page!) ?? [],\n [infiniteData],\n )\n\n // If the Webhook verification status is PENDING, Synapse may not have sent the verification code, or may have not reported a response.\n // Refetch on an interval to check if the verification status has changed.\n useEffect(() => {\n let intervalId: NodeJS.Timeout\n if (webhooks.some(webhook => webhook.verificationStatus === 'PENDING')) {\n intervalId = setInterval(() => {\n void refetch()\n }, 2500)\n }\n return () => clearInterval(intervalId)\n }, [refetch, webhooks])\n\n const { mutate: resendVerificationCode } = useResendVerificationCode()\n\n const onClickVerifyWebhook = useCallback((webhook: Webhook) => {\n setWebhookToUpdate(webhook)\n setShowVerificationDialog(true)\n }, [])\n const onClickEditWebhook = useCallback((webhook: Webhook) => {\n setWebhookToUpdate(webhook)\n setShowCreateModal(true)\n }, [])\n const onClickResendVerificationCode = useCallback(\n (webhook: Webhook) => {\n resendVerificationCode(webhook.id!)\n },\n [resendVerificationCode],\n )\n\n const columns = useMemo(\n () =>\n getWebhookTableColumns(\n onClickVerifyWebhook,\n onClickResendVerificationCode,\n onClickEditWebhook,\n ),\n [onClickEditWebhook, onClickResendVerificationCode, onClickVerifyWebhook],\n )\n\n const webhookTable = useReactTable<Webhook>({\n data: webhooks,\n columns: columns,\n state: {\n columnVisibility: {\n createdOn: !hideOptionalColumns,\n modifiedOn: !hideOptionalColumns,\n },\n },\n getCoreRowModel: getCoreRowModel(),\n })\n\n const isEmpty = !isLoading && webhookTable.getRowModel().rows.length === 0\n\n return (\n <div>\n <WebhookVerificationDialog\n key={webhookToUpdate?.id}\n open={showVerificationDialog}\n onClose={() => setShowVerificationDialog(false)}\n webhookId={webhookToUpdate?.id!}\n />\n <Typography variant={'headline3'}>Webhook Dashboard</Typography>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n my: 2,\n gap: 3,\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n }}\n >\n <div>\n <Typography variant={'body1'} gutterBottom>\n Webhooks can be used to programmatically receive alerts that are\n triggered by events in Synapse. A webhook can specify a Synapse\n entity to receive events related to that entity. For entities that\n represent a container (folder and project), matching events are\n published to the webhook endpoint for any entity in its hierarchy.\n </Typography>\n <Typography variant={'body1'} gutterBottom>\n For more information, see the{' '}\n <Link\n href={\n 'http://dev.release.rest.doc.sagebase.org.s3-website-us-east-1.amazonaws.com/index.html#org.sagebionetworks.repo.web.controller.WebhookController'\n }\n target={'blank'}\n >\n Synapse API REST Docs section on Webhooks\n </Link>\n .\n </Typography>\n </div>\n <Button\n size=\"large\"\n variant=\"contained\"\n startIcon={<AddCircleTwoTone />}\n onClick={() => {\n setWebhookToUpdate(undefined)\n setShowCreateModal(true)\n }}\n sx={{ flexShrink: 0 }}\n >\n Create Webhook\n </Button>\n <CreateWebhookModal\n initialData={webhookToUpdate}\n open={showCreateModal}\n onClose={() => setShowCreateModal(false)}\n />\n </Box>\n <InfiniteTableLayout\n table={<StyledTanStackTable table={webhookTable} />}\n isLoading={isLoading}\n noResults={\n <Typography variant=\"body1\">\n You have not created any webhooks. Click &quot;Create Webhook&quot;\n above to begin.\n </Typography>\n }\n isEmpty={isEmpty}\n hasNextPage={hasNextPage}\n onFetchNextPageClicked={() => {\n void fetchNextPage()\n }}\n isFetchingNextPage={isFetchingNextPage}\n />\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAoCA,IAAM,IAA8D,CAClE,EAA0B,QAC1B,EAA0B,OAC5B,GAEM,IAAe,EAA4B;AAEjD,SAAS,EACP,GACA,GACA,GACA;CACA,OAAO;EACL,EAAa,SAAS,MAAM;GAC1B,QAAQ;GACR,MAAM;GACN,OAAM,MAAO,EAAI,KAAK,SAAS;EACjC,CAAC;EACD,EAAa,QAAQ;GACnB,QAAQ;GACR,OAAM,MACA,EAAI,IAAI,SAAS,eAAe,EAAkB,SAElD,kBAAA,GAAA,EAAA,UAAA;IACE,kBAAC,GAAD,EAAY,QAAQ,EAAI,IAAI,SAAS,SAAY,CAAA;IAAC;IACjD,EAAI,IAAI,SAAS;IAAS;GAC3B,EAAA,CAAA,IAGC,GAAG,EAAI,IAAI,SAAS,WAAW,IAAI,EAAI,IAAI,SAAS;EAE/D,CAAC;EACD,EAAa,SAAS,cAAc;GAClC,QAAQ;GACR,OAAM,MACJ,kBAAC,GAAD,EAAA,UACG,MAAM,KAAa,EAAI,KAAK,SAAS,CAAE,EACrC,KAAI,MAAK,EAAE,YAAY,CAAC,EACxB,IAAI,CAAU,EACd,KAAI,MACH,kBAAC,QAAD,EAAA,UAAiB,EAAU,GAAhB,CAAgB,CAC5B,EACE,CAAA;EAEX,CAAC;EACD,EAAa,SAAS,aAAa;GACjC,QAAQ;GACR,MAAM;GACN,OAAM,MAAQ,EAAI,KAAK,SAAS,IAAI,QAAQ;EAC9C,CAAC;EACD,EAAa,SAAS,aAAa;GACjC,QAAQ;GACR,OAAO,EAAE,kBAAe,EAAW,EAAM,EAAS,CAAC,CAAC;EACtD,CAAC;EACD,EAAa,SAAS,cAAc;GAClC,QAAQ;GACR,OAAO,EAAE,kBAAe,EAAW,EAAM,EAAS,CAAC,CAAC;EACtD,CAAC;EACD,EAAa,SAAS,sBAAsB;GAC1C,QAAQ;GACR,OAAM,MACJ,kBAAC,GAAD;IACE,IAAI;KACF,eAAe;KACf,YAAY;KACZ,KAAK;IACP;cALF;KAOG,EAAI,IAAI,SAAS,uBAAuB,aAEvC,kBAAC,GAAD,EAAgB,MAAM,GAAK,CAAA;KAE5B,EAAI,IAAI,SAAS,uBAChB,EAA0B,WAC1B,GACG,EAAI,IAAI,SAAS,sBAAsB,IACrC,YAAY,EACZ,WAAW,KAAK,GAAG,CACxB;KACD,EAAI,IAAI,SAAS,mBAChB,kBAAC,GAAD,EAAa,cAAc,EAAI,IAAI,SAAS,gBAAkB,CAAA;IAE3D;;EAEX,CAAC;EACD,EAAa,QAAQ;GACnB,IAAI;GACJ,QAAQ;GACR,MAAM;GACN,MAAM,EACJ,WAAW,QACb;GACA,OAAM,MACJ,kBAAC,GAAD;IACE,IAAI;KACF,eAAe;KACf,gBAAgB;KAChB,YAAY;KACZ,KAAK;IACP;cANF;KAQG,EAAI,IAAI,SAAS,uBAChB,EAA0B,aAC1B,kBAAC,GAAD;MACE,SAAS;MACT,eAAe;OACb,EAAqB,EAAI,IAAI,QAAQ;MACvC;gBACD;KAEO,CAAA;KAGT,EAA+B,SAC9B,EAAI,IAAI,SAAS,kBACnB,KACE,kBAAC,GAAD;MACE,SAAS;MACT,eAAe;OACb,EAA8B,EAAI,IAAI,QAAQ;MAChD;gBACD;KAEO,CAAA;KAEV,kBAAC,GAAD;MACE,MAAK;MACL,SAAQ;MACR,eAAe;OACb,EAAmB,EAAI,IAAI,QAAQ;MACrC;gBACD;KAEO,CAAA;IACH;;EAEX,CAAC;CACH;AACF;AAEA,SAAwB,IAAmB;CACzC,IAAM,CAAC,GAAiB,KAAsB,EAAS,EAAK,GACtD,CAAC,GAAwB,KAA6B,EAAS,EAAK,GACpE,CAAC,GAAiB,KAAsB,EAC5C,KAAA,CACF,GAGM,IAAsB,EADd,EAC4B,EAAM,YAAY,KAAK,IAAI,CAAC,GAEhE,EACJ,MAAM,GACN,YACA,gBACA,kBACA,uBACA,iBACE,EAAuB,GACrB,IAAW,QACT,GAAc,MAAM,SAAQ,MAAQ,EAAK,IAAK,KAAK,CAAC,GAC1D,CAAC,CAAY,CACf;CAIA,QAAgB;EACd,IAAI;EAMJ,OALI,EAAS,MAAK,MAAW,EAAQ,uBAAuB,SAAS,MACnE,IAAa,kBAAkB;GAC7B,EAAa;EACf,GAAG,IAAI,UAEI,cAAc,CAAU;CACvC,GAAG,CAAC,GAAS,CAAQ,CAAC;CAEtB,IAAM,EAAE,QAAQ,MAA2B,EAA0B,GAE/D,IAAuB,GAAa,MAAqB;EAE7D,AADA,EAAmB,CAAO,GAC1B,EAA0B,EAAI;CAChC,GAAG,CAAC,CAAC,GACC,IAAqB,GAAa,MAAqB;EAE3D,AADA,EAAmB,CAAO,GAC1B,EAAmB,EAAI;CACzB,GAAG,CAAC,CAAC,GACC,IAAgC,GACnC,MAAqB;EACpB,EAAuB,EAAQ,EAAG;CACpC,GACA,CAAC,CAAsB,CACzB,GAYM,IAAe,EAAuB;EAC1C,MAAM;EACG,SAZK,QAEZ,EACE,GACA,GACA,CACF,GACF;GAAC;GAAoB;GAA+B;EAAoB,CAK/D;EACT,OAAO,EACL,kBAAkB;GAChB,WAAW,CAAC;GACZ,YAAY,CAAC;EACf,EACF;EACA,iBAAiB,EAAgB;CACnC,CAAC,GAEK,IAAU,CAAC,KAAa,EAAa,YAAY,EAAE,KAAK,WAAW;CAEzE,OACE,kBAAC,OAAD,EAAA,UAAA;EACE,kBAAC,GAAD;GAEE,MAAM;GACN,eAAe,EAA0B,EAAK;GAC9C,WAAW,GAAiB;EAC7B,GAJM,GAAiB,EAIvB;EACD,kBAAC,GAAD;GAAY,SAAS;aAAa;EAA6B,CAAA;EAC/D,kBAAC,GAAD;GACE,IAAI;IACF,SAAS;IACT,eAAe;IACf,IAAI;IACJ,KAAK;IACL,gBAAgB;IAChB,YAAY;GACd;aARF;IAUE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,GAAD;KAAY,SAAS;KAAS,cAAA;eAAa;IAM/B,CAAA,GACZ,kBAAC,GAAD;KAAY,SAAS;KAAS,cAAA;eAA9B;MAA2C;MACX;MAC9B,kBAAC,GAAD;OACE,MACE;OAEF,QAAQ;iBACT;MAEK,CAAA;MAAC;KAEG;MACT,EAAA,CAAA;IACL,kBAAC,GAAD;KACE,MAAK;KACL,SAAQ;KACR,WAAW,kBAAC,GAAD,CAAmB,CAAA;KAC9B,eAAe;MAEb,AADA,EAAmB,KAAA,CAAS,GAC5B,EAAmB,EAAI;KACzB;KACA,IAAI,EAAE,YAAY,EAAE;eACrB;IAEO,CAAA;IACR,kBAAC,GAAD;KACE,aAAa;KACb,MAAM;KACN,eAAe,EAAmB,EAAK;IACxC,CAAA;GACE;;EACL,kBAAC,GAAD;GACE,OAAO,kBAAC,GAAD,EAAqB,OAAO,EAAe,CAAA;GACvC;GACX,WACE,kBAAC,GAAD;IAAY,SAAQ;cAAQ;GAGhB,CAAA;GAEL;GACI;GACb,8BAA8B;IAC5B,EAAmB;GACrB;GACoB;EACrB,CAAA;CACE,EAAA,CAAA;AAET"}