synapse-react-client 4.0.19 → 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 (1553) hide show
  1. package/dist/SWC.index.d.ts +1 -1
  2. package/dist/SWC.index.js +1 -1
  3. package/dist/SWC.index.js.map +1 -1
  4. package/dist/aridhia-queries/aridhiaTokenExchange.js.map +1 -1
  5. package/dist/aridhia-queries/useGetAridhiaRequests.js.map +1 -1
  6. package/dist/assets/DefaultColorfulPortalCardBackground.js.map +1 -1
  7. package/dist/assets/GoogleIcon.js.map +1 -1
  8. package/dist/assets/GoogleIcon24.js.map +1 -1
  9. package/dist/assets/homepage/BlinkingLiveIcon.d.ts +1 -1
  10. package/dist/assets/homepage/BlinkingLiveIcon.js.map +1 -1
  11. package/dist/assets/homepage/aacr.js.map +1 -1
  12. package/dist/assets/homepage/cri.js.map +1 -1
  13. package/dist/assets/homepage/ctf.js.map +1 -1
  14. package/dist/assets/homepage/egress.js.map +1 -1
  15. package/dist/assets/homepage/facebook.js.map +1 -1
  16. package/dist/assets/homepage/fisma.js.map +1 -1
  17. package/dist/assets/homepage/gff.js.map +1 -1
  18. package/dist/assets/homepage/github.js.map +1 -1
  19. package/dist/assets/homepage/gray.js.map +1 -1
  20. package/dist/assets/homepage/hipaa-compliant.js.map +1 -1
  21. package/dist/assets/homepage/instagram.js.map +1 -1
  22. package/dist/assets/homepage/linkedin.js.map +1 -1
  23. package/dist/assets/homepage/ml-commons.js.map +1 -1
  24. package/dist/assets/homepage/nih-aging.js.map +1 -1
  25. package/dist/assets/homepage/nih-heart.js.map +1 -1
  26. package/dist/assets/homepage/nih-nci.js.map +1 -1
  27. package/dist/assets/homepage/nih-nimh.js.map +1 -1
  28. package/dist/assets/homepage/ntap.js.map +1 -1
  29. package/dist/assets/homepage/plan-item.js.map +1 -1
  30. package/dist/assets/homepage/powered-by-synapse-feature.js.map +1 -1
  31. package/dist/assets/homepage/precision-governance-feature.js.map +1 -1
  32. package/dist/assets/homepage/python.js.map +1 -1
  33. package/dist/assets/homepage/r.js.map +1 -1
  34. package/dist/assets/homepage/research-credit-feature.js.map +1 -1
  35. package/dist/assets/homepage/seamless-integration-feature.js.map +1 -1
  36. package/dist/assets/homepage/sloan.js.map +1 -1
  37. package/dist/assets/homepage/twitter.js.map +1 -1
  38. package/dist/assets/homepage/users.js.map +1 -1
  39. package/dist/assets/homepage/youtube.js.map +1 -1
  40. package/dist/assets/icons/AccessDataAnywhere.js.map +1 -1
  41. package/dist/assets/icons/AccessPending.js.map +1 -1
  42. package/dist/assets/icons/AccessPendingCloud.js.map +1 -1
  43. package/dist/assets/icons/AddAd.js.map +1 -1
  44. package/dist/assets/icons/AddToList.js.map +1 -1
  45. package/dist/assets/icons/Alert.js.map +1 -1
  46. package/dist/assets/icons/Arrow.js.map +1 -1
  47. package/dist/assets/icons/AwardScroll.js.map +1 -1
  48. package/dist/assets/icons/Baseline.js.map +1 -1
  49. package/dist/assets/icons/Cavatica.js.map +1 -1
  50. package/dist/assets/icons/CertifiedUser.js.map +1 -1
  51. package/dist/assets/icons/Challenge.js.map +1 -1
  52. package/dist/assets/icons/Checkbox/Checked.js.map +1 -1
  53. package/dist/assets/icons/Checkbox/Checked2.js.map +1 -1
  54. package/dist/assets/icons/Checkbox/Indeterminate.js.map +1 -1
  55. package/dist/assets/icons/Checkbox/Indeterminate2.js.map +1 -1
  56. package/dist/assets/icons/Checkbox/Unchecked.js.map +1 -1
  57. package/dist/assets/icons/Checkbox/Unchecked2.js.map +1 -1
  58. package/dist/assets/icons/ClappingHands.js.map +1 -1
  59. package/dist/assets/icons/CloudWarning.js.map +1 -1
  60. package/dist/assets/icons/CommunicateFindings.js.map +1 -1
  61. package/dist/assets/icons/CreateVersion.js.map +1 -1
  62. package/dist/assets/icons/DNA_Two.js.map +1 -1
  63. package/dist/assets/icons/Data2.js.map +1 -1
  64. package/dist/assets/icons/DoubleQuotes.js.map +1 -1
  65. package/dist/assets/icons/EmailAddressAdornment.js.map +1 -1
  66. package/dist/assets/icons/FileWithShield.js.map +1 -1
  67. package/dist/assets/icons/FileWithShield2.js.map +1 -1
  68. package/dist/assets/icons/FrontHand.js.map +1 -1
  69. package/dist/assets/icons/HandWithMoney.js.map +1 -1
  70. package/dist/assets/icons/IconCopy.js.map +1 -1
  71. package/dist/assets/icons/IconMinus.js.map +1 -1
  72. package/dist/assets/icons/IconPlus.js.map +1 -1
  73. package/dist/assets/icons/Java.js.map +1 -1
  74. package/dist/assets/icons/MintDoi.js.map +1 -1
  75. package/dist/assets/icons/MultiFile.js.map +1 -1
  76. package/dist/assets/icons/MultiFile2.js.map +1 -1
  77. package/dist/assets/icons/NoData.js.map +1 -1
  78. package/dist/assets/icons/NoSearchResults.js.map +1 -1
  79. package/dist/assets/icons/ORCIDIcon.js.map +1 -1
  80. package/dist/assets/icons/OpenBook.js.map +1 -1
  81. package/dist/assets/icons/Podium.js.map +1 -1
  82. package/dist/assets/icons/Python.js.map +1 -1
  83. package/dist/assets/icons/QueryStructuredData.js.map +1 -1
  84. package/dist/assets/icons/RLogo.js.map +1 -1
  85. package/dist/assets/icons/RecordProvenance.js.map +1 -1
  86. package/dist/assets/icons/RosetteRibbon.js.map +1 -1
  87. package/dist/assets/icons/SageFullLogo.js.map +1 -1
  88. package/dist/assets/icons/SearchImage.js.map +1 -1
  89. package/dist/assets/icons/ShareYourResearch.js.map +1 -1
  90. package/dist/assets/icons/Sort.js.map +1 -1
  91. package/dist/assets/icons/StarTrophy.js.map +1 -1
  92. package/dist/assets/icons/SynapseFullLogo.js.map +1 -1
  93. package/dist/assets/icons/SynapseIconWhite.js.map +1 -1
  94. package/dist/assets/icons/SynapseLogoName.js.map +1 -1
  95. package/dist/assets/icons/TasksIcon.js.map +1 -1
  96. package/dist/assets/icons/Terminal.js.map +1 -1
  97. package/dist/assets/icons/ThreeStars.js.map +1 -1
  98. package/dist/assets/icons/UnpackagableFile.js.map +1 -1
  99. package/dist/assets/icons/UnpackagableFile2.js.map +1 -1
  100. package/dist/assets/icons/ValidatedProfile.js.map +1 -1
  101. package/dist/assets/icons/account-certified.js.map +1 -1
  102. package/dist/assets/icons/account-enabled-mfa.js.map +1 -1
  103. package/dist/assets/icons/account-validated.js.map +1 -1
  104. package/dist/assets/icons/bioChemicalPhysical.js.map +1 -1
  105. package/dist/assets/icons/chart2.js.map +1 -1
  106. package/dist/assets/icons/columns.js.map +1 -1
  107. package/dist/assets/icons/columnsDarkTheme.js.map +1 -1
  108. package/dist/assets/icons/computationalTool.js.map +1 -1
  109. package/dist/assets/icons/dataReuse.js.map +1 -1
  110. package/dist/assets/icons/emailAddressAdornment2.js.map +1 -1
  111. package/dist/assets/icons/emailWithNotification.js.map +1 -1
  112. package/dist/assets/icons/error_page/maintenance.js.map +1 -1
  113. package/dist/assets/icons/error_page/no-access.js.map +1 -1
  114. package/dist/assets/icons/error_page/unavailable.js.map +1 -1
  115. package/dist/assets/icons/file.js.map +1 -1
  116. package/dist/assets/icons/inSilicoModel.js.map +1 -1
  117. package/dist/assets/icons/institution.js.map +1 -1
  118. package/dist/assets/icons/json-form-tool-no-submissions.js.map +1 -1
  119. package/dist/assets/icons/modelSystem.js.map +1 -1
  120. package/dist/assets/icons/mouse.js.map +1 -1
  121. package/dist/assets/icons/organizations.js.map +1 -1
  122. package/dist/assets/icons/person.js.map +1 -1
  123. package/dist/assets/icons/spatialProfiling.js.map +1 -1
  124. package/dist/assets/icons/standardDataModel.js.map +1 -1
  125. package/dist/assets/icons/study-active.js.map +1 -1
  126. package/dist/assets/icons/study-complete.js.map +1 -1
  127. package/dist/assets/icons/subscribe_plus.js.map +1 -1
  128. package/dist/assets/icons/synapse-logo.js.map +1 -1
  129. package/dist/assets/icons/terms/CheckIcon.js.map +1 -1
  130. package/dist/assets/icons/translational.js.map +1 -1
  131. package/dist/assets/icons/tree_horizontal.js.map +1 -1
  132. package/dist/assets/illustrations/acknowledgement_statements_illustration.js.map +1 -1
  133. package/dist/assets/illustrations/challenges_illustration.js.map +1 -1
  134. package/dist/assets/illustrations/cohort_builder_illustration.js.map +1 -1
  135. package/dist/assets/illustrations/data_access_management_illustration.js.map +1 -1
  136. package/dist/assets/illustrations/datasets_illustration.js.map +1 -1
  137. package/dist/assets/illustrations/diagonalLinePattern.js.map +1 -1
  138. package/dist/assets/illustrations/discussions_illustration.js.map +1 -1
  139. package/dist/assets/illustrations/docker_illustration.js.map +1 -1
  140. package/dist/assets/illustrations/donation_illustration.js.map +1 -1
  141. package/dist/assets/illustrations/favorites_illustration.js.map +1 -1
  142. package/dist/assets/illustrations/files_illustration.js.map +1 -1
  143. package/dist/assets/illustrations/following_illustration.js.map +1 -1
  144. package/dist/assets/illustrations/index.js.map +1 -1
  145. package/dist/assets/illustrations/left_dot_blob_dark_illustration.js.map +1 -1
  146. package/dist/assets/illustrations/left_dot_blob_illustration.js.map +1 -1
  147. package/dist/assets/illustrations/projects_illustration.js.map +1 -1
  148. package/dist/assets/illustrations/right_dot_blob_dark_illustration.js.map +1 -1
  149. package/dist/assets/illustrations/right_dot_blob_illustration.js.map +1 -1
  150. package/dist/assets/illustrations/tables_illustration.js.map +1 -1
  151. package/dist/assets/illustrations/teams_illustration.js.map +1 -1
  152. package/dist/assets/illustrations/trash_can_illustration.js.map +1 -1
  153. package/dist/assets/illustrations/underconstruction_illustration.js.map +1 -1
  154. package/dist/assets/illustrations/wikis_illustration.js.map +1 -1
  155. package/dist/assets/logos/other/ad-workbench-logo.js.map +1 -1
  156. package/dist/assets/logos/other/cavatica-logo.js.map +1 -1
  157. package/dist/assets/logos/other/pluto-logo.js.map +1 -1
  158. package/dist/assets/logos/other/terra-logo.js.map +1 -1
  159. package/dist/assets/mui_components/AccessManagement.js.map +1 -1
  160. package/dist/assets/mui_components/AccountCertified.js.map +1 -1
  161. package/dist/assets/mui_components/AccountRegistered.js.map +1 -1
  162. package/dist/assets/mui_components/AccountValidated.js.map +1 -1
  163. package/dist/assets/mui_components/ActionKey.js.map +1 -1
  164. package/dist/assets/mui_components/BioChemicalPhysical.js.map +1 -1
  165. package/dist/assets/mui_components/Chromatin.js.map +1 -1
  166. package/dist/assets/mui_components/Clinical.js.map +1 -1
  167. package/dist/assets/mui_components/ComputationalTool.js.map +1 -1
  168. package/dist/assets/mui_components/Data.js.map +1 -1
  169. package/dist/assets/mui_components/DataLocked.js.map +1 -1
  170. package/dist/assets/mui_components/DataReuse.js.map +1 -1
  171. package/dist/assets/mui_components/Dataset.js.map +1 -1
  172. package/dist/assets/mui_components/DatasetCollection.js.map +1 -1
  173. package/dist/assets/mui_components/Docker.js.map +1 -1
  174. package/dist/assets/mui_components/GeneExpression.js.map +1 -1
  175. package/dist/assets/mui_components/GeneVariants.js.map +1 -1
  176. package/dist/assets/mui_components/HelpChatBubble.js.map +1 -1
  177. package/dist/assets/mui_components/Imaging.js.map +1 -1
  178. package/dist/assets/mui_components/InSilicoModel.js.map +1 -1
  179. package/dist/assets/mui_components/Kinomics.js.map +1 -1
  180. package/dist/assets/mui_components/LineGraph.js.map +1 -1
  181. package/dist/assets/mui_components/ModelSystem.js.map +1 -1
  182. package/dist/assets/mui_components/Other.js.map +1 -1
  183. package/dist/assets/mui_components/PackagableFile.js.map +1 -1
  184. package/dist/assets/mui_components/PackagableFile2.js.map +1 -1
  185. package/dist/assets/mui_components/Proteomics.js.map +1 -1
  186. package/dist/assets/mui_components/Rat.js.map +1 -1
  187. package/dist/assets/mui_components/SpatialProfiling.js.map +1 -1
  188. package/dist/assets/sustainability/darkDialPosition1.js.map +1 -1
  189. package/dist/assets/sustainability/darkDialPosition2.js.map +1 -1
  190. package/dist/assets/sustainability/darkDialPosition3.js.map +1 -1
  191. package/dist/assets/sustainability/darkDialPosition4.js.map +1 -1
  192. package/dist/assets/sustainability/dialPosition1.js.map +1 -1
  193. package/dist/assets/sustainability/dialPosition2.js.map +1 -1
  194. package/dist/assets/sustainability/dialPosition3.js.map +1 -1
  195. package/dist/assets/sustainability/dialPosition4.js.map +1 -1
  196. package/dist/assets/themed_icons/Active.js.map +1 -1
  197. package/dist/assets/themed_icons/Chart.js.map +1 -1
  198. package/dist/assets/themed_icons/Close.js.map +1 -1
  199. package/dist/assets/themed_icons/Collapse.js.map +1 -1
  200. package/dist/assets/themed_icons/Columns.js.map +1 -1
  201. package/dist/assets/themed_icons/ColumnsDark.js.map +1 -1
  202. package/dist/assets/themed_icons/Database.js.map +1 -1
  203. package/dist/assets/themed_icons/Download.js.map +1 -1
  204. package/dist/assets/themed_icons/Expand.js.map +1 -1
  205. package/dist/assets/themed_icons/Explore.js.map +1 -1
  206. package/dist/assets/themed_icons/ExternalLink.js.map +1 -1
  207. package/dist/assets/themed_icons/Filter.js.map +1 -1
  208. package/dist/assets/themed_icons/Program.js.map +1 -1
  209. package/dist/assets/themed_icons/Project.js.map +1 -1
  210. package/dist/assets/themed_icons/Publication.js.map +1 -1
  211. package/dist/assets/themed_icons/Search.js.map +1 -1
  212. package/dist/assets/themed_icons/Settings.js.map +1 -1
  213. package/dist/assets/themed_icons/SortDown.js.map +1 -1
  214. package/dist/assets/themed_icons/SortUp.js.map +1 -1
  215. package/dist/assets/themed_icons/SqlEditorIcon.js.map +1 -1
  216. package/dist/assets/themed_icons/Study.js.map +1 -1
  217. package/dist/assets/themed_icons/ToolClinical.js.map +1 -1
  218. package/dist/assets/themed_icons/ToolComputational.js.map +1 -1
  219. package/dist/assets/themed_icons/ToolExperimental.js.map +1 -1
  220. package/dist/assets/themed_icons/VerticalDots.js.map +1 -1
  221. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js.map +1 -1
  222. package/dist/components/AccessRequirement/EntityActionsRequired.js.map +1 -1
  223. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.js.map +1 -1
  224. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js.map +1 -1
  225. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js +10 -11
  226. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
  227. package/dist/components/AccessRequirementList/AccessRequirementList.js +73 -76
  228. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  229. package/dist/components/AccessRequirementList/AccessRequirementListItem.js.map +1 -1
  230. package/dist/components/AccessRequirementList/AccessRequirementListUtils.js.map +1 -1
  231. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/CancelRequestDataAccess.js.map +1 -1
  232. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
  233. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js.map +1 -1
  234. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DocumentTemplate.js.map +1 -1
  235. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js.map +1 -1
  236. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItem.js.map +1 -1
  237. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.js.map +1 -1
  238. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestDataAccessSuccess.js.map +1 -1
  239. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
  240. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.js.map +1 -1
  241. package/dist/components/AccessRequirementList/RequirementItem/AuthenticatedRequirement.js.map +1 -1
  242. package/dist/components/AccessRequirementList/RequirementItem/CertificationRequirement.js.map +1 -1
  243. package/dist/components/AccessRequirementList/RequirementItem/LockAccessRequirementItem.js.map +1 -1
  244. package/dist/components/AccessRequirementList/RequirementItem/RequirementItem.js.map +1 -1
  245. package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js.map +1 -1
  246. package/dist/components/AccessRequirementList/RequirementItem/TwoFactorAuthEnabledRequirement.js.map +1 -1
  247. package/dist/components/AccessRequirementList/RequirementItem/UnmanagedACTAccessRequirementItem.js.map +1 -1
  248. package/dist/components/AccessRequirementList/RequirementItem/ValidationRequirement.js.map +1 -1
  249. package/dist/components/AccessRequirementRelatedProjectsList/AccessRequirementRelatedProjectsList.js.map +1 -1
  250. package/dist/components/AccessTokenPage/AccessTokenCard/AccessTokenCard.js.map +1 -1
  251. package/dist/components/AccessTokenPage/AccessTokenPage.js.map +1 -1
  252. package/dist/components/AccessTokenPage/CreateAccessTokenModal.js.map +1 -1
  253. package/dist/components/AccountLevelBadge/AccountLevelBadge.js.map +1 -1
  254. package/dist/components/AccountLevelBadges/AccountLevelBadges.js.map +1 -1
  255. package/dist/components/AccountLevelBadges/useRevokeCertificationUI.js.map +1 -1
  256. package/dist/components/AcknowledgementsPage/AcknowledgementsDialog.js.map +1 -1
  257. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
  258. package/dist/components/AcknowledgementsPage/StudyAcknowledgement.js.map +1 -1
  259. package/dist/components/AcknowledgementsPage/StudyAcknowledgements.js.map +1 -1
  260. package/dist/components/AclEditor/AclEditor.js.map +1 -1
  261. package/dist/components/AclEditor/AclEditor.test-utils.js.map +1 -1
  262. package/dist/components/AclEditor/AclEditorSkeleton.js.map +1 -1
  263. package/dist/components/AclEditor/PermissionLevelMenu.js.map +1 -1
  264. package/dist/components/AclEditor/ReadOnlyPermissionLevel.js.map +1 -1
  265. package/dist/components/AclEditor/ResourceAccessAndUserGroupHeader.js +2 -4
  266. package/dist/components/AclEditor/ResourceAccessAndUserGroupHeader.js.map +1 -1
  267. package/dist/components/AclEditor/ResourceAccessItem.js.map +1 -1
  268. package/dist/components/AclEditor/useSortResourceAccessList.js.map +1 -1
  269. package/dist/components/AclEditor/useUpdateAcl.js.map +1 -1
  270. package/dist/components/AdaptiveTwoColumnLayout/AdaptiveTwoColumnLayout.js.map +1 -1
  271. package/dist/components/AddToDownloadListV2.js.map +1 -1
  272. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  273. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js.map +1 -1
  274. package/dist/components/Authentication/AuthenticationMethodSelection.js.map +1 -1
  275. package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
  276. package/dist/components/Authentication/LoginFlowBackButton.js.map +1 -1
  277. package/dist/components/Authentication/LoginForm.js.map +1 -1
  278. package/dist/components/Authentication/LoginMethod.js.map +1 -1
  279. package/dist/components/Authentication/LoginMethodButton.js.map +1 -1
  280. package/dist/components/Authentication/Logout.js.map +1 -1
  281. package/dist/components/Authentication/OneTimePasswordForm.js.map +1 -1
  282. package/dist/components/Authentication/PasswordField.js.map +1 -1
  283. package/dist/components/Authentication/RecoveryCodeForm.js.map +1 -1
  284. package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
  285. package/dist/components/Authentication/RegenerateBackupCodesWarning.js.map +1 -1
  286. package/dist/components/Authentication/Reset2FAWarning.js.map +1 -1
  287. package/dist/components/Authentication/StandaloneLoginForm.js.map +1 -1
  288. package/dist/components/Authentication/TOTPForm.js.map +1 -1
  289. package/dist/components/Authentication/TwoFactorAuthSettingsPanel.js.map +1 -1
  290. package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
  291. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  292. package/dist/components/Authentication/TwoFactorSecretDialog.js.map +1 -1
  293. package/dist/components/Authentication/UsernamePasswordForm.js.map +1 -1
  294. package/dist/components/BasePortalCard/BasePortalCard.js.map +1 -1
  295. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js.map +1 -1
  296. package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  297. package/dist/components/CTASectionWrapper/CTASectionWrapper.js.map +1 -1
  298. package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js.map +1 -1
  299. package/dist/components/CardContainer/CardContainer.js.map +1 -1
  300. package/dist/components/CardContainerLogic/CardContainerLogic.js.map +1 -1
  301. package/dist/components/CardDeck/CardDeck.Desktop.js.map +1 -1
  302. package/dist/components/CardDeck/CardDeck.Mobile.js.map +1 -1
  303. package/dist/components/CardDeck/CardDeck.js.map +1 -1
  304. package/dist/components/CardDeck/TableQueryCardDeck.js.map +1 -1
  305. package/dist/components/CardGridWithLinks/CardGridWithLinks.js.map +1 -1
  306. package/dist/components/CertificationQuiz/CertificationAnswer.js.map +1 -1
  307. package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
  308. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js.map +1 -1
  309. package/dist/components/ChallengeDetailPage/ChallengeDetailPage.js.map +1 -1
  310. package/dist/components/ChallengeRegisterButton/ChallengeRegisterButton.js.map +1 -1
  311. package/dist/components/ChallengeRequirementsModal/ChallengeRequirementsModal.js.map +1 -1
  312. package/dist/components/ChallengeSubmission/AddExternalRepo.js.map +1 -1
  313. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js.map +1 -1
  314. package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
  315. package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js +62 -64
  316. package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js.map +1 -1
  317. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
  318. package/dist/components/ChallengeSubmission/EvaluationQueueList.js.map +1 -1
  319. package/dist/components/ChallengeSubmission/SubmissionCommitList.js.map +1 -1
  320. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
  321. package/dist/components/ChallengeTeamWizard/ChallengeTeamSearch.js.map +1 -1
  322. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js.map +1 -1
  323. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js +96 -102
  324. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js.map +1 -1
  325. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
  326. package/dist/components/ChallengeTeamWizard/MembershipRequestForm.js.map +1 -1
  327. package/dist/components/ChallengeTeamWizard/OpenMembershipInvitation.js.map +1 -1
  328. package/dist/components/ChallengeTeamWizard/RegistrationSuccessful.js.map +1 -1
  329. package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js.map +1 -1
  330. package/dist/components/ChallengeTeamWizard/useCreateAndRegisterChallengeTeam.js.map +1 -1
  331. package/dist/components/ChangePassword/ChangePassword.js.map +1 -1
  332. package/dist/components/ChangePassword/ChangePasswordWithToken.js.map +1 -1
  333. package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
  334. package/dist/components/CitationPopover/CitationPopover.js.map +1 -1
  335. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  336. package/dist/components/CitationPopover/CitationPopoverUtils.js.map +1 -1
  337. package/dist/components/CitationPopover/useCitation.js.map +1 -1
  338. package/dist/components/ColorGradient/ColorGradient.js.map +1 -1
  339. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.js.map +1 -1
  340. package/dist/components/ColumnFilter/ColumnFilter.js.map +1 -1
  341. package/dist/components/ComponentCollapse.js.map +1 -1
  342. package/dist/components/ConfirmationDialog/ConfirmationDialog.js.map +1 -1
  343. package/dist/components/CookiesNotification/CookiePreferencesDialog.js.map +1 -1
  344. package/dist/components/CookiesNotification/CookiesNotification.d.ts.map +1 -1
  345. package/dist/components/CookiesNotification/CookiesNotification.js +9 -9
  346. package/dist/components/CookiesNotification/CookiesNotification.js.map +1 -1
  347. package/dist/components/CopyToClipboardIcon.js.map +1 -1
  348. package/dist/components/CopyToClipboardInput/CopyToClipboardInput.js.map +1 -1
  349. package/dist/components/CopyToClipboardString/CopyToClipboardString.js.map +1 -1
  350. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js.map +1 -1
  351. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizardUtils.js.map +1 -1
  352. package/dist/components/CreateProjectModal/CreateProjectModal.js.map +1 -1
  353. package/dist/components/CreateProjectModal/ProjectVisibilityRadioGroup.js.map +1 -1
  354. package/dist/components/CreateTableViewWizard/CreateTableViewWizard.js.map +1 -1
  355. package/dist/components/CreateTableViewWizard/CreateTableViewWizardUtils.js.map +1 -1
  356. package/dist/components/CreateTableViewWizard/TableNameForm.js.map +1 -1
  357. package/dist/components/CreateTableViewWizard/TableTypeSelection.js.map +1 -1
  358. package/dist/components/CreateTableViewWizard/ViewTypeSelection.js.map +1 -1
  359. package/dist/components/CrispChat/CrispChat.js.map +1 -1
  360. package/dist/components/DataExplorer/DataExplorer.js +28 -31
  361. package/dist/components/DataExplorer/DataExplorer.js.map +1 -1
  362. package/dist/components/DataGrid/DataGrid.js +72 -72
  363. package/dist/components/DataGrid/DataGrid.js.map +1 -1
  364. package/dist/components/DataGrid/DataGridTypes.js.map +1 -1
  365. package/dist/components/DataGrid/DataGridWebSocket.d.ts +2 -0
  366. package/dist/components/DataGrid/DataGridWebSocket.d.ts.map +1 -1
  367. package/dist/components/DataGrid/DataGridWebSocket.js +9 -10
  368. package/dist/components/DataGrid/DataGridWebSocket.js.map +1 -1
  369. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js.map +1 -1
  370. package/dist/components/DataGrid/StartGridSession.js.map +1 -1
  371. package/dist/components/DataGrid/SynapseGrid.d.ts +3 -1
  372. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  373. package/dist/components/DataGrid/SynapseGrid.js +219 -211
  374. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  375. package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
  376. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js.map +1 -1
  377. package/dist/components/DataGrid/columns/DateTimeColumn.js.map +1 -1
  378. package/dist/components/DataGrid/columns/GridAutocompleteChip.js.map +1 -1
  379. package/dist/components/DataGrid/columns/useGridAutocompleteState.js.map +1 -1
  380. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js.map +1 -1
  381. package/dist/components/DataGrid/components/ExportCsvFromGridButton.js.map +1 -1
  382. package/dist/components/DataGrid/components/GridMenuButton/GridMenuButton.js.map +1 -1
  383. package/dist/components/DataGrid/components/GridSessionSelectionField.js.map +1 -1
  384. package/dist/components/DataGrid/components/UploadCsvToGridButton.js.map +1 -1
  385. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js.map +1 -1
  386. package/dist/components/DataGrid/components/ValidationAlert.js.map +1 -1
  387. package/dist/components/DataGrid/components/contextMenu.js.map +1 -1
  388. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js +2 -0
  389. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js.map +1 -1
  390. package/dist/components/DataGrid/hooks/useExportDataGridToCsv.js.map +1 -1
  391. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.js.map +1 -1
  392. package/dist/components/DataGrid/hooks/useGridReplicaUsers.js.map +1 -1
  393. package/dist/components/DataGrid/hooks/useGridUndoRedo.js.map +1 -1
  394. package/dist/components/DataGrid/hooks/useRemoteSelections.js.map +1 -1
  395. package/dist/components/DataGrid/hooks/useStack.js.map +1 -1
  396. package/dist/components/DataGrid/useCRDTModelView.js.map +1 -1
  397. package/dist/components/DataGrid/useDataGridWebsocket.d.ts +2 -0
  398. package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
  399. package/dist/components/DataGrid/useDataGridWebsocket.js +12 -2
  400. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  401. package/dist/components/DataGrid/useInitializeGridConnection.js.map +1 -1
  402. package/dist/components/DataGrid/useMergeGridWithRecordSet.js.map +1 -1
  403. package/dist/components/DataGrid/useMergeGridWithSource.js.map +1 -1
  404. package/dist/components/DataGrid/useMergeGridWithTable.js.map +1 -1
  405. package/dist/components/DataGrid/utils/DataGridUtils.js.map +1 -1
  406. package/dist/components/DataGrid/utils/MessageCounter.js.map +1 -1
  407. package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
  408. package/dist/components/DataGrid/utils/calculateColumnWidth.js.map +1 -1
  409. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  410. package/dist/components/DataGrid/utils/computeReplicaSelectionModel.js.map +1 -1
  411. package/dist/components/DataGrid/utils/convertActionToModelChange.js.map +1 -1
  412. package/dist/components/DataGrid/utils/createTestModel.js.map +1 -1
  413. package/dist/components/DataGrid/utils/enrichRowsWithChangeInfo.js.map +1 -1
  414. package/dist/components/DataGrid/utils/extractColumnValidationMessages.js.map +1 -1
  415. package/dist/components/DataGrid/utils/getCellAuthorSid.js.map +1 -1
  416. package/dist/components/DataGrid/utils/getCellClassName.js.map +1 -1
  417. package/dist/components/DataGrid/utils/getChangeTooltipText.js.map +1 -1
  418. package/dist/components/DataGrid/utils/getEmptyValue.js.map +1 -1
  419. package/dist/components/DataGrid/utils/getReplicaCategory.js.map +1 -1
  420. package/dist/components/DataGrid/utils/isValidationUpToDateForRow.js.map +1 -1
  421. package/dist/components/DataGrid/utils/json-rx/JsonRx.js.map +1 -1
  422. package/dist/components/DataGrid/utils/json-rx/JsonRxMessage.js.map +1 -1
  423. package/dist/components/DataGrid/utils/json-rx/JsonRxNotification.js.map +1 -1
  424. package/dist/components/DataGrid/utils/json-rx/JsonRxRequest.js.map +1 -1
  425. package/dist/components/DataGrid/utils/json-rx/JsonRxRequestComplete.js.map +1 -1
  426. package/dist/components/DataGrid/utils/json-rx/JsonRxResponse.js.map +1 -1
  427. package/dist/components/DataGrid/utils/json-rx/JsonRxResponseComplete.js.map +1 -1
  428. package/dist/components/DataGrid/utils/logicalTimestampToString.js.map +1 -1
  429. package/dist/components/DataGrid/utils/mapOperationsToModelChanges.js.map +1 -1
  430. package/dist/components/DataGrid/utils/modelColsToGrid.js.map +1 -1
  431. package/dist/components/DataGrid/utils/modelRowsToGrid.js.map +1 -1
  432. package/dist/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType.js.map +1 -1
  433. package/dist/components/DataGrid/utils/replicaSelectionToGridSelection.js.map +1 -1
  434. package/dist/components/DataGrid/utils/schemaAwarePasteValue.js.map +1 -1
  435. package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
  436. package/dist/components/DatasetJsonLdScript.js.map +1 -1
  437. package/dist/components/DateTimePicker/DateTimePicker.js.map +1 -1
  438. package/dist/components/Dialog/ConfirmCloseWithoutSavingDialog.js.map +1 -1
  439. package/dist/components/DialogBase.js.map +1 -1
  440. package/dist/components/DirectDownload/DirectDownload.js.map +1 -1
  441. package/dist/components/DirectDownload/FileEntityDirectDownload.js.map +1 -1
  442. package/dist/components/DirectDownloadButton.js.map +1 -1
  443. package/dist/components/DownloadCart/ActionRequiredCard/ActionRequiredCard.js.map +1 -1
  444. package/dist/components/DownloadCart/ActionRequiredListItem.js.map +1 -1
  445. package/dist/components/DownloadCart/AvailableForDownloadTable.js.map +1 -1
  446. package/dist/components/DownloadCart/CreatePackageV2.js.map +1 -1
  447. package/dist/components/DownloadCart/DirectProgrammaticDownload.js.map +1 -1
  448. package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
  449. package/dist/components/DownloadCart/DownloadDetails.js.map +1 -1
  450. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  451. package/dist/components/DownloadCart/DownloadListActionsRequired.js.map +1 -1
  452. package/dist/components/DownloadCart/DownloadListStats.js.map +1 -1
  453. package/dist/components/DownloadCart/DownloadListTable.js.map +1 -1
  454. package/dist/components/DownloadCart/EnableTwoFaRequirementCard.js.map +1 -1
  455. package/dist/components/DownloadCart/MeetAccessRequirementCard.js.map +1 -1
  456. package/dist/components/DownloadCart/RequestDownloadCard.js.map +1 -1
  457. package/dist/components/DownloadCart/ShowDownloadV2.js.map +1 -1
  458. package/dist/components/DownloadCart/TableQueryActionsRequired.js.map +1 -1
  459. package/dist/components/DownloadCart/fileNameUtils.js.map +1 -1
  460. package/dist/components/DraggableDialog/DraggableDialog.js.map +1 -1
  461. package/dist/components/DropdownSelect/DropdownSelect.js.map +1 -1
  462. package/dist/components/DynamicForm/DynamicForm.js.map +1 -1
  463. package/dist/components/DynamicForm/DynamicFormModal.js.map +1 -1
  464. package/dist/components/Ecosystem/EcosystemCard.js.map +1 -1
  465. package/dist/components/Ecosystem/EcosystemLayout.js.map +1 -1
  466. package/dist/components/Ecosystem/EcosystemSkeleton.js.map +1 -1
  467. package/dist/components/Ecosystem/TableQueryEcosystem.js.map +1 -1
  468. package/dist/components/EntityAclEditor/CreateOrDeleteLocalSharingSettingsButton.js.map +1 -1
  469. package/dist/components/EntityAclEditor/EntityAclEditor.js.map +1 -1
  470. package/dist/components/EntityAclEditor/EntityAclEditorModal.js.map +1 -1
  471. package/dist/components/EntityAclEditor/InheritanceMessage.js.map +1 -1
  472. package/dist/components/EntityAclEditor/OpenData.js.map +1 -1
  473. package/dist/components/EntityAclEditor/useNotifyNewACLUsers.js.map +1 -1
  474. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +68 -70
  475. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  476. package/dist/components/EntityCitation/EntityCitation.js.map +1 -1
  477. package/dist/components/EntityCitation/EntityCitationUtils.js.map +1 -1
  478. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +32 -35
  479. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  480. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
  481. package/dist/components/EntityFinder/Breadcrumbs.js.map +1 -1
  482. package/dist/components/EntityFinder/EntityFinder.js +134 -136
  483. package/dist/components/EntityFinder/EntityFinder.js.map +1 -1
  484. package/dist/components/EntityFinder/EntityFinderModal.js.map +1 -1
  485. package/dist/components/EntityFinder/EntityIdTextField.js.map +1 -1
  486. package/dist/components/EntityFinder/VersionSelectionType.js.map +1 -1
  487. package/dist/components/EntityFinder/details/EntityDetailsList.js +20 -20
  488. package/dist/components/EntityFinder/details/EntityDetailsList.js.map +1 -1
  489. package/dist/components/EntityFinder/details/configurations/EntityChildrenDetails.js.map +1 -1
  490. package/dist/components/EntityFinder/details/configurations/FavoritesDetails.js.map +1 -1
  491. package/dist/components/EntityFinder/details/configurations/ProjectListDetails.js.map +1 -1
  492. package/dist/components/EntityFinder/details/configurations/ReferenceDetails.js.map +1 -1
  493. package/dist/components/EntityFinder/details/configurations/SearchDetails.js.map +1 -1
  494. package/dist/components/EntityFinder/details/view/DetailsView.js +67 -67
  495. package/dist/components/EntityFinder/details/view/DetailsView.js.map +1 -1
  496. package/dist/components/EntityFinder/details/view/VersionColumnHeader.js +1 -1
  497. package/dist/components/EntityFinder/details/view/VersionColumnHeader.js.map +1 -1
  498. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js.map +1 -1
  499. package/dist/components/EntityFinder/details/view/table/CreatedOnCell.js.map +1 -1
  500. package/dist/components/EntityFinder/details/view/table/DateCell.js.map +1 -1
  501. package/dist/components/EntityFinder/details/view/table/EntityBadgeIconsCell.js.map +1 -1
  502. package/dist/components/EntityFinder/details/view/table/EntityFinderCheckboxCell.js.map +1 -1
  503. package/dist/components/EntityFinder/details/view/table/EntityFinderVersionCell.js.map +1 -1
  504. package/dist/components/EntityFinder/details/view/table/EntityNameCell.js.map +1 -1
  505. package/dist/components/EntityFinder/details/view/table/EntityTypeCell.js.map +1 -1
  506. package/dist/components/EntityFinder/details/view/table/FileEntityDirectDownloadCell.js.map +1 -1
  507. package/dist/components/EntityFinder/details/view/table/FileEntityMD5Cell.js.map +1 -1
  508. package/dist/components/EntityFinder/details/view/table/FileEntitySizeCell.js.map +1 -1
  509. package/dist/components/EntityFinder/details/view/table/ModifiedByCell.js.map +1 -1
  510. package/dist/components/EntityFinder/details/view/table/ModifiedOnCell.js.map +1 -1
  511. package/dist/components/EntityFinder/details/view/table/ParentProjectCell.js.map +1 -1
  512. package/dist/components/EntityFinder/details/view/table/UserBadgeCell.js.map +1 -1
  513. package/dist/components/EntityFinder/tree/EntityTree.js +80 -80
  514. package/dist/components/EntityFinder/tree/EntityTree.js.map +1 -1
  515. package/dist/components/EntityFinder/tree/VirtualizedTree.js +31 -31
  516. package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
  517. package/dist/components/EntityFinder/useEntitySelection.js.map +1 -1
  518. package/dist/components/EntityForm/EntityForm.js.map +1 -1
  519. package/dist/components/EntityHeaderTable/DebouncedInput.js.map +1 -1
  520. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  521. package/dist/components/EntityHeaderTable/EntityHeaderTableCellRenderers.js.map +1 -1
  522. package/dist/components/EntityHeaderTable/Filter.js.map +1 -1
  523. package/dist/components/EntityHeaderTable/useEntityHeaderTableState.js.map +1 -1
  524. package/dist/components/EntityIcon.js.map +1 -1
  525. package/dist/components/EntityLink.js.map +1 -1
  526. package/dist/components/EntitySubjectsSelector/EntitySubjectsSelector.js.map +1 -1
  527. package/dist/components/EntityTreeTable/EntityTreeTable.js.map +1 -1
  528. package/dist/components/EntityTreeTable/components/AutoLoadMore.js.map +1 -1
  529. package/dist/components/EntityTreeTable/components/ColumnHeaders.js.map +1 -1
  530. package/dist/components/EntityTreeTable/components/EntityBadgeIconsCell.js.map +1 -1
  531. package/dist/components/EntityTreeTable/components/EntityNameCell.js.map +1 -1
  532. package/dist/components/EntityTreeTable/components/EntityTreeTableContext.js.map +1 -1
  533. package/dist/components/EntityTreeTable/components/EntityTreeTableRow.js.map +1 -1
  534. package/dist/components/EntityTreeTable/components/EntityTreeTableView.js.map +1 -1
  535. package/dist/components/EntityTreeTable/components/IdCell.js.map +1 -1
  536. package/dist/components/EntityTreeTable/components/IdColumnHeader.js.map +1 -1
  537. package/dist/components/EntityTreeTable/hooks/useEntityTreeState.js.map +1 -1
  538. package/dist/components/EntityTreeTable/hooks/useTableColumns.js.map +1 -1
  539. package/dist/components/EntityTreeTable/hooks/useTableData.js.map +1 -1
  540. package/dist/components/EntityTreeTable/hooks/useTreeOperationsWithDirectFetch.js.map +1 -1
  541. package/dist/components/EntityUpload/EntityUpload.js.map +1 -1
  542. package/dist/components/EntityUpload/EntityUploadModal.js +29 -31
  543. package/dist/components/EntityUpload/EntityUploadModal.js.map +1 -1
  544. package/dist/components/EntityUpload/EntityUploadPromptDialog.js.map +1 -1
  545. package/dist/components/EntityUpload/ExternalObjectStoreCredentialsForm.js.map +1 -1
  546. package/dist/components/EntityUpload/FileUploadProgress.js.map +1 -1
  547. package/dist/components/EntityUpload/LinkToURL.js.map +1 -1
  548. package/dist/components/EntityUpload/ProjectStorageLimitAlert.js.map +1 -1
  549. package/dist/components/EntityViewScopeEditor/EntityViewMaskEditor.js.map +1 -1
  550. package/dist/components/EntityViewScopeEditor/EntityViewScopeEditor.js.map +1 -1
  551. package/dist/components/EntityViewScopeEditor/EntityViewScopeEditorModal.js.map +1 -1
  552. package/dist/components/Evaluation/CreatedOnByUserDiv.js.map +1 -1
  553. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.js.map +1 -1
  554. package/dist/components/Evaluation/EvaluationCard.js.map +1 -1
  555. package/dist/components/Evaluation/EvaluationEditor.js.map +1 -1
  556. package/dist/components/Evaluation/EvaluationEditorPage.js.map +1 -1
  557. package/dist/components/Evaluation/EvaluationRoundEditor.js.map +1 -1
  558. package/dist/components/Evaluation/EvaluationRoundEditorDropdown.js.map +1 -1
  559. package/dist/components/Evaluation/EvaluationRoundEditorList.js.map +1 -1
  560. package/dist/components/Evaluation/input_models/models.js.map +1 -1
  561. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptions.js.map +1 -1
  562. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js.map +1 -1
  563. package/dist/components/EvaluationFinder/EvaluationFinder.js.map +1 -1
  564. package/dist/components/ExperimentalMode/ExperimentalMode.d.ts.map +1 -1
  565. package/dist/components/ExperimentalMode/ExperimentalMode.js +24 -30
  566. package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
  567. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
  568. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  569. package/dist/components/FeaturedDataTabs/FacetPlotsCardGrid.js.map +1 -1
  570. package/dist/components/FeaturedDataTabs/FeaturedDataPlots.js.map +1 -1
  571. package/dist/components/FeaturedDataTabs/FeaturedDataTabs.js.map +1 -1
  572. package/dist/components/FeaturedDataTabs/QueryPerFacetPlotsCard.js.map +1 -1
  573. package/dist/components/FeaturedDataTabs/SingleQueryFacetPlotsCards.js.map +1 -1
  574. package/dist/components/FeaturedResearch/FeaturedResearch.js +16 -18
  575. package/dist/components/FeaturedResearch/FeaturedResearch.js.map +1 -1
  576. package/dist/components/FeaturedToolsList/FeaturedToolCard.js.map +1 -1
  577. package/dist/components/FeaturedToolsList/FeaturedToolsList.js.map +1 -1
  578. package/dist/components/FilePreview/EntityPreview.js.map +1 -1
  579. package/dist/components/FilePreview/FileEntityPreview.js.map +1 -1
  580. package/dist/components/FilePreview/FileHandleContentRenderer.js.map +1 -1
  581. package/dist/components/FilePreview/HtmlPreview/HtmlPreview.js.map +1 -1
  582. package/dist/components/FilePreview/PdfPreview.js.map +1 -1
  583. package/dist/components/FilePreview/PreviewRendererType.js.map +1 -1
  584. package/dist/components/FilePreview/PreviewUtils.js.map +1 -1
  585. package/dist/components/FileUpload/FileUpload.js.map +1 -1
  586. package/dist/components/Forum/DiscussionReply.js.map +1 -1
  587. package/dist/components/Forum/DiscussionSearchResult.js.map +1 -1
  588. package/dist/components/Forum/DiscussionThread.js.map +1 -1
  589. package/dist/components/Forum/ForumPage.js.map +1 -1
  590. package/dist/components/Forum/ForumTable.js.map +1 -1
  591. package/dist/components/Forum/ForumThreadEditor.js.map +1 -1
  592. package/dist/components/Forum/SubscribersModal.js.map +1 -1
  593. package/dist/components/ForumSearch/ForumSearch.js.map +1 -1
  594. package/dist/components/FullTextSearch/FullTextSearch.js.map +1 -1
  595. package/dist/components/FullTextSearch/FullTextSearchUtils.js.map +1 -1
  596. package/dist/components/FullWidthAlert/FullWidthAlert.js.map +1 -1
  597. package/dist/components/GenericCard/BioregistryRules.js.map +1 -1
  598. package/dist/components/GenericCard/CardUtils.js.map +1 -1
  599. package/dist/components/GenericCard/CollapsibleDescription.js.map +1 -1
  600. package/dist/components/GenericCard/CroissantButton/CroissantButton.js.map +1 -1
  601. package/dist/components/GenericCard/GenericCard.js.map +1 -1
  602. package/dist/components/GenericCard/GenericCardActionButton.js.map +1 -1
  603. package/dist/components/GenericCard/GenericCardIcon.js.map +1 -1
  604. package/dist/components/GenericCard/GenericCardTitle.js.map +1 -1
  605. package/dist/components/GenericCard/LabelMaybeWithIcon.js.map +1 -1
  606. package/dist/components/GenericCard/Linkify.js.map +1 -1
  607. package/dist/components/GenericCard/PortalDOI/PortalDOI.js.map +1 -1
  608. package/dist/components/GenericCard/PortalDOI/PortalDOIUtils.js.map +1 -1
  609. package/dist/components/GenericCard/SynapseCardLabel.js +1 -1
  610. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  611. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  612. package/dist/components/GenericCard/useResolvedSynapseEntity.js.map +1 -1
  613. package/dist/components/Goals/Goals.Desktop.js.map +1 -1
  614. package/dist/components/Goals/Goals.Mobile.js.map +1 -1
  615. package/dist/components/Goals/Goals.js +25 -27
  616. package/dist/components/Goals/Goals.js.map +1 -1
  617. package/dist/components/GoalsV2/GoalsV2.Desktop.js.map +1 -1
  618. package/dist/components/GoalsV2/GoalsV2.Mobile.js.map +1 -1
  619. package/dist/components/GoalsV2/GoalsV2.js +14 -16
  620. package/dist/components/GoalsV2/GoalsV2.js.map +1 -1
  621. package/dist/components/GoalsV3/GoalsV3.Desktop.js.map +1 -1
  622. package/dist/components/GoalsV3/GoalsV3.Mobile.js.map +1 -1
  623. package/dist/components/GoalsV3/GoalsV3.js +14 -16
  624. package/dist/components/GoalsV3/GoalsV3.js.map +1 -1
  625. package/dist/components/GoogleAnalytics/GoogleAnalytics.js.map +1 -1
  626. package/dist/components/GoogleMap/GoogleMap.js.map +1 -1
  627. package/dist/components/GoogleMap/SynapseUserMarker.js.map +1 -1
  628. package/dist/components/HasAccess/AccessIcon.js +10 -10
  629. package/dist/components/HasAccess/AccessIcon.js.map +1 -1
  630. package/dist/components/HasAccess/HasAccessV2.js.map +1 -1
  631. package/dist/components/HasAccess/useHasAccess.js.map +1 -1
  632. package/dist/components/HeaderCard/HeaderCardV2.js.map +1 -1
  633. package/dist/components/HeaderCard.js.map +1 -1
  634. package/dist/components/HelpPopover/HelpPopover.js.map +1 -1
  635. package/dist/components/HexGrid/HexGrid.js.map +1 -1
  636. package/dist/components/IDUReport/IDUReport.js.map +1 -1
  637. package/dist/components/IDUReport/IDUReportSubmissionInfo.js.map +1 -1
  638. package/dist/components/Icon/Icon.js.map +1 -1
  639. package/dist/components/IconList.js.map +1 -1
  640. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  641. package/dist/components/IconSvgButton.js.map +1 -1
  642. package/dist/components/ImageCardGridWithLinks/ImageCardGridWithLinks.js +7 -9
  643. package/dist/components/ImageCardGridWithLinks/ImageCardGridWithLinks.js.map +1 -1
  644. package/dist/components/ImageFromSynapseTable.js.map +1 -1
  645. package/dist/components/InteractiveCopyIdsIcon.js.map +1 -1
  646. package/dist/components/JSONArrayEditor/JSONArrayEditor.js.map +1 -1
  647. package/dist/components/JSONArrayEditor/JSONArrayEditorModal.js.map +1 -1
  648. package/dist/components/JSONArrayEditor/useParseCsv.js.map +1 -1
  649. package/dist/components/JsonLdScript.js.map +1 -1
  650. package/dist/components/JsonSchemaForm/JsonSchemaForm.js.map +1 -1
  651. package/dist/components/JsonSchemaForm/templates/ArrayFieldDescriptionTemplate.js.map +1 -1
  652. package/dist/components/JsonSchemaForm/templates/ArrayFieldItemButtonTemplate.js.map +1 -1
  653. package/dist/components/JsonSchemaForm/templates/ArrayFieldItemTemplate.js.map +1 -1
  654. package/dist/components/JsonSchemaForm/templates/ArrayFieldTemplate.js.map +1 -1
  655. package/dist/components/JsonSchemaForm/templates/ArrayFieldTitleTemplate.js.map +1 -1
  656. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js.map +1 -1
  657. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js.map +1 -1
  658. package/dist/components/JsonSchemaForm/templates/DescriptionFieldTemplate.js.map +1 -1
  659. package/dist/components/JsonSchemaForm/templates/ErrorListTemplate.js.map +1 -1
  660. package/dist/components/JsonSchemaForm/templates/FieldDescriptionTable.js.map +1 -1
  661. package/dist/components/JsonSchemaForm/templates/FieldErrorTemplate.js.map +1 -1
  662. package/dist/components/JsonSchemaForm/templates/FieldTemplate.js.map +1 -1
  663. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  664. package/dist/components/JsonSchemaForm/widgets/BooleanWidget.js.map +1 -1
  665. package/dist/components/JsonSchemaForm/widgets/DateTimeWidget.js.map +1 -1
  666. package/dist/components/JsonSchemaForm/widgets/SelectWidget.js.map +1 -1
  667. package/dist/components/LoadingScreen/LoadingScreen.js.map +1 -1
  668. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.js.map +1 -1
  669. package/dist/components/Markdown/GovernanceMarkdownGithub.js.map +1 -1
  670. package/dist/components/Markdown/MarkdownCollapse.js.map +1 -1
  671. package/dist/components/Markdown/MarkdownEditor.js.map +1 -1
  672. package/dist/components/Markdown/MarkdownGithub.js.map +1 -1
  673. package/dist/components/Markdown/MarkdownPopover.js.map +1 -1
  674. package/dist/components/Markdown/MarkdownSynapse.d.ts.map +1 -1
  675. package/dist/components/Markdown/MarkdownSynapse.js +75 -106
  676. package/dist/components/Markdown/MarkdownSynapse.js.map +1 -1
  677. package/dist/components/Markdown/MarkdownUtils.d.ts +14 -4
  678. package/dist/components/Markdown/MarkdownUtils.d.ts.map +1 -1
  679. package/dist/components/Markdown/MarkdownUtils.js +38 -37
  680. package/dist/components/Markdown/MarkdownUtils.js.map +1 -1
  681. package/dist/components/Markdown/MarkdownWidget.js.map +1 -1
  682. package/dist/components/Markdown/SynapseWikiContext.js.map +1 -1
  683. package/dist/components/Markdown/UserMentionModal.js.map +1 -1
  684. package/dist/components/Markdown/widget/Bookmarks.js.map +1 -1
  685. package/dist/components/Markdown/widget/MarkdownButton.js.map +1 -1
  686. package/dist/components/Markdown/widget/MarkdownEntityPreview.js.map +1 -1
  687. package/dist/components/Markdown/widget/MarkdownIDUReport.js.map +1 -1
  688. package/dist/components/Markdown/widget/MarkdownProvenanceGraph.js.map +1 -1
  689. package/dist/components/Markdown/widget/MarkdownSynapseImage.js.map +1 -1
  690. package/dist/components/Markdown/widget/MarkdownSynapsePlot.js.map +1 -1
  691. package/dist/components/Markdown/widget/MarkdownSynapseTable.js.map +1 -1
  692. package/dist/components/Markdown/widget/MarkdownTableOfContents.js.map +1 -1
  693. package/dist/components/Markdown/widget/MarkdownUserOrTeamBadge.js.map +1 -1
  694. package/dist/components/Markdown/widget/MarkdownVideo.js.map +1 -1
  695. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  696. package/dist/components/ModalDownload/ModalDownload.FormSchema.js.map +1 -1
  697. package/dist/components/ModalDownload/ModalDownload.js.map +1 -1
  698. package/dist/components/MuiContainer.js.map +1 -1
  699. package/dist/components/OAuthClientAclEditor/OAuthAclEditorModal.js.map +1 -1
  700. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js.map +1 -1
  701. package/dist/components/OAuthClientManagement/CreateOAuthClient.js.map +1 -1
  702. package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
  703. package/dist/components/OrientationBanner/OrientationBanner.js.map +1 -1
  704. package/dist/components/PageProgress/PageProgress.js.map +1 -1
  705. package/dist/components/Plot/BarPlot.js.map +1 -1
  706. package/dist/components/Plot/DotPlot.js.map +1 -1
  707. package/dist/components/Plot/Plot.d.ts +12 -1
  708. package/dist/components/Plot/Plot.d.ts.map +1 -1
  709. package/dist/components/Plot/Plot.js +5 -1
  710. package/dist/components/Plot/Plot.js.map +1 -1
  711. package/dist/components/Plot/PlotPanelHeader.js.map +1 -1
  712. package/dist/components/Plot/SynapsePlot.js.map +1 -1
  713. package/dist/components/Plot/SynapseSankeyPlot.d.ts +12 -0
  714. package/dist/components/Plot/SynapseSankeyPlot.d.ts.map +1 -0
  715. package/dist/components/Plot/SynapseSankeyPlot.js +54 -0
  716. package/dist/components/Plot/SynapseSankeyPlot.js.map +1 -0
  717. package/dist/components/Plot/ThemesPlot.js.map +1 -1
  718. package/dist/components/Plot/UpsetPlot.js.map +1 -1
  719. package/dist/components/Plot/index.d.ts +3 -1
  720. package/dist/components/Plot/index.d.ts.map +1 -1
  721. package/dist/components/Plot/index.js +2 -1
  722. package/dist/components/Plot/safe-react-plotly-factory.js.map +1 -1
  723. package/dist/components/PortalAclEditor/PortalAclEditor.js.map +1 -1
  724. package/dist/components/PortalAclEditor/PortalAclEditorModal.js.map +1 -1
  725. package/dist/components/PortalFeatureHighlights/PortalFeatureHighlights.js.map +1 -1
  726. package/dist/components/PortalFeaturedPartners/PortalFeaturedPartners.js +4 -6
  727. package/dist/components/PortalFeaturedPartners/PortalFeaturedPartners.js.map +1 -1
  728. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.js.map +1 -1
  729. package/dist/components/PortalList/CreatePortalModal.js.map +1 -1
  730. package/dist/components/PortalList/PortalCard.js.map +1 -1
  731. package/dist/components/PortalList/PortalList.js.map +1 -1
  732. package/dist/components/PortalSectionHeader/PortalSectionHeader.js.map +1 -1
  733. package/dist/components/ProgrammaticInstructionsModal/ProgrammaticInstructionsModal.js +69 -69
  734. package/dist/components/ProgrammaticInstructionsModal/ProgrammaticInstructionsModal.js.map +1 -1
  735. package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js.map +1 -1
  736. package/dist/components/Programs/Programs.Desktop.js.map +1 -1
  737. package/dist/components/Programs/Programs.Mobile.js.map +1 -1
  738. package/dist/components/Programs/Programs.js.map +1 -1
  739. package/dist/components/ProjectStorage/ProjectDataAvailability.js.map +1 -1
  740. package/dist/components/ProvenanceGraph/ActivityNodeLabel.js.map +1 -1
  741. package/dist/components/ProvenanceGraph/EntityNodeLabel.js.map +1 -1
  742. package/dist/components/ProvenanceGraph/EntityPlaceholderNodeLabel.js.map +1 -1
  743. package/dist/components/ProvenanceGraph/ExpandGraphNodeLabel.js.map +1 -1
  744. package/dist/components/ProvenanceGraph/ExternalGraphNodeLabel.js.map +1 -1
  745. package/dist/components/ProvenanceGraph/ProvenanceEntityIcon.js.map +1 -1
  746. package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js.map +1 -1
  747. package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
  748. package/dist/components/ProvenanceGraph/ProvenanceGraphUtils.js.map +1 -1
  749. package/dist/components/ProvenanceGraph/ProvenanceUtils.js +13 -13
  750. package/dist/components/ProvenanceGraph/ProvenanceUtils.js.map +1 -1
  751. package/dist/components/ProvenanceGraph/UndefinedNodeLabel.js.map +1 -1
  752. package/dist/components/QueryContext/QueryContext.js.map +1 -1
  753. package/dist/components/QueryCount/QueryCount.js.map +1 -1
  754. package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
  755. package/dist/components/QuerySortSelector.js.map +1 -1
  756. package/dist/components/QueryVisualizationWrapper/NoContentPlaceholder.js.map +1 -1
  757. package/dist/components/QueryVisualizationWrapper/QueryVisualizationContext.js.map +1 -1
  758. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
  759. package/dist/components/QueryWrapper/QueryWrapper.js +27 -27
  760. package/dist/components/QueryWrapper/QueryWrapper.js.map +1 -1
  761. package/dist/components/QueryWrapper/QueryWrapperLoadingScreen.js.map +1 -1
  762. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js.map +1 -1
  763. package/dist/components/QueryWrapper/TableRowSelectionState.js.map +1 -1
  764. package/dist/components/QueryWrapper/ViewMoreQueryResultsButton.js.map +1 -1
  765. package/dist/components/QueryWrapper/generateEncodedPathAndQueryForSelectedFacetURL.js.map +1 -1
  766. package/dist/components/QueryWrapper/useComputeRowSelectionPrimaryKey.js.map +1 -1
  767. package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js.map +1 -1
  768. package/dist/components/QueryWrapper/useGetQueryMetadata.js.map +1 -1
  769. package/dist/components/QueryWrapper/useHasFacetedSelectColumn.js.map +1 -1
  770. package/dist/components/QueryWrapper/useOnQueryDataChange.js.map +1 -1
  771. package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
  772. package/dist/components/QueryWrapperPlotNav/LastUpdatedOn.js.map +1 -1
  773. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  774. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js.map +1 -1
  775. package/dist/components/QueryWrapperPlotNav/RowSetView.js.map +1 -1
  776. package/dist/components/QueryWrapperPlotNav/UseRowSet.js.map +1 -1
  777. package/dist/components/RORInstitutionField/RORInstitutionField.js.map +1 -1
  778. package/dist/components/RecentPublicationsGrid/RecentPublicationsGrid.js +6 -8
  779. package/dist/components/RecentPublicationsGrid/RecentPublicationsGrid.js.map +1 -1
  780. package/dist/components/RegisterPageLogoutPrompt/RegisterPageLogoutPrompt.js.map +1 -1
  781. package/dist/components/ReleaseCard/ReleaseCard.js.map +1 -1
  782. package/dist/components/ReleaseCard/ReleaseCardLarge.js.map +1 -1
  783. package/dist/components/ReleaseCard/ReleaseCardMedium.js.map +1 -1
  784. package/dist/components/ReleaseCard/ReleaseCardUtils.js.map +1 -1
  785. package/dist/components/RenderIfInView/RenderIfInView.js.map +1 -1
  786. package/dist/components/ResizableContainer/ResizableContainer.js.map +1 -1
  787. package/dist/components/ResizableContainer/hooks/useResizable.js.map +1 -1
  788. package/dist/components/Resources/Resources.Desktop.js.map +1 -1
  789. package/dist/components/Resources/Resources.Mobile.js.map +1 -1
  790. package/dist/components/Resources/Resources.js +8 -11
  791. package/dist/components/Resources/Resources.js.map +1 -1
  792. package/dist/components/RowDataTable/RowDataTable.js.map +1 -1
  793. package/dist/components/RowDataTable/RowDataTableWithQuery.js.map +1 -1
  794. package/dist/components/RssFeedCards/RssFeedCards.js.map +1 -1
  795. package/dist/components/SageResourcesPopover/SageResourcesPopover.js.map +1 -1
  796. package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.js.map +1 -1
  797. package/dist/components/SchemaDrivenAnnotationEditor/SchemaDrivenAnnotationEditor.js.map +1 -1
  798. package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.js.map +1 -1
  799. package/dist/components/SchemaDrivenAnnotationEditor/field/SynapseAnnotationsRJSFObjectField.js.map +1 -1
  800. package/dist/components/SchemaDrivenAnnotationEditor/template/AdditionalPropertyContext.js.map +1 -1
  801. package/dist/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.js.map +1 -1
  802. package/dist/components/SchemaDrivenAnnotationEditor/template/SynapseAnnotationsWrapIfAdditionalTemplate.js.map +1 -1
  803. package/dist/components/SchemaDrivenAnnotationEditor/widget/TextWidget.js.map +1 -1
  804. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
  805. package/dist/components/SearchQueryWrapper/SearchQueryWrapper.js.map +1 -1
  806. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.js.map +1 -1
  807. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  808. package/dist/components/SetBasicAccessRequirementFields/AccessRequirementTextInstructions.js.map +1 -1
  809. package/dist/components/SetBasicAccessRequirementFields/AccessRequirementWikiInstructions.js.map +1 -1
  810. package/dist/components/SetBasicAccessRequirementFields/AccessorRequirements.js.map +1 -1
  811. package/dist/components/SetBasicAccessRequirementFields/GovernanceUtils.js.map +1 -1
  812. package/dist/components/SetBasicAccessRequirementFields/SetBasicAccessRequirementFields.js.map +1 -1
  813. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
  814. package/dist/components/ShareThisPage/ShareThisPage.js.map +1 -1
  815. package/dist/components/ShowMore/ShowMore.js.map +1 -1
  816. package/dist/components/SignInButton.js.map +1 -1
  817. package/dist/components/SignInRequiredModal/SignInRequiredModal.js.map +1 -1
  818. package/dist/components/Skeleton/SkeletonButton.js.map +1 -1
  819. package/dist/components/Skeleton/SkeletonInlineBlock.js.map +1 -1
  820. package/dist/components/Skeleton/SkeletonParagraph.js.map +1 -1
  821. package/dist/components/Skeleton/SkeletonTable.js.map +1 -1
  822. package/dist/components/SmartLink/SmartButton.js.map +1 -1
  823. package/dist/components/SmartLink/SmartLink.js.map +1 -1
  824. package/dist/components/SmartLink/useSmartLink.js.map +1 -1
  825. package/dist/components/SourceAppImage.js.map +1 -1
  826. package/dist/components/SpinnerButton/SpinnerButton.js.map +1 -1
  827. package/dist/components/SqlDefinedTableEditor/SqlDefinedTableEditor.js.map +1 -1
  828. package/dist/components/SqlDefinedTableEditor/SqlDefinedTableEditorModal.js.map +1 -1
  829. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js.map +1 -1
  830. package/dist/components/StatisticsPlot.js.map +1 -1
  831. package/dist/components/StepperDialog/StepperDialog.js.map +1 -1
  832. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  833. package/dist/components/SubmissionViewScopeEditor/SubmissionViewScopeEditor.js.map +1 -1
  834. package/dist/components/SubmissionViewScopeEditor/SubmissionViewScopeEditorModal.js.map +1 -1
  835. package/dist/components/SubscriptionPage/ForumTopic.js.map +1 -1
  836. package/dist/components/SubscriptionPage/SubscriptionItem.js.map +1 -1
  837. package/dist/components/SubscriptionPage/SubscriptionPage.js.map +1 -1
  838. package/dist/components/SubscriptionPage/ThreadTopic.js.map +1 -1
  839. package/dist/components/SubscriptionPage/Topic.js.map +1 -1
  840. package/dist/components/SubsectionRowRenderer/SubsectionRowRenderer.js.map +1 -1
  841. package/dist/components/SustainabilityScorecard/Dial.js.map +1 -1
  842. package/dist/components/SustainabilityScorecard/DialLayout.js.map +1 -1
  843. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
  844. package/dist/components/SustainabilityScorecard/SustainabilityScorecardSummary.js.map +1 -1
  845. package/dist/components/SustainabilityScorecard/SustainabilityScorecardUtils.js.map +1 -1
  846. package/dist/components/SynapseChat/AccessLevelMenu.js.map +1 -1
  847. package/dist/components/SynapseChat/GridAgentChat.js.map +1 -1
  848. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  849. package/dist/components/SynapseChat/SynapseChatDialog.js.map +1 -1
  850. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  851. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  852. package/dist/components/SynapseChat/SynapsePortalChatDialog.js.map +1 -1
  853. package/dist/components/SynapseChat/extractMessageFromTraceEvent.js.map +1 -1
  854. package/dist/components/SynapseChat/useChatState.js.map +1 -1
  855. package/dist/components/SynapseFooter/SynapseFooter.js.map +1 -1
  856. package/dist/components/SynapseFooter/SynapseLinksColumn.js.map +1 -1
  857. package/dist/components/SynapseForm/DataDebug.js.map +1 -1
  858. package/dist/components/SynapseForm/Header.js.map +1 -1
  859. package/dist/components/SynapseForm/NavButtons.js.map +1 -1
  860. package/dist/components/SynapseForm/StepsSideNav.js.map +1 -1
  861. package/dist/components/SynapseForm/SummaryTable.js.map +1 -1
  862. package/dist/components/SynapseForm/SynapseForm.js.map +1 -1
  863. package/dist/components/SynapseForm/SynapseFormCheckboxWidget.js.map +1 -1
  864. package/dist/components/SynapseForm/SynapseFormCheckboxesWidget.js.map +1 -1
  865. package/dist/components/SynapseForm/SynapseFormRadioWidget.js.map +1 -1
  866. package/dist/components/SynapseForm/SynapseFormSubmissionGrid.js.map +1 -1
  867. package/dist/components/SynapseForm/SynapseFormUtils.js.map +1 -1
  868. package/dist/components/SynapseForm/SynapseFormWrapper.js.map +1 -1
  869. package/dist/components/SynapseForm/WarningDialog.js.map +1 -1
  870. package/dist/components/SynapseForm/types.js.map +1 -1
  871. package/dist/components/SynapseForm/useGetFormPropsFromSearchParams.js.map +1 -1
  872. package/dist/components/SynapseHomepageV2/FloatingBlobsBackground.js.map +1 -1
  873. package/dist/components/SynapseHomepageV2/HomepageStyles.js.map +1 -1
  874. package/dist/components/SynapseHomepageV2/SynapseByTheNumbers.js.map +1 -1
  875. package/dist/components/SynapseHomepageV2/SynapseByTheNumbersItem.js.map +1 -1
  876. package/dist/components/SynapseHomepageV2/SynapseFeatureItem.js.map +1 -1
  877. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js.map +1 -1
  878. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasets.js.map +1 -1
  879. package/dist/components/SynapseHomepageV2/SynapseFeatures.js.map +1 -1
  880. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js +18 -21
  881. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js.map +1 -1
  882. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js.map +1 -1
  883. package/dist/components/SynapseHomepageV2/SynapseHomepageSearch.js.map +1 -1
  884. package/dist/components/SynapseHomepageV2/SynapseHomepageV2.js.map +1 -1
  885. package/dist/components/SynapseHomepageV2/SynapseHotdrops.js.map +1 -1
  886. package/dist/components/SynapseHomepageV2/SynapseHotdropsItem.js.map +1 -1
  887. package/dist/components/SynapseHomepageV2/SynapseInAction.js.map +1 -1
  888. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
  889. package/dist/components/SynapseHomepageV2/SynapsePartners.js.map +1 -1
  890. package/dist/components/SynapseHomepageV2/SynapsePlan.js.map +1 -1
  891. package/dist/components/SynapseHomepageV2/SynapsePlanContent.js.map +1 -1
  892. package/dist/components/SynapseHomepageV2/SynapsePlans.js.map +1 -1
  893. package/dist/components/SynapseHomepageV2/SynapsePlansPage.js.map +1 -1
  894. package/dist/components/SynapseHomepageV2/SynapseSearchChips.js.map +1 -1
  895. package/dist/components/SynapseHomepageV2/SynapseTrendingProjects.js.map +1 -1
  896. package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js.map +1 -1
  897. package/dist/components/SynapseHomepageV2/WordPressNews.js.map +1 -1
  898. package/dist/components/SynapseHomepageV2/WordPressNewsItem.js.map +1 -1
  899. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +78 -78
  900. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  901. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  902. package/dist/components/SynapseSearchPageResults/HasAccessChip.js.map +1 -1
  903. package/dist/components/SynapseSearchPageResults/HighlightedTypography.js.map +1 -1
  904. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanel.js.map +1 -1
  905. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js.map +1 -1
  906. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.js.map +1 -1
  907. package/dist/components/SynapseSearchPageResults/SynapseSearchPage.js.map +1 -1
  908. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
  909. package/dist/components/SynapseSearchPageResults/SynapseSearchPageRouter.js.map +1 -1
  910. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js.map +1 -1
  911. package/dist/components/SynapseSearchPageResults/chipStyles.js.map +1 -1
  912. package/dist/components/SynapseTable/CustomControls/CustomControlButton.js.map +1 -1
  913. package/dist/components/SynapseTable/CustomControls/CustomControlPanel.js.map +1 -1
  914. package/dist/components/SynapseTable/CustomControls/CustomControls.js.map +1 -1
  915. package/dist/components/SynapseTable/EntityIDColumnCopyIcon.js.map +1 -1
  916. package/dist/components/SynapseTable/ExpandCollapseButton.js.map +1 -1
  917. package/dist/components/SynapseTable/ExpandableTableDataCell.js.map +1 -1
  918. package/dist/components/SynapseTable/NoContentAvailable.js.map +1 -1
  919. package/dist/components/SynapseTable/NoContentPlaceholderType.js.map +1 -1
  920. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +4 -4
  921. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  922. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js.map +1 -1
  923. package/dist/components/SynapseTable/SearchResultsNotFound.js.map +1 -1
  924. package/dist/components/SynapseTable/SearchV2.js.map +1 -1
  925. package/dist/components/SynapseTable/SqlEditor.js.map +1 -1
  926. package/dist/components/SynapseTable/SynapseTable.js.map +1 -1
  927. package/dist/components/SynapseTable/SynapseTableCell/EntityIdList.js.map +1 -1
  928. package/dist/components/SynapseTable/SynapseTableCell/EvaluationIdRenderer.js.map +1 -1
  929. package/dist/components/SynapseTable/SynapseTableCell/JSON/ComplexJSONRenderer.js.map +1 -1
  930. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONArrayRenderer.js.map +1 -1
  931. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONObjectRenderer.js.map +1 -1
  932. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONPrimitiveRenderer.js.map +1 -1
  933. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONRendererUtils.js.map +1 -1
  934. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONTableCellRenderer.js.map +1 -1
  935. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js.map +1 -1
  936. package/dist/components/SynapseTable/SynapseTableCell/UserIdList.js.map +1 -1
  937. package/dist/components/SynapseTable/SynapseTableConstants.js.map +1 -1
  938. package/dist/components/SynapseTable/SynapseTableContext.js.map +1 -1
  939. package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
  940. package/dist/components/SynapseTable/SynapseTableUtils.js.map +1 -1
  941. package/dist/components/SynapseTable/TableIsEmpty.js.map +1 -1
  942. package/dist/components/SynapseTable/TablePagination.js.map +1 -1
  943. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
  944. package/dist/components/SynapseTable/TopLevelControls/TopLevelControlsUtils.js.map +1 -1
  945. package/dist/components/SynapseTable/datasets/DatasetEditorCheckboxCell.js.map +1 -1
  946. package/dist/components/SynapseTable/datasets/DatasetEditorUtils.js.map +1 -1
  947. package/dist/components/SynapseTable/datasets/DatasetEditorVersionCell.js.map +1 -1
  948. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +131 -133
  949. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  950. package/dist/components/SynapseTable/datasets/EntityFetchErrorCell.js.map +1 -1
  951. package/dist/components/SynapseTable/export/ADDiscoveryPortalInstructions.js.map +1 -1
  952. package/dist/components/SynapseTable/export/ExportToAnalysisPlatformDialog.js +48 -51
  953. package/dist/components/SynapseTable/export/ExportToAnalysisPlatformDialog.js.map +1 -1
  954. package/dist/components/SynapseTable/export/ExternalAnalysisPlatformInstructions.js.map +1 -1
  955. package/dist/components/SynapseTable/export/ExternalAnalysisPlatformsConstants.js.map +1 -1
  956. package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js.map +1 -1
  957. package/dist/components/SynapseTable/export/ExternalPlatformDisclaimer.js.map +1 -1
  958. package/dist/components/SynapseTable/table-top/ColumnSelection.js.map +1 -1
  959. package/dist/components/SynapseTable/table-top/DownloadLoginModal.js.map +1 -1
  960. package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
  961. package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
  962. package/dist/components/SynapseTable/useTableSort.js.map +1 -1
  963. package/dist/components/SystemUseNotification/SystemUseNotification.js.map +1 -1
  964. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +4 -4
  965. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  966. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/DefaultValueField.js.map +1 -1
  967. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/FieldWithRecommendedMinimum.js.map +1 -1
  968. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/MultiValueField.js.map +1 -1
  969. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
  970. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditor.js.map +1 -1
  971. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorTestUtils.js.map +1 -1
  972. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  973. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +9 -9
  974. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  975. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js.map +1 -1
  976. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.js.map +1 -1
  977. package/dist/components/TableColumnSchemaEditor/Validators/BooleanSchema.js.map +1 -1
  978. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.js.map +1 -1
  979. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js.map +1 -1
  980. package/dist/components/TableColumnSchemaEditor/Validators/DefaultValueValidator.js.map +1 -1
  981. package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.js.map +1 -1
  982. package/dist/components/TableColumnSchemaEditor/Validators/EntityIdSchema.js.map +1 -1
  983. package/dist/components/TableColumnSchemaEditor/Validators/EnumValuesValidator.js.map +1 -1
  984. package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.js.map +1 -1
  985. package/dist/components/TableColumnSchemaEditor/Validators/OptionalStringSchema.js.map +1 -1
  986. package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.js.map +1 -1
  987. package/dist/components/TableFeedCards/TableFeedCards.js.map +1 -1
  988. package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
  989. package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js.map +1 -1
  990. package/dist/components/TanStackTable/StyledTanStackTable.js.map +1 -1
  991. package/dist/components/TanStackTable/StyledVirtualTanStackTable.js.map +1 -1
  992. package/dist/components/TanStackTable/TableBody.js.map +1 -1
  993. package/dist/components/TanStackTable/TableCellRenderer.js.map +1 -1
  994. package/dist/components/TanStackTable/TanStackTableUtils.js.map +1 -1
  995. package/dist/components/TeamBadge.js.map +1 -1
  996. package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js.map +1 -1
  997. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
  998. package/dist/components/TemplateComponent.js.map +1 -1
  999. package/dist/components/TemporaryBanner/TemporaryBanner.js.map +1 -1
  1000. package/dist/components/TermsAndConditions/TermsAndConditions.js.map +1 -1
  1001. package/dist/components/TermsAndConditions/TermsAndConditionsItem.js.map +1 -1
  1002. package/dist/components/TextField/TextField.js.map +1 -1
  1003. package/dist/components/TextField/TextFieldWithWordLimit.js.map +1 -1
  1004. package/dist/components/TextToComponentCollapse.js.map +1 -1
  1005. package/dist/components/ThemeGallery/ThemeGallery.js.map +1 -1
  1006. package/dist/components/TimelinePlot/TimelineLegendItem.js.map +1 -1
  1007. package/dist/components/TimelinePlot/TimelinePhase.js.map +1 -1
  1008. package/dist/components/TimelinePlot/TimelinePlot.js.map +1 -1
  1009. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js.map +1 -1
  1010. package/dist/components/TimelinePlot/phasesQueryResponseData.js.map +1 -1
  1011. package/dist/components/ToastMessage/ToastMessage.js.map +1 -1
  1012. package/dist/components/TotalQueryResults.js.map +1 -1
  1013. package/dist/components/UserCard/Avatar.js.map +1 -1
  1014. package/dist/components/UserCard/UserBadge.js.map +1 -1
  1015. package/dist/components/UserCard/UserCard.js.map +1 -1
  1016. package/dist/components/UserCard/UserCardContextMenu.js.map +1 -1
  1017. package/dist/components/UserCard/UserCardLarge.js.map +1 -1
  1018. package/dist/components/UserCard/UserCardMedium.js.map +1 -1
  1019. package/dist/components/UserCardList/UserCardList.js.map +1 -1
  1020. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Desktop.js.map +1 -1
  1021. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Mobile.js.map +1 -1
  1022. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.js.map +1 -1
  1023. package/dist/components/UserCardList/UserCardListRotate.js.map +1 -1
  1024. package/dist/components/UserOrTeamBadge/UserOrTeamBadge.js.map +1 -1
  1025. package/dist/components/UserOrTeamBadge/useUserOrTeam.js.map +1 -1
  1026. package/dist/components/UserProfileLinks/UserChallenges.js.map +1 -1
  1027. package/dist/components/UserProfileLinks/UserProfileLinks.js.map +1 -1
  1028. package/dist/components/UserProfileLinks/UserProjects.js.map +1 -1
  1029. package/dist/components/UserProfileLinks/UserTeams.js.map +1 -1
  1030. package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -1
  1031. package/dist/components/Webhook/CreateWebhookModal.js.map +1 -1
  1032. package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
  1033. package/dist/components/Webhook/WebhookVerificationDialog.js.map +1 -1
  1034. package/dist/components/WikiMarkdownEditor/WikiMarkdownEditor.js.map +1 -1
  1035. package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js.map +1 -1
  1036. package/dist/components/WizardChoiceButton/WizardChoiceButton.js.map +1 -1
  1037. package/dist/components/WizardChoiceButton/WizardChoiceButtonDescription.js.map +1 -1
  1038. package/dist/components/WizardChoiceButton/WizardChoiceButtonGroup.js.map +1 -1
  1039. package/dist/components/WordPress/WordPressLatestPostChip.js.map +1 -1
  1040. package/dist/components/WordPress/useWordPressCategories.js.map +1 -1
  1041. package/dist/components/WordPress/useWordPressPosts.js.map +1 -1
  1042. package/dist/components/dataaccess/AccessApprovalsTable.js.map +1 -1
  1043. package/dist/components/dataaccess/AccessHistoryDashboard.js.map +1 -1
  1044. package/dist/components/dataaccess/AccessRequestSubmissionTable.js.map +1 -1
  1045. package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
  1046. package/dist/components/dataaccess/AccessRequirementSearchBox/AccessRequirementSearchBox.js.map +1 -1
  1047. package/dist/components/dataaccess/AccessRequirementTable.js.map +1 -1
  1048. package/dist/components/dataaccess/AccessSubmissionDashboard.js.map +1 -1
  1049. package/dist/components/dataaccess/RejectDataAccessRequestModal.js.map +1 -1
  1050. package/dist/components/dataaccess/RejectProfileValidationRequestModal.js.map +1 -1
  1051. package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
  1052. package/dist/components/dataaccess/SubmissionPage/ApproveSubmissionConfirmationModal.js.map +1 -1
  1053. package/dist/components/dataaccess/SubmissionPage/CancelDataAccessRequestConfirmationModal.js.map +1 -1
  1054. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js.map +1 -1
  1055. package/dist/components/dataaccess/UseAccessRequirementTable.js.map +1 -1
  1056. package/dist/components/dataaccess/UserAccessRequestHistory/SubmissionSortStateTranslator.js.map +1 -1
  1057. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js.map +1 -1
  1058. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js.map +1 -1
  1059. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.js.map +1 -1
  1060. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  1061. package/dist/components/doi/DoiFormSchemas.js.map +1 -1
  1062. package/dist/components/doi/PrivateEntityDoiWarning.js.map +1 -1
  1063. package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js.map +1 -1
  1064. package/dist/components/download_list/DownloadConfirmationUI.js +30 -32
  1065. package/dist/components/download_list/DownloadConfirmationUI.js.map +1 -1
  1066. package/dist/components/download_list/DownloadConfirmationUtils.js.map +1 -1
  1067. package/dist/components/download_list/DownloadDetails.js.map +1 -1
  1068. package/dist/components/download_list/index.js.map +1 -1
  1069. package/dist/components/entity/metadata/AnnotationsTable.js.map +1 -1
  1070. package/dist/components/entity/metadata/EntityAnnotationKey.js.map +1 -1
  1071. package/dist/components/entity/metadata/EntityModal.js.map +1 -1
  1072. package/dist/components/entity/metadata/MetadataTable.js.map +1 -1
  1073. package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
  1074. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  1075. package/dist/components/entity/page/breadcrumbs/EntityPageBreadcrumbs.js.map +1 -1
  1076. package/dist/components/entity/page/title_bar/CitationsDialog.js.map +1 -1
  1077. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js.map +1 -1
  1078. package/dist/components/entity/page/title_bar/EntityTitleBarVersionInfo.js.map +1 -1
  1079. package/dist/components/entity/page/title_bar/TitleBarProperties.js.map +1 -1
  1080. package/dist/components/entity/page/title_bar/useDataCiteUsage.js.map +1 -1
  1081. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
  1082. package/dist/components/entity/page/title_bar/useGetMentions.js.map +1 -1
  1083. package/dist/components/error/ErrorBanner.js.map +1 -1
  1084. package/dist/components/error/ErrorChip.js.map +1 -1
  1085. package/dist/components/error/ErrorPage.js +24 -24
  1086. package/dist/components/error/ErrorPage.js.map +1 -1
  1087. package/dist/components/error/RouteErrorBoundary.js.map +1 -1
  1088. package/dist/components/error/SendMessageToEntityOwnerDialog.js.map +1 -1
  1089. package/dist/components/error/SynapseObjectDOIInfo.js.map +1 -1
  1090. package/dist/components/favorites/FavoriteButton.js.map +1 -1
  1091. package/dist/components/favorites/FavoritesPage.js.map +1 -1
  1092. package/dist/components/file/upload/BasicFileHandleUpload.js.map +1 -1
  1093. package/dist/components/file/upload/MultiFileUploadProgress.js.map +1 -1
  1094. package/dist/components/file/upload/UploadFilePanel.js.map +1 -1
  1095. package/dist/components/form/RadioGroupWithOtherString.js.map +1 -1
  1096. package/dist/components/home_page/ExpandableContent.js.map +1 -1
  1097. package/dist/components/index.js +48 -47
  1098. package/dist/components/layout/InfiniteTableLayout.js.map +1 -1
  1099. package/dist/components/layout/SWCHeader.js.map +1 -1
  1100. package/dist/components/layout/SWCPageLayout.js.map +1 -1
  1101. package/dist/components/menu/ComplexMenu.js.map +1 -1
  1102. package/dist/components/menu/DropdownMenu.js.map +1 -1
  1103. package/dist/components/row_renderers/Dataset.js.map +1 -1
  1104. package/dist/components/row_renderers/Funder.js.map +1 -1
  1105. package/dist/components/row_renderers/ObservationCard.js.map +1 -1
  1106. package/dist/components/row_renderers/utils/CardFooter.js.map +1 -1
  1107. package/dist/components/row_renderers/utils/ChipContainer.js.map +1 -1
  1108. package/dist/components/styled/HoverPopover.js.map +1 -1
  1109. package/dist/components/styled/InlineBadge.js.map +1 -1
  1110. package/dist/components/styled/InputSizedButton.js.map +1 -1
  1111. package/dist/components/styled/LargeButton.js.map +1 -1
  1112. package/dist/components/styled/LeftRightPanel.js.map +1 -1
  1113. package/dist/components/styled/LightTooltip.js.map +1 -1
  1114. package/dist/components/styled/StyledFormControl.js.map +1 -1
  1115. package/dist/components/styled/StyledPopover.js.map +1 -1
  1116. package/dist/components/styled/StyledTableContainer.js.map +1 -1
  1117. package/dist/components/styled/WideButton.js.map +1 -1
  1118. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js +39 -42
  1119. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js.map +1 -1
  1120. package/dist/components/table/CsvPreview/CsvPreview.js.map +1 -1
  1121. package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
  1122. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js.map +1 -1
  1123. package/dist/components/table/CsvPreview/CsvUploadPreviewContent.js.map +1 -1
  1124. package/dist/components/table/CsvPreview/UpdateTableWithCsvDialog.js.map +1 -1
  1125. package/dist/components/table/CsvPreview/useCreateTableFromCsv.js.map +1 -1
  1126. package/dist/components/table/CsvPreview/useCsvUploadPreview.js +11 -11
  1127. package/dist/components/table/CsvPreview/useCsvUploadPreview.js.map +1 -1
  1128. package/dist/components/table/CsvPreview/useUploadCsvToExistingTable.js.map +1 -1
  1129. package/dist/components/table/CsvTableDescriptorForm/CsvTableDescriptorForm.js.map +1 -1
  1130. package/dist/components/trash/TrashCanList.js.map +1 -1
  1131. package/dist/components/utils/Blocker.js.map +1 -1
  1132. package/dist/components/utils/ConditionalWrapper.js.map +1 -1
  1133. package/dist/components/utils/VisibilityObserver.js.map +1 -1
  1134. package/dist/components/widgets/ElementWithTooltip.js.map +1 -1
  1135. package/dist/components/widgets/EntityColumnImage.js.map +1 -1
  1136. package/dist/components/widgets/FileHandleLink.js.map +1 -1
  1137. package/dist/components/widgets/ImageFileHandle.js.map +1 -1
  1138. package/dist/components/widgets/LoginAwareButton.js.map +1 -1
  1139. package/dist/components/widgets/Range.js.map +1 -1
  1140. package/dist/components/widgets/RangeSlider/RangeSlider.js.map +1 -1
  1141. package/dist/components/widgets/SynapseImage.js.map +1 -1
  1142. package/dist/components/widgets/SynapseVideo.js.map +1 -1
  1143. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  1144. package/dist/components/widgets/facet-nav/FacetPlotLegendList.js.map +1 -1
  1145. package/dist/components/widgets/facet-nav/FacetPlotLegendTable.js.map +1 -1
  1146. package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.js.map +1 -1
  1147. package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
  1148. package/dist/components/widgets/facet-nav/PlotsContainerSkeleton.js.map +1 -1
  1149. package/dist/components/widgets/facet-nav/SelectionCriteriaPill.js.map +1 -1
  1150. package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js.map +1 -1
  1151. package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
  1152. package/dist/components/widgets/query-filter/CombinedRangeFacetFilter.js.map +1 -1
  1153. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
  1154. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterDropdown.js.map +1 -1
  1155. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js.map +1 -1
  1156. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterSkeleton.js.map +1 -1
  1157. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js.map +1 -1
  1158. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.js.map +1 -1
  1159. package/dist/components/widgets/query-filter/FacetChip.js.map +1 -1
  1160. package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
  1161. package/dist/components/widgets/query-filter/FacetFilterHeader.js.map +1 -1
  1162. package/dist/components/widgets/query-filter/FacetFilterSkeleton.js.map +1 -1
  1163. package/dist/components/widgets/query-filter/FacetFilterUtils.js.map +1 -1
  1164. package/dist/components/widgets/query-filter/JsonColumnFacetFilters.js.map +1 -1
  1165. package/dist/components/widgets/query-filter/RangeFacetFilter.js +3 -3
  1166. package/dist/components/widgets/query-filter/RangeFacetFilter.js.map +1 -1
  1167. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js +41 -41
  1168. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js.map +1 -1
  1169. package/dist/features/curator/GridPage/GridPage.js.map +1 -1
  1170. package/dist/features/curator/GridPage/components/GridPageRouter.js.map +1 -1
  1171. package/dist/features/curator/GridPage/components/GridPageTitle.js.map +1 -1
  1172. package/dist/features/curator/GridPage/components/UpdateGridPageSearchParamsForm.js.map +1 -1
  1173. package/dist/features/curator/dashboard/CuratorDashboard.js.map +1 -1
  1174. package/dist/features/curator/dashboard/components/CurationTaskCard.js.map +1 -1
  1175. package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -1
  1176. package/dist/features/curator/dashboard/components/UserOrTeamChip.js.map +1 -1
  1177. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts +5 -0
  1178. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts.map +1 -1
  1179. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +227 -181
  1180. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
  1181. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts.map +1 -1
  1182. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +3 -0
  1183. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  1184. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
  1185. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
  1186. package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.js.map +1 -1
  1187. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js.map +1 -1
  1188. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.js.map +1 -1
  1189. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.d.ts.map +1 -1
  1190. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +1 -1
  1191. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js.map +1 -1
  1192. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js.map +1 -1
  1193. package/dist/features/entity/metadata-task/utils/constants.d.ts +5 -0
  1194. package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -1
  1195. package/dist/features/entity/metadata-task/utils/constants.js +2 -2
  1196. package/dist/features/entity/metadata-task/utils/constants.js.map +1 -1
  1197. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.js.map +1 -1
  1198. package/dist/features/entity/metadata-task/utils/getGridSourceIdForTask.js.map +1 -1
  1199. package/dist/features/entity/metadata-task/utils/getLatestGridSessionForSource.js.map +1 -1
  1200. package/dist/features/entity/metadata-task/utils/taskHasAssignee.js.map +1 -1
  1201. package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js.map +1 -1
  1202. package/dist/index.js +54 -53
  1203. package/dist/index.js.map +1 -1
  1204. package/dist/mocks/MockAccessApprovals.js.map +1 -1
  1205. package/dist/mocks/MockSynapseContext.js.map +1 -1
  1206. package/dist/mocks/accessRequirement/mockAccessRequirementAcls.js.map +1 -1
  1207. package/dist/mocks/accessRequirement/mockAccessRequirements.js.map +1 -1
  1208. package/dist/mocks/applicationSessionContext/MockApplicationSessionContext.js.map +1 -1
  1209. package/dist/mocks/challenge/mockChallenge.js.map +1 -1
  1210. package/dist/mocks/chat/mockChat.js.map +1 -1
  1211. package/dist/mocks/curation/mockCurationTask.js.map +1 -1
  1212. package/dist/mocks/dataaccess/MockDataAccessRequest.js.map +1 -1
  1213. package/dist/mocks/dataaccess/MockResearchProject.js.map +1 -1
  1214. package/dist/mocks/dataaccess/MockSubmission.js.map +1 -1
  1215. package/dist/mocks/dataaccess/mockAccessRequest.js.map +1 -1
  1216. package/dist/mocks/discussion/mock_discussion.js.map +1 -1
  1217. package/dist/mocks/doi/MockDoi.js.map +1 -1
  1218. package/dist/mocks/entity/index.js.map +1 -1
  1219. package/dist/mocks/entity/mockDataset.js.map +1 -1
  1220. package/dist/mocks/entity/mockDatasetCollection.js.map +1 -1
  1221. package/dist/mocks/entity/mockEntity.js.map +1 -1
  1222. package/dist/mocks/entity/mockEvaluationQueue.js.map +1 -1
  1223. package/dist/mocks/entity/mockFileEntity.js.map +1 -1
  1224. package/dist/mocks/entity/mockFileEntityACLVariants.js.map +1 -1
  1225. package/dist/mocks/entity/mockFileView.js.map +1 -1
  1226. package/dist/mocks/entity/mockGeneratedEntityData.js.map +1 -1
  1227. package/dist/mocks/entity/mockProject.js.map +1 -1
  1228. package/dist/mocks/entity/mockProjectView.js.map +1 -1
  1229. package/dist/mocks/entity/mockReleaseCardsTable.js.map +1 -1
  1230. package/dist/mocks/entity/mockRootEntity.js.map +1 -1
  1231. package/dist/mocks/entity/mockTableEntity.js.map +1 -1
  1232. package/dist/mocks/faker/fakerUtils.js.map +1 -1
  1233. package/dist/mocks/faker/generateDiscussion.js.map +1 -1
  1234. package/dist/mocks/faker/generateEvaluation.js.map +1 -1
  1235. package/dist/mocks/faker/generateFakeEntity.js.map +1 -1
  1236. package/dist/mocks/faker/generateSubscription.js.map +1 -1
  1237. package/dist/mocks/mockAnnotationColumns.js.map +1 -1
  1238. package/dist/mocks/mockCertificationQuiz.js.map +1 -1
  1239. package/dist/mocks/mockDataCatalogQuery.js.map +1 -1
  1240. package/dist/mocks/mockFileViewQuery.js.map +1 -1
  1241. package/dist/mocks/mockOAuthClientAcls.js.map +1 -1
  1242. package/dist/mocks/mockQueryResponseData.js.map +1 -1
  1243. package/dist/mocks/mockQueryResponseDataWithManyEnumFacets.js.map +1 -1
  1244. package/dist/mocks/mockSchema.js.map +1 -1
  1245. package/dist/mocks/mockSearchQueryData.js.map +1 -1
  1246. package/dist/mocks/mockShortIo.js.map +1 -1
  1247. package/dist/mocks/mockSourceAppConfigQuery.js.map +1 -1
  1248. package/dist/mocks/mockSubscription.js.map +1 -1
  1249. package/dist/mocks/mockWiki.js.map +1 -1
  1250. package/dist/mocks/mockWikiPageKey.js.map +1 -1
  1251. package/dist/mocks/mock_drug_tool_data.js.map +1 -1
  1252. package/dist/mocks/mock_file_handle.js.map +1 -1
  1253. package/dist/mocks/mock_file_statistics.js.map +1 -1
  1254. package/dist/mocks/mock_has_access_data.js.map +1 -1
  1255. package/dist/mocks/mock_upload_destination.js.map +1 -1
  1256. package/dist/mocks/msw/handlers/accessRequirementAclHandlers.js.map +1 -1
  1257. package/dist/mocks/msw/handlers/accessRequirementHandlers.js.map +1 -1
  1258. package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
  1259. package/dist/mocks/msw/handlers/authHandlers.js.map +1 -1
  1260. package/dist/mocks/msw/handlers/challengeHandlers.js.map +1 -1
  1261. package/dist/mocks/msw/handlers/changePasswordHandlers.js.map +1 -1
  1262. package/dist/mocks/msw/handlers/chatHandlers.js.map +1 -1
  1263. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js.map +1 -1
  1264. package/dist/mocks/msw/handlers/dataciteHandlers.js.map +1 -1
  1265. package/dist/mocks/msw/handlers/discussionHandlers.js.map +1 -1
  1266. package/dist/mocks/msw/handlers/doiHandlers.js.map +1 -1
  1267. package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
  1268. package/dist/mocks/msw/handlers/evaluationHandlers.js.map +1 -1
  1269. package/dist/mocks/msw/handlers/featureFlagHandlers.js.map +1 -1
  1270. package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
  1271. package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
  1272. package/dist/mocks/msw/handlers/messageHandlers.js.map +1 -1
  1273. package/dist/mocks/msw/handlers/oauthClientAclHandlers.js.map +1 -1
  1274. package/dist/mocks/msw/handlers/personalAccessTokenHandlers.js.map +1 -1
  1275. package/dist/mocks/msw/handlers/projectStorageHandlers.js.map +1 -1
  1276. package/dist/mocks/msw/handlers/realmHandlers.js.map +1 -1
  1277. package/dist/mocks/msw/handlers/researchProjectHandlers.js.map +1 -1
  1278. package/dist/mocks/msw/handlers/resetTwoFactorAuthHandlers.js.map +1 -1
  1279. package/dist/mocks/msw/handlers/schemaHandlers.js.map +1 -1
  1280. package/dist/mocks/msw/handlers/searchQueryHandlers.js.map +1 -1
  1281. package/dist/mocks/msw/handlers/shortIoHandlers.js.map +1 -1
  1282. package/dist/mocks/msw/handlers/subscriptionHandlers.js.map +1 -1
  1283. package/dist/mocks/msw/handlers/tableQueryHandlers.js.map +1 -1
  1284. package/dist/mocks/msw/handlers/tableQueryService.js.map +1 -1
  1285. package/dist/mocks/msw/handlers/teamHandlers.js.map +1 -1
  1286. package/dist/mocks/msw/handlers/termsOfServiceHandlers.js.map +1 -1
  1287. package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
  1288. package/dist/mocks/msw/handlers/webhookHandlers.js.map +1 -1
  1289. package/dist/mocks/msw/handlers/wikiHandlers.js.map +1 -1
  1290. package/dist/mocks/msw/handlers.js.map +1 -1
  1291. package/dist/mocks/msw/server.d.ts +1 -1
  1292. package/dist/mocks/msw/server.d.ts.map +1 -1
  1293. package/dist/mocks/msw/server.js.map +1 -1
  1294. package/dist/mocks/msw/util/BasicMockedCrudService.js.map +1 -1
  1295. package/dist/mocks/oauth/MockClient.js.map +1 -1
  1296. package/dist/mocks/personalAccessToken/mockPersonalAccessToken.js.map +1 -1
  1297. package/dist/mocks/projectStorage/mockProjectStorageLimits.js.map +1 -1
  1298. package/dist/mocks/provenance/mockActivity.js.map +1 -1
  1299. package/dist/mocks/query/defaultFileViewColumnModels.js.map +1 -1
  1300. package/dist/mocks/query/mockFeaturedDataTabsQueryData.js.map +1 -1
  1301. package/dist/mocks/query/mockHomepageQueryResultData.js.map +1 -1
  1302. package/dist/mocks/query/mockProjectViewQueryResults.js.map +1 -1
  1303. package/dist/mocks/query/mockRejectionReasonsTableQueryResultBundle.js.map +1 -1
  1304. package/dist/mocks/query/mockReleaseCardsTableQueryResultBundle.js.map +1 -1
  1305. package/dist/mocks/query/mockUserCardTableQueryResultBundle.js.map +1 -1
  1306. package/dist/mocks/query/mock_query_data.js.map +1 -1
  1307. package/dist/mocks/query/syn16787123.js.map +1 -1
  1308. package/dist/mocks/query/syn17328596.js.map +1 -1
  1309. package/dist/mocks/query/syn51735464.js.map +1 -1
  1310. package/dist/mocks/query/syn51735464GroupBySpecies.js.map +1 -1
  1311. package/dist/mocks/realm/mockRealmPrincipal.js.map +1 -1
  1312. package/dist/mocks/team/mockTeam.js.map +1 -1
  1313. package/dist/mocks/termsOfService/mockTermsOfService.js.map +1 -1
  1314. package/dist/mocks/user/mock_user_profile.js.map +1 -1
  1315. package/dist/mocks/usergroup/mockUserGroup.js.map +1 -1
  1316. package/dist/ror-client/index.js.map +1 -1
  1317. package/dist/stories/ColorPaletteInspector.js.map +1 -1
  1318. package/dist/stories/ToastDemo.js.map +1 -1
  1319. package/dist/stories/stubs/Alert/MuiAlert.js.map +1 -1
  1320. package/dist/stories/stubs/Button/MuiButton.js.map +1 -1
  1321. package/dist/stories/stubs/Dialog/MuiDialog.js.map +1 -1
  1322. package/dist/stories/stubs/TextField/MuiTextField.js.map +1 -1
  1323. package/dist/stories/stubs/Tooltip/MuiTooltip.js.map +1 -1
  1324. package/dist/synapse-client/HttpClient.js.map +1 -1
  1325. package/dist/synapse-client/SynapseClient.d.ts.map +1 -1
  1326. package/dist/synapse-client/SynapseClient.js +61 -69
  1327. package/dist/synapse-client/SynapseClient.js.map +1 -1
  1328. package/dist/synapse-client/SynapseClientUtils.js.map +1 -1
  1329. package/dist/synapse-queries/InfiniteQueryUtils.js.map +1 -1
  1330. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  1331. package/dist/synapse-queries/QueryFilterUtils.js.map +1 -1
  1332. package/dist/synapse-queries/QueryMatching.test-utils.js.map +1 -1
  1333. package/dist/synapse-queries/asynchronous/usePollAsynchronousJob.js.map +1 -1
  1334. package/dist/synapse-queries/auth/useChangePassword.js.map +1 -1
  1335. package/dist/synapse-queries/auth/useOIDC.js.map +1 -1
  1336. package/dist/synapse-queries/auth/useResetPassword.js.map +1 -1
  1337. package/dist/synapse-queries/auth/useTwoFactorEnrollment.js.map +1 -1
  1338. package/dist/synapse-queries/challenge/useChallenge.js.map +1 -1
  1339. package/dist/synapse-queries/chat/useChat.js.map +1 -1
  1340. package/dist/synapse-queries/croissant/useGetCroissantUrl.js.map +1 -1
  1341. package/dist/synapse-queries/curation/task/useCurationTask.d.ts +1 -0
  1342. package/dist/synapse-queries/curation/task/useCurationTask.d.ts.map +1 -1
  1343. package/dist/synapse-queries/curation/task/useCurationTask.js +12 -2
  1344. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  1345. package/dist/synapse-queries/dataaccess/useAccessApprovals.js.map +1 -1
  1346. package/dist/synapse-queries/dataaccess/useAccessRequirements.js.map +1 -1
  1347. package/dist/synapse-queries/dataaccess/useDataAccessSubmission.js.map +1 -1
  1348. package/dist/synapse-queries/dataaccess/useGetApprovedSubmissionInfo.js.map +1 -1
  1349. package/dist/synapse-queries/dataaccess/useRestrictionInformation.js.map +1 -1
  1350. package/dist/synapse-queries/docker/useGetDockerTag.js.map +1 -1
  1351. package/dist/synapse-queries/doi/useDOI.js.map +1 -1
  1352. package/dist/synapse-queries/download/useDownloadList.js.map +1 -1
  1353. package/dist/synapse-queries/entity/useActionsRequiredForTableQuery.js.map +1 -1
  1354. package/dist/synapse-queries/entity/useEntity.js.map +1 -1
  1355. package/dist/synapse-queries/entity/useEntityBoundSchema.js.map +1 -1
  1356. package/dist/synapse-queries/entity/useEntityBundle.js.map +1 -1
  1357. package/dist/synapse-queries/entity/useExportTableQueryToAnalysisPlatform.js.map +1 -1
  1358. package/dist/synapse-queries/entity/useExportToADWorkbench.js.map +1 -1
  1359. package/dist/synapse-queries/entity/useExportToCavatica.js.map +1 -1
  1360. package/dist/synapse-queries/entity/useExportToPluto.js.map +1 -1
  1361. package/dist/synapse-queries/entity/useExportToTerra.js.map +1 -1
  1362. package/dist/synapse-queries/entity/useGetEntityActionsRequired.js.map +1 -1
  1363. package/dist/synapse-queries/entity/useGetEntityChallenge.js.map +1 -1
  1364. package/dist/synapse-queries/entity/useGetEntityChildren.js.map +1 -1
  1365. package/dist/synapse-queries/entity/useGetEntityForum.js.map +1 -1
  1366. package/dist/synapse-queries/entity/useGetEntityHeaders.js.map +1 -1
  1367. package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
  1368. package/dist/synapse-queries/entity/useProjectStorage.js.map +1 -1
  1369. package/dist/synapse-queries/entity/useSchema.js.map +1 -1
  1370. package/dist/synapse-queries/evaluation/useEvaluation.js.map +1 -1
  1371. package/dist/synapse-queries/featureflags/useGetFeatureFlag.js.map +1 -1
  1372. package/dist/synapse-queries/file/UploadToS3.js.map +1 -1
  1373. package/dist/synapse-queries/file/useDirectUploadToS3.js.map +1 -1
  1374. package/dist/synapse-queries/file/useFileHandle.js.map +1 -1
  1375. package/dist/synapse-queries/file/useFiles.js.map +1 -1
  1376. package/dist/synapse-queries/file/useSynapseMultipartUpload.js.map +1 -1
  1377. package/dist/synapse-queries/file/useUploadDestination.js.map +1 -1
  1378. package/dist/synapse-queries/forum/useForum.js.map +1 -1
  1379. package/dist/synapse-queries/forum/useReply.js.map +1 -1
  1380. package/dist/synapse-queries/forum/useThread.js.map +1 -1
  1381. package/dist/synapse-queries/github/useGithub.js.map +1 -1
  1382. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
  1383. package/dist/synapse-queries/grid/useExportGrid.js.map +1 -1
  1384. package/dist/synapse-queries/grid/useGridPresignedUrl.js.map +1 -1
  1385. package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
  1386. package/dist/synapse-queries/grid/useImportCsvIntoGrid.js.map +1 -1
  1387. package/dist/synapse-queries/message/useMessage.js.map +1 -1
  1388. package/dist/synapse-queries/oauth/useOAuthClient.js.map +1 -1
  1389. package/dist/synapse-queries/portal/useListPortals.js.map +1 -1
  1390. package/dist/synapse-queries/portal/usePortal.js.map +1 -1
  1391. package/dist/synapse-queries/provenance/useGetActivityForEntity.js.map +1 -1
  1392. package/dist/synapse-queries/realm/useRealmPrincipals.js.map +1 -1
  1393. package/dist/synapse-queries/ror/index.js.map +1 -1
  1394. package/dist/synapse-queries/search/useSearch.js.map +1 -1
  1395. package/dist/synapse-queries/search/useSuggestion.js.map +1 -1
  1396. package/dist/synapse-queries/subscription/useSubscription.js.map +1 -1
  1397. package/dist/synapse-queries/table/useColumnModel.js.map +1 -1
  1398. package/dist/synapse-queries/table/useDefiningSql.js.map +1 -1
  1399. package/dist/synapse-queries/table/useDownloadTable.js.map +1 -1
  1400. package/dist/synapse-queries/table/useGetCsvPreview.js.map +1 -1
  1401. package/dist/synapse-queries/table/useTableUpdateTransaction.js.map +1 -1
  1402. package/dist/synapse-queries/team/useTeam.js.map +1 -1
  1403. package/dist/synapse-queries/team/useTeamList.js.map +1 -1
  1404. package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
  1405. package/dist/synapse-queries/termsOfService/useTermsOfService.js.map +1 -1
  1406. package/dist/synapse-queries/trash/useTrashCan.js.map +1 -1
  1407. package/dist/synapse-queries/user/useCertificationQuiz.js.map +1 -1
  1408. package/dist/synapse-queries/user/useFavorites.js.map +1 -1
  1409. package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
  1410. package/dist/synapse-queries/user/useGetUserProjects.js.map +1 -1
  1411. package/dist/synapse-queries/user/useGetUserTeams.js.map +1 -1
  1412. package/dist/synapse-queries/user/usePersonalAccessToken.js.map +1 -1
  1413. package/dist/synapse-queries/user/useProjects.js.map +1 -1
  1414. package/dist/synapse-queries/user/useRevokeCertification.js.map +1 -1
  1415. package/dist/synapse-queries/user/useUserBundle.js.map +1 -1
  1416. package/dist/synapse-queries/user/useUserGroupHeader.js.map +1 -1
  1417. package/dist/synapse-queries/verificationSubmission/useVerificationSubmission.js.map +1 -1
  1418. package/dist/synapse-queries/webhook/useWebhook.js.map +1 -1
  1419. package/dist/synapse-queries/wiki/useWiki.js.map +1 -1
  1420. package/dist/testutils/ComponentToBePassedPropsCustomMatcher.js.map +1 -1
  1421. package/dist/testutils/IsEditingStoreTestUtils.js +17 -0
  1422. package/dist/testutils/IsEditingStoreTestUtils.js.map +1 -0
  1423. package/dist/testutils/LocationTracker.js.map +1 -1
  1424. package/dist/testutils/MarkdownSynapseUtils.js.map +1 -1
  1425. package/dist/testutils/ReactQueryMockUtils.js.map +1 -1
  1426. package/dist/testutils/TestingLibraryUtils.js +18 -16
  1427. package/dist/testutils/TestingLibraryUtils.js.map +1 -1
  1428. package/dist/testutils/muiDatePickerMock.js.map +1 -1
  1429. package/dist/testutils/vitest.setup.js.map +1 -1
  1430. package/dist/theme/DefaultTheme.js.map +1 -1
  1431. package/dist/theme/ThemeProvider.js.map +1 -1
  1432. package/dist/theme/mergeTheme.js.map +1 -1
  1433. package/dist/theme/palette/Palettes.js.map +1 -1
  1434. package/dist/theme/spreadSx.js.map +1 -1
  1435. package/dist/theme/typography/Link.js.map +1 -1
  1436. package/dist/theme/typography/Typography.js.map +1 -1
  1437. package/dist/tsconfig.build.tsbuildinfo +1 -1
  1438. package/dist/utils/APIConstants.js.map +1 -1
  1439. package/dist/utils/AppUtils/AppUtils.d.ts.map +1 -1
  1440. package/dist/utils/AppUtils/AppUtils.js +11 -11
  1441. package/dist/utils/AppUtils/AppUtils.js.map +1 -1
  1442. package/dist/utils/AppUtils/session/ApplicationSessionContext.js.map +1 -1
  1443. package/dist/utils/AppUtils/session/ApplicationSessionManager.js.map +1 -1
  1444. package/dist/utils/AppUtils/session/AuthenticationGuard.js.map +1 -1
  1445. package/dist/utils/AppUtils/session/SessionInitializedGuard.js.map +1 -1
  1446. package/dist/utils/AppUtils/session/SynapseSessionManager.js.map +1 -1
  1447. package/dist/utils/AppUtils/session/useSessionManager.js.map +1 -1
  1448. package/dist/utils/ContentTypeUtils.js.map +1 -1
  1449. package/dist/utils/OrientationBannerConstants.js.map +1 -1
  1450. package/dist/utils/PermissionLevelToAccessType.js.map +1 -1
  1451. package/dist/utils/SynapseConstants.js.map +1 -1
  1452. package/dist/utils/analytics/sendAnalyticsEvent.js.map +1 -1
  1453. package/dist/utils/analytics/sendSearchEvent.js.map +1 -1
  1454. package/dist/utils/analytics/useGoogleAnalytics.js.map +1 -1
  1455. package/dist/utils/appendFinalQueryParamKey.js.map +1 -1
  1456. package/dist/utils/challenge/evaluation/EvaluationUtils.js.map +1 -1
  1457. package/dist/utils/context/AridhiaContext.js.map +1 -1
  1458. package/dist/utils/context/DocumentMetadataContext.js.map +1 -1
  1459. package/dist/utils/context/FullContextProvider.js.map +1 -1
  1460. package/dist/utils/context/GlobalIsEditingContext.js.map +1 -1
  1461. package/dist/utils/context/SynapseContext.js.map +1 -1
  1462. package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
  1463. package/dist/utils/functions/AccessControlListUtils.js.map +1 -1
  1464. package/dist/utils/functions/ArrayUtils.js.map +1 -1
  1465. package/dist/utils/functions/DateFormatter.js.map +1 -1
  1466. package/dist/utils/functions/DateTimeUtils.js.map +1 -1
  1467. package/dist/utils/functions/EntityTypeUtils.js.map +1 -1
  1468. package/dist/utils/functions/FileHandleUtils.js.map +1 -1
  1469. package/dist/utils/functions/GridApiUtils.js.map +1 -1
  1470. package/dist/utils/functions/IsEqualTreatUndefinedAsMissing.js.map +1 -1
  1471. package/dist/utils/functions/IsExternalLink.js.map +1 -1
  1472. package/dist/utils/functions/ObjectUtils.js.map +1 -1
  1473. package/dist/utils/functions/QueryFilterUtils.js.map +1 -1
  1474. package/dist/utils/functions/RealmUtils.js.map +1 -1
  1475. package/dist/utils/functions/RegularExpressions.js.map +1 -1
  1476. package/dist/utils/functions/ResolveLinkEntity.js.map +1 -1
  1477. package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
  1478. package/dist/utils/functions/SanitizeHtmlUtils.test-utils.js.map +1 -1
  1479. package/dist/utils/functions/SqlFunctions.js.map +1 -1
  1480. package/dist/utils/functions/StringUtils.js.map +1 -1
  1481. package/dist/utils/functions/TableColumnSchemaUtils.js.map +1 -1
  1482. package/dist/utils/functions/calculateFriendlyFileSize.js.map +1 -1
  1483. package/dist/utils/functions/colorPalette.js.map +1 -1
  1484. package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
  1485. package/dist/utils/functions/dispatchDownloadListChangeEvent.js.map +1 -1
  1486. package/dist/utils/functions/generateCsrfToken.js.map +1 -1
  1487. package/dist/utils/functions/getDataFromFromStorage.js.map +1 -1
  1488. package/dist/utils/functions/getEndpoint.js +3 -3
  1489. package/dist/utils/functions/getEndpoint.js.map +1 -1
  1490. package/dist/utils/functions/getPrincipalDisplayName.js.map +1 -1
  1491. package/dist/utils/functions/getSynapseEntityUrl.js.map +1 -1
  1492. package/dist/utils/functions/getSynapseWebClientLink.js.map +1 -1
  1493. package/dist/utils/functions/getUserData.js.map +1 -1
  1494. package/dist/utils/functions/queryUtils.js.map +1 -1
  1495. package/dist/utils/functions/testDownloadSpeed.js.map +1 -1
  1496. package/dist/utils/functions/unCamelCase.js.map +1 -1
  1497. package/dist/utils/hooks/useConfirmItems.js.map +1 -1
  1498. package/dist/utils/hooks/useCookiePreferences.d.ts.map +1 -1
  1499. package/dist/utils/hooks/useCookiePreferences.js +24 -23
  1500. package/dist/utils/hooks/useCookiePreferences.js.map +1 -1
  1501. package/dist/utils/hooks/useCreateShortUrl.js.map +1 -1
  1502. package/dist/utils/hooks/useDebouncedEffect.js.map +1 -1
  1503. package/dist/utils/hooks/useDetectSSOCode.js.map +1 -1
  1504. package/dist/utils/hooks/useDirectDownloadHandler.js.map +1 -1
  1505. package/dist/utils/hooks/useGetEntityMetadata.js.map +1 -1
  1506. package/dist/utils/hooks/useGetGoalData.js +2 -4
  1507. package/dist/utils/hooks/useGetGoalData.js.map +1 -1
  1508. package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
  1509. package/dist/utils/hooks/useGetIsAllSelectedInfiniteList.js.map +1 -1
  1510. package/dist/utils/hooks/useImageUrlUtils.js.map +1 -1
  1511. package/dist/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.js.map +1 -1
  1512. package/dist/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.js.map +1 -1
  1513. package/dist/utils/hooks/useImmutableTableQuery/useTableQueryReducer.js.map +1 -1
  1514. package/dist/utils/hooks/useIsBot.js.map +1 -1
  1515. package/dist/utils/hooks/useJsonLdScriptElement.js.map +1 -1
  1516. package/dist/utils/hooks/useListState.js.map +1 -1
  1517. package/dist/utils/hooks/useLogin.js.map +1 -1
  1518. package/dist/utils/hooks/useMediaPrintOnly.js.map +1 -1
  1519. package/dist/utils/hooks/useMutuallyExclusiveState.js.map +1 -1
  1520. package/dist/utils/hooks/useNativeSearchParams.js.map +1 -1
  1521. package/dist/utils/hooks/useOneSageURL.js.map +1 -1
  1522. package/dist/utils/hooks/useOverlay.js.map +1 -1
  1523. package/dist/utils/hooks/usePreFetchResource.js.map +1 -1
  1524. package/dist/utils/hooks/useQuerySearchParam.js.map +1 -1
  1525. package/dist/utils/hooks/useScrollFadeTransition.js.map +1 -1
  1526. package/dist/utils/hooks/useSet.js.map +1 -1
  1527. package/dist/utils/hooks/useShowDesktop.js.map +1 -1
  1528. package/dist/utils/hooks/useSourceAppConfigs.js.map +1 -1
  1529. package/dist/utils/hooks/useTableImageUrl.js.map +1 -1
  1530. package/dist/utils/hooks/useTraceUpdate.js.map +1 -1
  1531. package/dist/utils/hooks/useTrackTransientListItems.js.map +1 -1
  1532. package/dist/utils/hooks/useUploadFileEntity/getActiveUploadCount.js.map +1 -1
  1533. package/dist/utils/hooks/useUploadFileEntity/getFileEntityIdWithSameName.js.map +1 -1
  1534. package/dist/utils/hooks/useUploadFileEntity/useCreateFolderPath.js.map +1 -1
  1535. package/dist/utils/hooks/useUploadFileEntity/useCreatePathsAndGetParentId.js.map +1 -1
  1536. package/dist/utils/hooks/useUploadFileEntity/useLinkFileEntityToURL.js.map +1 -1
  1537. package/dist/utils/hooks/useUploadFileEntity/usePrepareFileEntityUpload.js.map +1 -1
  1538. package/dist/utils/hooks/useUploadFileEntity/useTrackFileUploads.js.map +1 -1
  1539. package/dist/utils/hooks/useUploadFileEntity/useUploadFileEntities.js.map +1 -1
  1540. package/dist/utils/hooks/useUploadFileEntity/useUploadFiles.js.map +1 -1
  1541. package/dist/utils/hooks/useUploadFileEntity/willUploadsExceedStorageLimit.js.map +1 -1
  1542. package/dist/utils/html/TargetEnum.js.map +1 -1
  1543. package/dist/utils/jsonschema/SchemaAnnotationUtils.js.map +1 -1
  1544. package/dist/utils/jsonschema/getEnumeratedValues.js.map +1 -1
  1545. package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.js.map +1 -1
  1546. package/dist/utils/jsonschema/getRequiredAttributes.js.map +1 -1
  1547. package/dist/utils/jsonschema/getSchemaForProperty.js.map +1 -1
  1548. package/dist/utils/jsonschema/getSchemaPropertyInfo.js.map +1 -1
  1549. package/dist/utils/jsonschema/getType.js.map +1 -1
  1550. package/dist/utils/searchDefaults.js.map +1 -1
  1551. package/dist/utils/slots/SlotUtils.js.map +1 -1
  1552. package/dist/utils/types/IsType.js.map +1 -1
  1553. package/package.json +67 -66
@@ -1 +1 @@
1
- {"version":3,"file":"SearchFacetPanel.js","names":[],"sources":["../../../../src/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanel.tsx"],"sourcesContent":["import { useState } from 'react'\nimport styles from './SearchFacetPanel.module.scss'\nimport dayjs from 'dayjs'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { entityTypeToFriendlyName } from '../../../utils/functions/EntityTypeUtils'\nimport {\n Box,\n FormControlLabel,\n Button,\n RadioGroup,\n Radio,\n Typography,\n Chip,\n Tooltip,\n Collapse,\n} from '@mui/material'\nimport UTurnLeftIcon from '@mui/icons-material/UTurnLeft'\nimport CloseIcon from '@mui/icons-material/Close'\nimport {\n SearchQuery,\n Facet,\n FacetTypeNames,\n} from '@sage-bionetworks/synapse-types'\nimport { UserBadge } from '../../UserCard/UserBadge'\nimport {\n MAX_FACET_VALUES_SHOWN,\n FACET_DISPLAY_ORDER,\n getFacetDisplayName,\n shouldRenderFacet,\n timeRanges,\n getSelectedTimeRangeId,\n formatTimeRangeDisplayValue,\n isUserFacet,\n shouldShowFacetValue,\n getAllFacetLabel,\n} from './SearchFacetPanelUtils'\n\ntype SearchFacetPanelProps = {\n query: SearchQuery\n setQuery: (newQuery: SearchQuery) => void\n facets: Facet[]\n disabled?: boolean\n expanded: boolean\n onCollapse: () => void\n onAddFacet: (facetName: string, facetValue: string) => void\n onRemoveFacet: (facetName: string, facetValue: string) => void\n onSetRangeFacet: (facetName: string, minValue: string) => void\n onRemoveRangeFacet: (facetName: string) => void\n isRangeFacetApplied: (facetName: string) => boolean\n getAppliedRangeFacet: (facetName: string) => { min: string } | undefined\n}\n\n/**\n * Main facet panel component that displays all available facets\n */\nexport function SearchFacetPanel({\n query,\n setQuery,\n facets,\n disabled = false,\n onAddFacet,\n onRemoveFacet,\n onSetRangeFacet,\n onRemoveRangeFacet,\n isRangeFacetApplied,\n getAppliedRangeFacet,\n expanded,\n onCollapse,\n}: SearchFacetPanelProps) {\n const hasAppliedFacets =\n (query.booleanQuery && query.booleanQuery.length > 0) ||\n (query.rangeQuery && query.rangeQuery.length > 0)\n\n const handleResetFilters = () => {\n setQuery({\n ...query,\n booleanQuery: [],\n rangeQuery: [],\n start: 0,\n })\n }\n\n return (\n <Collapse\n in={expanded}\n id=\"filter-search-results-panel\"\n aria-labelledby=\"filter-results-button-label\"\n >\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n {hasAppliedFacets && (\n <Button\n onClick={handleResetFilters}\n variant=\"text\"\n size=\"small\"\n className={styles.resetFilterButton}\n disabled={disabled}\n >\n <UTurnLeftIcon sx={{ transform: 'rotate(90deg)' }} />\n <Typography sx={{ fontSize: '16px', fontWeight: 700 }}>\n Reset Filters\n </Typography>\n </Button>\n )}\n <CloseIcon\n sx={{ marginLeft: 'auto', cursor: 'pointer' }}\n onClick={onCollapse}\n aria-expanded={expanded}\n aria-controls=\"filter-search-results-panel\"\n />\n </Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n gap: 3,\n flexWrap: 'wrap',\n }}\n >\n {FACET_DISPLAY_ORDER.map(facetName => {\n const facet = facets.find(f => f.name === facetName)\n\n if (!facet || !shouldRenderFacet(facet)) {\n return null\n }\n\n return (\n <SearchFacetGroup\n disabled={disabled}\n key={facet.name}\n facet={facet}\n query={query}\n onAddFacet={onAddFacet}\n onRemoveFacet={onRemoveFacet}\n onSetRangeFacet={onSetRangeFacet}\n onRemoveRangeFacet={onRemoveRangeFacet}\n isRangeFacetApplied={isRangeFacetApplied}\n getAppliedRangeFacet={getAppliedRangeFacet}\n />\n )\n })}\n </Box>\n </Box>\n </Collapse>\n )\n}\n\ntype SearchFacetGroupProps = {\n facet: Facet\n query: SearchQuery\n disabled?: boolean\n onAddFacet: (facetName: string, facetValue: string) => void\n onRemoveFacet: (facetName: string, facetValue: string) => void\n onSetRangeFacet: (facetName: string, minValue: string) => void\n onRemoveRangeFacet: (facetName: string) => void\n isRangeFacetApplied: (facetName: string) => boolean\n getAppliedRangeFacet: (facetName: string) => { min: string } | undefined\n}\n\n/**\n * Component for a facet group\n * (ex: Entity Type facet with values 'dataset', 'file', etc)\n */\nfunction SearchFacetGroup({\n facet,\n disabled = false,\n query,\n onAddFacet,\n onRemoveFacet,\n onSetRangeFacet,\n onRemoveRangeFacet,\n isRangeFacetApplied,\n getAppliedRangeFacet,\n}: SearchFacetGroupProps) {\n const displayName = getFacetDisplayName(facet.name)\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', minWidth: '200px' }}>\n <Typography variant=\"smallText2\" className={styles.displayName}>\n {displayName}\n </Typography>\n {facet.type === FacetTypeNames.LITERAL ? (\n <LiteralFacetValues // checkbox list for literal facets\n disabled={disabled}\n facet={facet}\n query={query}\n onAddFacet={onAddFacet}\n onRemoveFacet={onRemoveFacet}\n />\n ) : (\n <DateRangeFacetValues // radio buttons for date/continuous facets (can only select one range at a time)\n disabled={disabled}\n facet={facet}\n query={query}\n onSetRangeFacet={onSetRangeFacet}\n onRemoveRangeFacet={onRemoveRangeFacet}\n isRangeFacetApplied={isRangeFacetApplied}\n getAppliedRangeFacet={getAppliedRangeFacet}\n />\n )}\n </Box>\n )\n}\n\ntype LiteralFacetValuesProps = {\n facet: Facet\n query: SearchQuery\n disabled?: boolean\n onAddFacet: (facetName: string, facetValue: string) => void\n onRemoveFacet: (facetName: string, facetValue: string) => void\n}\n\nconst ALL_FACET_VALUE = '__all__'\n\n/**\n * Component for rendering literal facet values as radio buttons since the backend ANDs boolean query values\n */\nfunction LiteralFacetValues({\n facet,\n query,\n disabled = false,\n onAddFacet,\n onRemoveFacet,\n}: LiteralFacetValuesProps) {\n const [showAll, setShowAll] = useState(false)\n\n // Get values from the search query (url)\n const appliedValues =\n query.booleanQuery\n ?.filter(kv => kv.key === facet.name)\n .map(kv => kv.value) || []\n\n const selectedValue = appliedValues[0] ?? ALL_FACET_VALUE\n\n // Get values returned by the search results response\n const availableValues = facet.constraints.map(c => c.value)\n\n const allValues = Array.from(new Set([...appliedValues, ...availableValues]))\n\n const filteredValues = allValues.filter(value =>\n shouldShowFacetValue(facet.name, value),\n )\n\n const displayValues = showAll\n ? filteredValues\n : filteredValues.slice(0, MAX_FACET_VALUES_SHOWN)\n\n const handleChange = (newValue: string) => {\n appliedValues.forEach(v => onRemoveFacet(facet.name, v))\n if (newValue !== ALL_FACET_VALUE) {\n onAddFacet(facet.name, newValue)\n }\n }\n\n return (\n <RadioGroup\n name={`literal-facet-${facet.name}`}\n value={selectedValue}\n onChange={e => handleChange(e.target.value)}\n >\n <FormControlLabel\n sx={{ mb: '8px' }}\n disabled={disabled}\n value={ALL_FACET_VALUE}\n control={<Radio size=\"small\" />}\n label={\n <Typography variant=\"smallText1\" sx={{ lineHeight: '20px' }}>\n {getAllFacetLabel(facet.name)}\n </Typography>\n }\n />\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n ...(showAll && { maxHeight: '280px', overflowY: 'auto' }),\n }}\n >\n {displayValues.map(value => (\n <FormControlLabel\n disabled={disabled}\n key={value}\n value={value}\n control={<Radio size=\"small\" />}\n label={\n isUserFacet(facet.name) ? (\n <UserBadge userId={value} />\n ) : (\n <Typography variant=\"smallText1\" sx={{ lineHeight: '20px' }}>\n {facet.name === 'node_type'\n ? entityTypeToFriendlyName(value as EntityType) || value\n : value}\n </Typography>\n )\n }\n />\n ))}\n </Box>\n {filteredValues.length > MAX_FACET_VALUES_SHOWN && !showAll && (\n <Button\n disabled={disabled}\n onClick={() => setShowAll(true)}\n variant=\"text\"\n size=\"small\"\n sx={{ alignSelf: 'flex-start' }}\n >\n Show all {filteredValues.length}\n </Button>\n )}\n </RadioGroup>\n )\n}\n\ntype DateRangeFacetValuesProps = {\n facet: Facet\n query: SearchQuery\n disabled?: boolean\n onSetRangeFacet: (facetName: string, minValue: string) => void\n onRemoveRangeFacet: (facetName: string) => void\n isRangeFacetApplied: (facetName: string) => boolean\n getAppliedRangeFacet: (facetName: string) => { min: string } | undefined\n}\n\n/**\n * Component for rendering date/continuous range facet values\n * Uses dayjs's built-in relative time thresholds to determine selection\n */\nfunction DateRangeFacetValues({\n facet,\n disabled = false,\n onSetRangeFacet,\n onRemoveRangeFacet,\n getAppliedRangeFacet,\n}: DateRangeFacetValuesProps) {\n const appliedRangeFacet = getAppliedRangeFacet(facet.name)\n\n // Use dayjs's built-in logic to determine which preset matches the stored timestamp (min - Unix timestamp currently in the URL/Search Query)\n const selectedValue = appliedRangeFacet?.min\n ? getSelectedTimeRangeId(appliedRangeFacet.min)\n : 'ANY_TIME'\n\n const handleChange = (rangeId: string) => {\n const selectedTimeRange = timeRanges.find(r => r.id === rangeId)\n\n if (!selectedTimeRange?.range) {\n onRemoveRangeFacet(facet.name)\n return\n }\n\n // Always calculate 'min' relative to the moment of the click.\n // Use dayjs unit-aware subtraction so month/year account for varying lengths.\n const unitMap: Record<string, dayjs.ManipulateType> = {\n PAST_HOUR: 'hour',\n PAST_DAY: 'day',\n PAST_WEEK: 'week',\n PAST_MONTH: 'month',\n PAST_YEAR: 'year',\n }\n\n /**\n * We use dayjs.subtract() instead of fixed seconds to handle\n * calendar irregularities. dayjs correctly calculates \"one month ago\"\n * whether the current month has 28, 30, or 31 days.\n */\n const minValue = String(dayjs().subtract(1, unitMap[rangeId]).unix())\n onSetRangeFacet(facet.name, minValue)\n }\n\n return (\n <RadioGroup\n name={`range-facet-${facet.name}`}\n value={selectedValue}\n onChange={e => handleChange(e.target.value)}\n >\n {timeRanges.map(range => (\n <FormControlLabel\n disabled={disabled}\n key={range.label}\n value={range.id}\n control={<Radio size=\"small\" />}\n label={range.label}\n sx={{ mb: 0.5 }}\n />\n ))}\n </RadioGroup>\n )\n}\n\ntype AppliedFacetsChipsProps = {\n query: SearchQuery\n onRemoveFacet: (facetName: string, facetValue: string) => void\n onRemoveRangeFacet: (facetName: string) => void\n}\n\n/**\n * Component that displays applied facets as chips with delete icons\n */\nexport function AppliedFacetsChips({\n query,\n onRemoveFacet,\n onRemoveRangeFacet,\n}: AppliedFacetsChipsProps) {\n const booleanQuery = query.booleanQuery || []\n const rangeQuery = query.rangeQuery || []\n const hasAppliedFacets = booleanQuery.length > 0 || rangeQuery.length > 0\n\n if (!hasAppliedFacets) {\n return null\n }\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: 1,\n alignItems: 'center',\n }}\n >\n {booleanQuery.map((kv, index) => {\n if (!shouldShowFacetValue(kv.key, kv.value)) {\n return null\n }\n\n return (\n <Chip\n key={`${kv.key}-${kv.value}-${index}`}\n className={styles.chipStyles}\n deleteIcon={<CloseIcon className={styles.closeIcon} />}\n onDelete={() => onRemoveFacet(kv.key, kv.value)}\n label={\n isUserFacet(kv.key) ? (\n <Box\n sx={{\n '& .MuiTypography-root': {\n color: 'var(--synapse-white)',\n },\n }}\n >\n <UserBadge userId={kv.value} />\n </Box>\n ) : (\n <Typography variant=\"smallText1\">\n {kv.key === 'node_type'\n ? entityTypeToFriendlyName(kv.value as EntityType) ||\n kv.value\n : kv.value}\n </Typography>\n )\n }\n />\n )\n })}\n\n {rangeQuery.map((kr, index) => {\n const displayValue = formatTimeRangeDisplayValue(kr.min)\n const startDate = dayjs(parseInt(kr.min) * 1000).format('MMMM D, YYYY')\n\n return (\n <Tooltip\n title={`Since ${startDate}`}\n arrow\n key={`${kr.key}-${kr.min}-${index}`}\n >\n <Chip\n className={styles.chipStyles}\n label={`${displayValue}`}\n deleteIcon={<CloseIcon className={styles.closeIcon} />}\n onDelete={() => onRemoveRangeFacet(kr.key)}\n />\n </Tooltip>\n )\n })}\n </Box>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SearchFacetPanel.js","names":[],"sources":["../../../../src/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanel.tsx"],"sourcesContent":["import { useState } from 'react'\nimport styles from './SearchFacetPanel.module.scss'\nimport dayjs from 'dayjs'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { entityTypeToFriendlyName } from '../../../utils/functions/EntityTypeUtils'\nimport {\n Box,\n FormControlLabel,\n Button,\n RadioGroup,\n Radio,\n Typography,\n Chip,\n Tooltip,\n Collapse,\n} from '@mui/material'\nimport UTurnLeftIcon from '@mui/icons-material/UTurnLeft'\nimport CloseIcon from '@mui/icons-material/Close'\nimport {\n SearchQuery,\n Facet,\n FacetTypeNames,\n} from '@sage-bionetworks/synapse-types'\nimport { UserBadge } from '../../UserCard/UserBadge'\nimport {\n MAX_FACET_VALUES_SHOWN,\n FACET_DISPLAY_ORDER,\n getFacetDisplayName,\n shouldRenderFacet,\n timeRanges,\n getSelectedTimeRangeId,\n formatTimeRangeDisplayValue,\n isUserFacet,\n shouldShowFacetValue,\n getAllFacetLabel,\n} from './SearchFacetPanelUtils'\n\ntype SearchFacetPanelProps = {\n query: SearchQuery\n setQuery: (newQuery: SearchQuery) => void\n facets: Facet[]\n disabled?: boolean\n expanded: boolean\n onCollapse: () => void\n onAddFacet: (facetName: string, facetValue: string) => void\n onRemoveFacet: (facetName: string, facetValue: string) => void\n onSetRangeFacet: (facetName: string, minValue: string) => void\n onRemoveRangeFacet: (facetName: string) => void\n isRangeFacetApplied: (facetName: string) => boolean\n getAppliedRangeFacet: (facetName: string) => { min: string } | undefined\n}\n\n/**\n * Main facet panel component that displays all available facets\n */\nexport function SearchFacetPanel({\n query,\n setQuery,\n facets,\n disabled = false,\n onAddFacet,\n onRemoveFacet,\n onSetRangeFacet,\n onRemoveRangeFacet,\n isRangeFacetApplied,\n getAppliedRangeFacet,\n expanded,\n onCollapse,\n}: SearchFacetPanelProps) {\n const hasAppliedFacets =\n (query.booleanQuery && query.booleanQuery.length > 0) ||\n (query.rangeQuery && query.rangeQuery.length > 0)\n\n const handleResetFilters = () => {\n setQuery({\n ...query,\n booleanQuery: [],\n rangeQuery: [],\n start: 0,\n })\n }\n\n return (\n <Collapse\n in={expanded}\n id=\"filter-search-results-panel\"\n aria-labelledby=\"filter-results-button-label\"\n >\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n {hasAppliedFacets && (\n <Button\n onClick={handleResetFilters}\n variant=\"text\"\n size=\"small\"\n className={styles.resetFilterButton}\n disabled={disabled}\n >\n <UTurnLeftIcon sx={{ transform: 'rotate(90deg)' }} />\n <Typography sx={{ fontSize: '16px', fontWeight: 700 }}>\n Reset Filters\n </Typography>\n </Button>\n )}\n <CloseIcon\n sx={{ marginLeft: 'auto', cursor: 'pointer' }}\n onClick={onCollapse}\n aria-expanded={expanded}\n aria-controls=\"filter-search-results-panel\"\n />\n </Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n gap: 3,\n flexWrap: 'wrap',\n }}\n >\n {FACET_DISPLAY_ORDER.map(facetName => {\n const facet = facets.find(f => f.name === facetName)\n\n if (!facet || !shouldRenderFacet(facet)) {\n return null\n }\n\n return (\n <SearchFacetGroup\n disabled={disabled}\n key={facet.name}\n facet={facet}\n query={query}\n onAddFacet={onAddFacet}\n onRemoveFacet={onRemoveFacet}\n onSetRangeFacet={onSetRangeFacet}\n onRemoveRangeFacet={onRemoveRangeFacet}\n isRangeFacetApplied={isRangeFacetApplied}\n getAppliedRangeFacet={getAppliedRangeFacet}\n />\n )\n })}\n </Box>\n </Box>\n </Collapse>\n )\n}\n\ntype SearchFacetGroupProps = {\n facet: Facet\n query: SearchQuery\n disabled?: boolean\n onAddFacet: (facetName: string, facetValue: string) => void\n onRemoveFacet: (facetName: string, facetValue: string) => void\n onSetRangeFacet: (facetName: string, minValue: string) => void\n onRemoveRangeFacet: (facetName: string) => void\n isRangeFacetApplied: (facetName: string) => boolean\n getAppliedRangeFacet: (facetName: string) => { min: string } | undefined\n}\n\n/**\n * Component for a facet group\n * (ex: Entity Type facet with values 'dataset', 'file', etc)\n */\nfunction SearchFacetGroup({\n facet,\n disabled = false,\n query,\n onAddFacet,\n onRemoveFacet,\n onSetRangeFacet,\n onRemoveRangeFacet,\n isRangeFacetApplied,\n getAppliedRangeFacet,\n}: SearchFacetGroupProps) {\n const displayName = getFacetDisplayName(facet.name)\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', minWidth: '200px' }}>\n <Typography variant=\"smallText2\" className={styles.displayName}>\n {displayName}\n </Typography>\n {facet.type === FacetTypeNames.LITERAL ? (\n <LiteralFacetValues // checkbox list for literal facets\n disabled={disabled}\n facet={facet}\n query={query}\n onAddFacet={onAddFacet}\n onRemoveFacet={onRemoveFacet}\n />\n ) : (\n <DateRangeFacetValues // radio buttons for date/continuous facets (can only select one range at a time)\n disabled={disabled}\n facet={facet}\n query={query}\n onSetRangeFacet={onSetRangeFacet}\n onRemoveRangeFacet={onRemoveRangeFacet}\n isRangeFacetApplied={isRangeFacetApplied}\n getAppliedRangeFacet={getAppliedRangeFacet}\n />\n )}\n </Box>\n )\n}\n\ntype LiteralFacetValuesProps = {\n facet: Facet\n query: SearchQuery\n disabled?: boolean\n onAddFacet: (facetName: string, facetValue: string) => void\n onRemoveFacet: (facetName: string, facetValue: string) => void\n}\n\nconst ALL_FACET_VALUE = '__all__'\n\n/**\n * Component for rendering literal facet values as radio buttons since the backend ANDs boolean query values\n */\nfunction LiteralFacetValues({\n facet,\n query,\n disabled = false,\n onAddFacet,\n onRemoveFacet,\n}: LiteralFacetValuesProps) {\n const [showAll, setShowAll] = useState(false)\n\n // Get values from the search query (url)\n const appliedValues =\n query.booleanQuery\n ?.filter(kv => kv.key === facet.name)\n .map(kv => kv.value) || []\n\n const selectedValue = appliedValues[0] ?? ALL_FACET_VALUE\n\n // Get values returned by the search results response\n const availableValues = facet.constraints.map(c => c.value)\n\n const allValues = Array.from(new Set([...appliedValues, ...availableValues]))\n\n const filteredValues = allValues.filter(value =>\n shouldShowFacetValue(facet.name, value),\n )\n\n const displayValues = showAll\n ? filteredValues\n : filteredValues.slice(0, MAX_FACET_VALUES_SHOWN)\n\n const handleChange = (newValue: string) => {\n appliedValues.forEach(v => onRemoveFacet(facet.name, v))\n if (newValue !== ALL_FACET_VALUE) {\n onAddFacet(facet.name, newValue)\n }\n }\n\n return (\n <RadioGroup\n name={`literal-facet-${facet.name}`}\n value={selectedValue}\n onChange={e => handleChange(e.target.value)}\n >\n <FormControlLabel\n sx={{ mb: '8px' }}\n disabled={disabled}\n value={ALL_FACET_VALUE}\n control={<Radio size=\"small\" />}\n label={\n <Typography variant=\"smallText1\" sx={{ lineHeight: '20px' }}>\n {getAllFacetLabel(facet.name)}\n </Typography>\n }\n />\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n ...(showAll && { maxHeight: '280px', overflowY: 'auto' }),\n }}\n >\n {displayValues.map(value => (\n <FormControlLabel\n disabled={disabled}\n key={value}\n value={value}\n control={<Radio size=\"small\" />}\n label={\n isUserFacet(facet.name) ? (\n <UserBadge userId={value} />\n ) : (\n <Typography variant=\"smallText1\" sx={{ lineHeight: '20px' }}>\n {facet.name === 'node_type'\n ? entityTypeToFriendlyName(value as EntityType) || value\n : value}\n </Typography>\n )\n }\n />\n ))}\n </Box>\n {filteredValues.length > MAX_FACET_VALUES_SHOWN && !showAll && (\n <Button\n disabled={disabled}\n onClick={() => setShowAll(true)}\n variant=\"text\"\n size=\"small\"\n sx={{ alignSelf: 'flex-start' }}\n >\n Show all {filteredValues.length}\n </Button>\n )}\n </RadioGroup>\n )\n}\n\ntype DateRangeFacetValuesProps = {\n facet: Facet\n query: SearchQuery\n disabled?: boolean\n onSetRangeFacet: (facetName: string, minValue: string) => void\n onRemoveRangeFacet: (facetName: string) => void\n isRangeFacetApplied: (facetName: string) => boolean\n getAppliedRangeFacet: (facetName: string) => { min: string } | undefined\n}\n\n/**\n * Component for rendering date/continuous range facet values\n * Uses dayjs's built-in relative time thresholds to determine selection\n */\nfunction DateRangeFacetValues({\n facet,\n disabled = false,\n onSetRangeFacet,\n onRemoveRangeFacet,\n getAppliedRangeFacet,\n}: DateRangeFacetValuesProps) {\n const appliedRangeFacet = getAppliedRangeFacet(facet.name)\n\n // Use dayjs's built-in logic to determine which preset matches the stored timestamp (min - Unix timestamp currently in the URL/Search Query)\n const selectedValue = appliedRangeFacet?.min\n ? getSelectedTimeRangeId(appliedRangeFacet.min)\n : 'ANY_TIME'\n\n const handleChange = (rangeId: string) => {\n const selectedTimeRange = timeRanges.find(r => r.id === rangeId)\n\n if (!selectedTimeRange?.range) {\n onRemoveRangeFacet(facet.name)\n return\n }\n\n // Always calculate 'min' relative to the moment of the click.\n // Use dayjs unit-aware subtraction so month/year account for varying lengths.\n const unitMap: Record<string, dayjs.ManipulateType> = {\n PAST_HOUR: 'hour',\n PAST_DAY: 'day',\n PAST_WEEK: 'week',\n PAST_MONTH: 'month',\n PAST_YEAR: 'year',\n }\n\n /**\n * We use dayjs.subtract() instead of fixed seconds to handle\n * calendar irregularities. dayjs correctly calculates \"one month ago\"\n * whether the current month has 28, 30, or 31 days.\n */\n const minValue = String(dayjs().subtract(1, unitMap[rangeId]).unix())\n onSetRangeFacet(facet.name, minValue)\n }\n\n return (\n <RadioGroup\n name={`range-facet-${facet.name}`}\n value={selectedValue}\n onChange={e => handleChange(e.target.value)}\n >\n {timeRanges.map(range => (\n <FormControlLabel\n disabled={disabled}\n key={range.label}\n value={range.id}\n control={<Radio size=\"small\" />}\n label={range.label}\n sx={{ mb: 0.5 }}\n />\n ))}\n </RadioGroup>\n )\n}\n\ntype AppliedFacetsChipsProps = {\n query: SearchQuery\n onRemoveFacet: (facetName: string, facetValue: string) => void\n onRemoveRangeFacet: (facetName: string) => void\n}\n\n/**\n * Component that displays applied facets as chips with delete icons\n */\nexport function AppliedFacetsChips({\n query,\n onRemoveFacet,\n onRemoveRangeFacet,\n}: AppliedFacetsChipsProps) {\n const booleanQuery = query.booleanQuery || []\n const rangeQuery = query.rangeQuery || []\n const hasAppliedFacets = booleanQuery.length > 0 || rangeQuery.length > 0\n\n if (!hasAppliedFacets) {\n return null\n }\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: 1,\n alignItems: 'center',\n }}\n >\n {booleanQuery.map((kv, index) => {\n if (!shouldShowFacetValue(kv.key, kv.value)) {\n return null\n }\n\n return (\n <Chip\n key={`${kv.key}-${kv.value}-${index}`}\n className={styles.chipStyles}\n deleteIcon={<CloseIcon className={styles.closeIcon} />}\n onDelete={() => onRemoveFacet(kv.key, kv.value)}\n label={\n isUserFacet(kv.key) ? (\n <Box\n sx={{\n '& .MuiTypography-root': {\n color: 'var(--synapse-white)',\n },\n }}\n >\n <UserBadge userId={kv.value} />\n </Box>\n ) : (\n <Typography variant=\"smallText1\">\n {kv.key === 'node_type'\n ? entityTypeToFriendlyName(kv.value as EntityType) ||\n kv.value\n : kv.value}\n </Typography>\n )\n }\n />\n )\n })}\n\n {rangeQuery.map((kr, index) => {\n const displayValue = formatTimeRangeDisplayValue(kr.min)\n const startDate = dayjs(parseInt(kr.min) * 1000).format('MMMM D, YYYY')\n\n return (\n <Tooltip\n title={`Since ${startDate}`}\n arrow\n key={`${kr.key}-${kr.min}-${index}`}\n >\n <Chip\n className={styles.chipStyles}\n label={`${displayValue}`}\n deleteIcon={<CloseIcon className={styles.closeIcon} />}\n onDelete={() => onRemoveRangeFacet(kr.key)}\n />\n </Tooltip>\n )\n })}\n </Box>\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SearchFacetPanelUtils.js","names":[],"sources":["../../../../src/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.ts"],"sourcesContent":["import { Facet } from '@sage-bionetworks/synapse-types'\nimport dayjs from 'dayjs'\n\n// Constants\nexport const MAX_FACET_VALUES_SHOWN = 10\n\nconst MINUTE_IN_SEC = 60\nconst HOUR_IN_SEC = MINUTE_IN_SEC * 60\nconst DAY_IN_SEC = HOUR_IN_SEC * 24\nconst WEEK_IN_SEC = DAY_IN_SEC * 7\nconst MONTH_IN_SEC = DAY_IN_SEC * 30\nconst YEAR_IN_SEC = DAY_IN_SEC * 365\n\n// 'range' is the approximate duration in seconds used to match a stored URL timestamp back to a preset.\n// null (ANY_TIME) means no date filter is applied.\nexport const timeRanges = [\n { id: 'ANY_TIME', label: 'Any Time', range: null },\n { id: 'PAST_HOUR', label: 'Past Hour', range: HOUR_IN_SEC },\n { id: 'PAST_DAY', label: 'Past 24 Hours', range: DAY_IN_SEC },\n { id: 'PAST_WEEK', label: 'Past Week', range: WEEK_IN_SEC },\n { id: 'PAST_MONTH', label: 'Past Month', range: MONTH_IN_SEC },\n { id: 'PAST_YEAR', label: 'Past Year', range: YEAR_IN_SEC },\n]\n\n// User-friendly display names\nexport const FACET_DISPLAY_NAMES: Record<string, string> = {\n node_type: 'Entity Type',\n modified_by: 'Last Modified By',\n}\n\n// Facet display order\nexport const FACET_DISPLAY_ORDER = [\n 'node_type',\n 'consortium',\n 'disease',\n 'modified_on',\n 'modified_by',\n 'created_on',\n 'tissue',\n 'num_samples',\n 'created_by',\n]\n\nexport const USER_FACET_NAMES = [\n 'modified_by',\n 'created_by',\n 'ModifiedBy',\n 'CreatedBy',\n]\n\nexport const FACET_PLURAL_DISPLAY_NAMES: Record<string, string> = {\n node_type: 'Entity Types',\n consortium: 'Consortiums',\n disease: 'Diseases',\n tissue: 'Tissues',\n num_samples: 'Num Samples',\n modified_by: 'Last Modified By',\n created_by: 'Created By',\n}\n\n// Helper functions\n/**\n * Get the label for the \"All\" option in a facet, e.g. \"All Entity Types\" for the 'node_type' facet\n */\nexport function getAllFacetLabel(facetName: string): string {\n const pluralName =\n FACET_PLURAL_DISPLAY_NAMES[facetName] || formatFacetName(facetName)\n return `All ${pluralName}`\n}\n\n/**\n * Determines if a facet value should be displayed in the UI.\n * Hides 'link' entity types and colon-prefixed values\n */\nexport function shouldShowFacetValue(\n facetName: string,\n value: string,\n): boolean {\n if (!value || value.trim() === '') {\n return false\n }\n\n const isHiddenEntityType =\n (facetName === 'node_type' || facetName === 'EntityType') &&\n value === 'link'\n\n const isInternalPrefixedValue = value.includes(':')\n\n return !isHiddenEntityType && !isInternalPrefixedValue\n}\n\n/**\n * Check if a facet is a user facet (e.g., 'modified_by' or 'created_by')\n * Accepts either snake_case or PascalCase facet names.\n */\nexport const isUserFacet = (name: string): boolean => {\n // Normalize by removing underscores and converting to lowercase\n const normalizedFacetName = name.toLowerCase().replace(/_/g, '')\n\n return USER_FACET_NAMES.some(\n facet => facet.toLowerCase().replace(/_/g, '') === normalizedFacetName,\n )\n}\n\n/**\n * Format facet name: capitalize first letter, replace underscores with spaces\n */\nexport function formatFacetName(name: string): string {\n return name.replace(/_/g, ' ').replace(/\\b\\w/g, char => char.toUpperCase())\n}\n\n/**\n * Get user-friendly display name for a facet\n */\nexport function getFacetDisplayName(facetName: string): string {\n return FACET_DISPLAY_NAMES[facetName] || formatFacetName(facetName)\n}\n\n/**\n * Check if a facet should be rendered (some facets like 'link' are hidden)\n */\nexport function shouldRenderFacet(facet: Facet): boolean {\n // Don't render facets with no constraints (values to click on)\n if (!facet.constraints || facet.constraints.length === 0) {\n return false\n }\n return true\n}\n\n/**\n * Get timestamp from URL/query and determine which time range preset it matches\n *\n * @param timestamp - The stored timestamp (in seconds) from the URL/query\n * @returns The ID of the matching time range preset ('PAST_HOUR', 'PAST_DAY', etc.)\n */\nexport function getSelectedTimeRangeId(timestamp: string): string {\n const storedTimestamp = parseInt(timestamp)\n\n if (!storedTimestamp) {\n return 'ANY_TIME'\n }\n\n const diffInSeconds = dayjs().unix() - storedTimestamp\n\n if (diffInSeconds <= 0) {\n return 'ANY_TIME'\n }\n\n // Filter out 'ANY_TIME' since it doesn't have a numeric range\n const presets = timeRanges.filter(\n (range): range is { id: string; label: string; range: number } =>\n range.id !== 'ANY_TIME',\n )\n\n // Find the closest preset by comparing the absolute difference.\n // Ex: If diffInSeconds is 3605, it is 5 seconds away from PAST_HOUR (3600)\n // but 82,795 seconds away from PAST_DAY (86400) so we would match to PAST_HOUR.\n const closest = presets.reduce((best, preset) =>\n Math.abs(diffInSeconds - preset.range) <\n Math.abs(diffInSeconds - best.range)\n ? preset\n : best,\n )\n\n return closest.id\n}\n\n/**\n * Formats a timestamp for display in the applied facets chip.\n *\n * @param timestamp - The stored timestamp (in seconds)\n * @returns A friendly display string\n */\nexport function formatTimeRangeDisplayValue(timestamp: string): string {\n const storedTimestamp = parseInt(timestamp)\n\n if (isNaN(storedTimestamp)) {\n return timestamp\n }\n\n if (storedTimestamp === 0) {\n return 'any time'\n }\n\n // Try to match to a preset\n const rangeId = getSelectedTimeRangeId(timestamp)\n const matchedRange = timeRanges.find(r => r.id === rangeId)\n\n if (matchedRange && matchedRange.id !== 'ANY_TIME') {\n return matchedRange.label\n }\n\n // Fallback to formatted date if no preset matches\n try {\n const valueInMilliseconds = storedTimestamp * 1000\n return new Date(valueInMilliseconds).toLocaleDateString()\n } catch {\n return timestamp\n }\n}\n"],"mappings":";;AAIA,IAAa,IAAyB,IAGhC,IAAc,MACd,IAAa,IAAc,IAC3B,IAAc,IAAa,GAC3B,IAAe,IAAa,IAC5B,IAAc,IAAa,KAIpB,IAAa;CACxB;EAAE,IAAI;EAAY,OAAO;EAAY,OAAO;EAAM;CAClD;EAAE,IAAI;EAAa,OAAO;EAAa,OAAO;EAAa;CAC3D;EAAE,IAAI;EAAY,OAAO;EAAiB,OAAO;EAAY;CAC7D;EAAE,IAAI;EAAa,OAAO;EAAa,OAAO;EAAa;CAC3D;EAAE,IAAI;EAAc,OAAO;EAAc,OAAO;EAAc;CAC9D;EAAE,IAAI;EAAa,OAAO;EAAa,OAAO;EAAa;CAC5D,EAGY,IAA8C;CACzD,WAAW;CACX,aAAa;CACd,EAGY,IAAsB;CACjC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,EAEY,IAAmB;CAC9B;CACA;CACA;CACA;CACD,EAEY,IAAqD;CAChE,WAAW;CACX,YAAY;CACZ,SAAS;CACT,QAAQ;CACR,aAAa;CACb,aAAa;CACb,YAAY;CACb;AAMD,SAAgB,EAAiB,GAA2B;AAG1D,QAAO,OADL,EAA2B,MAAc,EAAgB,EAAU;;AAQvE,SAAgB,EACd,GACA,GACS;AACT,KAAI,CAAC,KAAS,EAAM,MAAM,KAAK,GAC7B,QAAO;CAGT,IAAM,KACH,MAAc,eAAe,MAAc,iBAC5C,MAAU,QAEN,IAA0B,EAAM,SAAS,IAAI;AAEnD,QAAO,CAAC,KAAsB,CAAC;;AAOjC,IAAa,KAAe,MAA0B;CAEpD,IAAM,IAAsB,EAAK,aAAa,CAAC,QAAQ,MAAM,GAAG;AAEhE,QAAO,EAAiB,MACtB,MAAS,EAAM,aAAa,CAAC,QAAQ,MAAM,GAAG,KAAK,EACpD;;AAMH,SAAgB,EAAgB,GAAsB;AACpD,QAAO,EAAK,QAAQ,MAAM,IAAI,CAAC,QAAQ,UAAS,MAAQ,EAAK,aAAa,CAAC;;AAM7E,SAAgB,EAAoB,GAA2B;AAC7D,QAAO,EAAoB,MAAc,EAAgB,EAAU;;AAMrE,SAAgB,EAAkB,GAAuB;AAKvD,QAHA,EAAI,CAAC,EAAM,eAAe,EAAM,YAAY,WAAW;;AAYzD,SAAgB,EAAuB,GAA2B;CAChE,IAAM,IAAkB,SAAS,EAAU;AAE3C,KAAI,CAAC,EACH,QAAO;CAGT,IAAM,IAAgB,GAAO,CAAC,MAAM,GAAG;AAsBvC,QApBI,KAAiB,IACZ,aAIO,EAAW,QACxB,MACC,EAAM,OAAO,WAMD,CAAQ,QAAQ,GAAM,MACpC,KAAK,IAAI,IAAgB,EAAO,MAAM,GACtC,KAAK,IAAI,IAAgB,EAAK,MAAM,GAChC,IACA,EAGC,CAAQ;;AASjB,SAAgB,EAA4B,GAA2B;CACrE,IAAM,IAAkB,SAAS,EAAU;AAE3C,KAAI,MAAM,EAAgB,CACxB,QAAO;AAGT,KAAI,MAAoB,EACtB,QAAO;CAIT,IAAM,IAAU,EAAuB,EAAU,EAC3C,IAAe,EAAW,MAAK,MAAK,EAAE,OAAO,EAAQ;AAE3D,KAAI,KAAgB,EAAa,OAAO,WACtC,QAAO,EAAa;AAItB,KAAI;EACF,IAAM,IAAsB,IAAkB;AAC9C,SAAO,IAAI,KAAK,EAAoB,CAAC,oBAAoB;SACnD;AACN,SAAO"}
1
+ {"version":3,"file":"SearchFacetPanelUtils.js","names":[],"sources":["../../../../src/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.ts"],"sourcesContent":["import { Facet } from '@sage-bionetworks/synapse-types'\nimport dayjs from 'dayjs'\n\n// Constants\nexport const MAX_FACET_VALUES_SHOWN = 10\n\nconst MINUTE_IN_SEC = 60\nconst HOUR_IN_SEC = MINUTE_IN_SEC * 60\nconst DAY_IN_SEC = HOUR_IN_SEC * 24\nconst WEEK_IN_SEC = DAY_IN_SEC * 7\nconst MONTH_IN_SEC = DAY_IN_SEC * 30\nconst YEAR_IN_SEC = DAY_IN_SEC * 365\n\n// 'range' is the approximate duration in seconds used to match a stored URL timestamp back to a preset.\n// null (ANY_TIME) means no date filter is applied.\nexport const timeRanges = [\n { id: 'ANY_TIME', label: 'Any Time', range: null },\n { id: 'PAST_HOUR', label: 'Past Hour', range: HOUR_IN_SEC },\n { id: 'PAST_DAY', label: 'Past 24 Hours', range: DAY_IN_SEC },\n { id: 'PAST_WEEK', label: 'Past Week', range: WEEK_IN_SEC },\n { id: 'PAST_MONTH', label: 'Past Month', range: MONTH_IN_SEC },\n { id: 'PAST_YEAR', label: 'Past Year', range: YEAR_IN_SEC },\n]\n\n// User-friendly display names\nexport const FACET_DISPLAY_NAMES: Record<string, string> = {\n node_type: 'Entity Type',\n modified_by: 'Last Modified By',\n}\n\n// Facet display order\nexport const FACET_DISPLAY_ORDER = [\n 'node_type',\n 'consortium',\n 'disease',\n 'modified_on',\n 'modified_by',\n 'created_on',\n 'tissue',\n 'num_samples',\n 'created_by',\n]\n\nexport const USER_FACET_NAMES = [\n 'modified_by',\n 'created_by',\n 'ModifiedBy',\n 'CreatedBy',\n]\n\nexport const FACET_PLURAL_DISPLAY_NAMES: Record<string, string> = {\n node_type: 'Entity Types',\n consortium: 'Consortiums',\n disease: 'Diseases',\n tissue: 'Tissues',\n num_samples: 'Num Samples',\n modified_by: 'Last Modified By',\n created_by: 'Created By',\n}\n\n// Helper functions\n/**\n * Get the label for the \"All\" option in a facet, e.g. \"All Entity Types\" for the 'node_type' facet\n */\nexport function getAllFacetLabel(facetName: string): string {\n const pluralName =\n FACET_PLURAL_DISPLAY_NAMES[facetName] || formatFacetName(facetName)\n return `All ${pluralName}`\n}\n\n/**\n * Determines if a facet value should be displayed in the UI.\n * Hides 'link' entity types and colon-prefixed values\n */\nexport function shouldShowFacetValue(\n facetName: string,\n value: string,\n): boolean {\n if (!value || value.trim() === '') {\n return false\n }\n\n const isHiddenEntityType =\n (facetName === 'node_type' || facetName === 'EntityType') &&\n value === 'link'\n\n const isInternalPrefixedValue = value.includes(':')\n\n return !isHiddenEntityType && !isInternalPrefixedValue\n}\n\n/**\n * Check if a facet is a user facet (e.g., 'modified_by' or 'created_by')\n * Accepts either snake_case or PascalCase facet names.\n */\nexport const isUserFacet = (name: string): boolean => {\n // Normalize by removing underscores and converting to lowercase\n const normalizedFacetName = name.toLowerCase().replace(/_/g, '')\n\n return USER_FACET_NAMES.some(\n facet => facet.toLowerCase().replace(/_/g, '') === normalizedFacetName,\n )\n}\n\n/**\n * Format facet name: capitalize first letter, replace underscores with spaces\n */\nexport function formatFacetName(name: string): string {\n return name.replace(/_/g, ' ').replace(/\\b\\w/g, char => char.toUpperCase())\n}\n\n/**\n * Get user-friendly display name for a facet\n */\nexport function getFacetDisplayName(facetName: string): string {\n return FACET_DISPLAY_NAMES[facetName] || formatFacetName(facetName)\n}\n\n/**\n * Check if a facet should be rendered (some facets like 'link' are hidden)\n */\nexport function shouldRenderFacet(facet: Facet): boolean {\n // Don't render facets with no constraints (values to click on)\n if (!facet.constraints || facet.constraints.length === 0) {\n return false\n }\n return true\n}\n\n/**\n * Get timestamp from URL/query and determine which time range preset it matches\n *\n * @param timestamp - The stored timestamp (in seconds) from the URL/query\n * @returns The ID of the matching time range preset ('PAST_HOUR', 'PAST_DAY', etc.)\n */\nexport function getSelectedTimeRangeId(timestamp: string): string {\n const storedTimestamp = parseInt(timestamp)\n\n if (!storedTimestamp) {\n return 'ANY_TIME'\n }\n\n const diffInSeconds = dayjs().unix() - storedTimestamp\n\n if (diffInSeconds <= 0) {\n return 'ANY_TIME'\n }\n\n // Filter out 'ANY_TIME' since it doesn't have a numeric range\n const presets = timeRanges.filter(\n (range): range is { id: string; label: string; range: number } =>\n range.id !== 'ANY_TIME',\n )\n\n // Find the closest preset by comparing the absolute difference.\n // Ex: If diffInSeconds is 3605, it is 5 seconds away from PAST_HOUR (3600)\n // but 82,795 seconds away from PAST_DAY (86400) so we would match to PAST_HOUR.\n const closest = presets.reduce((best, preset) =>\n Math.abs(diffInSeconds - preset.range) <\n Math.abs(diffInSeconds - best.range)\n ? preset\n : best,\n )\n\n return closest.id\n}\n\n/**\n * Formats a timestamp for display in the applied facets chip.\n *\n * @param timestamp - The stored timestamp (in seconds)\n * @returns A friendly display string\n */\nexport function formatTimeRangeDisplayValue(timestamp: string): string {\n const storedTimestamp = parseInt(timestamp)\n\n if (isNaN(storedTimestamp)) {\n return timestamp\n }\n\n if (storedTimestamp === 0) {\n return 'any time'\n }\n\n // Try to match to a preset\n const rangeId = getSelectedTimeRangeId(timestamp)\n const matchedRange = timeRanges.find(r => r.id === rangeId)\n\n if (matchedRange && matchedRange.id !== 'ANY_TIME') {\n return matchedRange.label\n }\n\n // Fallback to formatted date if no preset matches\n try {\n const valueInMilliseconds = storedTimestamp * 1000\n return new Date(valueInMilliseconds).toLocaleDateString()\n } catch {\n return timestamp\n }\n}\n"],"mappings":";;AAIA,IAAa,IAAyB,IAGhC,IAAc,MACd,IAAa,IAAc,IAC3B,IAAc,IAAa,GAC3B,IAAe,IAAa,IAC5B,IAAc,IAAa,KAIpB,IAAa;CACxB;EAAE,IAAI;EAAY,OAAO;EAAY,OAAO;CAAK;CACjD;EAAE,IAAI;EAAa,OAAO;EAAa,OAAO;CAAY;CAC1D;EAAE,IAAI;EAAY,OAAO;EAAiB,OAAO;CAAW;CAC5D;EAAE,IAAI;EAAa,OAAO;EAAa,OAAO;CAAY;CAC1D;EAAE,IAAI;EAAc,OAAO;EAAc,OAAO;CAAa;CAC7D;EAAE,IAAI;EAAa,OAAO;EAAa,OAAO;CAAY;AAC5D,GAGa,IAA8C;CACzD,WAAW;CACX,aAAa;AACf,GAGa,IAAsB;CACjC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,GAEa,IAAmB;CAC9B;CACA;CACA;CACA;AACF,GAEa,IAAqD;CAChE,WAAW;CACX,YAAY;CACZ,SAAS;CACT,QAAQ;CACR,aAAa;CACb,aAAa;CACb,YAAY;AACd;AAMA,SAAgB,EAAiB,GAA2B;CAG1D,OAAO,OADL,EAA2B,MAAc,EAAgB,CAAS;AAEtE;AAMA,SAAgB,EACd,GACA,GACS;CACT,IAAI,CAAC,KAAS,EAAM,KAAK,MAAM,IAC7B,OAAO;CAGT,IAAM,KACH,MAAc,eAAe,MAAc,iBAC5C,MAAU,QAEN,IAA0B,EAAM,SAAS,GAAG;CAElD,OAAO,CAAC,KAAsB,CAAC;AACjC;AAMA,IAAa,KAAe,MAA0B;CAEpD,IAAM,IAAsB,EAAK,YAAY,EAAE,QAAQ,MAAM,EAAE;CAE/D,OAAO,EAAiB,MACtB,MAAS,EAAM,YAAY,EAAE,QAAQ,MAAM,EAAE,MAAM,CACrD;AACF;AAKA,SAAgB,EAAgB,GAAsB;CACpD,OAAO,EAAK,QAAQ,MAAM,GAAG,EAAE,QAAQ,UAAS,MAAQ,EAAK,YAAY,CAAC;AAC5E;AAKA,SAAgB,EAAoB,GAA2B;CAC7D,OAAO,EAAoB,MAAc,EAAgB,CAAS;AACpE;AAKA,SAAgB,EAAkB,GAAuB;CAKvD,OAHA,EAAI,CAAC,EAAM,eAAe,EAAM,YAAY,WAAW;AAIzD;AAQA,SAAgB,EAAuB,GAA2B;CAChE,IAAM,IAAkB,SAAS,CAAS;CAE1C,IAAI,CAAC,GACH,OAAO;CAGT,IAAM,IAAgB,EAAM,EAAE,KAAK,IAAI;CAsBvC,OApBI,KAAiB,IACZ,aAIO,EAAW,QACxB,MACC,EAAM,OAAO,UAMD,EAAQ,QAAQ,GAAM,MACpC,KAAK,IAAI,IAAgB,EAAO,KAAK,IACrC,KAAK,IAAI,IAAgB,EAAK,KAAK,IAC/B,IACA,CAGC,EAAQ;AACjB;AAQA,SAAgB,EAA4B,GAA2B;CACrE,IAAM,IAAkB,SAAS,CAAS;CAE1C,IAAI,MAAM,CAAe,GACvB,OAAO;CAGT,IAAI,MAAoB,GACtB,OAAO;CAIT,IAAM,IAAU,EAAuB,CAAS,GAC1C,IAAe,EAAW,MAAK,MAAK,EAAE,OAAO,CAAO;CAE1D,IAAI,KAAgB,EAAa,OAAO,YACtC,OAAO,EAAa;CAItB,IAAI;EACF,IAAM,IAAsB,IAAkB;EAC9C,OAAO,IAAI,KAAK,CAAmB,EAAE,mBAAmB;CAC1D,QAAQ;EACN,OAAO;CACT;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"SearchPagePortalBanners.js","names":[],"sources":["../../../src/components/SynapseSearchPageResults/SearchPagePortalBanners.tsx"],"sourcesContent":["import { useGetQueryResultBundleWithAsyncStatus } from '@/synapse-queries'\nimport { useSourceAppConfigs } from '@/utils/hooks'\nimport { BUNDLE_MASK_QUERY_RESULTS } from '@/utils/SynapseConstants'\nimport { Box, Link, Typography } from '@mui/material'\nimport {\n ColumnSingleValueQueryFilter,\n ColumnSingleValueFilterOperator,\n} from '@sage-bionetworks/synapse-types'\n\nexport type SearchPagePortalBannersProps = {\n entityIds: string[]\n dataCatalogEntityId?: string\n sourceAppConfigTableID?: string\n}\n\n/**\n * Portal banner based on entities found in the first page of search results.\n */\nexport default function SearchPagePortalBanners({\n entityIds,\n dataCatalogEntityId = 'syn61609402',\n sourceAppConfigTableID = 'syn45291362',\n}: SearchPagePortalBannersProps) {\n // Query data catalog to find portal mappings for the entity IDs\n const dataCatalogAdditionalFilters: ColumnSingleValueQueryFilter[] =\n entityIds.length > 0\n ? [\n {\n concreteType:\n 'org.sagebionetworks.repo.model.table.ColumnSingleValueQueryFilter',\n columnName: 'id',\n operator: ColumnSingleValueFilterOperator.IN,\n values: entityIds,\n },\n ]\n : []\n\n const { data: dataCatalogData } = useGetQueryResultBundleWithAsyncStatus(\n {\n entityId: dataCatalogEntityId,\n query: {\n sql: `SELECT appId, link FROM ${dataCatalogEntityId}`,\n additionalFilters: dataCatalogAdditionalFilters,\n },\n partMask: BUNDLE_MASK_QUERY_RESULTS,\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n },\n {\n enabled: entityIds.length > 0,\n },\n )\n\n const rowSet = dataCatalogData?.responseBody?.queryResult?.queryResults\n const hasPortalBanners = !!rowSet && rowSet?.rows.length > 0\n const appIds = rowSet?.rows\n .map(row => row.values[0])\n .filter((v): v is string => !!v) as string[]\n\n // Get source app configurations for the found portal app IDs\n const sourceAppConfigFilters: ColumnSingleValueQueryFilter[] =\n appIds && appIds.length > 0\n ? [\n {\n concreteType:\n 'org.sagebionetworks.repo.model.table.ColumnSingleValueQueryFilter',\n columnName: 'appId',\n operator: ColumnSingleValueFilterOperator.IN,\n values: appIds,\n },\n ]\n : []\n\n const sourceAppConfigs = useSourceAppConfigs(\n sourceAppConfigTableID,\n sourceAppConfigFilters,\n )\n const hasSourceAppConfigs = !!sourceAppConfigs && sourceAppConfigs.length > 0\n const hasAppIds = appIds && appIds.length > 0\n if (!hasAppIds || !hasPortalBanners || !hasSourceAppConfigs) {\n return null\n }\n\n return (\n <>\n {sourceAppConfigs.map((appConfig, index) => {\n return (\n <Box\n key={index}\n sx={{\n display: 'flex',\n padding: '32px',\n backgroundColor: 'secondary.100',\n borderRadius: '8px',\n width: '100%',\n transition: 'background-color 0.3s',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: '50px',\n boxShadow:\n '0 4px 10px 0 rgba(0, 0, 0, 0.10), 0 1px 1px 0 rgba(0, 0, 0, 0.05)',\n }}\n >\n <Box>\n <Typography\n variant=\"smallText1\"\n sx={{ color: 'grey.900', mt: '4px', lineHeight: '20px' }}\n >\n Looks like you’re searching for information about{' '}\n {appConfig.area}\n {'. '}\n <Link\n component={'a'}\n href={appConfig.appURL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n sx={{\n color: theme => `${theme.palette.grey[900]} !important`,\n textDecorationColor: theme =>\n `${theme.palette.grey[900]} !important`,\n }}\n >\n Visit the {appConfig.friendlyName}\n </Link>\n .\n </Typography>\n </Box>\n <Box\n sx={{\n '> *': {\n height: '48px',\n width: 'auto',\n },\n }}\n >\n {appConfig?.logo}\n </Box>\n </Box>\n )\n })}\n </>\n )\n}\n"],"mappings":";;;;;;;;;AAkBA,SAAwB,EAAwB,EAC9C,cACA,yBAAsB,eACtB,4BAAyB,iBACM;CAE/B,IAAM,IACJ,EAAU,SAAS,IACf,CACE;EACE,cACE;EACF,YAAY;EACZ,UAAU,EAAgC;EAC1C,QAAQ;EACT,CACF,GACD,EAAE,EAEF,EAAE,MAAM,MAAoB,EAChC;EACE,UAAU;EACV,OAAO;GACL,KAAK,2BAA2B;GAChC,mBAAmB;GACpB;EACD,UAAA;EACA,cAAc;EACf,EACD,EACE,SAAS,EAAU,SAAS,GAC7B,CACF,EAEK,IAAS,GAAiB,cAAc,aAAa,cACrD,IAAmB,CAAC,CAAC,KAAU,GAAQ,KAAK,SAAS,GACrD,IAAS,GAAQ,KACpB,KAAI,MAAO,EAAI,OAAO,GAAG,CACzB,QAAQ,MAAmB,CAAC,CAAC,EAAE,EAgB5B,IAAmB,EACvB,GAbA,KAAU,EAAO,SAAS,IACtB,CACE;EACE,cACE;EACF,YAAY;EACZ,UAAU,EAAgC;EAC1C,QAAQ;EACT,CACF,GACD,EAAE,CAKP,EACK,IAAsB,CAAC,CAAC,KAAoB,EAAiB,SAAS;AAM5E,QAJI,EADc,KAAU,EAAO,SAAS,MAC1B,CAAC,KAAoB,CAAC,IAC/B,OAIP,kBAAA,GAAA,EAAA,UACG,EAAiB,KAAK,GAAW,MAE9B,kBAAC,GAAD;EAEE,IAAI;GACF,SAAS;GACT,SAAS;GACT,iBAAiB;GACjB,cAAc;GACd,OAAO;GACP,YAAY;GACZ,gBAAgB;GAChB,YAAY;GACZ,KAAK;GACL,WACE;GACH;YAdH,CAgBE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;GACE,SAAQ;GACR,IAAI;IAAE,OAAO;IAAY,IAAI;IAAO,YAAY;IAAQ;aAF1D;IAGC;IACmD;IACjD,EAAU;IACV;IACD,kBAAC,GAAD;KACE,WAAW;KACX,MAAM,EAAU;KAChB,QAAO;KACP,KAAI;KACJ,IAAI;MACF,QAAO,MAAS,GAAG,EAAM,QAAQ,KAAK,KAAK;MAC3C,sBAAqB,MACnB,GAAG,EAAM,QAAQ,KAAK,KAAK;MAC9B;eATH,CAUC,cACY,EAAU,aAChB;;;IAEI;MACT,CAAA,EACN,kBAAC,GAAD;GACE,IAAI,EACF,OAAO;IACL,QAAQ;IACR,OAAO;IACR,EACF;aAEA,GAAW;GACR,CAAA,CACF;IAjDC,EAiDD,CAER,EACD,CAAA"}
1
+ {"version":3,"file":"SearchPagePortalBanners.js","names":[],"sources":["../../../src/components/SynapseSearchPageResults/SearchPagePortalBanners.tsx"],"sourcesContent":["import { useGetQueryResultBundleWithAsyncStatus } from '@/synapse-queries'\nimport { useSourceAppConfigs } from '@/utils/hooks'\nimport { BUNDLE_MASK_QUERY_RESULTS } from '@/utils/SynapseConstants'\nimport { Box, Link, Typography } from '@mui/material'\nimport {\n ColumnSingleValueQueryFilter,\n ColumnSingleValueFilterOperator,\n} from '@sage-bionetworks/synapse-types'\n\nexport type SearchPagePortalBannersProps = {\n entityIds: string[]\n dataCatalogEntityId?: string\n sourceAppConfigTableID?: string\n}\n\n/**\n * Portal banner based on entities found in the first page of search results.\n */\nexport default function SearchPagePortalBanners({\n entityIds,\n dataCatalogEntityId = 'syn61609402',\n sourceAppConfigTableID = 'syn45291362',\n}: SearchPagePortalBannersProps) {\n // Query data catalog to find portal mappings for the entity IDs\n const dataCatalogAdditionalFilters: ColumnSingleValueQueryFilter[] =\n entityIds.length > 0\n ? [\n {\n concreteType:\n 'org.sagebionetworks.repo.model.table.ColumnSingleValueQueryFilter',\n columnName: 'id',\n operator: ColumnSingleValueFilterOperator.IN,\n values: entityIds,\n },\n ]\n : []\n\n const { data: dataCatalogData } = useGetQueryResultBundleWithAsyncStatus(\n {\n entityId: dataCatalogEntityId,\n query: {\n sql: `SELECT appId, link FROM ${dataCatalogEntityId}`,\n additionalFilters: dataCatalogAdditionalFilters,\n },\n partMask: BUNDLE_MASK_QUERY_RESULTS,\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n },\n {\n enabled: entityIds.length > 0,\n },\n )\n\n const rowSet = dataCatalogData?.responseBody?.queryResult?.queryResults\n const hasPortalBanners = !!rowSet && rowSet?.rows.length > 0\n const appIds = rowSet?.rows\n .map(row => row.values[0])\n .filter((v): v is string => !!v) as string[]\n\n // Get source app configurations for the found portal app IDs\n const sourceAppConfigFilters: ColumnSingleValueQueryFilter[] =\n appIds && appIds.length > 0\n ? [\n {\n concreteType:\n 'org.sagebionetworks.repo.model.table.ColumnSingleValueQueryFilter',\n columnName: 'appId',\n operator: ColumnSingleValueFilterOperator.IN,\n values: appIds,\n },\n ]\n : []\n\n const sourceAppConfigs = useSourceAppConfigs(\n sourceAppConfigTableID,\n sourceAppConfigFilters,\n )\n const hasSourceAppConfigs = !!sourceAppConfigs && sourceAppConfigs.length > 0\n const hasAppIds = appIds && appIds.length > 0\n if (!hasAppIds || !hasPortalBanners || !hasSourceAppConfigs) {\n return null\n }\n\n return (\n <>\n {sourceAppConfigs.map((appConfig, index) => {\n return (\n <Box\n key={index}\n sx={{\n display: 'flex',\n padding: '32px',\n backgroundColor: 'secondary.100',\n borderRadius: '8px',\n width: '100%',\n transition: 'background-color 0.3s',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: '50px',\n boxShadow:\n '0 4px 10px 0 rgba(0, 0, 0, 0.10), 0 1px 1px 0 rgba(0, 0, 0, 0.05)',\n }}\n >\n <Box>\n <Typography\n variant=\"smallText1\"\n sx={{ color: 'grey.900', mt: '4px', lineHeight: '20px' }}\n >\n Looks like you’re searching for information about{' '}\n {appConfig.area}\n {'. '}\n <Link\n component={'a'}\n href={appConfig.appURL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n sx={{\n color: theme => `${theme.palette.grey[900]} !important`,\n textDecorationColor: theme =>\n `${theme.palette.grey[900]} !important`,\n }}\n >\n Visit the {appConfig.friendlyName}\n </Link>\n .\n </Typography>\n </Box>\n <Box\n sx={{\n '> *': {\n height: '48px',\n width: 'auto',\n },\n }}\n >\n {appConfig?.logo}\n </Box>\n </Box>\n )\n })}\n </>\n )\n}\n"],"mappings":";;;;;;;;;AAkBA,SAAwB,EAAwB,EAC9C,cACA,yBAAsB,eACtB,4BAAyB,iBACM;CAE/B,IAAM,IACJ,EAAU,SAAS,IACf,CACE;EACE,cACE;EACF,YAAY;EACZ,UAAU,EAAgC;EAC1C,QAAQ;CACV,CACF,IACA,CAAC,GAED,EAAE,MAAM,MAAoB,EAChC;EACE,UAAU;EACV,OAAO;GACL,KAAK,2BAA2B;GAChC,mBAAmB;EACrB;EACA,UAAA;EACA,cAAc;CAChB,GACA,EACE,SAAS,EAAU,SAAS,EAC9B,CACF,GAEM,IAAS,GAAiB,cAAc,aAAa,cACrD,IAAmB,CAAC,CAAC,KAAU,GAAQ,KAAK,SAAS,GACrD,IAAS,GAAQ,KACpB,KAAI,MAAO,EAAI,OAAO,EAAE,EACxB,QAAQ,MAAmB,CAAC,CAAC,CAAC,GAgB3B,IAAmB,EACvB,GAbA,KAAU,EAAO,SAAS,IACtB,CACE;EACE,cACE;EACF,YAAY;EACZ,UAAU,EAAgC;EAC1C,QAAQ;CACV,CACF,IACA,CAAC,CAKP,GACM,IAAsB,CAAC,CAAC,KAAoB,EAAiB,SAAS;CAM5E,OAJI,EADc,KAAU,EAAO,SAAS,MAC1B,CAAC,KAAoB,CAAC,IAC/B,OAIP,kBAAA,GAAA,EAAA,UACG,EAAiB,KAAK,GAAW,MAE9B,kBAAC,GAAD;EAEE,IAAI;GACF,SAAS;GACT,SAAS;GACT,iBAAiB;GACjB,cAAc;GACd,OAAO;GACP,YAAY;GACZ,gBAAgB;GAChB,YAAY;GACZ,KAAK;GACL,WACE;EACJ;YAdF,CAgBE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;GACE,SAAQ;GACR,IAAI;IAAE,OAAO;IAAY,IAAI;IAAO,YAAY;GAAO;aAFzD;IAGC;IACmD;IACjD,EAAU;IACV;IACD,kBAAC,GAAD;KACE,WAAW;KACX,MAAM,EAAU;KAChB,QAAO;KACP,KAAI;KACJ,IAAI;MACF,QAAO,MAAS,GAAG,EAAM,QAAQ,KAAK,KAAK;MAC3C,sBAAqB,MACnB,GAAG,EAAM,QAAQ,KAAK,KAAK;KAC/B;eATF,CAUC,cACY,EAAU,YACjB;;IAAC;GAEG;KACT,CAAA,GACL,kBAAC,GAAD;GACE,IAAI,EACF,OAAO;IACL,QAAQ;IACR,OAAO;GACT,EACF;aAEC,GAAW;EACT,CAAA,CACF;IAjDE,CAiDF,CAER,EACD,CAAA;AAEN"}
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseSearchPage.js","names":[],"sources":["../../../src/components/SynapseSearchPageResults/SynapseSearchPage.tsx"],"sourcesContent":["import { useSearchParams } from 'react-router'\nimport { SEARCH_PAGE_QUERY_PARAM } from '@/utils/SynapseConstants'\nimport { SynapseSearchPageResults } from './SynapseSearchPageResults'\nimport SynapseSearchPageRouter, {\n SynapseSearchPageRouterProps,\n} from './SynapseSearchPageRouter'\nimport { SearchQuery } from '@sage-bionetworks/synapse-types'\nimport { DEFAULT_SEARCH_QUERY } from '@/utils/searchDefaults'\nimport { useEffect, useMemo } from 'react'\nimport { parseSynId } from '@/utils/functions/RegularExpressions'\nimport { BackendDestinationEnum, getEndpoint } from '@/utils/functions'\n\nfunction SearchPageInternal() {\n const [searchParams, setSearchParams] = useSearchParams()\n\n // Parse SearchQuery object from URL parameter\n const queryParam = searchParams.get(SEARCH_PAGE_QUERY_PARAM) || ''\n let parsedURLQuery = {}\n try {\n parsedURLQuery = queryParam ? JSON.parse(queryParam) : {}\n } catch (error) {\n console.error('Error parsing search query from URL:', error)\n }\n\n const query: SearchQuery = {\n ...DEFAULT_SEARCH_QUERY,\n ...parsedURLQuery,\n }\n\n const queryTerm = query?.queryTerm?.[0] || ''\n const parsedSynId = useMemo(() => parseSynId(queryTerm), [queryTerm])\n\n useEffect(() => {\n if (parsedSynId) {\n const entityPath = parsedSynId.targetVersionNumber\n ? `${parsedSynId.targetId}.${parsedSynId.targetVersionNumber}`\n : parsedSynId.targetId\n\n window.location.assign(\n `${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${entityPath}`,\n )\n }\n }, [parsedSynId])\n\n // Store the whole SearchQuery object as JSON in URL\n const handleQueryChange = (newQuery: SearchQuery) => {\n setSearchParams(prev => {\n if (newQuery && newQuery.queryTerm && newQuery.queryTerm.length > 0) {\n prev.set(SEARCH_PAGE_QUERY_PARAM, JSON.stringify(newQuery))\n } else {\n prev.delete(SEARCH_PAGE_QUERY_PARAM)\n }\n return prev\n })\n }\n\n if (parsedSynId) {\n return null\n }\n\n // Render search results with new query\n return <SynapseSearchPageResults query={query} setQuery={handleQueryChange} />\n}\n\nexport type SynapseSearchPageProps = Omit<\n SynapseSearchPageRouterProps,\n 'children'\n>\n\nexport default function SynapseSearchPage(props: SynapseSearchPageProps) {\n return (\n <SynapseSearchPageRouter {...props}>\n <SearchPageInternal />\n </SynapseSearchPageRouter>\n )\n}\n"],"mappings":";;;;;;;;;;;AAYA,SAAS,IAAqB;CAC5B,IAAM,CAAC,GAAc,KAAmB,GAAiB,EAGnD,IAAa,EAAa,IAAA,QAA4B,IAAI,IAC5D,IAAiB,EAAE;AACvB,KAAI;AACF,MAAiB,IAAa,KAAK,MAAM,EAAW,GAAG,EAAE;UAClD,GAAO;AACd,UAAQ,MAAM,wCAAwC,EAAM;;CAG9D,IAAM,IAAqB;EACzB,GAAG;EACH,GAAG;EACJ,EAEK,IAAY,GAAO,YAAY,MAAM,IACrC,IAAc,QAAc,EAAW,EAAU,EAAE,CAAC,EAAU,CAAC;AAiCrE,QA/BA,QAAgB;AACd,MAAI,GAAa;GACf,IAAM,IAAa,EAAY,sBAC3B,GAAG,EAAY,SAAS,GAAG,EAAY,wBACvC,EAAY;AAEhB,UAAO,SAAS,OACd,GAAG,EACD,EAAuB,gBACxB,CAAC,UAAU,IACb;;IAEF,CAAC,EAAY,CAAC,EAcb,IACK,OAIF,kBAAC,GAAD;EAAiC;EAAO,WAhBpB,MAA0B;AACnD,MAAgB,OACV,KAAY,EAAS,aAAa,EAAS,UAAU,SAAS,IAChE,EAAK,IAAI,GAAyB,KAAK,UAAU,EAAS,CAAC,GAE3D,EAAK,OAAO,EAAwB,EAE/B,GACP;;EAQ0E,CAAA;;AAQhF,SAAwB,EAAkB,GAA+B;AACvE,QACE,kBAAC,GAAD;EAAyB,GAAI;YAC3B,kBAAC,GAAD,EAAsB,CAAA;EACE,CAAA"}
1
+ {"version":3,"file":"SynapseSearchPage.js","names":[],"sources":["../../../src/components/SynapseSearchPageResults/SynapseSearchPage.tsx"],"sourcesContent":["import { useSearchParams } from 'react-router'\nimport { SEARCH_PAGE_QUERY_PARAM } from '@/utils/SynapseConstants'\nimport { SynapseSearchPageResults } from './SynapseSearchPageResults'\nimport SynapseSearchPageRouter, {\n SynapseSearchPageRouterProps,\n} from './SynapseSearchPageRouter'\nimport { SearchQuery } from '@sage-bionetworks/synapse-types'\nimport { DEFAULT_SEARCH_QUERY } from '@/utils/searchDefaults'\nimport { useEffect, useMemo } from 'react'\nimport { parseSynId } from '@/utils/functions/RegularExpressions'\nimport { BackendDestinationEnum, getEndpoint } from '@/utils/functions'\n\nfunction SearchPageInternal() {\n const [searchParams, setSearchParams] = useSearchParams()\n\n // Parse SearchQuery object from URL parameter\n const queryParam = searchParams.get(SEARCH_PAGE_QUERY_PARAM) || ''\n let parsedURLQuery = {}\n try {\n parsedURLQuery = queryParam ? JSON.parse(queryParam) : {}\n } catch (error) {\n console.error('Error parsing search query from URL:', error)\n }\n\n const query: SearchQuery = {\n ...DEFAULT_SEARCH_QUERY,\n ...parsedURLQuery,\n }\n\n const queryTerm = query?.queryTerm?.[0] || ''\n const parsedSynId = useMemo(() => parseSynId(queryTerm), [queryTerm])\n\n useEffect(() => {\n if (parsedSynId) {\n const entityPath = parsedSynId.targetVersionNumber\n ? `${parsedSynId.targetId}.${parsedSynId.targetVersionNumber}`\n : parsedSynId.targetId\n\n window.location.assign(\n `${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${entityPath}`,\n )\n }\n }, [parsedSynId])\n\n // Store the whole SearchQuery object as JSON in URL\n const handleQueryChange = (newQuery: SearchQuery) => {\n setSearchParams(prev => {\n if (newQuery && newQuery.queryTerm && newQuery.queryTerm.length > 0) {\n prev.set(SEARCH_PAGE_QUERY_PARAM, JSON.stringify(newQuery))\n } else {\n prev.delete(SEARCH_PAGE_QUERY_PARAM)\n }\n return prev\n })\n }\n\n if (parsedSynId) {\n return null\n }\n\n // Render search results with new query\n return <SynapseSearchPageResults query={query} setQuery={handleQueryChange} />\n}\n\nexport type SynapseSearchPageProps = Omit<\n SynapseSearchPageRouterProps,\n 'children'\n>\n\nexport default function SynapseSearchPage(props: SynapseSearchPageProps) {\n return (\n <SynapseSearchPageRouter {...props}>\n <SearchPageInternal />\n </SynapseSearchPageRouter>\n )\n}\n"],"mappings":";;;;;;;;;;;AAYA,SAAS,IAAqB;CAC5B,IAAM,CAAC,GAAc,KAAmB,EAAgB,GAGlD,IAAa,EAAa,IAAA,OAA2B,KAAK,IAC5D,IAAiB,CAAC;CACtB,IAAI;EACF,IAAiB,IAAa,KAAK,MAAM,CAAU,IAAI,CAAC;CAC1D,SAAS,GAAO;EACd,QAAQ,MAAM,wCAAwC,CAAK;CAC7D;CAEA,IAAM,IAAqB;EACzB,GAAG;EACH,GAAG;CACL,GAEM,IAAY,GAAO,YAAY,MAAM,IACrC,IAAc,QAAc,EAAW,CAAS,GAAG,CAAC,CAAS,CAAC;CAiCpE,OA/BA,QAAgB;EACd,IAAI,GAAa;GACf,IAAM,IAAa,EAAY,sBAC3B,GAAG,EAAY,SAAS,GAAG,EAAY,wBACvC,EAAY;GAEhB,OAAO,SAAS,OACd,GAAG,EACD,EAAuB,eACzB,EAAE,UAAU,GACd;EACF;CACF,GAAG,CAAC,CAAW,CAAC,GAcZ,IACK,OAIF,kBAAC,GAAD;EAAiC;EAAO,WAhBpB,MAA0B;GACnD,GAAgB,OACV,KAAY,EAAS,aAAa,EAAS,UAAU,SAAS,IAChE,EAAK,IAAI,GAAyB,KAAK,UAAU,CAAQ,CAAC,IAE1D,EAAK,OAAO,CAAuB,GAE9B,EACR;EACH;CAO6E,CAAA;AAC/E;AAOA,SAAwB,EAAkB,GAA+B;CACvE,OACE,kBAAC,GAAD;EAAyB,GAAI;YAC3B,kBAAC,GAAD,CAAqB,CAAA;CACE,CAAA;AAE7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseSearchPageResults.js","names":[],"sources":["../../../src/components/SynapseSearchPageResults/SynapseSearchPageResults.tsx"],"sourcesContent":["import {\n Box,\n TextField,\n InputAdornment,\n Button,\n Typography,\n IconButton,\n Collapse,\n Badge,\n Skeleton,\n Link,\n} from '@mui/material'\nimport SynapseSearchResultsCard from './SynapseSearchResultsCard'\nimport SearchIcon from '@mui/icons-material/Search'\nimport FilterAltOutlinedIcon from '@mui/icons-material/FilterAltOutlined'\nimport React, {\n useState,\n useEffect,\n useMemo,\n useCallback,\n Suspense,\n} from 'react'\nimport { useSearchInfinite } from '@/synapse-queries/search/useSearch'\nimport {\n SearchQuery,\n KeyRange,\n Hit,\n Facet,\n} from '@sage-bionetworks/synapse-types'\nimport { useDocumentMetadata } from '@/utils/context/DocumentMetadataContext'\nimport { ArrowForward } from '@mui/icons-material'\nimport styles from './SynapseSearchPageResults.module.scss'\nimport { useSuggestion } from '@/synapse-queries/search/useSuggestion'\nimport { Suggestion } from '@sage-bionetworks/synapse-client'\nimport SearchPagePortalBanners from './SearchPagePortalBanners'\nimport { SYNAPSE_ENTITY_ID_REGEX } from '@/utils/functions/RegularExpressions'\nimport { DEFAULT_SEARCH_QUERY } from '@/utils/searchDefaults'\nimport {\n SearchFacetPanel,\n AppliedFacetsChips,\n} from './SearchFacetPanel/SearchFacetPanel'\nimport { shouldShowFacetValue } from './SearchFacetPanel/SearchFacetPanelUtils'\nimport { SkeletonInlineBlock } from '../Skeleton'\nimport { useSynapseContext } from '@/utils'\n\n/**\n * Add a literal facet filter to the query\n */\nfunction addFacetToQuery(\n query: SearchQuery,\n facetName: string,\n facetValue: string,\n): SearchQuery {\n const booleanQuery = query.booleanQuery || []\n\n const isFilterAlreadyApplied = booleanQuery.some(\n kv => kv.key === facetName && kv.value === facetValue,\n )\n\n if (isFilterAlreadyApplied) {\n return query\n }\n\n return {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n booleanQuery: [\n ...booleanQuery,\n { key: facetName, value: facetValue, not: false },\n ],\n start: 0, // Reset to first page\n }\n}\n\n/**\n * Remove a literal facet filter from the query\n */\nfunction removeFacetFromQuery(\n query: SearchQuery,\n facetName: string,\n facetValue: string,\n): SearchQuery {\n const booleanQuery = query.booleanQuery || []\n\n return {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n booleanQuery: booleanQuery.filter(\n kv => !(kv.key === facetName && kv.value === facetValue),\n ),\n start: 0,\n }\n}\n\n/**\n * Set a range facet (ex, for modified on, created on)\n */\nfunction setRangeFacetInQuery(\n query: SearchQuery,\n facetName: string,\n minValue: string,\n): SearchQuery {\n const rangeQuery = query.rangeQuery || []\n\n // Remove any existing range for this facet\n const filteredRangeQuery = rangeQuery.filter(kr => kr.key !== facetName)\n\n const maxValue = String(Math.floor(Date.now() / 1000)) // Now in seconds\n\n return {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n rangeQuery: [\n ...filteredRangeQuery,\n { key: facetName, min: minValue, max: maxValue },\n ],\n start: 0,\n }\n}\n\n/**\n * Remove a range facet from the query\n */\nfunction removeRangeFacetFromQuery(\n query: SearchQuery,\n facetName: string,\n): SearchQuery {\n const rangeQuery = query.rangeQuery || []\n\n return {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n rangeQuery: rangeQuery.filter(kr => kr.key !== facetName),\n start: 0,\n }\n}\n\n/**\n * Check if a range facet is currently applied\n */\nfunction isRangeFacetApplied(query: SearchQuery, facetName: string): boolean {\n const rangeQuery = query.rangeQuery || []\n return rangeQuery.some(kr => kr.key === facetName)\n}\n\n/**\n * Get the applied range facet value for a given facet name\n */\nfunction getAppliedRangeFacet(\n query: SearchQuery,\n facetName: string,\n): KeyRange | undefined {\n const rangeQuery = query.rangeQuery || []\n return rangeQuery.find(kr => kr.key === facetName)\n}\n\nexport type SynapseSearchPageResultsProps = {\n query?: SearchQuery\n setQuery?: (newQuery: SearchQuery) => void\n}\n\nexport function SynapseSearchPageResults(props: SynapseSearchPageResultsProps) {\n const MIN_SUGGESTION_SCORE = 0.75\n const { query, setQuery } = props\n const { peopleSearchPageUrl } = useSynapseContext()\n const [expanded, setExpanded] = useState(false)\n\n // Set page title (replaces jsniUtils.setPageTitle(DisplayConstants.LABEL_SEARCH) from Java)\n useDocumentMetadata({ title: `Search: ${query?.queryTerm?.join(' ')}` })\n\n // Capture local state to prevent search from executing on every keystroke\n // Join query terms so that textfield input looks correct\n const [searchInputValue, setSearchInputValue] = useState(\n query?.queryTerm?.join(' ') || '',\n )\n\n // Sync input value when query prop changes\n // Join query terms so that textfield input looks correct\n useEffect(() => {\n setSearchInputValue(query?.queryTerm?.join(' ') || '')\n }, [query])\n\n // Execute search\n const {\n data,\n isLoading,\n error,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage,\n } = useSearchInfinite(\n query\n ? {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n size: 50,\n returnFields: ['path'],\n }\n : { queryTerm: [], size: 50, returnFields: ['path'] },\n {\n enabled: !!query?.queryTerm?.[0],\n },\n )\n\n // Update local input state\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearchInputValue(event.target.value)\n }\n\n // Update query only when user explicitly searches\n // Split query terms to form array\n const handleSearch = () => {\n if (setQuery) {\n const newQuery = {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n queryTerm: searchInputValue\n ? searchInputValue\n .split(' ')\n .map(term => term.trim())\n .filter(Boolean)\n : [],\n start: 0,\n }\n setQuery(newQuery)\n }\n }\n\n // Fetch spelling suggestions for the search terms\n const { data: suggestionData } = useSuggestion(\n { searchTerm: query?.queryTerm },\n\n {\n enabled: !!query?.queryTerm?.[0],\n },\n )\n\n const suggestion = useMemo(() => {\n const suggestionValues = suggestionData?.suggestions\n const terms = query?.queryTerm || []\n\n if (!suggestionValues) return null\n\n // Map original terms to their best suggestions if available\n const suggestionMap = new Map<string, string>()\n let hasSuggestion = false\n\n for (const suggestionList of suggestionValues) {\n const originalTerm = suggestionList.key\n const suggestions = Array.from(suggestionList.values ?? [])\n\n // Among suggestions above the score threshold, pick the highest-frequency term.\n const bestSuggestion = suggestions.reduce<Suggestion | null>(\n (best, current) => {\n if (\n current.score === undefined ||\n current.score < MIN_SUGGESTION_SCORE\n ) {\n return best\n }\n if (!best || (current.frequency ?? 0) > (best.frequency ?? 0)) {\n return current\n }\n return best\n },\n null,\n )\n\n // If a valid suggestion is found and it's different from the original term, add it to the map\n if (bestSuggestion?.term && bestSuggestion.term !== originalTerm) {\n suggestionMap.set(originalTerm!, bestSuggestion.term)\n hasSuggestion = true\n }\n }\n\n if (!hasSuggestion) return null\n\n // Build the corrected search string by replacing misspelled terms\n // Use toLowerCase() because the suggestion API returns keys in lowercase\n const correctedTerms = terms.map(\n term => suggestionMap.get(term.toLowerCase()) || term,\n )\n\n return correctedTerms.join(' ')\n }, [suggestionData, query?.queryTerm])\n\n // Extract entity IDs from search results for relevant portal banner display\n const entityIdsForPortalBanners = useMemo(() => {\n if (!data?.pages || data.pages.length === 0) {\n return []\n }\n\n const entityIds = new Set<string>()\n\n const firstPage = data.pages[0]\n\n if (firstPage?.hits) {\n for (const hit of firstPage.hits) {\n // search result is the top-level Project itself\n if (hit.id) {\n entityIds.add(hit.id)\n }\n\n if (hit.path?.path) {\n for (const pathEntity of hit.path.path.slice(1)) {\n if (pathEntity.id) {\n entityIds.add(pathEntity.id)\n }\n }\n }\n }\n }\n\n const finalIds = Array.from(entityIds)\n\n return finalIds\n }, [data])\n\n const handleUseSuggestion = () => {\n if (setQuery && suggestion) {\n const newQuery = {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n queryTerm: suggestion\n .split(' ')\n .map(term => term.trim())\n .filter(Boolean),\n start: 0,\n }\n setQuery(newQuery)\n }\n }\n\n const noResults = data?.pages?.[0]?.hits?.length === 0\n const isSynId = SYNAPSE_ENTITY_ID_REGEX.test(query?.queryTerm?.[0] || '')\n\n // cached facets in local state to prevent them from being cleared when the query changes and new search results are loading\n const [facets, setFacets] = useState<Facet[]>([])\n\n useEffect(() => {\n const newFacets = data?.pages?.[0]?.facets\n if (newFacets) {\n setFacets(newFacets)\n }\n }, [data])\n\n const handleAddFacet = useCallback(\n (facetName: string, facetValue: string) => {\n if (setQuery && query) {\n setQuery(addFacetToQuery(query, facetName, facetValue))\n }\n },\n [query, setQuery],\n )\n\n const handleRemoveFacet = useCallback(\n (facetName: string, facetValue: string) => {\n if (setQuery && query) {\n setQuery(removeFacetFromQuery(query, facetName, facetValue))\n }\n },\n [query, setQuery],\n )\n\n const handleSetRangeFacet = useCallback(\n (facetName: string, minValue: string) => {\n if (setQuery && query) {\n setQuery(setRangeFacetInQuery(query, facetName, minValue))\n }\n },\n [query, setQuery],\n )\n\n const handleRemoveRangeFacet = useCallback(\n (facetName: string) => {\n if (setQuery && query) {\n setQuery(removeRangeFacetFromQuery(query, facetName))\n }\n },\n [query, setQuery],\n )\n\n const isRangeFacetAppliedCallback = useCallback(\n (name: string) => (query ? isRangeFacetApplied(query, name) : false),\n [query],\n )\n\n const getAppliedRangeFacetCallback = useCallback(\n (name: string) => (query ? getAppliedRangeFacet(query, name) : undefined),\n [query],\n )\n\n const appliedFacetsCount =\n (query?.booleanQuery?.filter(kv => shouldShowFacetValue(kv.key, kv.value))\n .length || 0) + (query?.rangeQuery?.length || 0)\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n p: '30px',\n gap: '20px',\n }}\n >\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n height: 'auto',\n gap: '16px',\n }}\n >\n {peopleSearchPageUrl && (\n <Typography variant=\"smallText1\">\n Searching for a user profile? Try our{' '}\n <Link href={peopleSearchPageUrl}>People Search.</Link>\n </Typography>\n )}\n <Box className={styles.searchContainer}>\n <TextField\n placeholder=\"Search…\"\n sx={{ flex: 1 }}\n value={searchInputValue}\n onChange={handleInputChange}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n handleSearch()\n }\n }}\n slotProps={{\n input: {\n sx: {\n borderRadius: '96px',\n boxShadow: '0px 1px 4px var(--synapse-gray-500)',\n backgroundColor: 'var(--synapse-white)',\n },\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon sx={{ color: 'secondary.600' }} />\n </InputAdornment>\n ),\n },\n }}\n />\n <Button\n onClick={() => setExpanded(true)}\n variant=\"outlined\"\n startIcon={<FilterAltOutlinedIcon />}\n aria-expanded={expanded}\n aria-controls=\"filter-search-results-panel\"\n sx={{\n color: theme => theme.palette.primary.dark,\n }}\n className={styles.filterButton}\n >\n <Typography\n sx={{\n fontWeight: 700,\n lineHeight: '16px',\n display: 'flex',\n gap: '8px',\n }}\n >\n <span id=\"filter-results-button-label\">\n Filter Search Results\n </span>\n {appliedFacetsCount > 0 && (\n <Badge\n badgeContent={appliedFacetsCount}\n color=\"primary\"\n sx={{\n '& .MuiBadge-badge': {\n position: 'static',\n transform: 'none',\n height: '18px',\n minWidth: '18px',\n },\n }}\n />\n )}\n </Typography>\n </Button>\n </Box>\n <Box>\n {facets.length > 0 && (\n <Collapse\n in={expanded}\n id=\"filter-search-results-panel\"\n aria-labelledby=\"filter-results-button-label\"\n >\n <Box\n sx={{\n border: '1px solid',\n borderColor: 'var(--synapse-gray-100)',\n backgroundColor: 'var(--synapse-white)',\n padding: '25px',\n boxShadow: '0 4px 16px 0 rgba(0, 0, 0, 0.04)',\n pointerEvents: isLoading ? 'none' : 'auto',\n opacity: isLoading ? 0.5 : 1,\n }}\n >\n {query && setQuery && (\n <SearchFacetPanel\n expanded={expanded}\n onCollapse={() => setExpanded(false)}\n disabled={isLoading}\n query={query}\n setQuery={setQuery}\n facets={facets}\n onAddFacet={handleAddFacet}\n onRemoveFacet={handleRemoveFacet}\n onSetRangeFacet={handleSetRangeFacet}\n onRemoveRangeFacet={handleRemoveRangeFacet}\n isRangeFacetApplied={isRangeFacetAppliedCallback}\n getAppliedRangeFacet={getAppliedRangeFacetCallback}\n />\n )}\n </Box>\n </Collapse>\n )}\n </Box>\n </Box>\n <>\n {data && !isSynId && suggestion && (\n <div className={styles.didYouMeanContainer}>\n <div className={styles.didYouMeanCurrentlyShowing}>\n {!noResults && (\n <>\n Currently showing results for{' '}\n <b>{query?.queryTerm?.join(' ')}</b>.\n </>\n )}\n </div>\n <div className={styles.didYouMeanSuggestion}>\n <SearchIcon\n sx={{ color: 'grey.600' }}\n className={styles.searchIcon}\n />\n <Typography variant=\"body1\" className={styles.didYouMeanText}>\n Search for <b className={styles.suggestionText}>{suggestion}</b>{' '}\n instead?\n </Typography>\n <IconButton\n className={styles.didYouMeanArrowContainer}\n onClick={handleUseSuggestion}\n aria-label={`Search for ${suggestion} instead`}\n sx={{\n borderColor: 'primary.main',\n svg: { color: 'primary.main' },\n }}\n >\n <ArrowForward />\n </IconButton>\n </div>\n </div>\n )}\n {noResults && (\n <div className={styles.didYouMeanCurrentlyShowing}>\n No results found for <b>{query?.queryTerm?.join(' ')}</b>.\n </div>\n )}\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end',\n gap: '20px',\n }}\n >\n {isLoading &&\n Array.from({ length: 3 }, () => (\n <Skeleton variant=\"rectangular\" width={'100%'} height={'250px'} />\n ))}\n {error && <div>Error: {error.message}</div>}\n <Suspense\n fallback={<SkeletonInlineBlock width={'100%'} height={'150px'} />}\n >\n <SearchPagePortalBanners entityIds={entityIdsForPortalBanners} />\n </Suspense>\n {query && (\n <Box sx={{ alignSelf: 'flex-start' }}>\n <AppliedFacetsChips\n query={query}\n onRemoveFacet={handleRemoveFacet}\n onRemoveRangeFacet={handleRemoveRangeFacet}\n />\n </Box>\n )}\n {data &&\n data.pages &&\n data.pages.map((page, pageIndex) =>\n page.hits.map((hit: Hit) => {\n const projectPath = hit.path?.path?.[1]\n return (\n <SynapseSearchResultsCard\n searchTerms={query?.queryTerm ?? []}\n key={hit.id + '-' + pageIndex}\n entityId={hit.id}\n name={hit.name}\n entityType={hit.node_type}\n modifiedOn={hit.modified_on}\n description={hit.description}\n locatedIn={projectPath}\n />\n )\n }),\n )}\n {hasNextPage && (\n <Button\n onClick={() => {\n void fetchNextPage()\n }}\n loading={isFetchingNextPage}\n variant=\"contained\"\n sx={{ mt: 2 }}\n >\n {isFetchingNextPage ? 'Loading more...' : 'Load More'}\n </Button>\n )}\n </Box>\n </>\n </Box>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SynapseSearchPageResults.js","names":[],"sources":["../../../src/components/SynapseSearchPageResults/SynapseSearchPageResults.tsx"],"sourcesContent":["import {\n Box,\n TextField,\n InputAdornment,\n Button,\n Typography,\n IconButton,\n Collapse,\n Badge,\n Skeleton,\n Link,\n} from '@mui/material'\nimport SynapseSearchResultsCard from './SynapseSearchResultsCard'\nimport SearchIcon from '@mui/icons-material/Search'\nimport FilterAltOutlinedIcon from '@mui/icons-material/FilterAltOutlined'\nimport React, {\n useState,\n useEffect,\n useMemo,\n useCallback,\n Suspense,\n} from 'react'\nimport { useSearchInfinite } from '@/synapse-queries/search/useSearch'\nimport {\n SearchQuery,\n KeyRange,\n Hit,\n Facet,\n} from '@sage-bionetworks/synapse-types'\nimport { useDocumentMetadata } from '@/utils/context/DocumentMetadataContext'\nimport { ArrowForward } from '@mui/icons-material'\nimport styles from './SynapseSearchPageResults.module.scss'\nimport { useSuggestion } from '@/synapse-queries/search/useSuggestion'\nimport { Suggestion } from '@sage-bionetworks/synapse-client'\nimport SearchPagePortalBanners from './SearchPagePortalBanners'\nimport { SYNAPSE_ENTITY_ID_REGEX } from '@/utils/functions/RegularExpressions'\nimport { DEFAULT_SEARCH_QUERY } from '@/utils/searchDefaults'\nimport {\n SearchFacetPanel,\n AppliedFacetsChips,\n} from './SearchFacetPanel/SearchFacetPanel'\nimport { shouldShowFacetValue } from './SearchFacetPanel/SearchFacetPanelUtils'\nimport { SkeletonInlineBlock } from '../Skeleton'\nimport { useSynapseContext } from '@/utils'\n\n/**\n * Add a literal facet filter to the query\n */\nfunction addFacetToQuery(\n query: SearchQuery,\n facetName: string,\n facetValue: string,\n): SearchQuery {\n const booleanQuery = query.booleanQuery || []\n\n const isFilterAlreadyApplied = booleanQuery.some(\n kv => kv.key === facetName && kv.value === facetValue,\n )\n\n if (isFilterAlreadyApplied) {\n return query\n }\n\n return {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n booleanQuery: [\n ...booleanQuery,\n { key: facetName, value: facetValue, not: false },\n ],\n start: 0, // Reset to first page\n }\n}\n\n/**\n * Remove a literal facet filter from the query\n */\nfunction removeFacetFromQuery(\n query: SearchQuery,\n facetName: string,\n facetValue: string,\n): SearchQuery {\n const booleanQuery = query.booleanQuery || []\n\n return {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n booleanQuery: booleanQuery.filter(\n kv => !(kv.key === facetName && kv.value === facetValue),\n ),\n start: 0,\n }\n}\n\n/**\n * Set a range facet (ex, for modified on, created on)\n */\nfunction setRangeFacetInQuery(\n query: SearchQuery,\n facetName: string,\n minValue: string,\n): SearchQuery {\n const rangeQuery = query.rangeQuery || []\n\n // Remove any existing range for this facet\n const filteredRangeQuery = rangeQuery.filter(kr => kr.key !== facetName)\n\n const maxValue = String(Math.floor(Date.now() / 1000)) // Now in seconds\n\n return {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n rangeQuery: [\n ...filteredRangeQuery,\n { key: facetName, min: minValue, max: maxValue },\n ],\n start: 0,\n }\n}\n\n/**\n * Remove a range facet from the query\n */\nfunction removeRangeFacetFromQuery(\n query: SearchQuery,\n facetName: string,\n): SearchQuery {\n const rangeQuery = query.rangeQuery || []\n\n return {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n rangeQuery: rangeQuery.filter(kr => kr.key !== facetName),\n start: 0,\n }\n}\n\n/**\n * Check if a range facet is currently applied\n */\nfunction isRangeFacetApplied(query: SearchQuery, facetName: string): boolean {\n const rangeQuery = query.rangeQuery || []\n return rangeQuery.some(kr => kr.key === facetName)\n}\n\n/**\n * Get the applied range facet value for a given facet name\n */\nfunction getAppliedRangeFacet(\n query: SearchQuery,\n facetName: string,\n): KeyRange | undefined {\n const rangeQuery = query.rangeQuery || []\n return rangeQuery.find(kr => kr.key === facetName)\n}\n\nexport type SynapseSearchPageResultsProps = {\n query?: SearchQuery\n setQuery?: (newQuery: SearchQuery) => void\n}\n\nexport function SynapseSearchPageResults(props: SynapseSearchPageResultsProps) {\n const MIN_SUGGESTION_SCORE = 0.75\n const { query, setQuery } = props\n const { peopleSearchPageUrl } = useSynapseContext()\n const [expanded, setExpanded] = useState(false)\n\n // Set page title (replaces jsniUtils.setPageTitle(DisplayConstants.LABEL_SEARCH) from Java)\n useDocumentMetadata({ title: `Search: ${query?.queryTerm?.join(' ')}` })\n\n // Capture local state to prevent search from executing on every keystroke\n // Join query terms so that textfield input looks correct\n const [searchInputValue, setSearchInputValue] = useState(\n query?.queryTerm?.join(' ') || '',\n )\n\n // Sync input value when query prop changes\n // Join query terms so that textfield input looks correct\n useEffect(() => {\n setSearchInputValue(query?.queryTerm?.join(' ') || '')\n }, [query])\n\n // Execute search\n const {\n data,\n isLoading,\n error,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage,\n } = useSearchInfinite(\n query\n ? {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n size: 50,\n returnFields: ['path'],\n }\n : { queryTerm: [], size: 50, returnFields: ['path'] },\n {\n enabled: !!query?.queryTerm?.[0],\n },\n )\n\n // Update local input state\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearchInputValue(event.target.value)\n }\n\n // Update query only when user explicitly searches\n // Split query terms to form array\n const handleSearch = () => {\n if (setQuery) {\n const newQuery = {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n queryTerm: searchInputValue\n ? searchInputValue\n .split(' ')\n .map(term => term.trim())\n .filter(Boolean)\n : [],\n start: 0,\n }\n setQuery(newQuery)\n }\n }\n\n // Fetch spelling suggestions for the search terms\n const { data: suggestionData } = useSuggestion(\n { searchTerm: query?.queryTerm },\n\n {\n enabled: !!query?.queryTerm?.[0],\n },\n )\n\n const suggestion = useMemo(() => {\n const suggestionValues = suggestionData?.suggestions\n const terms = query?.queryTerm || []\n\n if (!suggestionValues) return null\n\n // Map original terms to their best suggestions if available\n const suggestionMap = new Map<string, string>()\n let hasSuggestion = false\n\n for (const suggestionList of suggestionValues) {\n const originalTerm = suggestionList.key\n const suggestions = Array.from(suggestionList.values ?? [])\n\n // Among suggestions above the score threshold, pick the highest-frequency term.\n const bestSuggestion = suggestions.reduce<Suggestion | null>(\n (best, current) => {\n if (\n current.score === undefined ||\n current.score < MIN_SUGGESTION_SCORE\n ) {\n return best\n }\n if (!best || (current.frequency ?? 0) > (best.frequency ?? 0)) {\n return current\n }\n return best\n },\n null,\n )\n\n // If a valid suggestion is found and it's different from the original term, add it to the map\n if (bestSuggestion?.term && bestSuggestion.term !== originalTerm) {\n suggestionMap.set(originalTerm!, bestSuggestion.term)\n hasSuggestion = true\n }\n }\n\n if (!hasSuggestion) return null\n\n // Build the corrected search string by replacing misspelled terms\n // Use toLowerCase() because the suggestion API returns keys in lowercase\n const correctedTerms = terms.map(\n term => suggestionMap.get(term.toLowerCase()) || term,\n )\n\n return correctedTerms.join(' ')\n }, [suggestionData, query?.queryTerm])\n\n // Extract entity IDs from search results for relevant portal banner display\n const entityIdsForPortalBanners = useMemo(() => {\n if (!data?.pages || data.pages.length === 0) {\n return []\n }\n\n const entityIds = new Set<string>()\n\n const firstPage = data.pages[0]\n\n if (firstPage?.hits) {\n for (const hit of firstPage.hits) {\n // search result is the top-level Project itself\n if (hit.id) {\n entityIds.add(hit.id)\n }\n\n if (hit.path?.path) {\n for (const pathEntity of hit.path.path.slice(1)) {\n if (pathEntity.id) {\n entityIds.add(pathEntity.id)\n }\n }\n }\n }\n }\n\n const finalIds = Array.from(entityIds)\n\n return finalIds\n }, [data])\n\n const handleUseSuggestion = () => {\n if (setQuery && suggestion) {\n const newQuery = {\n ...DEFAULT_SEARCH_QUERY,\n ...query,\n queryTerm: suggestion\n .split(' ')\n .map(term => term.trim())\n .filter(Boolean),\n start: 0,\n }\n setQuery(newQuery)\n }\n }\n\n const noResults = data?.pages?.[0]?.hits?.length === 0\n const isSynId = SYNAPSE_ENTITY_ID_REGEX.test(query?.queryTerm?.[0] || '')\n\n // cached facets in local state to prevent them from being cleared when the query changes and new search results are loading\n const [facets, setFacets] = useState<Facet[]>([])\n\n useEffect(() => {\n const newFacets = data?.pages?.[0]?.facets\n if (newFacets) {\n setFacets(newFacets)\n }\n }, [data])\n\n const handleAddFacet = useCallback(\n (facetName: string, facetValue: string) => {\n if (setQuery && query) {\n setQuery(addFacetToQuery(query, facetName, facetValue))\n }\n },\n [query, setQuery],\n )\n\n const handleRemoveFacet = useCallback(\n (facetName: string, facetValue: string) => {\n if (setQuery && query) {\n setQuery(removeFacetFromQuery(query, facetName, facetValue))\n }\n },\n [query, setQuery],\n )\n\n const handleSetRangeFacet = useCallback(\n (facetName: string, minValue: string) => {\n if (setQuery && query) {\n setQuery(setRangeFacetInQuery(query, facetName, minValue))\n }\n },\n [query, setQuery],\n )\n\n const handleRemoveRangeFacet = useCallback(\n (facetName: string) => {\n if (setQuery && query) {\n setQuery(removeRangeFacetFromQuery(query, facetName))\n }\n },\n [query, setQuery],\n )\n\n const isRangeFacetAppliedCallback = useCallback(\n (name: string) => (query ? isRangeFacetApplied(query, name) : false),\n [query],\n )\n\n const getAppliedRangeFacetCallback = useCallback(\n (name: string) => (query ? getAppliedRangeFacet(query, name) : undefined),\n [query],\n )\n\n const appliedFacetsCount =\n (query?.booleanQuery?.filter(kv => shouldShowFacetValue(kv.key, kv.value))\n .length || 0) + (query?.rangeQuery?.length || 0)\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n p: '30px',\n gap: '20px',\n }}\n >\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n height: 'auto',\n gap: '16px',\n }}\n >\n {peopleSearchPageUrl && (\n <Typography variant=\"smallText1\">\n Searching for a user profile? Try our{' '}\n <Link href={peopleSearchPageUrl}>People Search.</Link>\n </Typography>\n )}\n <Box className={styles.searchContainer}>\n <TextField\n placeholder=\"Search…\"\n sx={{ flex: 1 }}\n value={searchInputValue}\n onChange={handleInputChange}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n handleSearch()\n }\n }}\n slotProps={{\n input: {\n sx: {\n borderRadius: '96px',\n boxShadow: '0px 1px 4px var(--synapse-gray-500)',\n backgroundColor: 'var(--synapse-white)',\n },\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon sx={{ color: 'secondary.600' }} />\n </InputAdornment>\n ),\n },\n }}\n />\n <Button\n onClick={() => setExpanded(true)}\n variant=\"outlined\"\n startIcon={<FilterAltOutlinedIcon />}\n aria-expanded={expanded}\n aria-controls=\"filter-search-results-panel\"\n sx={{\n color: theme => theme.palette.primary.dark,\n }}\n className={styles.filterButton}\n >\n <Typography\n sx={{\n fontWeight: 700,\n lineHeight: '16px',\n display: 'flex',\n gap: '8px',\n }}\n >\n <span id=\"filter-results-button-label\">\n Filter Search Results\n </span>\n {appliedFacetsCount > 0 && (\n <Badge\n badgeContent={appliedFacetsCount}\n color=\"primary\"\n sx={{\n '& .MuiBadge-badge': {\n position: 'static',\n transform: 'none',\n height: '18px',\n minWidth: '18px',\n },\n }}\n />\n )}\n </Typography>\n </Button>\n </Box>\n <Box>\n {facets.length > 0 && (\n <Collapse\n in={expanded}\n id=\"filter-search-results-panel\"\n aria-labelledby=\"filter-results-button-label\"\n >\n <Box\n sx={{\n border: '1px solid',\n borderColor: 'var(--synapse-gray-100)',\n backgroundColor: 'var(--synapse-white)',\n padding: '25px',\n boxShadow: '0 4px 16px 0 rgba(0, 0, 0, 0.04)',\n pointerEvents: isLoading ? 'none' : 'auto',\n opacity: isLoading ? 0.5 : 1,\n }}\n >\n {query && setQuery && (\n <SearchFacetPanel\n expanded={expanded}\n onCollapse={() => setExpanded(false)}\n disabled={isLoading}\n query={query}\n setQuery={setQuery}\n facets={facets}\n onAddFacet={handleAddFacet}\n onRemoveFacet={handleRemoveFacet}\n onSetRangeFacet={handleSetRangeFacet}\n onRemoveRangeFacet={handleRemoveRangeFacet}\n isRangeFacetApplied={isRangeFacetAppliedCallback}\n getAppliedRangeFacet={getAppliedRangeFacetCallback}\n />\n )}\n </Box>\n </Collapse>\n )}\n </Box>\n </Box>\n <>\n {data && !isSynId && suggestion && (\n <div className={styles.didYouMeanContainer}>\n <div className={styles.didYouMeanCurrentlyShowing}>\n {!noResults && (\n <>\n Currently showing results for{' '}\n <b>{query?.queryTerm?.join(' ')}</b>.\n </>\n )}\n </div>\n <div className={styles.didYouMeanSuggestion}>\n <SearchIcon\n sx={{ color: 'grey.600' }}\n className={styles.searchIcon}\n />\n <Typography variant=\"body1\" className={styles.didYouMeanText}>\n Search for <b className={styles.suggestionText}>{suggestion}</b>{' '}\n instead?\n </Typography>\n <IconButton\n className={styles.didYouMeanArrowContainer}\n onClick={handleUseSuggestion}\n aria-label={`Search for ${suggestion} instead`}\n sx={{\n borderColor: 'primary.main',\n svg: { color: 'primary.main' },\n }}\n >\n <ArrowForward />\n </IconButton>\n </div>\n </div>\n )}\n {noResults && (\n <div className={styles.didYouMeanCurrentlyShowing}>\n No results found for <b>{query?.queryTerm?.join(' ')}</b>.\n </div>\n )}\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end',\n gap: '20px',\n }}\n >\n {isLoading &&\n Array.from({ length: 3 }, () => (\n <Skeleton variant=\"rectangular\" width={'100%'} height={'250px'} />\n ))}\n {error && <div>Error: {error.message}</div>}\n <Suspense\n fallback={<SkeletonInlineBlock width={'100%'} height={'150px'} />}\n >\n <SearchPagePortalBanners entityIds={entityIdsForPortalBanners} />\n </Suspense>\n {query && (\n <Box sx={{ alignSelf: 'flex-start' }}>\n <AppliedFacetsChips\n query={query}\n onRemoveFacet={handleRemoveFacet}\n onRemoveRangeFacet={handleRemoveRangeFacet}\n />\n </Box>\n )}\n {data &&\n data.pages &&\n data.pages.map((page, pageIndex) =>\n page.hits.map((hit: Hit) => {\n const projectPath = hit.path?.path?.[1]\n return (\n <SynapseSearchResultsCard\n searchTerms={query?.queryTerm ?? []}\n key={hit.id + '-' + pageIndex}\n entityId={hit.id}\n name={hit.name}\n entityType={hit.node_type}\n modifiedOn={hit.modified_on}\n description={hit.description}\n locatedIn={projectPath}\n />\n )\n }),\n )}\n {hasNextPage && (\n <Button\n onClick={() => {\n void fetchNextPage()\n }}\n loading={isFetchingNextPage}\n variant=\"contained\"\n sx={{ mt: 2 }}\n >\n {isFetchingNextPage ? 'Loading more...' : 'Load More'}\n </Button>\n )}\n </Box>\n </>\n </Box>\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseSearchPageRouter.js","names":[],"sources":["../../../src/components/SynapseSearchPageResults/SynapseSearchPageRouter.tsx"],"sourcesContent":["import { RouteErrorBoundary } from '@/components/error/RouteErrorBoundary'\nimport { PropsWithChildren, useMemo } from 'react'\nimport {\n createBrowserRouter,\n createMemoryRouter,\n RouteObject,\n RouterProvider,\n} from 'react-router'\nimport { RouterProvider as DOMRouterProvider } from 'react-router/dom'\n\nexport type SynapseSearchPageRouterProps = PropsWithChildren<{\n routerBaseName?: string\n useMemoryRouter?: boolean\n}>\n\nexport default function SynapseSearchPageRouter(\n props: SynapseSearchPageRouterProps,\n) {\n const {\n children,\n routerBaseName = '/SearchV2:default',\n useMemoryRouter = false,\n } = props\n const routes: RouteObject[] = useMemo(\n () => [\n {\n path: '/',\n element: <>{children}</>,\n errorElement: <RouteErrorBoundary />,\n },\n ],\n [children, useMemoryRouter],\n )\n\n const router = useMemo(() => {\n if (useMemoryRouter) {\n return createMemoryRouter(routes, {\n basename: routerBaseName,\n })\n } else {\n return createBrowserRouter(routes, {\n basename: routerBaseName,\n })\n }\n }, [useMemoryRouter, routes, routerBaseName])\n\n if (useMemoryRouter) {\n return <RouterProvider router={router} />\n }\n\n return <DOMRouterProvider router={router} />\n}\n"],"mappings":";;;;;;AAeA,SAAwB,EACtB,GACA;CACA,IAAM,EACJ,aACA,oBAAiB,qBACjB,qBAAkB,OAChB,GACE,IAAwB,QACtB,CACJ;EACE,MAAM;EACN,SAAS,kBAAA,GAAA,EAAG,aAAY,CAAA;EACxB,cAAc,kBAAC,GAAD,EAAsB,CAAA;EACrC,CACF,EACD,CAAC,GAAU,EAAgB,CAC5B,EAEK,IAAS,QACT,IACK,EAAmB,GAAQ,EAChC,UAAU,GACX,CAAC,GAEK,EAAoB,GAAQ,EACjC,UAAU,GACX,CAAC,EAEH;EAAC;EAAiB;EAAQ;EAAe,CAAC;AAM7C,QAHS,EADL,IACM,IAGF,GAHC,EAAwB,WAAU,CAAA"}
1
+ {"version":3,"file":"SynapseSearchPageRouter.js","names":[],"sources":["../../../src/components/SynapseSearchPageResults/SynapseSearchPageRouter.tsx"],"sourcesContent":["import { RouteErrorBoundary } from '@/components/error/RouteErrorBoundary'\nimport { PropsWithChildren, useMemo } from 'react'\nimport {\n createBrowserRouter,\n createMemoryRouter,\n RouteObject,\n RouterProvider,\n} from 'react-router'\nimport { RouterProvider as DOMRouterProvider } from 'react-router/dom'\n\nexport type SynapseSearchPageRouterProps = PropsWithChildren<{\n routerBaseName?: string\n useMemoryRouter?: boolean\n}>\n\nexport default function SynapseSearchPageRouter(\n props: SynapseSearchPageRouterProps,\n) {\n const {\n children,\n routerBaseName = '/SearchV2:default',\n useMemoryRouter = false,\n } = props\n const routes: RouteObject[] = useMemo(\n () => [\n {\n path: '/',\n element: <>{children}</>,\n errorElement: <RouteErrorBoundary />,\n },\n ],\n [children, useMemoryRouter],\n )\n\n const router = useMemo(() => {\n if (useMemoryRouter) {\n return createMemoryRouter(routes, {\n basename: routerBaseName,\n })\n } else {\n return createBrowserRouter(routes, {\n basename: routerBaseName,\n })\n }\n }, [useMemoryRouter, routes, routerBaseName])\n\n if (useMemoryRouter) {\n return <RouterProvider router={router} />\n }\n\n return <DOMRouterProvider router={router} />\n}\n"],"mappings":";;;;;;AAeA,SAAwB,EACtB,GACA;CACA,IAAM,EACJ,aACA,oBAAiB,qBACjB,qBAAkB,OAChB,GACE,IAAwB,QACtB,CACJ;EACE,MAAM;EACN,SAAS,kBAAA,GAAA,EAAG,YAAW,CAAA;EACvB,cAAc,kBAAC,GAAD,CAAqB,CAAA;CACrC,CACF,GACA,CAAC,GAAU,CAAe,CAC5B,GAEM,IAAS,QACT,IACK,EAAmB,GAAQ,EAChC,UAAU,EACZ,CAAC,IAEM,EAAoB,GAAQ,EACjC,UAAU,EACZ,CAAC,GAEF;EAAC;EAAiB;EAAQ;CAAc,CAAC;CAM5C,OAHS,EADL,IACM,IAGF,GAHC,EAAwB,UAAS,CAAA;AAI5C"}
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseSearchResultsCard.js","names":[],"sources":["../../../src/components/SynapseSearchPageResults/SynapseSearchResultsCard.tsx"],"sourcesContent":["import { useGetEntityBundle } from '@/synapse-queries'\nimport { calculateFriendlyFileSize } from '@/utils/functions/calculateFriendlyFileSize'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport {\n BackendDestinationEnum,\n getEndpoint,\n} from '@/utils/functions/getEndpoint'\nimport { StyledComponent } from '@emotion/styled'\nimport {\n ArticleOutlined,\n DashboardTwoTone,\n InfoOutline,\n Update as UpdateIcon,\n} from '@mui/icons-material'\nimport {\n Box,\n Chip,\n Link,\n Paper,\n PaperProps,\n Stack,\n styled,\n Typography,\n} from '@mui/material'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport dayjs from 'dayjs'\nimport { useRef } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport { EntityDownloadButton } from '../EntityDownloadButton/EntityDownloadButton'\nimport { FileHandleWithPreview } from '../EntityFinder/details/view/table/TableCellTypes'\nimport { EntityTypeIcon } from '../EntityIcon'\nimport FavoriteButton from '../favorites/FavoriteButton'\nimport { markdownToPlainText } from '../Markdown/MarkdownUtils'\nimport { searchResultsCardChipStyles } from './chipStyles'\nimport HasAccessChip from './HasAccessChip'\nimport { HighlightedTypography } from './HighlightedTypography'\nimport styles from './SynapseSearchResultsCard.module.scss'\n\nexport type SynapseSearchResultsCardProps = {\n entityId: string\n name: string\n description?: string\n entityType: EntityType\n modifiedOn: number\n locatedIn?: { name: string; id: string }\n searchTerms?: string[]\n}\n\nconst SynapseSearchResultsCardContainer: StyledComponent<PaperProps> = styled(\n Paper,\n {\n label: 'SynapseSearchResultsCardContainer',\n },\n)({\n display: 'flex',\n flexDirection: 'column',\n minHeight: '250px',\n width: '100%',\n borderRadius: '10px',\n padding: '32px',\n gap: '15px',\n})\n\nexport function SynapseSearchResultsCard(props: SynapseSearchResultsCardProps) {\n const downloadConfirmationRef = useRef<HTMLDivElement>(null)\n\n const { ref, inView } = useInView({\n triggerOnce: true,\n rootMargin: '250px 0px',\n })\n\n const { data: entityBundle } = useGetEntityBundle(\n props.entityId,\n undefined,\n { includeFileHandles: true },\n { enabled: props.entityType === EntityType.file && inView },\n )\n\n const file = entityBundle?.fileHandles.find(\n (file: FileHandleWithPreview) => file.isPreview !== true,\n )\n\n const friendlySize = file?.contentSize\n ? calculateFriendlyFileSize(file?.contentSize)\n : ''\n\n const plainDescription = props.description\n ? markdownToPlainText(props.description)\n : ''\n\n return (\n <SynapseSearchResultsCardContainer ref={ref}>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n width: '100%',\n }}\n >\n <Link\n href={`${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${props.entityId}`}\n sx={{\n textDecoration: 'underline 2px',\n textUnderlineOffset: '9px',\n }}\n >\n <HighlightedTypography\n className={styles.cardTitle}\n variant=\"headline3\"\n text={props.name}\n searchTerms={props.searchTerms ?? []}\n />\n </Link>\n\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n alignItems: 'center',\n }}\n >\n <FavoriteButton entityId={props.entityId} />\n <EntityDownloadButton\n entityId={props.entityId}\n name={props.name}\n entityType={props.entityType}\n downloadConfirmationContainer={downloadConfirmationRef}\n />\n </Box>\n </Box>\n {/* Portal target for EntityDownloadButton's download confirmation dialog */}\n <div ref={downloadConfirmationRef} />\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n }}\n >\n <Chip\n icon={\n <EntityTypeIcon\n type={props.entityType}\n wrap={false}\n sx={{ color: '#265149', width: '18px' }}\n />\n }\n label={props.entityType}\n sx={{ ...searchResultsCardChipStyles }}\n />\n <HasAccessChip entityId={props.entityId} />\n </Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n gap: '8px',\n }}\n >\n <Stack sx={{ gap: '20px', minWidth: 0, width: '100%' }}>\n <Box sx={{ display: 'flex' }}>\n <UpdateIcon className={styles.cardMetadataIcon} />\n <Typography className={styles.cardMetadataTypographyWithIcon}>\n Last updated:{' '}\n {formatDate(dayjs.unix(props.modifiedOn), 'M/D/YYYY')}\n </Typography>\n </Box>\n {plainDescription && (\n <Box sx={{ display: 'flex' }}>\n <ArticleOutlined className={styles.cardMetadataIcon} />\n <HighlightedTypography\n className={`${styles.cardMetadataTypographyWithIcon} ${styles.cardDescription}`}\n text={plainDescription}\n searchTerms={props.searchTerms ?? []}\n />\n </Box>\n )}\n\n {friendlySize && (\n <Box sx={{ display: 'flex' }}>\n <InfoOutline className={styles.cardMetadataIcon} />\n <Typography className={styles.cardMetadataTypographyWithIcon}>\n File size: <b>{friendlySize}</b>\n </Typography>\n </Box>\n )}\n {props.locatedIn && (\n <Box\n sx={{ display: 'flex', marginLeft: '24px', alignItems: 'center' }}\n >\n <Typography className={styles.cardMetadataTypographyWithIcon}>\n Located in:{' '}\n </Typography>\n <DashboardTwoTone\n className={styles.cardMetadataIcon}\n sx={{\n marginRight: '4px',\n }}\n />\n <Link\n className={styles.locatedInLink}\n href={`${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${props.locatedIn?.id}`}\n >\n {props.locatedIn?.name}\n </Link>\n </Box>\n )}\n </Stack>\n </Box>\n </SynapseSearchResultsCardContainer>\n )\n}\n\nexport default SynapseSearchResultsCard\n"],"mappings":"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"}
1
+ {"version":3,"file":"SynapseSearchResultsCard.js","names":[],"sources":["../../../src/components/SynapseSearchPageResults/SynapseSearchResultsCard.tsx"],"sourcesContent":["import { useGetEntityBundle } from '@/synapse-queries'\nimport { calculateFriendlyFileSize } from '@/utils/functions/calculateFriendlyFileSize'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport {\n BackendDestinationEnum,\n getEndpoint,\n} from '@/utils/functions/getEndpoint'\nimport { StyledComponent } from '@emotion/styled'\nimport {\n ArticleOutlined,\n DashboardTwoTone,\n InfoOutline,\n Update as UpdateIcon,\n} from '@mui/icons-material'\nimport {\n Box,\n Chip,\n Link,\n Paper,\n PaperProps,\n Stack,\n styled,\n Typography,\n} from '@mui/material'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport dayjs from 'dayjs'\nimport { useRef } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport { EntityDownloadButton } from '../EntityDownloadButton/EntityDownloadButton'\nimport { FileHandleWithPreview } from '../EntityFinder/details/view/table/TableCellTypes'\nimport { EntityTypeIcon } from '../EntityIcon'\nimport FavoriteButton from '../favorites/FavoriteButton'\nimport { markdownToPlainText } from '../Markdown/MarkdownUtils'\nimport { searchResultsCardChipStyles } from './chipStyles'\nimport HasAccessChip from './HasAccessChip'\nimport { HighlightedTypography } from './HighlightedTypography'\nimport styles from './SynapseSearchResultsCard.module.scss'\n\nexport type SynapseSearchResultsCardProps = {\n entityId: string\n name: string\n description?: string\n entityType: EntityType\n modifiedOn: number\n locatedIn?: { name: string; id: string }\n searchTerms?: string[]\n}\n\nconst SynapseSearchResultsCardContainer: StyledComponent<PaperProps> = styled(\n Paper,\n {\n label: 'SynapseSearchResultsCardContainer',\n },\n)({\n display: 'flex',\n flexDirection: 'column',\n minHeight: '250px',\n width: '100%',\n borderRadius: '10px',\n padding: '32px',\n gap: '15px',\n})\n\nexport function SynapseSearchResultsCard(props: SynapseSearchResultsCardProps) {\n const downloadConfirmationRef = useRef<HTMLDivElement>(null)\n\n const { ref, inView } = useInView({\n triggerOnce: true,\n rootMargin: '250px 0px',\n })\n\n const { data: entityBundle } = useGetEntityBundle(\n props.entityId,\n undefined,\n { includeFileHandles: true },\n { enabled: props.entityType === EntityType.file && inView },\n )\n\n const file = entityBundle?.fileHandles.find(\n (file: FileHandleWithPreview) => file.isPreview !== true,\n )\n\n const friendlySize = file?.contentSize\n ? calculateFriendlyFileSize(file?.contentSize)\n : ''\n\n const plainDescription = props.description\n ? markdownToPlainText(props.description)\n : ''\n\n return (\n <SynapseSearchResultsCardContainer ref={ref}>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n width: '100%',\n }}\n >\n <Link\n href={`${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${props.entityId}`}\n sx={{\n textDecoration: 'underline 2px',\n textUnderlineOffset: '9px',\n }}\n >\n <HighlightedTypography\n className={styles.cardTitle}\n variant=\"headline3\"\n text={props.name}\n searchTerms={props.searchTerms ?? []}\n />\n </Link>\n\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n alignItems: 'center',\n }}\n >\n <FavoriteButton entityId={props.entityId} />\n <EntityDownloadButton\n entityId={props.entityId}\n name={props.name}\n entityType={props.entityType}\n downloadConfirmationContainer={downloadConfirmationRef}\n />\n </Box>\n </Box>\n {/* Portal target for EntityDownloadButton's download confirmation dialog */}\n <div ref={downloadConfirmationRef} />\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n }}\n >\n <Chip\n icon={\n <EntityTypeIcon\n type={props.entityType}\n wrap={false}\n sx={{ color: '#265149', width: '18px' }}\n />\n }\n label={props.entityType}\n sx={{ ...searchResultsCardChipStyles }}\n />\n <HasAccessChip entityId={props.entityId} />\n </Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n gap: '8px',\n }}\n >\n <Stack sx={{ gap: '20px', minWidth: 0, width: '100%' }}>\n <Box sx={{ display: 'flex' }}>\n <UpdateIcon className={styles.cardMetadataIcon} />\n <Typography className={styles.cardMetadataTypographyWithIcon}>\n Last updated:{' '}\n {formatDate(dayjs.unix(props.modifiedOn), 'M/D/YYYY')}\n </Typography>\n </Box>\n {plainDescription && (\n <Box sx={{ display: 'flex' }}>\n <ArticleOutlined className={styles.cardMetadataIcon} />\n <HighlightedTypography\n className={`${styles.cardMetadataTypographyWithIcon} ${styles.cardDescription}`}\n text={plainDescription}\n searchTerms={props.searchTerms ?? []}\n />\n </Box>\n )}\n\n {friendlySize && (\n <Box sx={{ display: 'flex' }}>\n <InfoOutline className={styles.cardMetadataIcon} />\n <Typography className={styles.cardMetadataTypographyWithIcon}>\n File size: <b>{friendlySize}</b>\n </Typography>\n </Box>\n )}\n {props.locatedIn && (\n <Box\n sx={{ display: 'flex', marginLeft: '24px', alignItems: 'center' }}\n >\n <Typography className={styles.cardMetadataTypographyWithIcon}>\n Located in:{' '}\n </Typography>\n <DashboardTwoTone\n className={styles.cardMetadataIcon}\n sx={{\n marginRight: '4px',\n }}\n />\n <Link\n className={styles.locatedInLink}\n href={`${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${props.locatedIn?.id}`}\n >\n {props.locatedIn?.name}\n </Link>\n </Box>\n )}\n </Stack>\n </Box>\n </SynapseSearchResultsCardContainer>\n )\n}\n\nexport default SynapseSearchResultsCard\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chipStyles.js","names":[],"sources":["../../../src/components/SynapseSearchPageResults/chipStyles.ts"],"sourcesContent":["import { SxProps, Theme } from '@mui/material'\n\n/**\n * CSS class name for HasAccess components in chips to ensure consistent sizing\n */\nexport const CHIP_ICON_CLASS = 'chip-icon-sized'\n\n/**\n * Shared styling for chips in the SynapseSearchResultsCard\n * Used by both EntityType chip and HasAccess chip for consistent appearance\n */\nexport const searchResultsCardChipStyles: SxProps<Theme> = {\n backgroundColor: '#DAE9E7',\n fontSize: '15px',\n textTransform: 'capitalize',\n padding: '12px',\n marginRight: '8px',\n '.MuiChip-label': {\n pl: '5px',\n pr: 0,\n },\n}\n"],"mappings":";AAKA,IAAa,IAAkB,mBAMlB,IAA8C;CACzD,iBAAiB;CACjB,UAAU;CACV,eAAe;CACf,SAAS;CACT,aAAa;CACb,kBAAkB;EAChB,IAAI;EACJ,IAAI;EACL;CACF"}
1
+ {"version":3,"file":"chipStyles.js","names":[],"sources":["../../../src/components/SynapseSearchPageResults/chipStyles.ts"],"sourcesContent":["import { SxProps, Theme } from '@mui/material'\n\n/**\n * CSS class name for HasAccess components in chips to ensure consistent sizing\n */\nexport const CHIP_ICON_CLASS = 'chip-icon-sized'\n\n/**\n * Shared styling for chips in the SynapseSearchResultsCard\n * Used by both EntityType chip and HasAccess chip for consistent appearance\n */\nexport const searchResultsCardChipStyles: SxProps<Theme> = {\n backgroundColor: '#DAE9E7',\n fontSize: '15px',\n textTransform: 'capitalize',\n padding: '12px',\n marginRight: '8px',\n '.MuiChip-label': {\n pl: '5px',\n pr: 0,\n },\n}\n"],"mappings":";AAKA,IAAa,IAAkB,mBAMlB,IAA8C;CACzD,iBAAiB;CACjB,UAAU;CACV,eAAe;CACf,SAAS;CACT,aAAa;CACb,kBAAkB;EAChB,IAAI;EACJ,IAAI;CACN;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomControlButton.js","names":[],"sources":["../../../../src/components/SynapseTable/CustomControls/CustomControlButton.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { Button, ButtonProps } from '@mui/material'\nimport {\n CustomControl,\n CustomControlCallbackData,\n} from '../TopLevelControls/TopLevelControls'\n\nexport interface CustomControlButtonProps extends Omit<ButtonProps, 'onClick'> {\n control: CustomControl\n callbackData: CustomControlCallbackData\n}\n\nexport function CustomControlButton(props: CustomControlButtonProps) {\n const { control, callbackData, disabled, ...buttonProps } = props\n const { onClick, buttonText, buttonID } = control\n const [isLoading, setIsLoading] = useState(false)\n const isDisabled = disabled || isLoading\n\n return (\n <Button\n {...buttonProps}\n id={buttonID}\n variant=\"outlined\"\n disabled={isDisabled}\n loading={isLoading}\n onClick={() => {\n setIsLoading(true)\n onClick({\n ...callbackData,\n refresh: () => {\n setIsLoading(false)\n callbackData.refresh()\n },\n })\n }}\n >\n {buttonText}\n </Button>\n )\n}\n"],"mappings":";;;;AAYA,SAAgB,EAAoB,GAAiC;CACnE,IAAM,EAAE,YAAS,iBAAc,aAAU,GAAG,MAAgB,GACtD,EAAE,YAAS,eAAY,gBAAa,GACpC,CAAC,GAAW,KAAgB,EAAS,GAAM,EAC3C,IAAa,KAAY;AAE/B,QACE,kBAAC,GAAD;EACE,GAAI;EACJ,IAAI;EACJ,SAAQ;EACR,UAAU;EACV,SAAS;EACT,eAAe;AAEb,GADA,EAAa,GAAK,EAClB,EAAQ;IACN,GAAG;IACH,eAAe;AAEb,KADA,EAAa,GAAM,EACnB,EAAa,SAAS;;IAEzB,CAAC;;YAGH;EACM,CAAA"}
1
+ {"version":3,"file":"CustomControlButton.js","names":[],"sources":["../../../../src/components/SynapseTable/CustomControls/CustomControlButton.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { Button, ButtonProps } from '@mui/material'\nimport {\n CustomControl,\n CustomControlCallbackData,\n} from '../TopLevelControls/TopLevelControls'\n\nexport interface CustomControlButtonProps extends Omit<ButtonProps, 'onClick'> {\n control: CustomControl\n callbackData: CustomControlCallbackData\n}\n\nexport function CustomControlButton(props: CustomControlButtonProps) {\n const { control, callbackData, disabled, ...buttonProps } = props\n const { onClick, buttonText, buttonID } = control\n const [isLoading, setIsLoading] = useState(false)\n const isDisabled = disabled || isLoading\n\n return (\n <Button\n {...buttonProps}\n id={buttonID}\n variant=\"outlined\"\n disabled={isDisabled}\n loading={isLoading}\n onClick={() => {\n setIsLoading(true)\n onClick({\n ...callbackData,\n refresh: () => {\n setIsLoading(false)\n callbackData.refresh()\n },\n })\n }}\n >\n {buttonText}\n </Button>\n )\n}\n"],"mappings":";;;;AAYA,SAAgB,EAAoB,GAAiC;CACnE,IAAM,EAAE,YAAS,iBAAc,aAAU,GAAG,MAAgB,GACtD,EAAE,YAAS,eAAY,gBAAa,GACpC,CAAC,GAAW,KAAgB,EAAS,EAAK,GAC1C,IAAa,KAAY;CAE/B,OACE,kBAAC,GAAD;EACE,GAAI;EACJ,IAAI;EACJ,SAAQ;EACR,UAAU;EACV,SAAS;EACT,eAAe;GAEb,AADA,EAAa,EAAI,GACjB,EAAQ;IACN,GAAG;IACH,eAAe;KAEb,AADA,EAAa,EAAK,GAClB,EAAa,QAAQ;IACvB;GACF,CAAC;EACH;YAEC;CACK,CAAA;AAEZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomControlPanel.js","names":[],"sources":["../../../../src/components/SynapseTable/CustomControls/CustomControlPanel.tsx"],"sourcesContent":["import { ButtonProps, Box, Typography, Paper } from '@mui/material'\nimport {\n CustomControl,\n CustomControlCallbackData,\n} from '../TopLevelControls/TopLevelControls'\nimport { CustomControlButton } from './CustomControlButton'\n\nexport interface CustomControlPanelProps extends Omit<ButtonProps, 'onClick'> {\n control: CustomControl\n callbackData: CustomControlCallbackData\n}\n\nfunction CustomControlPanel(props: CustomControlPanelProps) {\n const { control, callbackData, ...buttonProps } = props\n const { title, description } = control\n\n return (\n <Paper\n sx={{\n backgroundColor: 'grey.100',\n p: 2,\n display: 'flex',\n alignItems: 'center',\n gap: 2,\n borderRadius: 1,\n }}\n elevation={0}\n >\n <Box sx={{ display: 'flex', flexDirection: 'column', flex: 1, gap: 0.5 }}>\n {title && (\n <Typography\n variant=\"body1\"\n sx={{ fontWeight: 700, fontSize: '14px' }}\n >\n {title}\n </Typography>\n )}\n {description && (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {description}\n </Typography>\n )}\n </Box>\n <CustomControlButton\n control={control}\n callbackData={callbackData}\n variant=\"outlined\"\n {...buttonProps}\n />\n </Paper>\n )\n}\n\nexport default CustomControlPanel\n"],"mappings":";;;;AAYA,SAAS,EAAmB,GAAgC;CAC1D,IAAM,EAAE,YAAS,iBAAc,GAAG,MAAgB,GAC5C,EAAE,UAAO,mBAAgB;AAE/B,QACE,kBAAC,GAAD;EACE,IAAI;GACF,iBAAiB;GACjB,GAAG;GACH,SAAS;GACT,YAAY;GACZ,KAAK;GACL,cAAc;GACf;EACD,WAAW;YATb,CAWE,kBAAC,GAAD;GAAK,IAAI;IAAE,SAAS;IAAQ,eAAe;IAAU,MAAM;IAAG,KAAK;IAAK;aAAxE,CACG,KACC,kBAAC,GAAD;IACE,SAAQ;IACR,IAAI;KAAE,YAAY;KAAK,UAAU;KAAQ;cAExC;IACU,CAAA,EAEd,KACC,kBAAC,GAAD;IAAY,SAAQ;IAAQ,OAAM;cAC/B;IACU,CAAA,CAEX;MACN,kBAAC,GAAD;GACW;GACK;GACd,SAAQ;GACR,GAAI;GACJ,CAAA,CACI"}
1
+ {"version":3,"file":"CustomControlPanel.js","names":[],"sources":["../../../../src/components/SynapseTable/CustomControls/CustomControlPanel.tsx"],"sourcesContent":["import { ButtonProps, Box, Typography, Paper } from '@mui/material'\nimport {\n CustomControl,\n CustomControlCallbackData,\n} from '../TopLevelControls/TopLevelControls'\nimport { CustomControlButton } from './CustomControlButton'\n\nexport interface CustomControlPanelProps extends Omit<ButtonProps, 'onClick'> {\n control: CustomControl\n callbackData: CustomControlCallbackData\n}\n\nfunction CustomControlPanel(props: CustomControlPanelProps) {\n const { control, callbackData, ...buttonProps } = props\n const { title, description } = control\n\n return (\n <Paper\n sx={{\n backgroundColor: 'grey.100',\n p: 2,\n display: 'flex',\n alignItems: 'center',\n gap: 2,\n borderRadius: 1,\n }}\n elevation={0}\n >\n <Box sx={{ display: 'flex', flexDirection: 'column', flex: 1, gap: 0.5 }}>\n {title && (\n <Typography\n variant=\"body1\"\n sx={{ fontWeight: 700, fontSize: '14px' }}\n >\n {title}\n </Typography>\n )}\n {description && (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {description}\n </Typography>\n )}\n </Box>\n <CustomControlButton\n control={control}\n callbackData={callbackData}\n variant=\"outlined\"\n {...buttonProps}\n />\n </Paper>\n )\n}\n\nexport default CustomControlPanel\n"],"mappings":";;;;AAYA,SAAS,EAAmB,GAAgC;CAC1D,IAAM,EAAE,YAAS,iBAAc,GAAG,MAAgB,GAC5C,EAAE,UAAO,mBAAgB;CAE/B,OACE,kBAAC,GAAD;EACE,IAAI;GACF,iBAAiB;GACjB,GAAG;GACH,SAAS;GACT,YAAY;GACZ,KAAK;GACL,cAAc;EAChB;EACA,WAAW;YATb,CAWE,kBAAC,GAAD;GAAK,IAAI;IAAE,SAAS;IAAQ,eAAe;IAAU,MAAM;IAAG,KAAK;GAAI;aAAvE,CACG,KACC,kBAAC,GAAD;IACE,SAAQ;IACR,IAAI;KAAE,YAAY;KAAK,UAAU;IAAO;cAEvC;GACS,CAAA,GAEb,KACC,kBAAC,GAAD;IAAY,SAAQ;IAAQ,OAAM;cAC/B;GACS,CAAA,CAEX;MACL,kBAAC,GAAD;GACW;GACK;GACd,SAAQ;GACR,GAAI;EACL,CAAA,CACI;;AAEX"}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomControls.js","names":[],"sources":["../../../../src/components/SynapseTable/CustomControls/CustomControls.tsx"],"sourcesContent":["import { Box } from '@mui/material'\nimport { useQueryContext } from '../../QueryContext'\nimport {\n useHasSelectedRowsAtomValue,\n useSelectedRowsAtomValue,\n} from '../../QueryWrapper/TableRowSelectionState'\nimport { useGetQueryMetadata } from '../../QueryWrapper/useGetQueryMetadata'\nimport CustomControlPanel from './CustomControlPanel'\nimport { CustomControl } from '../TopLevelControls/TopLevelControls'\nimport { getNumberOfResultsToInvokeAction } from '../TopLevelControls/TopLevelControlsUtils'\n\nexport type CustomControlsProps = {\n customControls?: CustomControl[]\n remount: () => void\n}\n\nexport function CustomControls(props: CustomControlsProps) {\n const { customControls, remount } = props\n const queryContext = useQueryContext()\n const { data: queryMetadata } = useGetQueryMetadata()\n const selectedRows = useSelectedRowsAtomValue()\n const hasSelectedRows = useHasSelectedRowsAtomValue()\n const { entityId, getCurrentQueryRequest } = queryContext\n\n if (!customControls || customControls.length === 0) {\n return null\n }\n\n const numberOfResultsToInvokeAction = getNumberOfResultsToInvokeAction(\n hasSelectedRows,\n selectedRows,\n queryMetadata?.queryCount,\n )\n\n const refresh = () => {\n remount()\n }\n\n return (\n <Box\n className=\"CustomControls\"\n sx={{ display: 'flex', flexDirection: 'column', gap: 2, my: 0 }}\n >\n {customControls.map((customControl: CustomControl, index: number) => (\n <CustomControlPanel\n key={customControl.buttonID ?? `${customControl.buttonText}-${index}`}\n disabled={!numberOfResultsToInvokeAction}\n control={customControl}\n callbackData={{\n tableId: entityId!,\n queryMetadata: queryMetadata,\n selectedRows,\n refresh,\n request: getCurrentQueryRequest(),\n }}\n />\n ))}\n </Box>\n )\n}\n"],"mappings":";;;;;;;;;AAgBA,SAAgB,EAAe,GAA4B;CACzD,IAAM,EAAE,mBAAgB,eAAY,GAC9B,IAAe,GAAiB,EAChC,EAAE,MAAM,MAAkB,GAAqB,EAC/C,IAAe,GAA0B,EACzC,IAAkB,GAA6B,EAC/C,EAAE,aAAU,8BAA2B;AAE7C,KAAI,CAAC,KAAkB,EAAe,WAAW,EAC/C,QAAO;CAGT,IAAM,IAAgC,EACpC,GACA,GACA,GAAe,WAChB,EAEK,UAAgB;AACpB,KAAS;;AAGX,QACE,kBAAC,GAAD;EACE,WAAU;EACV,IAAI;GAAE,SAAS;GAAQ,eAAe;GAAU,KAAK;GAAG,IAAI;GAAG;YAE9D,EAAe,KAAK,GAA8B,MACjD,kBAAC,GAAD;GAEE,UAAU,CAAC;GACX,SAAS;GACT,cAAc;IACZ,SAAS;IACM;IACf;IACA;IACA,SAAS,GAAwB;IAClC;GACD,EAVK,EAAc,YAAY,GAAG,EAAc,WAAW,GAAG,IAU9D,CACF;EACE,CAAA"}
1
+ {"version":3,"file":"CustomControls.js","names":[],"sources":["../../../../src/components/SynapseTable/CustomControls/CustomControls.tsx"],"sourcesContent":["import { Box } from '@mui/material'\nimport { useQueryContext } from '../../QueryContext'\nimport {\n useHasSelectedRowsAtomValue,\n useSelectedRowsAtomValue,\n} from '../../QueryWrapper/TableRowSelectionState'\nimport { useGetQueryMetadata } from '../../QueryWrapper/useGetQueryMetadata'\nimport CustomControlPanel from './CustomControlPanel'\nimport { CustomControl } from '../TopLevelControls/TopLevelControls'\nimport { getNumberOfResultsToInvokeAction } from '../TopLevelControls/TopLevelControlsUtils'\n\nexport type CustomControlsProps = {\n customControls?: CustomControl[]\n remount: () => void\n}\n\nexport function CustomControls(props: CustomControlsProps) {\n const { customControls, remount } = props\n const queryContext = useQueryContext()\n const { data: queryMetadata } = useGetQueryMetadata()\n const selectedRows = useSelectedRowsAtomValue()\n const hasSelectedRows = useHasSelectedRowsAtomValue()\n const { entityId, getCurrentQueryRequest } = queryContext\n\n if (!customControls || customControls.length === 0) {\n return null\n }\n\n const numberOfResultsToInvokeAction = getNumberOfResultsToInvokeAction(\n hasSelectedRows,\n selectedRows,\n queryMetadata?.queryCount,\n )\n\n const refresh = () => {\n remount()\n }\n\n return (\n <Box\n className=\"CustomControls\"\n sx={{ display: 'flex', flexDirection: 'column', gap: 2, my: 0 }}\n >\n {customControls.map((customControl: CustomControl, index: number) => (\n <CustomControlPanel\n key={customControl.buttonID ?? `${customControl.buttonText}-${index}`}\n disabled={!numberOfResultsToInvokeAction}\n control={customControl}\n callbackData={{\n tableId: entityId!,\n queryMetadata: queryMetadata,\n selectedRows,\n refresh,\n request: getCurrentQueryRequest(),\n }}\n />\n ))}\n </Box>\n )\n}\n"],"mappings":";;;;;;;;;AAgBA,SAAgB,EAAe,GAA4B;CACzD,IAAM,EAAE,mBAAgB,eAAY,GAC9B,IAAe,EAAgB,GAC/B,EAAE,MAAM,MAAkB,EAAoB,GAC9C,IAAe,EAAyB,GACxC,IAAkB,EAA4B,GAC9C,EAAE,aAAU,8BAA2B;CAE7C,IAAI,CAAC,KAAkB,EAAe,WAAW,GAC/C,OAAO;CAGT,IAAM,IAAgC,EACpC,GACA,GACA,GAAe,UACjB,GAEM,UAAgB;EACpB,EAAQ;CACV;CAEA,OACE,kBAAC,GAAD;EACE,WAAU;EACV,IAAI;GAAE,SAAS;GAAQ,eAAe;GAAU,KAAK;GAAG,IAAI;EAAE;YAE7D,EAAe,KAAK,GAA8B,MACjD,kBAAC,GAAD;GAEE,UAAU,CAAC;GACX,SAAS;GACT,cAAc;IACZ,SAAS;IACM;IACf;IACA;IACA,SAAS,EAAuB;GAClC;EACD,GAVM,EAAc,YAAY,GAAG,EAAc,WAAW,GAAG,GAU/D,CACF;CACE,CAAA;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityIDColumnCopyIcon.js","names":[],"sources":["../../../src/components/SynapseTable/EntityIDColumnCopyIcon.tsx"],"sourcesContent":["import React from 'react'\nimport { getFullQueryTableResults } from '@/synapse-client/SynapseClient'\nimport { SynapseConstants } from '@/utils'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { parseEntityIdAndVersionFromSqlStatement } from '@/utils/functions/SqlFunctions'\nimport { QueryResultBundle, Row } from '@sage-bionetworks/synapse-types'\nimport { useEffect, useMemo, useState } from 'react'\nimport {\n InteractiveCopyIdsIcon,\n InteractiveCopyIdsIconProps,\n} from '../InteractiveCopyIdsIcon'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport { useQueryContext } from '../QueryContext/QueryContext'\nimport { displayToast } from '../ToastMessage/ToastMessage'\nimport { copyStringToClipboard } from '@/utils/functions/StringUtils'\n\ntype EntityIDColumnCopyIconProps = Omit<InteractiveCopyIdsIconProps, 'onCopy'>\n\nconst EntityIDColumnCopyIcon = (\n props: EntityIDColumnCopyIconProps,\n): React.ReactNode => {\n const synapseContext = useSynapseContext()\n const { getCurrentQueryRequest } = useQueryContext()\n const queryRequestClone = useMemo(\n () => getCurrentQueryRequest(),\n [getCurrentQueryRequest],\n )\n const [isLoading, setIsLoading] = useState(false)\n const [idData, setIdData] = useState<QueryResultBundle>()\n const [abortController, setAbortController] = useState<AbortController>()\n\n useEffect(() => {\n if (!abortController) {\n setAbortController(new AbortController())\n }\n return () => {\n // clean up\n if (abortController) {\n abortController.abort()\n }\n }\n }, [abortController])\n /**\n * handle copy IDs to clipboard\n */\n const handleCopyIdsToClipboard = () => {\n setIsLoading(true)\n\n // ask for all pages of data\n const { sql: oldSql } = queryRequestClone.query\n const { entityId, versionNumber } =\n parseEntityIdAndVersionFromSqlStatement(oldSql)\n const versionNumberString = versionNumber ? `.${versionNumber}` : ''\n queryRequestClone.partMask = SynapseConstants.BUNDLE_MASK_QUERY_RESULTS\n const entityIdString = `${entityId}${versionNumberString}`\n const indexOfEntityId = oldSql.indexOf(entityIdString)\n queryRequestClone.query.sql = `select id from ${entityIdString}${oldSql.substring(\n indexOfEntityId + entityIdString.length,\n )}`\n getFullQueryTableResults(\n queryRequestClone,\n synapseContext.accessToken,\n abortController?.signal,\n )\n .then((data: QueryResultBundle) => {\n setIdData(data)\n })\n .catch((err: any) => {\n console.error(err)\n displayToast('Unable to query for all Synapse IDs to copy', 'danger')\n })\n .finally(() => {\n setIsLoading(false)\n })\n }\n\n useEffect(() => {\n if (idData) {\n const { rows } = idData.queryResult!.queryResults\n const synIDs = rows\n .map((row: Row) => {\n return `${row.values[0]}`\n })\n .join('\\n')\n copyStringToClipboard(synIDs).then(() => {\n displayToast('Successfully copied to clipboard')\n setIdData(undefined)\n })\n }\n }, [idData])\n\n return isLoading ? (\n <SynapseSpinner size={25} />\n ) : (\n <InteractiveCopyIdsIcon\n {...props}\n onCopy={() => {\n handleCopyIdsToClipboard()\n }}\n />\n )\n}\n\nexport default EntityIDColumnCopyIcon\n"],"mappings":";;;;;;;;;;;;;AAkBA,IAAM,KACJ,MACoB;CACpB,IAAM,IAAiB,GAAmB,EACpC,EAAE,8BAA2B,GAAiB,EAC9C,IAAoB,QAClB,GAAwB,EAC9B,CAAC,EAAuB,CACzB,EACK,CAAC,GAAW,KAAgB,EAAS,GAAM,EAC3C,CAAC,GAAQ,KAAa,GAA6B,EACnD,CAAC,GAAiB,KAAsB,GAA2B;AAEzE,UACO,KACH,EAAmB,IAAI,iBAAiB,CAAC,QAE9B;AAEX,EAAI,KACF,EAAgB,OAAO;KAG1B,CAAC,EAAgB,CAAC;CAIrB,IAAM,UAAiC;AACrC,IAAa,GAAK;EAGlB,IAAM,EAAE,KAAK,MAAW,EAAkB,OACpC,EAAE,aAAU,qBAChB,EAAwC,EAAO,EAC3C,IAAsB,IAAgB,IAAI,MAAkB;AAClE,IAAkB,WAAW;EAC7B,IAAM,IAAiB,GAAG,IAAW,KAC/B,IAAkB,EAAO,QAAQ,EAAe;AAItD,EAHA,EAAkB,MAAM,MAAM,kBAAkB,IAAiB,EAAO,UACtE,IAAkB,EAAe,OAClC,IACD,EACE,GACA,EAAe,aACf,GAAiB,OAClB,CACE,MAAM,MAA4B;AACjC,KAAU,EAAK;IACf,CACD,OAAO,MAAa;AAEnB,GADA,QAAQ,MAAM,EAAI,EAClB,EAAa,+CAA+C,SAAS;IACrE,CACD,cAAc;AACb,KAAa,GAAM;IACnB;;AAkBN,QAfA,QAAgB;AACd,MAAI,GAAQ;GACV,IAAM,EAAE,YAAS,EAAO,YAAa;AAMrC,KALe,EACZ,KAAK,MACG,GAAG,EAAI,OAAO,KACrB,CACD,KAAK,KACc,CAAO,CAAC,WAAW;AAEvC,IADA,EAAa,mCAAmC,EAChD,EAAU,KAAA,EAAU;KACpB;;IAEH,CAAC,EAAO,CAAC,EAEL,IACL,kBAAC,GAAD,EAAgB,MAAM,IAAM,CAAA,GAE5B,kBAAC,GAAD;EACE,GAAI;EACJ,cAAc;AACZ,MAA0B;;EAE5B,CAAA"}
1
+ {"version":3,"file":"EntityIDColumnCopyIcon.js","names":[],"sources":["../../../src/components/SynapseTable/EntityIDColumnCopyIcon.tsx"],"sourcesContent":["import React from 'react'\nimport { getFullQueryTableResults } from '@/synapse-client/SynapseClient'\nimport { SynapseConstants } from '@/utils'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { parseEntityIdAndVersionFromSqlStatement } from '@/utils/functions/SqlFunctions'\nimport { QueryResultBundle, Row } from '@sage-bionetworks/synapse-types'\nimport { useEffect, useMemo, useState } from 'react'\nimport {\n InteractiveCopyIdsIcon,\n InteractiveCopyIdsIconProps,\n} from '../InteractiveCopyIdsIcon'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport { useQueryContext } from '../QueryContext/QueryContext'\nimport { displayToast } from '../ToastMessage/ToastMessage'\nimport { copyStringToClipboard } from '@/utils/functions/StringUtils'\n\ntype EntityIDColumnCopyIconProps = Omit<InteractiveCopyIdsIconProps, 'onCopy'>\n\nconst EntityIDColumnCopyIcon = (\n props: EntityIDColumnCopyIconProps,\n): React.ReactNode => {\n const synapseContext = useSynapseContext()\n const { getCurrentQueryRequest } = useQueryContext()\n const queryRequestClone = useMemo(\n () => getCurrentQueryRequest(),\n [getCurrentQueryRequest],\n )\n const [isLoading, setIsLoading] = useState(false)\n const [idData, setIdData] = useState<QueryResultBundle>()\n const [abortController, setAbortController] = useState<AbortController>()\n\n useEffect(() => {\n if (!abortController) {\n setAbortController(new AbortController())\n }\n return () => {\n // clean up\n if (abortController) {\n abortController.abort()\n }\n }\n }, [abortController])\n /**\n * handle copy IDs to clipboard\n */\n const handleCopyIdsToClipboard = () => {\n setIsLoading(true)\n\n // ask for all pages of data\n const { sql: oldSql } = queryRequestClone.query\n const { entityId, versionNumber } =\n parseEntityIdAndVersionFromSqlStatement(oldSql)\n const versionNumberString = versionNumber ? `.${versionNumber}` : ''\n queryRequestClone.partMask = SynapseConstants.BUNDLE_MASK_QUERY_RESULTS\n const entityIdString = `${entityId}${versionNumberString}`\n const indexOfEntityId = oldSql.indexOf(entityIdString)\n queryRequestClone.query.sql = `select id from ${entityIdString}${oldSql.substring(\n indexOfEntityId + entityIdString.length,\n )}`\n getFullQueryTableResults(\n queryRequestClone,\n synapseContext.accessToken,\n abortController?.signal,\n )\n .then((data: QueryResultBundle) => {\n setIdData(data)\n })\n .catch((err: any) => {\n console.error(err)\n displayToast('Unable to query for all Synapse IDs to copy', 'danger')\n })\n .finally(() => {\n setIsLoading(false)\n })\n }\n\n useEffect(() => {\n if (idData) {\n const { rows } = idData.queryResult!.queryResults\n const synIDs = rows\n .map((row: Row) => {\n return `${row.values[0]}`\n })\n .join('\\n')\n copyStringToClipboard(synIDs).then(() => {\n displayToast('Successfully copied to clipboard')\n setIdData(undefined)\n })\n }\n }, [idData])\n\n return isLoading ? (\n <SynapseSpinner size={25} />\n ) : (\n <InteractiveCopyIdsIcon\n {...props}\n onCopy={() => {\n handleCopyIdsToClipboard()\n }}\n />\n )\n}\n\nexport default EntityIDColumnCopyIcon\n"],"mappings":";;;;;;;;;;;;;AAkBA,IAAM,KACJ,MACoB;CACpB,IAAM,IAAiB,EAAkB,GACnC,EAAE,8BAA2B,EAAgB,GAC7C,IAAoB,QAClB,EAAuB,GAC7B,CAAC,CAAsB,CACzB,GACM,CAAC,GAAW,KAAgB,EAAS,EAAK,GAC1C,CAAC,GAAQ,KAAa,EAA4B,GAClD,CAAC,GAAiB,KAAsB,EAA0B;CAExE,SACO,KACH,EAAmB,IAAI,gBAAgB,CAAC,SAE7B;EAEX,AAAI,KACF,EAAgB,MAAM;CAE1B,IACC,CAAC,CAAe,CAAC;CAIpB,IAAM,UAAiC;EACrC,EAAa,EAAI;EAGjB,IAAM,EAAE,KAAK,MAAW,EAAkB,OACpC,EAAE,aAAU,qBAChB,EAAwC,CAAM,GAC1C,IAAsB,IAAgB,IAAI,MAAkB;EAClE,EAAkB,WAAW;EAC7B,IAAM,IAAiB,GAAG,IAAW,KAC/B,IAAkB,EAAO,QAAQ,CAAc;EAIrD,AAHA,EAAkB,MAAM,MAAM,kBAAkB,IAAiB,EAAO,UACtE,IAAkB,EAAe,MACnC,KACA,EACE,GACA,EAAe,aACf,GAAiB,MACnB,EACG,MAAM,MAA4B;GACjC,EAAU,CAAI;EAChB,CAAC,EACA,OAAO,MAAa;GAEnB,AADA,QAAQ,MAAM,CAAG,GACjB,EAAa,+CAA+C,QAAQ;EACtE,CAAC,EACA,cAAc;GACb,EAAa,EAAK;EACpB,CAAC;CACL;CAiBA,OAfA,QAAgB;EACd,IAAI,GAAQ;GACV,IAAM,EAAE,YAAS,EAAO,YAAa;GAMrC,EALe,EACZ,KAAK,MACG,GAAG,EAAI,OAAO,IACtB,EACA,KAAK,IACc,CAAM,EAAE,WAAW;IAEvC,AADA,EAAa,kCAAkC,GAC/C,EAAU,KAAA,CAAS;GACrB,CAAC;EACH;CACF,GAAG,CAAC,CAAM,CAAC,GAEJ,IACL,kBAAC,GAAD,EAAgB,MAAM,GAAK,CAAA,IAE3B,kBAAC,GAAD;EACE,GAAI;EACJ,cAAc;GACZ,EAAyB;EAC3B;CACD,CAAA;AAEL"}
@@ -1 +1 @@
1
- {"version":3,"file":"ExpandCollapseButton.js","names":[],"sources":["../../../src/components/SynapseTable/ExpandCollapseButton.tsx"],"sourcesContent":["import { ButtonHTMLAttributes } from 'react'\nimport IconSvg from '../IconSvg'\n\ntype ExpandCollapseButtonProps = {\n isExpanded: boolean\n} & ButtonHTMLAttributes<HTMLButtonElement>\n\nexport default function ExpandCollapseButton(props: ExpandCollapseButtonProps) {\n const { isExpanded, ...buttonProps } = props\n return (\n <button {...buttonProps}>\n <IconSvg\n icon={isExpanded ? 'minusBoxOutline' : 'addBoxOutline'}\n sx={{\n color: 'grey.600',\n height: '16px',\n verticalAlign: 'top',\n '&:hover': {\n color: 'grey.700',\n },\n }}\n />\n </button>\n )\n}\n"],"mappings":";;;AAOA,SAAwB,EAAqB,GAAkC;CAC7E,IAAM,EAAE,eAAY,GAAG,MAAgB;AACvC,QACE,kBAAC,UAAD;EAAQ,GAAI;YACV,kBAAC,GAAD;GACE,MAAM,IAAa,oBAAoB;GACvC,IAAI;IACF,OAAO;IACP,QAAQ;IACR,eAAe;IACf,WAAW,EACT,OAAO,YACR;IACF;GACD,CAAA;EACK,CAAA"}
1
+ {"version":3,"file":"ExpandCollapseButton.js","names":[],"sources":["../../../src/components/SynapseTable/ExpandCollapseButton.tsx"],"sourcesContent":["import { ButtonHTMLAttributes } from 'react'\nimport IconSvg from '../IconSvg'\n\ntype ExpandCollapseButtonProps = {\n isExpanded: boolean\n} & ButtonHTMLAttributes<HTMLButtonElement>\n\nexport default function ExpandCollapseButton(props: ExpandCollapseButtonProps) {\n const { isExpanded, ...buttonProps } = props\n return (\n <button {...buttonProps}>\n <IconSvg\n icon={isExpanded ? 'minusBoxOutline' : 'addBoxOutline'}\n sx={{\n color: 'grey.600',\n height: '16px',\n verticalAlign: 'top',\n '&:hover': {\n color: 'grey.700',\n },\n }}\n />\n </button>\n )\n}\n"],"mappings":";;;AAOA,SAAwB,EAAqB,GAAkC;CAC7E,IAAM,EAAE,eAAY,GAAG,MAAgB;CACvC,OACE,kBAAC,UAAD;EAAQ,GAAI;YACV,kBAAC,GAAD;GACE,MAAM,IAAa,oBAAoB;GACvC,IAAI;IACF,OAAO;IACP,QAAQ;IACR,eAAe;IACf,WAAW,EACT,OAAO,WACT;GACF;EACD,CAAA;CACK,CAAA;AAEZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"ExpandableTableDataCell.js","names":[],"sources":["../../../src/components/SynapseTable/ExpandableTableDataCell.tsx"],"sourcesContent":["import { HTMLAttributes, useRef, useState } from 'react'\nimport { useResizeObserver } from '@react-hookz/web'\nimport ExpandCollapseButton from './ExpandCollapseButton'\n\nexport default function ExpandableTableDataCell(\n props: HTMLAttributes<HTMLTableCellElement>,\n) {\n const [isExpanded, setIsExpanded] = useState(false)\n const [isOverflowingWhenNotExpanded, setIsOverflowingWhenNotExpanded] =\n useState(false)\n const tdRef = useRef<HTMLTableCellElement | null>(null)\n\n /**\n * When the cell is resized, check if it is overflowing.\n */\n useResizeObserver(tdRef, ({ target }) => {\n // Don't check overflow if the cell has been expanded by the user!\n if (!isExpanded) {\n if (target) {\n const contentElement = target.getElementsByClassName(\n 'SynapseTableCellContent',\n )[0]\n if (contentElement) {\n // Add 2px threshold to account for sub-pixel rounding errors\n const threshold = 2\n setIsOverflowingWhenNotExpanded(\n contentElement.scrollHeight >\n contentElement.clientHeight + threshold ||\n contentElement.scrollWidth >\n contentElement.clientWidth + threshold,\n )\n }\n }\n }\n })\n\n return (\n <td\n {...props}\n className={`ExpandableTableData ${\n props.className ? props.className : ''\n }`}\n aria-expanded={isExpanded}\n ref={tdRef}\n >\n {isOverflowingWhenNotExpanded && (\n <ExpandCollapseButton\n isExpanded={isExpanded}\n className=\"ExpandableTableData__expandButton\"\n onClick={() => setIsExpanded(!isExpanded)}\n />\n )}\n {props.children}\n </td>\n )\n}\n"],"mappings":";;;;;AAIA,SAAwB,EACtB,GACA;CACA,IAAM,CAAC,GAAY,KAAiB,EAAS,GAAM,EAC7C,CAAC,GAA8B,KACnC,EAAS,GAAM,EACX,IAAQ,EAAoC,KAAK;AA0BvD,QArBA,EAAkB,IAAQ,EAAE,gBAAa;AAEvC,MAAI,CAAC,KACC,GAAQ;GACV,IAAM,IAAiB,EAAO,uBAC5B,0BACD,CAAC;AACF,GAAI,KAGF,EACE,EAAe,eACb,EAAe,eAAe,KAC9B,EAAe,cACb,EAAe,cAAc,EAClC;;GAIP,EAGA,kBAAC,MAAD;EACE,GAAI;EACJ,WAAW,uBACT,EAAM,YAAY,EAAM,YAAY;EAEtC,iBAAe;EACf,KAAK;YANP,CAQG,KACC,kBAAC,GAAD;GACc;GACZ,WAAU;GACV,eAAe,EAAc,CAAC,EAAW;GACzC,CAAA,EAEH,EAAM,SACJ"}
1
+ {"version":3,"file":"ExpandableTableDataCell.js","names":[],"sources":["../../../src/components/SynapseTable/ExpandableTableDataCell.tsx"],"sourcesContent":["import { HTMLAttributes, useRef, useState } from 'react'\nimport { useResizeObserver } from '@react-hookz/web'\nimport ExpandCollapseButton from './ExpandCollapseButton'\n\nexport default function ExpandableTableDataCell(\n props: HTMLAttributes<HTMLTableCellElement>,\n) {\n const [isExpanded, setIsExpanded] = useState(false)\n const [isOverflowingWhenNotExpanded, setIsOverflowingWhenNotExpanded] =\n useState(false)\n const tdRef = useRef<HTMLTableCellElement | null>(null)\n\n /**\n * When the cell is resized, check if it is overflowing.\n */\n useResizeObserver(tdRef, ({ target }) => {\n // Don't check overflow if the cell has been expanded by the user!\n if (!isExpanded) {\n if (target) {\n const contentElement = target.getElementsByClassName(\n 'SynapseTableCellContent',\n )[0]\n if (contentElement) {\n // Add 2px threshold to account for sub-pixel rounding errors\n const threshold = 2\n setIsOverflowingWhenNotExpanded(\n contentElement.scrollHeight >\n contentElement.clientHeight + threshold ||\n contentElement.scrollWidth >\n contentElement.clientWidth + threshold,\n )\n }\n }\n }\n })\n\n return (\n <td\n {...props}\n className={`ExpandableTableData ${\n props.className ? props.className : ''\n }`}\n aria-expanded={isExpanded}\n ref={tdRef}\n >\n {isOverflowingWhenNotExpanded && (\n <ExpandCollapseButton\n isExpanded={isExpanded}\n className=\"ExpandableTableData__expandButton\"\n onClick={() => setIsExpanded(!isExpanded)}\n />\n )}\n {props.children}\n </td>\n )\n}\n"],"mappings":";;;;;AAIA,SAAwB,EACtB,GACA;CACA,IAAM,CAAC,GAAY,KAAiB,EAAS,EAAK,GAC5C,CAAC,GAA8B,KACnC,EAAS,EAAK,GACV,IAAQ,EAAoC,IAAI;CA0BtD,OArBA,EAAkB,IAAQ,EAAE,gBAAa;EAEvC,IAAI,CAAC,KACC,GAAQ;GACV,IAAM,IAAiB,EAAO,uBAC5B,yBACF,EAAE;GACF,AAAI,KAGF,EACE,EAAe,eACb,EAAe,eAAe,KAC9B,EAAe,cACb,EAAe,cAAc,CACnC;EAEJ;CAEJ,CAAC,GAGC,kBAAC,MAAD;EACE,GAAI;EACJ,WAAW,uBACT,EAAM,YAAY,EAAM,YAAY;EAEtC,iBAAe;EACf,KAAK;YANP,CAQG,KACC,kBAAC,GAAD;GACc;GACZ,WAAU;GACV,eAAe,EAAc,CAAC,CAAU;EACzC,CAAA,GAEF,EAAM,QACL;;AAER"}
@@ -1 +1 @@
1
- {"version":3,"file":"NoContentAvailable.js","names":[],"sources":["../../../src/components/SynapseTable/NoContentAvailable.tsx"],"sourcesContent":["export default function NoContentAvailable() {\n return (\n <>\n <p className=\"SRC-no-results-title\">\n There is currently no content here.\n </p>\n <p className=\"SRC-no-results-description\">\n Information is always being updated, so check back later to see if\n content has been added.\n </p>\n </>\n )\n}\n"],"mappings":";;AAAA,SAAwB,IAAqB;AAC3C,QACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,KAAD;EAAG,WAAU;YAAuB;EAEhC,CAAA,EACJ,kBAAC,KAAD;EAAG,WAAU;YAA6B;EAGtC,CAAA,CACH,EAAA,CAAA"}
1
+ {"version":3,"file":"NoContentAvailable.js","names":[],"sources":["../../../src/components/SynapseTable/NoContentAvailable.tsx"],"sourcesContent":["export default function NoContentAvailable() {\n return (\n <>\n <p className=\"SRC-no-results-title\">\n There is currently no content here.\n </p>\n <p className=\"SRC-no-results-description\">\n Information is always being updated, so check back later to see if\n content has been added.\n </p>\n </>\n )\n}\n"],"mappings":";;AAAA,SAAwB,IAAqB;CAC3C,OACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,KAAD;EAAG,WAAU;YAAuB;CAEjC,CAAA,GACH,kBAAC,KAAD;EAAG,WAAU;YAA6B;CAGvC,CAAA,CACH,EAAA,CAAA;AAEN"}
@@ -1 +1 @@
1
- {"version":3,"file":"NoContentPlaceholderType.js","names":[],"sources":["../../../src/components/SynapseTable/NoContentPlaceholderType.ts"],"sourcesContent":["/**\n * When displaying that there are no results, there are two scenarios:\n * 1. Interactive - the user can modify the query and may have chosen a query with no results\n * - If the user has not modified the query, show a message that the table is empty\n * - If the user has modified the query, show a message that there are no results and to try a different input\n * 2. Static - the user cannot modify the query. Show a message that there is no content available.\n * 3. Hidden - No content is shown if the user does not have access to the results\n */\nexport enum NoContentPlaceholderType {\n INTERACTIVE = 'INTERACTIVE',\n STATIC = 'STATIC',\n HIDDEN = 'HIDDEN',\n}\n"],"mappings":";AAQA,IAAY,IAAL,yBAAA,GAAA;QACL,EAAA,cAAc,eACd,EAAA,SAAS,UACT,EAAA,SAAS;KACV"}
1
+ {"version":3,"file":"NoContentPlaceholderType.js","names":[],"sources":["../../../src/components/SynapseTable/NoContentPlaceholderType.ts"],"sourcesContent":["/**\n * When displaying that there are no results, there are two scenarios:\n * 1. Interactive - the user can modify the query and may have chosen a query with no results\n * - If the user has not modified the query, show a message that the table is empty\n * - If the user has modified the query, show a message that there are no results and to try a different input\n * 2. Static - the user cannot modify the query. Show a message that there is no content available.\n * 3. Hidden - No content is shown if the user does not have access to the results\n */\nexport enum NoContentPlaceholderType {\n INTERACTIVE = 'INTERACTIVE',\n STATIC = 'STATIC',\n HIDDEN = 'HIDDEN',\n}\n"],"mappings":";AAQA,IAAY,IAAL,yBAAA,GAAA;QACL,EAAA,cAAA,eACA,EAAA,SAAA,UACA,EAAA,SAAA;AACF,EAAA,CAAA,CAAA"}
@@ -19,12 +19,12 @@ import { useState as p } from "react";
19
19
  import { toast as m } from "react-hot-toast";
20
20
  import { Box as h, Button as g } from "@mui/material";
21
21
  import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
22
- import { useAtom as b } from "jotai";
23
- import { GetAppTwoTone as x } from "@mui/icons-material";
22
+ import { GetAppTwoTone as b } from "@mui/icons-material";
23
+ import { useAtom as x } from "jotai";
24
24
  //#region src/components/SynapseTable/RowSelection/RowSelectionControls.tsx
25
25
  var S = "SendToAnalysisPlatformRowSelectionControlButton";
26
26
  function C(C) {
27
- let { customControls: w = [], remount: T } = C, { isAuthenticated: E } = e(), [D, O] = p(!1), { entityId: k, versionNumber: A, getCurrentQueryRequest: j } = a(), { data: M } = t(k, A), { data: N } = o(), [P, F] = b(c), I = u(), { setIsShowingExportToAnalysisPlatformModal: L, enabledExternalAnalysisPlatforms: R } = s(), z = R.length > 0, B = () => {
27
+ let { customControls: w = [], remount: T } = C, { isAuthenticated: E } = e(), [D, O] = p(!1), { entityId: k, versionNumber: A, getCurrentQueryRequest: j } = a(), { data: M } = t(k, A), { data: N } = o(), [P, F] = x(c), I = u(), { setIsShowingExportToAnalysisPlatformModal: L, enabledExternalAnalysisPlatforms: R } = s(), z = R.length > 0, B = () => {
28
28
  F([]), T && T();
29
29
  }, V = n(M, r(N?.columnModels));
30
30
  return /* @__PURE__ */ v(f, {
@@ -69,7 +69,7 @@ function C(C) {
69
69
  })
70
70
  }), { duration: Infinity });
71
71
  },
72
- startIcon: /* @__PURE__ */ v(x, {}),
72
+ startIcon: /* @__PURE__ */ v(b, {}),
73
73
  children: "Add to Download List"
74
74
  })
75
75
  ] })