synapse-react-client 4.0.3 → 4.0.5-b

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 (338) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/assets/DefaultColorfulPortalCardBackground.svg +14 -0
  3. package/dist/assets/DefaultColorfulPortalCardBackground.svg.js +7 -0
  4. package/dist/assets/DefaultColorfulPortalCardBackground.svg.js.map +1 -0
  5. package/dist/assets/homepage/nih-aging.svg +27 -27
  6. package/dist/assets/homepage/nih-aging.svg.js +1 -1
  7. package/dist/assets/homepage/nih-aging.svg.js.map +1 -1
  8. package/dist/assets/homepage/nih-heart.svg +39 -46
  9. package/dist/assets/homepage/nih-heart.svg.js +3 -3
  10. package/dist/assets/homepage/nih-heart.svg.js.map +1 -1
  11. package/dist/assets/homepage/nih-nci.svg +6 -0
  12. package/dist/assets/homepage/nih-nci.svg.js +7 -0
  13. package/dist/assets/homepage/nih-nci.svg.js.map +1 -0
  14. package/dist/assets/homepage/nih-nimh.svg +14 -0
  15. package/dist/assets/homepage/nih-nimh.svg.js +7 -0
  16. package/dist/assets/homepage/nih-nimh.svg.js.map +1 -0
  17. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js +1 -1
  18. package/dist/components/AccessRequirementList/AccessRequirementList.js +4 -4
  19. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.d.ts.map +1 -1
  20. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js +8 -7
  21. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
  22. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js +4 -4
  23. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItem.js +11 -11
  24. package/dist/components/AccessRequirementList/RequirementItem/RequirementItem.js +1 -1
  25. package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js +9 -9
  26. package/dist/components/AccessRequirementList/RequirementItem/UnmanagedACTAccessRequirementItem.js +5 -5
  27. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.d.ts.map +1 -1
  28. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js +33 -32
  29. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
  30. package/dist/components/AclEditor/AclEditor.js +8 -8
  31. package/dist/components/AclEditor/AclEditor.js.map +1 -1
  32. package/dist/components/AclEditor/AclEditor.test-utils.js +34 -34
  33. package/dist/components/AclEditor/AclEditor.test-utils.js.map +1 -1
  34. package/dist/components/Authentication/AuthenticationMethodSelection.js +1 -1
  35. package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
  36. package/dist/components/Authentication/TwoFactorEnrollmentForm.js +6 -5
  37. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  38. package/dist/components/BasePortalCard/BasePortalCard.css +1 -1
  39. package/dist/components/BasePortalCard/BasePortalCard.d.ts +1 -1
  40. package/dist/components/BasePortalCard/BasePortalCard.d.ts.map +1 -1
  41. package/dist/components/BasePortalCard/BasePortalCard.js +12 -12
  42. package/dist/components/BasePortalCard/BasePortalCard.js.map +1 -1
  43. package/dist/components/BasePortalCard/BasePortalCard.module.scss +6 -0
  44. package/dist/components/BasePortalCard/BasePortalCard.module.scss.js +1 -1
  45. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.css +1 -1
  46. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.d.ts.map +1 -1
  47. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js +24 -23
  48. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js.map +1 -1
  49. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.module.scss +15 -5
  50. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.module.scss.js +1 -1
  51. package/dist/components/CardContainer/CardLink.d.ts +12 -0
  52. package/dist/components/CardContainer/CardLink.d.ts.map +1 -1
  53. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js +12 -12
  54. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.d.ts.map +1 -1
  55. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js +7 -7
  56. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
  57. package/dist/components/CitationPopover/CitationPopoverContent.d.ts.map +1 -1
  58. package/dist/components/CitationPopover/CitationPopoverContent.js +13 -12
  59. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  60. package/dist/components/CookiesNotification/CookiesNotification.js +1 -1
  61. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js +3 -4
  62. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js.map +1 -1
  63. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js +2 -2
  64. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  65. package/dist/components/DataGrid/SynapseGrid.js +35 -35
  66. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  67. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js +2 -2
  68. package/dist/components/DataGrid/hooks/useExportDataGridToCsv.d.ts.map +1 -1
  69. package/dist/components/DataGrid/hooks/useExportDataGridToCsv.js +9 -7
  70. package/dist/components/DataGrid/hooks/useExportDataGridToCsv.js.map +1 -1
  71. package/dist/components/DownloadCart/ActionRequiredCard/ActionRequiredCard.js +1 -1
  72. package/dist/components/DownloadCart/RequestDownloadCard.js +1 -1
  73. package/dist/components/Ecosystem/EcosystemSkeleton.js +2 -2
  74. package/dist/components/Ecosystem/TableQueryEcosystem.js +1 -1
  75. package/dist/components/EntityAclEditor/EntityAclEditorModal.js +1 -1
  76. package/dist/components/EntityAclEditor/OpenData.js +1 -1
  77. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.d.ts.map +1 -1
  78. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +113 -127
  79. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  80. package/dist/components/EntityCitation/EntityCitation.js +1 -1
  81. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js +1 -1
  82. package/dist/components/EntityFinder/details/view/table/CreatedOnCell.js +1 -1
  83. package/dist/components/EntityFinder/details/view/table/EntityNameCell.js +1 -1
  84. package/dist/components/EntityFinder/details/view/table/FileEntityMD5Cell.js +1 -1
  85. package/dist/components/EntityFinder/details/view/table/FileEntitySizeCell.js +1 -1
  86. package/dist/components/EntityFinder/details/view/table/ModifiedByCell.js +1 -1
  87. package/dist/components/EntityFinder/details/view/table/ModifiedOnCell.js +1 -1
  88. package/dist/components/EntityFinder/details/view/table/ParentProjectCell.js +1 -1
  89. package/dist/components/EntityFinder/tree/EntityTree.js +1 -1
  90. package/dist/components/EntityHeaderTable/EntityHeaderTable.d.ts.map +1 -1
  91. package/dist/components/EntityHeaderTable/EntityHeaderTable.js +39 -39
  92. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  93. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.d.ts +8 -0
  94. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.d.ts.map +1 -0
  95. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.js +46 -0
  96. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.js.map +1 -0
  97. package/dist/components/Evaluation/EvaluationCard.d.ts.map +1 -1
  98. package/dist/components/Evaluation/EvaluationCard.js +35 -41
  99. package/dist/components/Evaluation/EvaluationCard.js.map +1 -1
  100. package/dist/components/Evaluation/EvaluationEditor.d.ts.map +1 -1
  101. package/dist/components/Evaluation/EvaluationEditor.js +95 -90
  102. package/dist/components/Evaluation/EvaluationEditor.js.map +1 -1
  103. package/dist/components/Evaluation/EvaluationRoundEditor.d.ts.map +1 -1
  104. package/dist/components/Evaluation/EvaluationRoundEditor.js +133 -124
  105. package/dist/components/Evaluation/EvaluationRoundEditor.js.map +1 -1
  106. package/dist/components/FilePreview/EntityPreview.js +1 -1
  107. package/dist/components/Forum/DiscussionReply.js +10 -10
  108. package/dist/components/Forum/DiscussionThread.js +21 -21
  109. package/dist/components/GenericCard/CardUtils.d.ts.map +1 -1
  110. package/dist/components/GenericCard/CardUtils.js +36 -36
  111. package/dist/components/GenericCard/CardUtils.js.map +1 -1
  112. package/dist/components/GenericCard/CollapsibleDescription.js +25 -25
  113. package/dist/components/GenericCard/SynapseCardLabel.d.ts.map +1 -1
  114. package/dist/components/GenericCard/SynapseCardLabel.js +72 -67
  115. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  116. package/dist/components/GenericCard/TableRowGenericCard.d.ts +4 -1
  117. package/dist/components/GenericCard/TableRowGenericCard.d.ts.map +1 -1
  118. package/dist/components/GenericCard/TableRowGenericCard.js +98 -96
  119. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  120. package/dist/components/GoalsV2/GoalsV2.Desktop.d.ts.map +1 -1
  121. package/dist/components/GoalsV2/GoalsV2.Desktop.js +14 -15
  122. package/dist/components/GoalsV2/GoalsV2.Desktop.js.map +1 -1
  123. package/dist/components/GoogleAnalytics/GoogleAnalytics.js +1 -1
  124. package/dist/components/HasAccess/HasAccessV2.js +1 -1
  125. package/dist/components/HasAccess/useHasAccess.js +1 -1
  126. package/dist/components/IDUReport/IDUReportSubmissionInfo.js +23 -23
  127. package/dist/components/IDUReport/IDUReportSubmissionInfo.js.map +1 -1
  128. package/dist/components/JSONArrayEditor/useParseCsv.d.ts +1 -1
  129. package/dist/components/JSONArrayEditor/useParseCsv.d.ts.map +1 -1
  130. package/dist/components/JSONArrayEditor/useParseCsv.js +9 -9
  131. package/dist/components/JSONArrayEditor/useParseCsv.js.map +1 -1
  132. package/dist/components/Markdown/MarkdownCollapse.js +7 -7
  133. package/dist/components/Markdown/MarkdownEditor.js +11 -11
  134. package/dist/components/Markdown/MarkdownGithub.js +1 -1
  135. package/dist/components/Markdown/MarkdownPopover.js +6 -6
  136. package/dist/components/Markdown/MarkdownPopover.js.map +1 -1
  137. package/dist/components/Markdown/MarkdownSynapse.d.ts.map +1 -1
  138. package/dist/components/Markdown/MarkdownSynapse.js +139 -135
  139. package/dist/components/Markdown/MarkdownSynapse.js.map +1 -1
  140. package/dist/components/Markdown/MarkdownUtils.d.ts +8 -0
  141. package/dist/components/Markdown/MarkdownUtils.d.ts.map +1 -1
  142. package/dist/components/Markdown/MarkdownUtils.js +139 -65
  143. package/dist/components/Markdown/MarkdownUtils.js.map +1 -1
  144. package/dist/components/Markdown/UserMentionModal.js +18 -18
  145. package/dist/components/Markdown/UserMentionModal.js.map +1 -1
  146. package/dist/components/Markdown/widget/MarkdownButton.js +3 -3
  147. package/dist/components/Markdown/widget/MarkdownButton.js.map +1 -1
  148. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.d.ts.map +1 -1
  149. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js +9 -8
  150. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  151. package/dist/components/Plot/SynapsePlot.css +1 -0
  152. package/dist/components/Plot/SynapsePlot.d.ts +2 -0
  153. package/dist/components/Plot/SynapsePlot.d.ts.map +1 -1
  154. package/dist/components/Plot/SynapsePlot.js +43 -39
  155. package/dist/components/Plot/SynapsePlot.js.map +1 -1
  156. package/dist/components/Plot/SynapsePlot.scss +8 -0
  157. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js +1 -1
  158. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
  159. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +114 -113
  160. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  161. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.d.ts +1 -1
  162. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.d.ts.map +1 -1
  163. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js.map +1 -1
  164. package/dist/components/Resources/Resources.Desktop.js +7 -7
  165. package/dist/components/Resources/Resources.Mobile.js +6 -6
  166. package/dist/components/SubsectionRowRenderer/SubsectionRowRenderer.js +3 -3
  167. package/dist/components/SustainabilityScorecard/SustainabilityScorecardSummary.js +10 -10
  168. package/dist/components/SynapseChat/SynapseChatInteraction.js +5 -5
  169. package/dist/components/SynapseForm/WarningDialog.d.ts +1 -0
  170. package/dist/components/SynapseForm/WarningDialog.d.ts.map +1 -1
  171. package/dist/components/SynapseForm/WarningDialog.js +18 -16
  172. package/dist/components/SynapseForm/WarningDialog.js.map +1 -1
  173. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js +1 -1
  174. package/dist/components/SynapseHomepageV2/SynapsePartners.d.ts.map +1 -1
  175. package/dist/components/SynapseHomepageV2/SynapsePartners.js +17 -12
  176. package/dist/components/SynapseHomepageV2/SynapsePartners.js.map +1 -1
  177. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.d.ts.map +1 -1
  178. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js +39 -39
  179. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  180. package/dist/components/SynapseSearchPageResults/HasAccessChip.js +1 -1
  181. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.d.ts.map +1 -1
  182. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.js +21 -22
  183. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.js.map +1 -1
  184. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js +5 -5
  185. package/dist/components/SynapseTable/ExpandableTableDataCell.d.ts.map +1 -1
  186. package/dist/components/SynapseTable/ExpandableTableDataCell.js +3 -1
  187. package/dist/components/SynapseTable/ExpandableTableDataCell.js.map +1 -1
  188. package/dist/components/SynapseTable/SynapseTable.js +4 -4
  189. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.d.ts.map +1 -1
  190. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js +122 -122
  191. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js.map +1 -1
  192. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +5 -5
  193. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +1 -1
  194. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditor.js +1 -1
  195. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +1 -1
  196. package/dist/components/TableFeedCards/TableFeedCards.js +9 -9
  197. package/dist/components/TermsAndConditions/TermsAndConditionsItem.js +10 -10
  198. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js +9 -9
  199. package/dist/components/UserSearchBox/UserSearchBox.d.ts +23 -0
  200. package/dist/components/UserSearchBox/UserSearchBox.d.ts.map +1 -0
  201. package/dist/components/UserSearchBox/UserSearchBox.js +146 -0
  202. package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -0
  203. package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js +13 -13
  204. package/dist/components/WizardChoiceButton/WizardChoiceButton.js +3 -3
  205. package/dist/components/dataaccess/AccessHistoryDashboard.js +5 -5
  206. package/dist/components/dataaccess/AccessHistoryDashboard.js.map +1 -1
  207. package/dist/components/dataaccess/AccessRequirementDashboard.js +4 -4
  208. package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
  209. package/dist/components/dataaccess/AccessSubmissionDashboard.js +1 -1
  210. package/dist/components/dataaccess/AccessSubmissionDashboard.js.map +1 -1
  211. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js +5 -5
  212. package/dist/components/dataaccess/UseAccessRequirementTable.js +3 -3
  213. package/dist/components/dataaccess/UseAccessRequirementTable.js.map +1 -1
  214. package/dist/components/doi/CreateOrUpdateDoiModal.js +1 -1
  215. package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js +2 -2
  216. package/dist/components/entity/metadata/EntityModal.js +1 -1
  217. package/dist/components/entity/metadata/MetadataTable.js +1 -1
  218. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js +1 -1
  219. package/dist/components/entity/page/title_bar/EntityTitleBarVersionInfo.js +1 -1
  220. package/dist/components/entity/page/title_bar/TitleBarProperties.js +1 -1
  221. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.d.ts.map +1 -1
  222. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js +27 -26
  223. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
  224. package/dist/components/index.js +109 -107
  225. package/dist/components/index.js.map +1 -1
  226. package/dist/components/layout/InfiniteTableLayout.js +1 -1
  227. package/dist/components/styled/HoverPopover.css +1 -0
  228. package/dist/components/styled/HoverPopover.d.ts +28 -0
  229. package/dist/components/styled/HoverPopover.d.ts.map +1 -0
  230. package/dist/components/styled/HoverPopover.js +104 -0
  231. package/dist/components/styled/HoverPopover.js.map +1 -0
  232. package/dist/components/styled/HoverPopover.module.scss +10 -0
  233. package/dist/components/styled/HoverPopover.module.scss.js +10 -0
  234. package/dist/components/styled/HoverPopover.module.scss.js.map +1 -0
  235. package/dist/components/styled/index.d.ts +2 -0
  236. package/dist/components/styled/index.d.ts.map +1 -1
  237. package/dist/components/styled/index.js +11 -9
  238. package/dist/components/styled/index.js.map +1 -1
  239. package/dist/components/table/CsvPreview/CsvPreview.js +2 -2
  240. package/dist/components/table/CsvPreview/CsvPreviewDialog.js +2 -2
  241. package/dist/components/widgets/Range.js +1 -1
  242. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts.map +1 -1
  243. package/dist/components/widgets/facet-nav/FacetNavPanel.js +35 -32
  244. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  245. package/dist/components/widgets/facet-nav/PlotsContainer.d.ts +1 -1
  246. package/dist/components/widgets/facet-nav/PlotsContainer.d.ts.map +1 -1
  247. package/dist/components/widgets/facet-nav/PlotsContainer.js +69 -68
  248. package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
  249. package/dist/components/widgets/facet-nav/useFacetPlots.d.ts.map +1 -1
  250. package/dist/components/widgets/facet-nav/useFacetPlots.js +24 -21
  251. package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
  252. package/dist/components/widgets/query-filter/FacetFilterControls.js +3 -3
  253. package/dist/features/curator/GridPage/GridPage.js +2 -2
  254. package/dist/features/curator/GridPage/components/GridPageTitle.js +2 -2
  255. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +1 -1
  256. package/dist/index.js +157 -155
  257. package/dist/index.js.map +1 -1
  258. package/dist/mocks/msw/handlers/accessRequirementHandlers.js +5 -5
  259. package/dist/mocks/msw/handlers/projectStorageHandlers.js +5 -5
  260. package/dist/mocks/msw/handlers/wikiHandlers.js +1 -1
  261. package/dist/mocks/msw/handlers.d.ts.map +1 -1
  262. package/dist/mocks/msw/handlers.js +67 -59
  263. package/dist/mocks/msw/handlers.js.map +1 -1
  264. package/dist/style/base/_core.scss +0 -1
  265. package/dist/style/components/_all.scss +0 -1
  266. package/dist/style/components/_entity-badge.scss +0 -2
  267. package/dist/style/components/_expandable_table_data.scss +3 -3
  268. package/dist/style/components/facet_nav/_facet-nav-panel.scss +3 -0
  269. package/dist/style/components/facet_nav/_facet-nav.scss +4 -0
  270. package/dist/style/main.css +1 -1
  271. package/dist/synapse-client/SynapseClient.js +118 -118
  272. package/dist/synapse-client/SynapseClient.js.map +1 -1
  273. package/dist/synapse-queries/auth/useOIDC.js +1 -1
  274. package/dist/synapse-queries/auth/useTwoFactorEnrollment.js +1 -1
  275. package/dist/synapse-queries/entity/index.js +6 -6
  276. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js +1 -1
  277. package/dist/synapse-queries/index.js +1 -1
  278. package/dist/synapse-queries/user/usePersonalAccessToken.js +1 -1
  279. package/dist/testutils/vitest.setup.js +10 -11
  280. package/dist/testutils/vitest.setup.js.map +1 -1
  281. package/dist/theme/DefaultTheme.js +1 -1
  282. package/dist/theme/ThemeProvider.d.ts +2 -1
  283. package/dist/theme/ThemeProvider.d.ts.map +1 -1
  284. package/dist/theme/ThemeProvider.js +11 -10
  285. package/dist/theme/ThemeProvider.js.map +1 -1
  286. package/dist/theme/index.js +1 -1
  287. package/dist/theme/mergeTheme.js +1 -1
  288. package/dist/tsconfig.build.tsbuildinfo +1 -1
  289. package/dist/utils/AppUtils/AppUtils.js +1 -1
  290. package/dist/utils/functions/SanitizeHtmlUtils.d.ts.map +1 -1
  291. package/dist/utils/functions/SanitizeHtmlUtils.js +34 -40
  292. package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
  293. package/dist/utils/functions/deepLinkingUtils.js +10 -10
  294. package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
  295. package/dist/utils/hooks/index.js +6 -6
  296. package/dist/utils/hooks/useDetectSSOCode.js +3 -3
  297. package/dist/utils/hooks/useGetEntityMetadata.js +1 -1
  298. package/dist/utils/hooks/useNativeSearchParams.d.ts.map +1 -1
  299. package/dist/utils/hooks/useNativeSearchParams.js +1 -1
  300. package/dist/utils/hooks/useNativeSearchParams.js.map +1 -1
  301. package/dist/utils/hooks/useOneSageURL.d.ts.map +1 -1
  302. package/dist/utils/hooks/useOneSageURL.js +15 -15
  303. package/dist/utils/hooks/useOneSageURL.js.map +1 -1
  304. package/dist/utils/hooks/useSourceAppConfigs.d.ts +1 -0
  305. package/dist/utils/hooks/useSourceAppConfigs.d.ts.map +1 -1
  306. package/dist/utils/hooks/useSourceAppConfigs.js +79 -77
  307. package/dist/utils/hooks/useSourceAppConfigs.js.map +1 -1
  308. package/dist/utils/index.js +4 -4
  309. package/package.json +17 -18
  310. package/dist/_virtual/index.js +0 -6
  311. package/dist/_virtual/index.js.map +0 -1
  312. package/dist/_virtual/index2.js +0 -5
  313. package/dist/_virtual/index2.js.map +0 -1
  314. package/dist/_virtual/index3.js +0 -5
  315. package/dist/_virtual/index3.js.map +0 -1
  316. package/dist/_virtual/index4.js +0 -5
  317. package/dist/_virtual/index4.js.map +0 -1
  318. package/dist/_virtual/index5.js +0 -5
  319. package/dist/_virtual/index5.js.map +0 -1
  320. package/dist/assets/homepage/nci.svg +0 -6
  321. package/dist/assets/homepage/nci.svg.js +0 -7
  322. package/dist/assets/homepage/nci.svg.js.map +0 -1
  323. package/dist/assets/homepage/nih-mental.svg +0 -9
  324. package/dist/assets/homepage/nih-mental.svg.js +0 -7
  325. package/dist/assets/homepage/nih-mental.svg.js.map +0 -1
  326. package/dist/components/UserSearchBox/UserSearchBoxV2.d.ts +0 -21
  327. package/dist/components/UserSearchBox/UserSearchBoxV2.d.ts.map +0 -1
  328. package/dist/components/UserSearchBox/UserSearchBoxV2.js +0 -144
  329. package/dist/components/UserSearchBox/UserSearchBoxV2.js.map +0 -1
  330. package/dist/node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js +0 -53
  331. package/dist/node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js.map +0 -1
  332. package/dist/node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js +0 -948
  333. package/dist/node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js.map +0 -1
  334. package/dist/node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js +0 -30
  335. package/dist/node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js.map +0 -1
  336. package/dist/node_modules/.pnpm/vite-plugin-node-polyfills@0.17.0_rollup@4.55.1_vite@7.3.1_@types_node@22.19.13_sass@1._2da6e8f78437c36f3eb7db51bdd4d89e/node_modules/vite-plugin-node-polyfills/shims/dist/index.js +0 -15
  337. package/dist/node_modules/.pnpm/vite-plugin-node-polyfills@0.17.0_rollup@4.55.1_vite@7.3.1_@types_node@22.19.13_sass@1._2da6e8f78437c36f3eb7db51bdd4d89e/node_modules/vite-plugin-node-polyfills/shims/dist/index.js.map +0 -1
  338. package/dist/style/components/_user-search-box.scss +0 -30
@@ -1,6 +1,6 @@
1
1
  import { useState as c, useEffect as w } from "react";
2
2
  import a from "universal-cookie";
3
- import { LAST_PLACE_LOCALSTORAGE_KEY as r, ACCOUNT_SITE_PROMPTED_FOR_LOGIN_COOKIE_KEY as l } from "../SynapseConstants.js";
3
+ import { ACCOUNT_SITE_PROMPTED_FOR_LOGIN_COOKIE_KEY as l, LAST_PLACE_LOCALSTORAGE_KEY as r } from "../SynapseConstants.js";
4
4
  function f() {
5
5
  localStorage.setItem(r, window.location.href);
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SanitizeHtmlUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/functions/SanitizeHtmlUtils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,KAAK,CAAA;AAqF5C,eAAO,MAAM,UAAU,EAAE,iBAmCxB,CAAA;AAiFD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM9C"}
1
+ {"version":3,"file":"SanitizeHtmlUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/functions/SanitizeHtmlUtils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,KAAK,CAAA;AAqF5C,eAAO,MAAM,UAAU,EAAE,iBAmCxB,CAAA;AAqED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO9C"}
@@ -1,6 +1,6 @@
1
- import l from "dompurify";
1
+ import s, { clearWindow as p, removeAllHooks as g } from "isomorphic-dompurify";
2
2
  import f from "xss";
3
- const { safeAttrValue: u, escapeAttrValue: h } = f, n = {
3
+ const { safeAttrValue: m, escapeAttrValue: u } = f, n = {
4
4
  a: ["target", "href", "title", "rel"],
5
5
  abbr: ["title"],
6
6
  address: [],
@@ -84,60 +84,54 @@ const { safeAttrValue: u, escapeAttrValue: h } = f, n = {
84
84
  "text-align": !0
85
85
  }
86
86
  },
87
- onIgnoreTag: function(e, i, t) {
88
- if (e === "!doctype")
89
- return i;
87
+ onIgnoreTag: function(a, t, e) {
88
+ if (a === "!doctype")
89
+ return t;
90
90
  },
91
- safeAttrValue: function(e, i, t, a) {
92
- return t = u(e, i, t, a), e === "img" && i === "src" && !(t && (t.startsWith("data:image/") || t.startsWith("http"))) ? "" : (t = h(t), t);
91
+ safeAttrValue: function(a, t, e, i) {
92
+ return e = m(a, t, e, i), a === "img" && t === "src" && !(e && (e.startsWith("data:image/") || e.startsWith("http"))) ? "" : (e = u(e), e);
93
93
  }
94
- }, m = Object.keys(n), w = [
94
+ }, h = Object.keys(n), w = [
95
95
  ...new Set(
96
96
  Object.values(n).flat()
97
97
  // Flatten all attributes into a single array
98
98
  )
99
99
  ], y = {
100
100
  "text-align": !0
101
- }, E = /^(https?:|data:image\/)/;
102
- function c(e) {
103
- e.setConfig({
104
- ALLOWED_TAGS: m,
105
- ALLOWED_ATTR: w,
106
- KEEP_CONTENT: !0,
107
- RETURN_DOM_FRAGMENT: !1,
108
- RETURN_TRUSTED_TYPE: !1
109
- }), e.addHook("uponSanitizeAttribute", (i, t) => {
110
- const { attrName: a, attrValue: s } = t;
111
- if (i.nodeName.toLowerCase() === "img" && a === "src" && (E.test(s) || (t.keepAttr = !1)), a === "data-widgetparams" || a === "data-widget-type")
112
- t.attrValue = s;
113
- else if (a === "style") {
114
- const d = s.split(";").map((r) => r.trim()).filter((r) => {
115
- const [p] = r.split(":").map((g) => g.trim());
116
- return y[p] || !1;
101
+ }, b = /^(https?:|data:image\/)/, r = {
102
+ ALLOWED_TAGS: h,
103
+ ALLOWED_ATTR: w,
104
+ KEEP_CONTENT: !0,
105
+ RETURN_DOM_FRAGMENT: !1,
106
+ RETURN_TRUSTED_TYPE: !1
107
+ };
108
+ function E() {
109
+ s.setConfig(r), s.addHook("uponSanitizeAttribute", (a, t) => {
110
+ const { attrName: e, attrValue: i } = t;
111
+ if (a.nodeName.toLowerCase() === "img" && e === "src" && (b.test(i) || (t.keepAttr = !1)), e === "data-widgetparams" || e === "data-widget-type")
112
+ t.attrValue = i;
113
+ else if (e === "style") {
114
+ const l = i.split(";").map((o) => o.trim()).filter((o) => {
115
+ const [c] = o.split(":").map((d) => d.trim());
116
+ return y[c] || !1;
117
117
  }).join("; ");
118
- t.attrValue = d;
118
+ t.attrValue = l;
119
119
  } else
120
- t.attrValue = e.sanitize(s);
121
- }), e.addHook("uponSanitizeElement", (i, t) => {
122
- t.tagName === "!doctype" && i.parentNode && i.parentNode.insertBefore(
120
+ t.attrValue = s.sanitize(i, r);
121
+ }), s.addHook("uponSanitizeElement", (a, t) => {
122
+ t.tagName === "!doctype" && a.parentNode && a.parentNode.insertBefore(
123
123
  document.implementation.createDocumentType("html", "", ""),
124
- i
124
+ a
125
125
  );
126
126
  });
127
127
  }
128
- let o = null;
129
- if (typeof window > "u") {
130
- const { JSDOM: e } = require("jsdom");
131
- o = l(new e("<!DOCTYPE html>").window), c(o);
132
- } else
133
- o = l, c(o);
134
- function O(e) {
135
- if (o == null)
136
- throw new Error("DOMPurify instance not initialized");
137
- return o.sanitize(e);
128
+ function N(a) {
129
+ E();
130
+ const t = s.sanitize(a, r);
131
+ return p(), g(), t;
138
132
  }
139
133
  export {
140
- O as sanitize,
134
+ N as sanitize,
141
135
  L as xssOptions
142
136
  };
143
137
  //# sourceMappingURL=SanitizeHtmlUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SanitizeHtmlUtils.js","sources":["../../../src/utils/functions/SanitizeHtmlUtils.ts"],"sourcesContent":["import DOMPurify from 'dompurify'\nimport xssLib from 'xss'\nimport type { IFilterXSSOptions } from 'xss'\n\n// xss is a CJS-only module; pull runtime values from the default import to\n// avoid \"named export not found\" errors in Vite dev mode (native ESM).\nconst { safeAttrValue, escapeAttrValue } = xssLib as unknown as {\n safeAttrValue: typeof import('xss')['safeAttrValue']\n escapeAttrValue: typeof import('xss')['escapeAttrValue']\n}\n\n// allow list used by both the xss config and DOMPurify config\nconst xssWhiteList: XSS.IWhiteList = {\n a: ['target', 'href', 'title', 'rel'],\n abbr: ['title'],\n address: [],\n area: ['shape', 'coords', 'href', 'alt'],\n article: [],\n aside: [],\n audio: ['autoplay', 'controls', 'loop', 'preload', 'src'],\n b: [],\n bdi: ['dir'],\n bdo: ['dir'],\n big: [],\n blockquote: ['cite'],\n body: [],\n br: [],\n button: ['class'],\n caption: [],\n center: [],\n cite: [],\n code: [],\n col: ['align', 'valign', 'span', 'width'],\n colgroup: ['align', 'valign', 'span', 'width'],\n dd: [],\n del: ['datetime'],\n details: ['open'],\n div: ['class'],\n dl: [],\n dt: [],\n em: [],\n font: ['color', 'size', 'face'],\n footer: [],\n g: [],\n h1: ['toc'],\n h2: ['toc'],\n h3: ['toc'],\n h4: ['toc'],\n h5: ['toc'],\n h6: ['toc'],\n head: [],\n header: [],\n hr: [],\n html: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n ins: ['datetime'],\n li: ['class'],\n mark: [],\n nav: [],\n noscript: [],\n ol: ['class'],\n p: [],\n pre: [],\n s: [],\n section: [],\n small: [],\n span: ['data-widgetparams', 'data-widget-type', 'class', 'id'],\n sub: [],\n summary: [],\n sup: [],\n strong: [],\n svg: [],\n table: ['width', 'border', 'align', 'valign', 'class'],\n tbody: ['align', 'valign'],\n td: ['width', 'rowspan', 'colspan', 'align', 'valign', 'style'],\n tfoot: ['align', 'valign'],\n th: ['width', 'rowspan', 'colspan', 'align', 'valign', 'class', 'style'],\n thead: ['class', 'align', 'valign'],\n tr: ['rowspan', 'align', 'valign'],\n tt: [],\n u: [],\n ul: ['class'],\n video: ['autoplay', 'controls', 'loop', 'preload', 'src', 'height', 'width'],\n}\n\n// PORTALS-1450: including 'style' in the allow-list will cause string values to come through, which crashes the app when used (because it uses jsx).\nexport const xssOptions: IFilterXSSOptions = {\n whiteList: xssWhiteList,\n stripIgnoreTagBody: true, // filter out all tags not in the whitelist\n allowCommentTag: false,\n css: {\n whiteList: {\n // SWC-7015 - Allow text-align property in style attr to support GFM table syntax\n // The 'style' attribute is used to set text alignment for table cells, so explicitly allow it here\n 'text-align': true,\n },\n },\n onIgnoreTag: function (tag, html, options) {\n if (tag === '!doctype') {\n // do not filter doctype\n return html\n }\n return undefined\n },\n safeAttrValue: function (tag, name, value, cssFilter) {\n // Apply default safeAttrValue filtering:\n value = safeAttrValue(tag, name, value, cssFilter)\n // If the tag is an image and the attribute is 'src', only allow data:image URIs or http(s) URLs\n if (tag === 'img' && name === 'src') {\n if (\n !(\n value &&\n (value.startsWith('data:image/') || value.startsWith('http'))\n )\n ) {\n return ''\n }\n }\n value = escapeAttrValue(value)\n return value\n },\n}\n\nconst ALLOWED_TAGS: string[] = Object.keys(xssWhiteList as object)\nconst ALLOWED_ATTR: string[] = [\n ...new Set(\n Object.values(xssWhiteList as object).flat() as string[], // Flatten all attributes into a single array\n ),\n]\n\nconst ALLOWED_STYLES: Record<string, boolean> = {\n 'text-align': true,\n}\n// Regex to allow only secure image sources\nconst ALLOWED_URI_REGEXP: RegExp = /^(https?:|data:image\\/)/\n\nfunction configureDomPurify(instance: typeof DOMPurify): void {\n // Configure DOMPurify with TypeScript support\n instance.setConfig({\n ALLOWED_TAGS,\n ALLOWED_ATTR,\n KEEP_CONTENT: true,\n RETURN_DOM_FRAGMENT: false,\n RETURN_TRUSTED_TYPE: false,\n })\n\n // Hook: Sanitize attributes (equivalent to safeAttrValue)\n instance.addHook('uponSanitizeAttribute', (node, data) => {\n const { attrName, attrValue } = data\n\n // Ensure only safe src values for images\n if (node.nodeName.toLowerCase() === 'img' && attrName === 'src') {\n if (!ALLOWED_URI_REGEXP.test(attrValue)) {\n data.keepAttr = false // Remove unsafe src values\n }\n }\n\n if (attrName === 'data-widgetparams' || attrName === 'data-widget-type') {\n data.attrValue = attrValue\n } else if (attrName === 'style') {\n const safeStyles = attrValue\n .split(';')\n .map(style => style.trim())\n .filter(style => {\n const [property] = style.split(':').map(s => s.trim())\n return ALLOWED_STYLES[property] || false // Only allow explicitly listed styles\n })\n .join('; ')\n data.attrValue = safeStyles\n } else {\n data.attrValue = instance.sanitize(attrValue)\n }\n })\n\n // Hook: Prevent removal of `!doctype` (equivalent to onIgnoreTag)\n instance.addHook('uponSanitizeElement', (node, data) => {\n if (data.tagName === '!doctype') {\n // Reinsert the doctype manually after sanitization\n if (node.parentNode) {\n node.parentNode.insertBefore(\n document.implementation.createDocumentType('html', '', ''),\n node,\n )\n }\n }\n })\n}\n\nlet domPurifyInstance: typeof DOMPurify | null = null\n\nif (typeof window === 'undefined') {\n // Running in a Node.js environment; initialize JSDOM and create a DOMPurify instance\n // Cannot use top-level await is unsafe in Safari: https://caniuse.com/wf-top-level-await\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { JSDOM } = require('jsdom')\n domPurifyInstance = DOMPurify(new JSDOM('<!DOCTYPE html>').window)\n configureDomPurify(domPurifyInstance)\n} else {\n domPurifyInstance = DOMPurify\n configureDomPurify(domPurifyInstance)\n}\n\nexport function sanitize(input: string): string {\n if (domPurifyInstance == null) {\n throw new Error('DOMPurify instance not initialized')\n }\n\n return domPurifyInstance.sanitize(input)\n}\n"],"names":["safeAttrValue","escapeAttrValue","xssLib","xssWhiteList","xssOptions","tag","html","options","name","value","cssFilter","ALLOWED_TAGS","ALLOWED_ATTR","ALLOWED_STYLES","ALLOWED_URI_REGEXP","configureDomPurify","instance","node","data","attrName","attrValue","safeStyles","style","property","s","domPurifyInstance","JSDOM","DOMPurify","sanitize","input"],"mappings":";;AAMA,MAAM,EAAE,eAAAA,GAAe,iBAAAC,EAAA,IAAoBC,GAMrCC,IAA+B;AAAA,EACnC,GAAG,CAAC,UAAU,QAAQ,SAAS,KAAK;AAAA,EACpC,MAAM,CAAC,OAAO;AAAA,EACd,SAAS,CAAA;AAAA,EACT,MAAM,CAAC,SAAS,UAAU,QAAQ,KAAK;AAAA,EACvC,SAAS,CAAA;AAAA,EACT,OAAO,CAAA;AAAA,EACP,OAAO,CAAC,YAAY,YAAY,QAAQ,WAAW,KAAK;AAAA,EACxD,GAAG,CAAA;AAAA,EACH,KAAK,CAAC,KAAK;AAAA,EACX,KAAK,CAAC,KAAK;AAAA,EACX,KAAK,CAAA;AAAA,EACL,YAAY,CAAC,MAAM;AAAA,EACnB,MAAM,CAAA;AAAA,EACN,IAAI,CAAA;AAAA,EACJ,QAAQ,CAAC,OAAO;AAAA,EAChB,SAAS,CAAA;AAAA,EACT,QAAQ,CAAA;AAAA,EACR,MAAM,CAAA;AAAA,EACN,MAAM,CAAA;AAAA,EACN,KAAK,CAAC,SAAS,UAAU,QAAQ,OAAO;AAAA,EACxC,UAAU,CAAC,SAAS,UAAU,QAAQ,OAAO;AAAA,EAC7C,IAAI,CAAA;AAAA,EACJ,KAAK,CAAC,UAAU;AAAA,EAChB,SAAS,CAAC,MAAM;AAAA,EAChB,KAAK,CAAC,OAAO;AAAA,EACb,IAAI,CAAA;AAAA,EACJ,IAAI,CAAA;AAAA,EACJ,IAAI,CAAA;AAAA,EACJ,MAAM,CAAC,SAAS,QAAQ,MAAM;AAAA,EAC9B,QAAQ,CAAA;AAAA,EACR,GAAG,CAAA;AAAA,EACH,IAAI,CAAC,KAAK;AAAA,EACV,IAAI,CAAC,KAAK;AAAA,EACV,IAAI,CAAC,KAAK;AAAA,EACV,IAAI,CAAC,KAAK;AAAA,EACV,IAAI,CAAC,KAAK;AAAA,EACV,IAAI,CAAC,KAAK;AAAA,EACV,MAAM,CAAA;AAAA,EACN,QAAQ,CAAA;AAAA,EACR,IAAI,CAAA;AAAA,EACJ,MAAM,CAAA;AAAA,EACN,GAAG,CAAA;AAAA,EACH,KAAK,CAAC,OAAO,OAAO,SAAS,SAAS,QAAQ;AAAA,EAC9C,KAAK,CAAC,UAAU;AAAA,EAChB,IAAI,CAAC,OAAO;AAAA,EACZ,MAAM,CAAA;AAAA,EACN,KAAK,CAAA;AAAA,EACL,UAAU,CAAA;AAAA,EACV,IAAI,CAAC,OAAO;AAAA,EACZ,GAAG,CAAA;AAAA,EACH,KAAK,CAAA;AAAA,EACL,GAAG,CAAA;AAAA,EACH,SAAS,CAAA;AAAA,EACT,OAAO,CAAA;AAAA,EACP,MAAM,CAAC,qBAAqB,oBAAoB,SAAS,IAAI;AAAA,EAC7D,KAAK,CAAA;AAAA,EACL,SAAS,CAAA;AAAA,EACT,KAAK,CAAA;AAAA,EACL,QAAQ,CAAA;AAAA,EACR,KAAK,CAAA;AAAA,EACL,OAAO,CAAC,SAAS,UAAU,SAAS,UAAU,OAAO;AAAA,EACrD,OAAO,CAAC,SAAS,QAAQ;AAAA,EACzB,IAAI,CAAC,SAAS,WAAW,WAAW,SAAS,UAAU,OAAO;AAAA,EAC9D,OAAO,CAAC,SAAS,QAAQ;AAAA,EACzB,IAAI,CAAC,SAAS,WAAW,WAAW,SAAS,UAAU,SAAS,OAAO;AAAA,EACvE,OAAO,CAAC,SAAS,SAAS,QAAQ;AAAA,EAClC,IAAI,CAAC,WAAW,SAAS,QAAQ;AAAA,EACjC,IAAI,CAAA;AAAA,EACJ,GAAG,CAAA;AAAA,EACH,IAAI,CAAC,OAAO;AAAA,EACZ,OAAO,CAAC,YAAY,YAAY,QAAQ,WAAW,OAAO,UAAU,OAAO;AAC7E,GAGaC,IAAgC;AAAA,EAC3C,WAAWD;AAAA,EACX,oBAAoB;AAAA;AAAA,EACpB,iBAAiB;AAAA,EACjB,KAAK;AAAA,IACH,WAAW;AAAA;AAAA;AAAA,MAGT,cAAc;AAAA,IAAA;AAAA,EAChB;AAAA,EAEF,aAAa,SAAUE,GAAKC,GAAMC,GAAS;AACzC,QAAIF,MAAQ;AAEV,aAAOC;AAAA,EAGX;AAAA,EACA,eAAe,SAAUD,GAAKG,GAAMC,GAAOC,GAAW;AAIpD,WAFAD,IAAQT,EAAcK,GAAKG,GAAMC,GAAOC,CAAS,GAE7CL,MAAQ,SAASG,MAAS,SAE1B,EACEC,MACCA,EAAM,WAAW,aAAa,KAAKA,EAAM,WAAW,MAAM,MAGtD,MAGXA,IAAQR,EAAgBQ,CAAK,GACtBA;AAAA,EACT;AACF,GAEME,IAAyB,OAAO,KAAKR,CAAsB,GAC3DS,IAAyB;AAAA,EAC7B,GAAG,IAAI;AAAA,IACL,OAAO,OAAOT,CAAsB,EAAE,KAAA;AAAA;AAAA,EAAK;AAE/C,GAEMU,IAA0C;AAAA,EAC9C,cAAc;AAChB,GAEMC,IAA6B;AAEnC,SAASC,EAAmBC,GAAkC;AAE5D,EAAAA,EAAS,UAAU;AAAA,IACjB,cAAAL;AAAA,IACA,cAAAC;AAAA,IACA,cAAc;AAAA,IACd,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,EAAA,CACtB,GAGDI,EAAS,QAAQ,yBAAyB,CAACC,GAAMC,MAAS;AACxD,UAAM,EAAE,UAAAC,GAAU,WAAAC,EAAA,IAAcF;AAShC,QANID,EAAK,SAAS,YAAA,MAAkB,SAASE,MAAa,UACnDL,EAAmB,KAAKM,CAAS,MACpCF,EAAK,WAAW,MAIhBC,MAAa,uBAAuBA,MAAa;AACnD,MAAAD,EAAK,YAAYE;AAAA,aACRD,MAAa,SAAS;AAC/B,YAAME,IAAaD,EAChB,MAAM,GAAG,EACT,IAAI,CAAAE,MAASA,EAAM,KAAA,CAAM,EACzB,OAAO,CAAAA,MAAS;AACf,cAAM,CAACC,CAAQ,IAAID,EAAM,MAAM,GAAG,EAAE,IAAI,CAAAE,MAAKA,EAAE,KAAA,CAAM;AACrD,eAAOX,EAAeU,CAAQ,KAAK;AAAA,MACrC,CAAC,EACA,KAAK,IAAI;AACZ,MAAAL,EAAK,YAAYG;AAAA,IACnB;AACE,MAAAH,EAAK,YAAYF,EAAS,SAASI,CAAS;AAAA,EAEhD,CAAC,GAGDJ,EAAS,QAAQ,uBAAuB,CAACC,GAAMC,MAAS;AACtD,IAAIA,EAAK,YAAY,cAEfD,EAAK,cACPA,EAAK,WAAW;AAAA,MACd,SAAS,eAAe,mBAAmB,QAAQ,IAAI,EAAE;AAAA,MACzDA;AAAA,IAAA;AAAA,EAIR,CAAC;AACH;AAEA,IAAIQ,IAA6C;AAEjD,IAAI,OAAO,SAAW,KAAa;AAIjC,QAAM,EAAE,OAAAC,EAAA,IAAU,QAAQ,OAAO;AACjC,EAAAD,IAAoBE,EAAU,IAAID,EAAM,iBAAiB,EAAE,MAAM,GACjEX,EAAmBU,CAAiB;AACtC;AACE,EAAAA,IAAoBE,GACpBZ,EAAmBU,CAAiB;AAG/B,SAASG,EAASC,GAAuB;AAC9C,MAAIJ,KAAqB;AACvB,UAAM,IAAI,MAAM,oCAAoC;AAGtD,SAAOA,EAAkB,SAASI,CAAK;AACzC;"}
1
+ {"version":3,"file":"SanitizeHtmlUtils.js","sources":["../../../src/utils/functions/SanitizeHtmlUtils.ts"],"sourcesContent":["import DOMPurify, { clearWindow, removeAllHooks } from 'isomorphic-dompurify'\nimport xssLib from 'xss'\nimport type { IFilterXSSOptions } from 'xss'\n\n// xss is a CJS-only module; pull runtime values from the default import to\n// avoid \"named export not found\" errors in Vite dev mode (native ESM).\nconst { safeAttrValue, escapeAttrValue } = xssLib as unknown as {\n safeAttrValue: typeof import('xss')['safeAttrValue']\n escapeAttrValue: typeof import('xss')['escapeAttrValue']\n}\n\n// allow list used by both the xss config and DOMPurify config\nconst xssWhiteList: XSS.IWhiteList = {\n a: ['target', 'href', 'title', 'rel'],\n abbr: ['title'],\n address: [],\n area: ['shape', 'coords', 'href', 'alt'],\n article: [],\n aside: [],\n audio: ['autoplay', 'controls', 'loop', 'preload', 'src'],\n b: [],\n bdi: ['dir'],\n bdo: ['dir'],\n big: [],\n blockquote: ['cite'],\n body: [],\n br: [],\n button: ['class'],\n caption: [],\n center: [],\n cite: [],\n code: [],\n col: ['align', 'valign', 'span', 'width'],\n colgroup: ['align', 'valign', 'span', 'width'],\n dd: [],\n del: ['datetime'],\n details: ['open'],\n div: ['class'],\n dl: [],\n dt: [],\n em: [],\n font: ['color', 'size', 'face'],\n footer: [],\n g: [],\n h1: ['toc'],\n h2: ['toc'],\n h3: ['toc'],\n h4: ['toc'],\n h5: ['toc'],\n h6: ['toc'],\n head: [],\n header: [],\n hr: [],\n html: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n ins: ['datetime'],\n li: ['class'],\n mark: [],\n nav: [],\n noscript: [],\n ol: ['class'],\n p: [],\n pre: [],\n s: [],\n section: [],\n small: [],\n span: ['data-widgetparams', 'data-widget-type', 'class', 'id'],\n sub: [],\n summary: [],\n sup: [],\n strong: [],\n svg: [],\n table: ['width', 'border', 'align', 'valign', 'class'],\n tbody: ['align', 'valign'],\n td: ['width', 'rowspan', 'colspan', 'align', 'valign', 'style'],\n tfoot: ['align', 'valign'],\n th: ['width', 'rowspan', 'colspan', 'align', 'valign', 'class', 'style'],\n thead: ['class', 'align', 'valign'],\n tr: ['rowspan', 'align', 'valign'],\n tt: [],\n u: [],\n ul: ['class'],\n video: ['autoplay', 'controls', 'loop', 'preload', 'src', 'height', 'width'],\n}\n\n// PORTALS-1450: including 'style' in the allow-list will cause string values to come through, which crashes the app when used (because it uses jsx).\nexport const xssOptions: IFilterXSSOptions = {\n whiteList: xssWhiteList,\n stripIgnoreTagBody: true, // filter out all tags not in the whitelist\n allowCommentTag: false,\n css: {\n whiteList: {\n // SWC-7015 - Allow text-align property in style attr to support GFM table syntax\n // The 'style' attribute is used to set text alignment for table cells, so explicitly allow it here\n 'text-align': true,\n },\n },\n onIgnoreTag: function (tag, html, options) {\n if (tag === '!doctype') {\n // do not filter doctype\n return html\n }\n return undefined\n },\n safeAttrValue: function (tag, name, value, cssFilter) {\n // Apply default safeAttrValue filtering:\n value = safeAttrValue(tag, name, value, cssFilter)\n // If the tag is an image and the attribute is 'src', only allow data:image URIs or http(s) URLs\n if (tag === 'img' && name === 'src') {\n if (\n !(\n value &&\n (value.startsWith('data:image/') || value.startsWith('http'))\n )\n ) {\n return ''\n }\n }\n value = escapeAttrValue(value)\n return value\n },\n}\n\nconst ALLOWED_TAGS: string[] = Object.keys(xssWhiteList as object)\nconst ALLOWED_ATTR: string[] = [\n ...new Set(\n Object.values(xssWhiteList as object).flat() as string[], // Flatten all attributes into a single array\n ),\n]\n\nconst ALLOWED_STYLES: Record<string, boolean> = {\n 'text-align': true,\n}\n// Regex to allow only secure image sources\nconst ALLOWED_URI_REGEXP: RegExp = /^(https?:|data:image\\/)/\n\nconst domPurifyConfig = {\n ALLOWED_TAGS,\n ALLOWED_ATTR,\n KEEP_CONTENT: true,\n RETURN_DOM_FRAGMENT: false,\n RETURN_TRUSTED_TYPE: false,\n}\n\nfunction configureDomPurify() {\n // Configure DOMPurify with TypeScript support\n DOMPurify.setConfig(domPurifyConfig)\n\n // Hook: Sanitize attributes (equivalent to safeAttrValue)\n DOMPurify.addHook('uponSanitizeAttribute', (node, data) => {\n const { attrName, attrValue } = data\n\n // Ensure only safe src values for images\n if (node.nodeName.toLowerCase() === 'img' && attrName === 'src') {\n if (!ALLOWED_URI_REGEXP.test(attrValue)) {\n data.keepAttr = false // Remove unsafe src values\n }\n }\n\n if (attrName === 'data-widgetparams' || attrName === 'data-widget-type') {\n data.attrValue = attrValue\n } else if (attrName === 'style') {\n const safeStyles = attrValue\n .split(';')\n .map(style => style.trim())\n .filter(style => {\n const [property] = style.split(':').map(s => s.trim())\n return ALLOWED_STYLES[property] || false // Only allow explicitly listed styles\n })\n .join('; ')\n data.attrValue = safeStyles\n } else {\n data.attrValue = DOMPurify.sanitize(attrValue, domPurifyConfig)\n }\n })\n\n // Hook: Prevent removal of `!doctype` (equivalent to onIgnoreTag)\n DOMPurify.addHook('uponSanitizeElement', (node, data) => {\n if (data.tagName === '!doctype') {\n // Reinsert the doctype manually after sanitization\n if (node.parentNode) {\n node.parentNode.insertBefore(\n document.implementation.createDocumentType('html', '', ''),\n node,\n )\n }\n }\n })\n}\n\nexport function sanitize(input: string): string {\n configureDomPurify()\n const result = DOMPurify.sanitize(input, domPurifyConfig)\n // clearWindow clears memory usage in Node.js, noop in browser:\n clearWindow()\n removeAllHooks()\n return result\n}\n"],"names":["safeAttrValue","escapeAttrValue","xssLib","xssWhiteList","xssOptions","tag","html","options","name","value","cssFilter","ALLOWED_TAGS","ALLOWED_ATTR","ALLOWED_STYLES","ALLOWED_URI_REGEXP","domPurifyConfig","configureDomPurify","DOMPurify","node","data","attrName","attrValue","safeStyles","style","property","s","sanitize","input","result","clearWindow","removeAllHooks"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { isEqual as f } from "lodash-es";
2
- import { parseEntityIdFromSqlStatement as y } from "./SqlFunctions.js";
3
- async function w(r) {
2
+ import { parseEntityIdFromSqlStatement as w } from "./SqlFunctions.js";
3
+ async function y(r) {
4
4
  const n = new TextEncoder().encode(r), a = new CompressionStream("gzip"), e = a.writable.getWriter(), s = new Response(a.readable).arrayBuffer();
5
5
  await e.write(n), await e.close();
6
6
  const i = await s, o = new Uint8Array(i);
@@ -9,7 +9,7 @@ async function w(r) {
9
9
  c += String.fromCharCode(o[l]);
10
10
  return btoa(c);
11
11
  }
12
- async function u(r) {
12
+ async function p(r) {
13
13
  const t = atob(r), n = new Uint8Array(t.length);
14
14
  for (let c = 0; c < t.length; c++)
15
15
  n[c] = t.charCodeAt(c);
@@ -32,7 +32,7 @@ function m(r, t) {
32
32
  f(r[e], t[e]) || (n[e] = r[e]);
33
33
  return Object.keys(n).length > 0 ? n : null;
34
34
  }
35
- function p(r, t) {
35
+ function u(r, t) {
36
36
  return {
37
37
  ...r,
38
38
  ...t
@@ -43,7 +43,7 @@ async function h(r, t, n, a) {
43
43
  if (n && a) {
44
44
  const o = m(n, a);
45
45
  if (o) {
46
- const c = JSON.stringify(o), l = await w(c);
46
+ const c = JSON.stringify(o), l = await y(c);
47
47
  s.set(e, l);
48
48
  } else
49
49
  s.delete(e);
@@ -51,7 +51,7 @@ async function h(r, t, n, a) {
51
51
  s.delete(e);
52
52
  const i = s.toString();
53
53
  window.history.replaceState(
54
- null,
54
+ window.history.state,
55
55
  "",
56
56
  window.location.pathname + (Array.from(s).length > 0 ? `?${i.toString()}` : "")
57
57
  );
@@ -63,10 +63,10 @@ async function b(r, t) {
63
63
  let e;
64
64
  if (a)
65
65
  try {
66
- const o = await u(a), c = JSON.parse(o), l = p(t, c);
66
+ const o = await p(a), c = JSON.parse(o), l = u(t, c);
67
67
  l.sql && (e = {
68
68
  concreteType: "org.sagebionetworks.repo.model.table.QueryBundleRequest",
69
- entityId: y(l.sql),
69
+ entityId: w(l.sql),
70
70
  query: l
71
71
  });
72
72
  } catch (o) {
@@ -83,7 +83,7 @@ async function b(r, t) {
83
83
  const o = JSON.parse(i);
84
84
  o.sql && (e = {
85
85
  concreteType: "org.sagebionetworks.repo.model.table.QueryBundleRequest",
86
- entityId: y(o.sql),
86
+ entityId: w(o.sql),
87
87
  query: o
88
88
  });
89
89
  } catch (o) {
@@ -95,7 +95,7 @@ async function q(r, t, n, a) {
95
95
  const e = m(n, a);
96
96
  if (!e)
97
97
  return r;
98
- const s = JSON.stringify(e), i = await w(s), o = d("qw", t);
98
+ const s = JSON.stringify(e), i = await y(s), o = d("qw", t);
99
99
  return `${r}?${o}=${encodeURIComponent(i)}`;
100
100
  }
101
101
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"deepLinkingUtils.js","sources":["../../../src/utils/functions/deepLinkingUtils.ts"],"sourcesContent":["import { Query, QueryBundleRequest } from '@sage-bionetworks/synapse-types'\nimport { isEqual } from 'lodash-es'\nimport { parseEntityIdFromSqlStatement } from './SqlFunctions'\n\n/**\n * Compresses a string using the browser's CompressionStream API and returns base64.\n * @param str - The string to compress\n * @returns Base64-encoded compressed string\n */\nasync function compressString(str: string): Promise<string> {\n const encoder = new TextEncoder()\n const data = encoder.encode(str)\n\n const compressionStream = new CompressionStream('gzip')\n const writer = compressionStream.writable.getWriter()\n\n // Start consuming from the readable side immediately to prevent backpressure deadlock\n const readPromise = new Response(compressionStream.readable).arrayBuffer()\n\n await writer.write(data)\n await writer.close()\n\n const compressedArrayBuffer = await readPromise\n\n // Convert to base64\n const bytes = new Uint8Array(compressedArrayBuffer)\n let binary = ''\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i])\n }\n return btoa(binary)\n}\n\n/**\n * Decompresses a base64-encoded gzip string using the browser's DecompressionStream API.\n * @param base64Str - The base64-encoded compressed string\n * @returns The decompressed string\n */\nasync function decompressString(base64Str: string): Promise<string> {\n // Convert from base64 to Uint8Array\n const binary = atob(base64Str)\n const bytes = new Uint8Array(binary.length)\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i)\n }\n\n const decompressionStream = new DecompressionStream('gzip')\n const writer = decompressionStream.writable.getWriter()\n\n // Start consuming from the readable side immediately to prevent backpressure deadlock\n const readPromise = new Response(decompressionStream.readable).arrayBuffer()\n\n await writer.write(bytes)\n await writer.close()\n\n const decompressedArrayBuffer = await readPromise\n\n const decoder = new TextDecoder()\n return decoder.decode(decompressedArrayBuffer)\n}\n\n//id consists of a component class/function name and it's index\nfunction getComponentSearchHashId(\n componentName: string,\n componentIndex: number,\n): string {\n return `${componentName}${componentIndex}`\n}\n\n/**\n * Computes the difference between the current query and the initial query.\n * Returns only the fields that differ from the initial query.\n * Dynamically handles all fields in the Query type, making it safe for future changes.\n * @param currentQuery - The current query state\n * @param initQuery - The initial query state\n * @returns A partial Query object containing only the differences, or null if queries are equal\n */\nfunction computeQueryDiff(\n currentQuery: Query,\n initQuery: Query,\n): Partial<Query> | null {\n if (isEqual(currentQuery, initQuery)) {\n return null\n }\n\n const diff: Partial<Query> = {}\n\n // Get the union of keys from both currentQuery and initQuery to handle\n // both additions/changes and removals/omissions\n const allKeys = new Set([\n ...Object.keys(currentQuery),\n ...Object.keys(initQuery),\n ]) as Set<keyof Query>\n\n for (const key of allKeys) {\n if (!isEqual(currentQuery[key], initQuery[key])) {\n // Type assertion needed for dynamic key assignment\n // Include currentQuery[key] even if undefined to represent removals\n ;(diff as any)[key] = currentQuery[key]\n }\n }\n\n return Object.keys(diff).length > 0 ? diff : null\n}\n\n/**\n * Applies a query diff to the initial query to reconstruct the current query.\n * @param initQuery - The initial query state\n * @param diff - The partial query containing only the differences\n * @returns The reconstructed query\n */\nfunction applyQueryDiff(initQuery: Query, diff: Partial<Query>): Query {\n return {\n ...initQuery,\n ...diff,\n }\n}\n\n/**\n * Updates the url with the components' new search params. Stores only the\n * differences between currentQuery and initQuery, compressed with gzip and base64-encoded.\n * If the queries are equal, the search param will be removed.\n * @param componentName\n * @param componentIndex\n * @param currentQuery - The current query state, or null to remove the param\n * @param initQuery - The initial query state to compute diff against\n */\nexport async function updateUrlWithNewSearchParam(\n componentName: string,\n componentIndex: number | undefined,\n currentQuery: Query | null,\n initQuery: Query | null,\n): Promise<void> {\n const componentSearchHashId =\n componentIndex !== undefined\n ? getComponentSearchHashId(componentName, componentIndex)\n : componentName\n\n const currentSearch = new URLSearchParams(window.location.search)\n\n if (currentQuery && initQuery) {\n const diff = computeQueryDiff(currentQuery, initQuery)\n if (diff) {\n // Compress the diff and encode as base64\n const jsonString = JSON.stringify(diff)\n const compressed = await compressString(jsonString)\n currentSearch.set(componentSearchHashId, compressed)\n } else {\n // Queries are equal, remove the param\n currentSearch.delete(componentSearchHashId)\n }\n } else {\n // No current query or no init query, remove the param\n currentSearch.delete(componentSearchHashId)\n }\n\n const searchString = currentSearch.toString()\n window.history.replaceState(\n null,\n '',\n window.location.pathname +\n (Array.from(currentSearch).length > 0\n ? `?${searchString.toString()}`\n : ''),\n )\n}\n\n/**\n * Retrieves a query request from the URL by applying the stored diff to the initial query.\n * @param componentIndex\n * @param initQuery - The initial query to apply the diff to\n * @returns A partial QueryBundleRequest with the reconstructed query, or undefined if no diff is stored\n */\nexport async function getQueryRequestFromLink(\n componentIndex: number,\n initQuery: Query,\n): Promise<Partial<QueryBundleRequest> | undefined> {\n const paramKey = getComponentSearchHashId('qw', componentIndex)\n const searchParamValue = new URLSearchParams(window.location.search).get(\n paramKey,\n )\n\n let queryRequest: Partial<QueryBundleRequest> | undefined = undefined\n if (searchParamValue) {\n try {\n // Decompress and parse the diff from the URL\n const jsonString = await decompressString(searchParamValue)\n const diff = JSON.parse(jsonString) as Partial<Query>\n // Apply the diff to the init query to reconstruct the current query\n const query = applyQueryDiff(initQuery, diff)\n if (query.sql) {\n queryRequest = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId: parseEntityIdFromSqlStatement(query.sql),\n query,\n }\n }\n } catch (error) {\n console.error('Failed to parse query diff from URL:', error)\n }\n }\n\n // check for legacy search param for backward compatibility, but prioritize the new format if both are present\n const legacyParamKey = getComponentSearchHashId(\n 'QueryWrapper',\n componentIndex,\n )\n const legacySearchParamValue = new URLSearchParams(\n window.location.search,\n ).get(legacyParamKey)\n if (legacySearchParamValue && !queryRequest) {\n try {\n const query = JSON.parse(legacySearchParamValue) as Query\n if (query.sql) {\n queryRequest = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId: parseEntityIdFromSqlStatement(query.sql),\n query,\n }\n }\n } catch (error) {\n console.error('Failed to parse legacy query from URL:', error)\n }\n }\n return queryRequest\n}\n\n/**\n * Generates a URL with a compressed query diff parameter.\n * @param path - The base path for the URL\n * @param componentIndex - The component index (e.g., 0)\n * @param currentQuery - The query to encode\n * @param initQuery - The initial/default query to compute the diff against\n * @returns A Promise that resolves to the full URL with compressed query parameter\n */\nexport async function generateCompressedQueryURL(\n path: string,\n componentIndex: number,\n currentQuery: Query,\n initQuery: Query,\n): Promise<string> {\n const diff = computeQueryDiff(currentQuery, initQuery)\n if (!diff) {\n // Queries are equal, no need for a parameter\n return path\n }\n\n const jsonString = JSON.stringify(diff)\n const compressed = await compressString(jsonString)\n const paramKey = getComponentSearchHashId('qw', componentIndex)\n\n return `${path}?${paramKey}=${encodeURIComponent(compressed)}`\n}\n"],"names":["compressString","str","data","compressionStream","writer","readPromise","compressedArrayBuffer","bytes","binary","i","decompressString","base64Str","decompressionStream","decompressedArrayBuffer","getComponentSearchHashId","componentName","componentIndex","computeQueryDiff","currentQuery","initQuery","isEqual","diff","allKeys","key","applyQueryDiff","updateUrlWithNewSearchParam","componentSearchHashId","currentSearch","jsonString","compressed","searchString","getQueryRequestFromLink","paramKey","searchParamValue","queryRequest","query","parseEntityIdFromSqlStatement","error","legacyParamKey","legacySearchParamValue","generateCompressedQueryURL","path"],"mappings":"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"}
1
+ {"version":3,"file":"deepLinkingUtils.js","sources":["../../../src/utils/functions/deepLinkingUtils.ts"],"sourcesContent":["import { Query, QueryBundleRequest } from '@sage-bionetworks/synapse-types'\nimport { isEqual } from 'lodash-es'\nimport { parseEntityIdFromSqlStatement } from './SqlFunctions'\n\n/**\n * Compresses a string using the browser's CompressionStream API and returns base64.\n * @param str - The string to compress\n * @returns Base64-encoded compressed string\n */\nasync function compressString(str: string): Promise<string> {\n const encoder = new TextEncoder()\n const data = encoder.encode(str)\n\n const compressionStream = new CompressionStream('gzip')\n const writer = compressionStream.writable.getWriter()\n\n // Start consuming from the readable side immediately to prevent backpressure deadlock\n const readPromise = new Response(compressionStream.readable).arrayBuffer()\n\n await writer.write(data)\n await writer.close()\n\n const compressedArrayBuffer = await readPromise\n\n // Convert to base64\n const bytes = new Uint8Array(compressedArrayBuffer)\n let binary = ''\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i])\n }\n return btoa(binary)\n}\n\n/**\n * Decompresses a base64-encoded gzip string using the browser's DecompressionStream API.\n * @param base64Str - The base64-encoded compressed string\n * @returns The decompressed string\n */\nasync function decompressString(base64Str: string): Promise<string> {\n // Convert from base64 to Uint8Array\n const binary = atob(base64Str)\n const bytes = new Uint8Array(binary.length)\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i)\n }\n\n const decompressionStream = new DecompressionStream('gzip')\n const writer = decompressionStream.writable.getWriter()\n\n // Start consuming from the readable side immediately to prevent backpressure deadlock\n const readPromise = new Response(decompressionStream.readable).arrayBuffer()\n\n await writer.write(bytes)\n await writer.close()\n\n const decompressedArrayBuffer = await readPromise\n\n const decoder = new TextDecoder()\n return decoder.decode(decompressedArrayBuffer)\n}\n\n//id consists of a component class/function name and it's index\nfunction getComponentSearchHashId(\n componentName: string,\n componentIndex: number,\n): string {\n return `${componentName}${componentIndex}`\n}\n\n/**\n * Computes the difference between the current query and the initial query.\n * Returns only the fields that differ from the initial query.\n * Dynamically handles all fields in the Query type, making it safe for future changes.\n * @param currentQuery - The current query state\n * @param initQuery - The initial query state\n * @returns A partial Query object containing only the differences, or null if queries are equal\n */\nfunction computeQueryDiff(\n currentQuery: Query,\n initQuery: Query,\n): Partial<Query> | null {\n if (isEqual(currentQuery, initQuery)) {\n return null\n }\n\n const diff: Partial<Query> = {}\n\n // Get the union of keys from both currentQuery and initQuery to handle\n // both additions/changes and removals/omissions\n const allKeys = new Set([\n ...Object.keys(currentQuery),\n ...Object.keys(initQuery),\n ]) as Set<keyof Query>\n\n for (const key of allKeys) {\n if (!isEqual(currentQuery[key], initQuery[key])) {\n // Type assertion needed for dynamic key assignment\n // Include currentQuery[key] even if undefined to represent removals\n ;(diff as any)[key] = currentQuery[key]\n }\n }\n\n return Object.keys(diff).length > 0 ? diff : null\n}\n\n/**\n * Applies a query diff to the initial query to reconstruct the current query.\n * @param initQuery - The initial query state\n * @param diff - The partial query containing only the differences\n * @returns The reconstructed query\n */\nfunction applyQueryDiff(initQuery: Query, diff: Partial<Query>): Query {\n return {\n ...initQuery,\n ...diff,\n }\n}\n\n/**\n * Updates the url with the components' new search params. Stores only the\n * differences between currentQuery and initQuery, compressed with gzip and base64-encoded.\n * If the queries are equal, the search param will be removed.\n * @param componentName\n * @param componentIndex\n * @param currentQuery - The current query state, or null to remove the param\n * @param initQuery - The initial query state to compute diff against\n */\nexport async function updateUrlWithNewSearchParam(\n componentName: string,\n componentIndex: number | undefined,\n currentQuery: Query | null,\n initQuery: Query | null,\n): Promise<void> {\n const componentSearchHashId =\n componentIndex !== undefined\n ? getComponentSearchHashId(componentName, componentIndex)\n : componentName\n\n const currentSearch = new URLSearchParams(window.location.search)\n\n if (currentQuery && initQuery) {\n const diff = computeQueryDiff(currentQuery, initQuery)\n if (diff) {\n // Compress the diff and encode as base64\n const jsonString = JSON.stringify(diff)\n const compressed = await compressString(jsonString)\n currentSearch.set(componentSearchHashId, compressed)\n } else {\n // Queries are equal, remove the param\n currentSearch.delete(componentSearchHashId)\n }\n } else {\n // No current query or no init query, remove the param\n currentSearch.delete(componentSearchHashId)\n }\n\n const searchString = currentSearch.toString()\n window.history.replaceState(\n window.history.state,\n '',\n window.location.pathname +\n (Array.from(currentSearch).length > 0\n ? `?${searchString.toString()}`\n : ''),\n )\n}\n\n/**\n * Retrieves a query request from the URL by applying the stored diff to the initial query.\n * @param componentIndex\n * @param initQuery - The initial query to apply the diff to\n * @returns A partial QueryBundleRequest with the reconstructed query, or undefined if no diff is stored\n */\nexport async function getQueryRequestFromLink(\n componentIndex: number,\n initQuery: Query,\n): Promise<Partial<QueryBundleRequest> | undefined> {\n const paramKey = getComponentSearchHashId('qw', componentIndex)\n const searchParamValue = new URLSearchParams(window.location.search).get(\n paramKey,\n )\n\n let queryRequest: Partial<QueryBundleRequest> | undefined = undefined\n if (searchParamValue) {\n try {\n // Decompress and parse the diff from the URL\n const jsonString = await decompressString(searchParamValue)\n const diff = JSON.parse(jsonString) as Partial<Query>\n // Apply the diff to the init query to reconstruct the current query\n const query = applyQueryDiff(initQuery, diff)\n if (query.sql) {\n queryRequest = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId: parseEntityIdFromSqlStatement(query.sql),\n query,\n }\n }\n } catch (error) {\n console.error('Failed to parse query diff from URL:', error)\n }\n }\n\n // check for legacy search param for backward compatibility, but prioritize the new format if both are present\n const legacyParamKey = getComponentSearchHashId(\n 'QueryWrapper',\n componentIndex,\n )\n const legacySearchParamValue = new URLSearchParams(\n window.location.search,\n ).get(legacyParamKey)\n if (legacySearchParamValue && !queryRequest) {\n try {\n const query = JSON.parse(legacySearchParamValue) as Query\n if (query.sql) {\n queryRequest = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId: parseEntityIdFromSqlStatement(query.sql),\n query,\n }\n }\n } catch (error) {\n console.error('Failed to parse legacy query from URL:', error)\n }\n }\n return queryRequest\n}\n\n/**\n * Generates a URL with a compressed query diff parameter.\n * @param path - The base path for the URL\n * @param componentIndex - The component index (e.g., 0)\n * @param currentQuery - The query to encode\n * @param initQuery - The initial/default query to compute the diff against\n * @returns A Promise that resolves to the full URL with compressed query parameter\n */\nexport async function generateCompressedQueryURL(\n path: string,\n componentIndex: number,\n currentQuery: Query,\n initQuery: Query,\n): Promise<string> {\n const diff = computeQueryDiff(currentQuery, initQuery)\n if (!diff) {\n // Queries are equal, no need for a parameter\n return path\n }\n\n const jsonString = JSON.stringify(diff)\n const compressed = await compressString(jsonString)\n const paramKey = getComponentSearchHashId('qw', componentIndex)\n\n return `${path}?${paramKey}=${encodeURIComponent(compressed)}`\n}\n"],"names":["compressString","str","data","compressionStream","writer","readPromise","compressedArrayBuffer","bytes","binary","i","decompressString","base64Str","decompressionStream","decompressedArrayBuffer","getComponentSearchHashId","componentName","componentIndex","computeQueryDiff","currentQuery","initQuery","isEqual","diff","allKeys","key","applyQueryDiff","updateUrlWithNewSearchParam","componentSearchHashId","currentSearch","jsonString","compressed","searchString","getQueryRequestFromLink","paramKey","searchParamValue","queryRequest","query","parseEntityIdFromSqlStatement","error","legacyParamKey","legacySearchParamValue","generateCompressedQueryURL","path"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { useDebouncedEffect as y } from "./useDebouncedEffect.js";
2
- import { CSRF_TOKEN_STORAGE_KEY as b } from "./useDetectSSOCode.js";
1
+ import { useDebouncedEffect as T } from "./useDebouncedEffect.js";
2
+ import { CSRF_TOKEN_STORAGE_KEY as F } from "./useDetectSSOCode.js";
3
3
  import "../../synapse-client/SynapseClient.js";
4
4
  import "@sage-bionetworks/synapse-client/generated/models/ErrorResponseCode";
5
5
  import "@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse";
@@ -24,12 +24,12 @@ import "@mui/material";
24
24
  import "@sage-bionetworks/synapse-client";
25
25
  import "../types/IsType.js";
26
26
  import { getOneSageBaseUrl as w, getOneSageUrl as B, useOneSageURL as D } from "./useOneSageURL.js";
27
- import { useMutuallyExclusiveState as Y } from "./useMutuallyExclusiveState.js";
27
+ import { default as Y } from "./useMutuallyExclusiveState.js";
28
28
  import { useOverlay as q } from "./useOverlay.js";
29
29
  import { fetchBlob as H, releaseResourceUrl as J, useCreateUrlForData as Q } from "./usePreFetchResource.js";
30
30
  import { useSet as W } from "./useSet.js";
31
31
  import { COOKIES_AGREEMENT_COOKIE_KEY as Z, allowAll as $, allowNone as ee, getCurrentCookiePreferences as oe, useCookiePreferences as re } from "./useCookiePreferences.js";
32
- import { shouldEnableGoogleAnalytics as me, useGoogleAnalytics as pe } from "../analytics/useGoogleAnalytics.js";
32
+ import { shouldEnableGoogleAnalytics as me, default as pe } from "../analytics/useGoogleAnalytics.js";
33
33
  import { STATIC_SOURCE_APP_CONFIG as le, useSourceAppConfigs as se } from "./useSourceAppConfigs.js";
34
34
  import { useNativeSearchParams as fe } from "./useNativeSearchParams.js";
35
35
  import "universal-cookie";
@@ -41,7 +41,7 @@ import '../../style/components/_spinner.css';/* empty css
41
41
  import "react-router";
42
42
  export {
43
43
  Z as COOKIES_AGREEMENT_COOKIE_KEY,
44
- b as CSRF_TOKEN_STORAGE_KEY,
44
+ F as CSRF_TOKEN_STORAGE_KEY,
45
45
  le as STATIC_SOURCE_APP_CONFIG,
46
46
  $ as allowAll,
47
47
  ee as allowNone,
@@ -54,7 +54,7 @@ export {
54
54
  me as shouldEnableGoogleAnalytics,
55
55
  re as useCookiePreferences,
56
56
  Q as useCreateUrlForData,
57
- y as useDebouncedEffect,
57
+ T as useDebouncedEffect,
58
58
  pe as useGoogleAnalytics,
59
59
  L as useListState,
60
60
  Y as useMutuallyExclusiveState,
@@ -1,4 +1,4 @@
1
- import { bindOAuthProviderToAccount as k, oAuthRegisterAccountStep2 as C, oAuthSessionRequest as _, getRootURL as P, setAccessTokenCookie as v } from "../../synapse-client/SynapseClient.js";
1
+ import { bindOAuthProviderToAccount as k, oAuthRegisterAccountStep2 as C, oAuthSessionRequest as _, setAccessTokenCookie as P, getRootURL as v } from "../../synapse-client/SynapseClient.js";
2
2
  import "@sage-bionetworks/synapse-client/generated/models/ErrorResponseCode";
3
3
  import "@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse";
4
4
  import "@sage-bionetworks/synapse-client/util/SynapseClientError";
@@ -37,7 +37,7 @@ function V(i = {
37
37
  onTwoFactorAuthResetTokenPresent: h,
38
38
  isInitializingSession: p,
39
39
  isAuthenticated: I
40
- } = i, T = P(), w = new URL(
40
+ } = i, T = v(), w = new URL(
41
41
  typeof window < "u" ? window.location.href : "http://localhost/"
42
42
  ), { searchParams: a } = w, u = a?.get("code"), e = a?.get("provider"), g = !!(a?.get("client_id") && a?.get("redirect_uri")), l = L(() => {
43
43
  if (!g) {
@@ -85,7 +85,7 @@ Encoded value:
85
85
  ).then(O).catch(o).finally(() => d(!1));
86
86
  } else if (r.GOOGLE == e || r.ORCID == e || r.ARCUS == e || r.SAGE_BIONETWORKS == e) {
87
87
  const o = (t) => {
88
- t && ("accessToken" in t ? v(t.accessToken).then(
88
+ t && ("accessToken" in t ? P(t.accessToken).then(
89
89
  O
90
90
  ) : (R && R(t), // The user logged in with OAuth while attempting to disable 2FA using an emailed signed token
91
91
  l && l.twoFaResetToken && h && h(
@@ -29,7 +29,7 @@ import "react-router";
29
29
  import "@sage-bionetworks/synapse-client";
30
30
  import "../types/IsType.js";
31
31
  import { useGetEntity as U } from "../../synapse-queries/entity/useEntity.js";
32
- import { useGetEntityBundle as E } from "../../synapse-queries/entity/useEntityBundle.js";
32
+ import E from "../../synapse-queries/entity/useEntityBundle.js";
33
33
  import { useGetUploadDestinationForStorageLocation as S, useGetDefaultUploadDestination as G } from "../../synapse-queries/file/useUploadDestination.js";
34
34
  import { getDataFileHandle as I, getUploadDestinationString as H, getFileHandleStorageInfo as b } from "../functions/FileHandleUtils.js";
35
35
  const rt = (n, d) => {
@@ -1 +1 @@
1
- {"version":3,"file":"useNativeSearchParams.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/useNativeSearchParams.tsx"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,eAAO,MAAM,qBAAqB,GAChC,OAAO,MAAM,KACZ,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAsCnD,CAAA"}
1
+ {"version":3,"file":"useNativeSearchParams.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/useNativeSearchParams.tsx"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,eAAO,MAAM,qBAAqB,GAChC,OAAO,MAAM,KACZ,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAuCnD,CAAA"}
@@ -17,7 +17,7 @@ const v = (t) => {
17
17
  const n = new URLSearchParams(window.location.search);
18
18
  e ? n.set(t, e) : n.delete(t);
19
19
  const r = `${window.location.pathname}?${n.toString()}`;
20
- window.history.pushState({}, "", r), a(e), window.dispatchEvent(new Event("pushstate"));
20
+ window.history.pushState(window.history.state ?? {}, "", r), a(e), window.dispatchEvent(new Event("pushstate"));
21
21
  }];
22
22
  };
23
23
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"useNativeSearchParams.js","sources":["../../../src/utils/hooks/useNativeSearchParams.tsx"],"sourcesContent":["import { useCallback, useState, useEffect } from 'react'\n\n/**\n * React hook that can be used to access the current state of window.location.search.\n * Only use this when you cannot use an equivalent hook provided by a routing library (e.g. react-router)\n */\n\nexport const useNativeSearchParams = (\n param: string,\n): [string | null, (newValue: string | null) => void] => {\n const getValue = useCallback(\n () =>\n new URLSearchParams(\n typeof window !== 'undefined' ? window.location.search : '',\n ).get(param),\n [param],\n )\n\n const [value, setValue] = useState(getValue)\n useEffect(() => {\n const onChange = () => {\n setValue(getValue())\n }\n window.addEventListener('popstate', onChange)\n window.addEventListener('pushstate', onChange)\n window.addEventListener('replacestate', onChange)\n return () => {\n window.removeEventListener('popstate', onChange)\n window.removeEventListener('pushstate', onChange)\n window.removeEventListener('replacestate', onChange)\n }\n }, [])\n\n const setSearchParam = (newValue: string | null) => {\n const searchParams = new URLSearchParams(window.location.search)\n if (newValue) {\n searchParams.set(param, newValue)\n } else {\n searchParams.delete(param)\n }\n const newUrl = `${window.location.pathname}?${searchParams.toString()}`\n window.history.pushState({}, '', newUrl)\n setValue(newValue)\n window.dispatchEvent(new Event('pushstate'))\n }\n\n return [value, setSearchParam]\n}\n"],"names":["useNativeSearchParams","param","getValue","useCallback","value","setValue","useState","useEffect","onChange","newValue","searchParams","newUrl"],"mappings":";AAOO,MAAMA,IAAwB,CACnCC,MACuD;AACvD,QAAMC,IAAWC;AAAA,IACf,MACE,IAAI;AAAA,MACF,OAAO,SAAW,MAAc,OAAO,SAAS,SAAS;AAAA,IAAA,EACzD,IAAIF,CAAK;AAAA,IACb,CAACA,CAAK;AAAA,EAAA,GAGF,CAACG,GAAOC,CAAQ,IAAIC,EAASJ,CAAQ;AAC3C,SAAAK,EAAU,MAAM;AACd,UAAMC,IAAW,MAAM;AACrB,MAAAH,EAASH,GAAU;AAAA,IACrB;AACA,kBAAO,iBAAiB,YAAYM,CAAQ,GAC5C,OAAO,iBAAiB,aAAaA,CAAQ,GAC7C,OAAO,iBAAiB,gBAAgBA,CAAQ,GACzC,MAAM;AACX,aAAO,oBAAoB,YAAYA,CAAQ,GAC/C,OAAO,oBAAoB,aAAaA,CAAQ,GAChD,OAAO,oBAAoB,gBAAgBA,CAAQ;AAAA,IACrD;AAAA,EACF,GAAG,CAAA,CAAE,GAeE,CAACJ,GAbe,CAACK,MAA4B;AAClD,UAAMC,IAAe,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAC/D,IAAID,IACFC,EAAa,IAAIT,GAAOQ,CAAQ,IAEhCC,EAAa,OAAOT,CAAK;AAE3B,UAAMU,IAAS,GAAG,OAAO,SAAS,QAAQ,IAAID,EAAa,UAAU;AACrE,WAAO,QAAQ,UAAU,CAAA,GAAI,IAAIC,CAAM,GACvCN,EAASI,CAAQ,GACjB,OAAO,cAAc,IAAI,MAAM,WAAW,CAAC;AAAA,EAC7C,CAE6B;AAC/B;"}
1
+ {"version":3,"file":"useNativeSearchParams.js","sources":["../../../src/utils/hooks/useNativeSearchParams.tsx"],"sourcesContent":["import { useCallback, useState, useEffect } from 'react'\n\n/**\n * React hook that can be used to access the current state of window.location.search.\n * Only use this when you cannot use an equivalent hook provided by a routing library (e.g. react-router)\n */\n\nexport const useNativeSearchParams = (\n param: string,\n): [string | null, (newValue: string | null) => void] => {\n const getValue = useCallback(\n () =>\n new URLSearchParams(\n typeof window !== 'undefined' ? window.location.search : '',\n ).get(param),\n [param],\n )\n\n const [value, setValue] = useState(getValue)\n useEffect(() => {\n const onChange = () => {\n setValue(getValue())\n }\n window.addEventListener('popstate', onChange)\n window.addEventListener('pushstate', onChange)\n window.addEventListener('replacestate', onChange)\n return () => {\n window.removeEventListener('popstate', onChange)\n window.removeEventListener('pushstate', onChange)\n window.removeEventListener('replacestate', onChange)\n }\n }, [])\n\n const setSearchParam = (newValue: string | null) => {\n const searchParams = new URLSearchParams(window.location.search)\n if (newValue) {\n searchParams.set(param, newValue)\n } else {\n searchParams.delete(param)\n }\n const newUrl = `${window.location.pathname}?${searchParams.toString()}`\n // Preserve existing history.state to avoid corrupting React Router internals\n window.history.pushState(window.history.state ?? {}, '', newUrl)\n setValue(newValue)\n window.dispatchEvent(new Event('pushstate'))\n }\n\n return [value, setSearchParam]\n}\n"],"names":["useNativeSearchParams","param","getValue","useCallback","value","setValue","useState","useEffect","onChange","newValue","searchParams","newUrl"],"mappings":";AAOO,MAAMA,IAAwB,CACnCC,MACuD;AACvD,QAAMC,IAAWC;AAAA,IACf,MACE,IAAI;AAAA,MACF,OAAO,SAAW,MAAc,OAAO,SAAS,SAAS;AAAA,IAAA,EACzD,IAAIF,CAAK;AAAA,IACb,CAACA,CAAK;AAAA,EAAA,GAGF,CAACG,GAAOC,CAAQ,IAAIC,EAASJ,CAAQ;AAC3C,SAAAK,EAAU,MAAM;AACd,UAAMC,IAAW,MAAM;AACrB,MAAAH,EAASH,GAAU;AAAA,IACrB;AACA,kBAAO,iBAAiB,YAAYM,CAAQ,GAC5C,OAAO,iBAAiB,aAAaA,CAAQ,GAC7C,OAAO,iBAAiB,gBAAgBA,CAAQ,GACzC,MAAM;AACX,aAAO,oBAAoB,YAAYA,CAAQ,GAC/C,OAAO,oBAAoB,aAAaA,CAAQ,GAChD,OAAO,oBAAoB,gBAAgBA,CAAQ;AAAA,IACrD;AAAA,EACF,GAAG,CAAA,CAAE,GAgBE,CAACJ,GAde,CAACK,MAA4B;AAClD,UAAMC,IAAe,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAC/D,IAAID,IACFC,EAAa,IAAIT,GAAOQ,CAAQ,IAEhCC,EAAa,OAAOT,CAAK;AAE3B,UAAMU,IAAS,GAAG,OAAO,SAAS,QAAQ,IAAID,EAAa,UAAU;AAErE,WAAO,QAAQ,UAAU,OAAO,QAAQ,SAAS,CAAA,GAAI,IAAIC,CAAM,GAC/DN,EAASI,CAAQ,GACjB,OAAO,cAAc,IAAI,MAAM,WAAW,CAAC;AAAA,EAC7C,CAE6B;AAC/B;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useOneSageURL.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/useOneSageURL.ts"],"names":[],"mappings":"AAaA,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,MAAM,EACvB,sBAAsB,EAAE,MAAM,UA+B/B;AAED,wBAAgB,aAAa,CAC3B,eAAe,EAAE,MAAM,EACvB,sBAAsB,EAAE,MAAM,EAC9B,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,GAAE,MAAW,EACjB,MAAM,CAAC,EAAE,eAAe,EACxB,IAAI,CAAC,EAAE,MAAM,OAiBd;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,IAAI,GAAE,MAAW,EACjB,MAAM,CAAC,EAAE,eAAe,EACxB,IAAI,CAAC,EAAE,MAAM,GACZ,GAAG,CAqBL"}
1
+ {"version":3,"file":"useOneSageURL.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/useOneSageURL.ts"],"names":[],"mappings":"AAaA,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,MAAM,EACvB,sBAAsB,EAAE,MAAM,UAmC/B;AAED,wBAAgB,aAAa,CAC3B,eAAe,EAAE,MAAM,EACvB,sBAAsB,EAAE,MAAM,EAC9B,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,GAAE,MAAW,EACjB,MAAM,CAAC,EAAE,eAAe,EACxB,IAAI,CAAC,EAAE,MAAM,OAiBd;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,IAAI,GAAE,MAAW,EACjB,MAAM,CAAC,EAAE,eAAe,EACxB,IAAI,CAAC,EAAE,MAAM,GACZ,GAAG,CAqBL"}
@@ -2,51 +2,51 @@ import { useMemo as s } from "react";
2
2
  import { useSynapseContext as N } from "../context/SynapseContext.js";
3
3
  import "@sage-bionetworks/synapse-types";
4
4
  import "../functions/EntityTypeUtils.js";
5
- import { getEndpoint as S, BackendDestinationEnum as c } from "../functions/getEndpoint.js";
5
+ import { getEndpoint as S, BackendDestinationEnum as d } from "../functions/getEndpoint.js";
6
6
  import "../../synapse-client/SynapseClient.js";
7
7
  import "@sage-bionetworks/synapse-client/generated/models/ErrorResponseCode";
8
8
  import "@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse";
9
9
  import "@sage-bionetworks/synapse-client/util/SynapseClientError";
10
10
  import "@sage-bionetworks/synapse-client/util/synapseClientFetch";
11
11
  import "lodash-es";
12
- import { ONE_SAGE_APPID_QUERY_PARAM_KEY as d, SYNAPSE_BACKEND_PRODUCTION_URL as m, ONE_SAGE_PRODUCTION_URL as E, SYNAPSE_BACKEND_STAGING_URL as u, ONE_SAGE_STAGING_URL as A, SYNAPSE_BACKEND_DEV_URL as R, ONE_SAGE_DEV_URL as U } from "../SynapseConstants.js";
12
+ import { ONE_SAGE_APPID_QUERY_PARAM_KEY as u, SYNAPSE_BACKEND_PRODUCTION_URL as c, ONE_SAGE_PRODUCTION_URL as p, SYNAPSE_BACKEND_STAGING_URL as m, ONE_SAGE_STAGING_URL as A, SYNAPSE_BACKEND_DEV_URL as R, ONE_SAGE_DEV_URL as U } from "../SynapseConstants.js";
13
13
  function O(o, t) {
14
14
  const n = t.replace(
15
15
  /\/$/,
16
16
  ""
17
17
  );
18
18
  if (o === "synapse.org" || o.endsWith(".synapse.org")) {
19
+ if (n === c)
20
+ return p;
19
21
  if (n === m)
20
- return E;
21
- if (n === u)
22
22
  return A;
23
23
  if (n === R)
24
24
  return U;
25
25
  }
26
- return o === "localhost" || o === "127.0.0.1" ? `http://${o}:3000` : (console.warn(
26
+ return o === "localhost" || o === "127.0.0.1" ? `http://${o}:3000` : o ? (console.warn(
27
27
  `No accounts URL found for host: ${o} with backend endpoint: ${n}`
28
- ), E);
28
+ ), p) : p;
29
29
  }
30
- function P(o, t, n, r = "", e, p) {
31
- const _ = O(o, t), i = new URL(r, _);
32
- return n && i.searchParams.append(d, n), e && e.forEach((a, f) => {
33
- i.searchParams.append(f, a);
34
- }), p && (i.hash = p), i;
30
+ function P(o, t, n, e = "", r, E) {
31
+ const _ = O(o, t), i = new URL(e, _);
32
+ return n && i.searchParams.append(u, n), r && r.forEach((f, a) => {
33
+ i.searchParams.append(a, f);
34
+ }), E && (i.hash = E), i;
35
35
  }
36
36
  function k(o = "", t, n) {
37
- const { appId: r } = N(), e = S(
38
- c.REPO_ENDPOINT
37
+ const { appId: e } = N(), r = S(
38
+ d.REPO_ENDPOINT
39
39
  );
40
40
  return s(
41
41
  () => P(
42
42
  typeof window < "u" ? window.location.hostname.toLowerCase() : "",
43
- e,
44
43
  r,
44
+ e,
45
45
  o,
46
46
  t,
47
47
  n
48
48
  ),
49
- [e, r, o, t, n]
49
+ [r, e, o, t, n]
50
50
  );
51
51
  }
52
52
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"useOneSageURL.js","sources":["../../../src/utils/hooks/useOneSageURL.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { useSynapseContext } from '../context/SynapseContext'\nimport { BackendDestinationEnum, getEndpoint } from '../functions/index'\nimport {\n ONE_SAGE_APPID_QUERY_PARAM_KEY,\n ONE_SAGE_DEV_URL,\n ONE_SAGE_PRODUCTION_URL,\n ONE_SAGE_STAGING_URL,\n SYNAPSE_BACKEND_DEV_URL,\n SYNAPSE_BACKEND_PRODUCTION_URL,\n SYNAPSE_BACKEND_STAGING_URL,\n} from '../SynapseConstants'\n\nexport function getOneSageBaseUrl(\n currentHostname: string,\n currentBackendEndpoint: string,\n) {\n // If we're on synapse.org, then go to the accounts site that matches the current backend stack.\n //backend endpoint may contain a trailing slash, so let's remove it if present:\n const currentBackendEndpointWithoutSlash = currentBackendEndpoint.replace(\n /\\/$/,\n '',\n )\n if (\n currentHostname === 'synapse.org' ||\n currentHostname.endsWith('.synapse.org')\n ) {\n if (currentBackendEndpointWithoutSlash === SYNAPSE_BACKEND_PRODUCTION_URL) {\n return ONE_SAGE_PRODUCTION_URL\n }\n if (currentBackendEndpointWithoutSlash === SYNAPSE_BACKEND_STAGING_URL) {\n return ONE_SAGE_STAGING_URL\n }\n if (currentBackendEndpointWithoutSlash === SYNAPSE_BACKEND_DEV_URL) {\n return ONE_SAGE_DEV_URL\n }\n }\n\n if (currentHostname === 'localhost' || currentHostname === '127.0.0.1') {\n return `http://${currentHostname}:3000`\n }\n\n console.warn(\n `No accounts URL found for host: ${currentHostname} with backend endpoint: ${currentBackendEndpointWithoutSlash}`,\n )\n return ONE_SAGE_PRODUCTION_URL\n}\n\nexport function getOneSageUrl(\n currentHostname: string,\n currentBackendEndpoint: string,\n appId?: string,\n path: string = '',\n search?: URLSearchParams,\n hash?: string,\n) {\n const targetURL = getOneSageBaseUrl(currentHostname, currentBackendEndpoint)\n\n const url = new URL(path, targetURL)\n if (appId) {\n url.searchParams.append(ONE_SAGE_APPID_QUERY_PARAM_KEY, appId)\n }\n if (search) {\n search.forEach((value, key) => {\n url.searchParams.append(key, value)\n })\n }\n if (hash) {\n url.hash = hash\n }\n return url\n}\n\n/**\n * Create a URL to OneSage that includes the current app's ID using SynapseContext\n * @param path the path to the OneSage page\n * @param search an optional set of URLSearchParams to append to the URL\n * @param hash an optional hash to append to the URL\n */\nexport function useOneSageURL(\n path: string = '',\n search?: URLSearchParams,\n hash?: string,\n): URL {\n const { appId } = useSynapseContext()\n\n const currentBackendEndpoint = getEndpoint(\n BackendDestinationEnum.REPO_ENDPOINT,\n )\n\n return useMemo(\n () =>\n getOneSageUrl(\n typeof window !== 'undefined'\n ? window.location.hostname.toLowerCase()\n : '',\n currentBackendEndpoint,\n appId,\n path,\n search,\n hash,\n ),\n [currentBackendEndpoint, appId, path, search, hash],\n )\n}\n"],"names":["getOneSageBaseUrl","currentHostname","currentBackendEndpoint","currentBackendEndpointWithoutSlash","SYNAPSE_BACKEND_PRODUCTION_URL","ONE_SAGE_PRODUCTION_URL","SYNAPSE_BACKEND_STAGING_URL","ONE_SAGE_STAGING_URL","SYNAPSE_BACKEND_DEV_URL","ONE_SAGE_DEV_URL","getOneSageUrl","appId","path","search","hash","targetURL","url","ONE_SAGE_APPID_QUERY_PARAM_KEY","value","key","useOneSageURL","useSynapseContext","getEndpoint","BackendDestinationEnum","useMemo"],"mappings":";;;;;;;;;;;;AAaO,SAASA,EACdC,GACAC,GACA;AAGA,QAAMC,IAAqCD,EAAuB;AAAA,IAChE;AAAA,IACA;AAAA,EAAA;AAEF,MACED,MAAoB,iBACpBA,EAAgB,SAAS,cAAc,GACvC;AACA,QAAIE,MAAuCC;AACzC,aAAOC;AAET,QAAIF,MAAuCG;AACzC,aAAOC;AAET,QAAIJ,MAAuCK;AACzC,aAAOC;AAAA,EAEX;AAEA,SAAIR,MAAoB,eAAeA,MAAoB,cAClD,UAAUA,CAAe,WAGlC,QAAQ;AAAA,IACN,mCAAmCA,CAAe,2BAA2BE,CAAkC;AAAA,EAAA,GAE1GE;AACT;AAEO,SAASK,EACdT,GACAC,GACAS,GACAC,IAAe,IACfC,GACAC,GACA;AACA,QAAMC,IAAYf,EAAkBC,GAAiBC,CAAsB,GAErEc,IAAM,IAAI,IAAIJ,GAAMG,CAAS;AACnC,SAAIJ,KACFK,EAAI,aAAa,OAAOC,GAAgCN,CAAK,GAE3DE,KACFA,EAAO,QAAQ,CAACK,GAAOC,MAAQ;AAC7B,IAAAH,EAAI,aAAa,OAAOG,GAAKD,CAAK;AAAA,EACpC,CAAC,GAECJ,MACFE,EAAI,OAAOF,IAENE;AACT;AAQO,SAASI,EACdR,IAAe,IACfC,GACAC,GACK;AACL,QAAM,EAAE,OAAAH,EAAA,IAAUU,EAAA,GAEZnB,IAAyBoB;AAAA,IAC7BC,EAAuB;AAAA,EAAA;AAGzB,SAAOC;AAAA,IACL,MACEd;AAAA,MACE,OAAO,SAAW,MACd,OAAO,SAAS,SAAS,gBACzB;AAAA,MACJR;AAAA,MACAS;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,IAAA;AAAA,IAEJ,CAACZ,GAAwBS,GAAOC,GAAMC,GAAQC,CAAI;AAAA,EAAA;AAEtD;"}
1
+ {"version":3,"file":"useOneSageURL.js","sources":["../../../src/utils/hooks/useOneSageURL.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { useSynapseContext } from '../context/SynapseContext'\nimport { BackendDestinationEnum, getEndpoint } from '../functions/index'\nimport {\n ONE_SAGE_APPID_QUERY_PARAM_KEY,\n ONE_SAGE_DEV_URL,\n ONE_SAGE_PRODUCTION_URL,\n ONE_SAGE_STAGING_URL,\n SYNAPSE_BACKEND_DEV_URL,\n SYNAPSE_BACKEND_PRODUCTION_URL,\n SYNAPSE_BACKEND_STAGING_URL,\n} from '../SynapseConstants'\n\nexport function getOneSageBaseUrl(\n currentHostname: string,\n currentBackendEndpoint: string,\n) {\n // If we're on synapse.org, then go to the accounts site that matches the current backend stack.\n //backend endpoint may contain a trailing slash, so let's remove it if present:\n const currentBackendEndpointWithoutSlash = currentBackendEndpoint.replace(\n /\\/$/,\n '',\n )\n if (\n currentHostname === 'synapse.org' ||\n currentHostname.endsWith('.synapse.org')\n ) {\n if (currentBackendEndpointWithoutSlash === SYNAPSE_BACKEND_PRODUCTION_URL) {\n return ONE_SAGE_PRODUCTION_URL\n }\n if (currentBackendEndpointWithoutSlash === SYNAPSE_BACKEND_STAGING_URL) {\n return ONE_SAGE_STAGING_URL\n }\n if (currentBackendEndpointWithoutSlash === SYNAPSE_BACKEND_DEV_URL) {\n return ONE_SAGE_DEV_URL\n }\n }\n\n if (currentHostname === 'localhost' || currentHostname === '127.0.0.1') {\n return `http://${currentHostname}:3000`\n }\n\n if (!currentHostname) {\n return ONE_SAGE_PRODUCTION_URL\n }\n\n console.warn(\n `No accounts URL found for host: ${currentHostname} with backend endpoint: ${currentBackendEndpointWithoutSlash}`,\n )\n return ONE_SAGE_PRODUCTION_URL\n}\n\nexport function getOneSageUrl(\n currentHostname: string,\n currentBackendEndpoint: string,\n appId?: string,\n path: string = '',\n search?: URLSearchParams,\n hash?: string,\n) {\n const targetURL = getOneSageBaseUrl(currentHostname, currentBackendEndpoint)\n\n const url = new URL(path, targetURL)\n if (appId) {\n url.searchParams.append(ONE_SAGE_APPID_QUERY_PARAM_KEY, appId)\n }\n if (search) {\n search.forEach((value, key) => {\n url.searchParams.append(key, value)\n })\n }\n if (hash) {\n url.hash = hash\n }\n return url\n}\n\n/**\n * Create a URL to OneSage that includes the current app's ID using SynapseContext\n * @param path the path to the OneSage page\n * @param search an optional set of URLSearchParams to append to the URL\n * @param hash an optional hash to append to the URL\n */\nexport function useOneSageURL(\n path: string = '',\n search?: URLSearchParams,\n hash?: string,\n): URL {\n const { appId } = useSynapseContext()\n\n const currentBackendEndpoint = getEndpoint(\n BackendDestinationEnum.REPO_ENDPOINT,\n )\n\n return useMemo(\n () =>\n getOneSageUrl(\n typeof window !== 'undefined'\n ? window.location.hostname.toLowerCase()\n : '',\n currentBackendEndpoint,\n appId,\n path,\n search,\n hash,\n ),\n [currentBackendEndpoint, appId, path, search, hash],\n )\n}\n"],"names":["getOneSageBaseUrl","currentHostname","currentBackendEndpoint","currentBackendEndpointWithoutSlash","SYNAPSE_BACKEND_PRODUCTION_URL","ONE_SAGE_PRODUCTION_URL","SYNAPSE_BACKEND_STAGING_URL","ONE_SAGE_STAGING_URL","SYNAPSE_BACKEND_DEV_URL","ONE_SAGE_DEV_URL","getOneSageUrl","appId","path","search","hash","targetURL","url","ONE_SAGE_APPID_QUERY_PARAM_KEY","value","key","useOneSageURL","useSynapseContext","getEndpoint","BackendDestinationEnum","useMemo"],"mappings":";;;;;;;;;;;;AAaO,SAASA,EACdC,GACAC,GACA;AAGA,QAAMC,IAAqCD,EAAuB;AAAA,IAChE;AAAA,IACA;AAAA,EAAA;AAEF,MACED,MAAoB,iBACpBA,EAAgB,SAAS,cAAc,GACvC;AACA,QAAIE,MAAuCC;AACzC,aAAOC;AAET,QAAIF,MAAuCG;AACzC,aAAOC;AAET,QAAIJ,MAAuCK;AACzC,aAAOC;AAAA,EAEX;AAEA,SAAIR,MAAoB,eAAeA,MAAoB,cAClD,UAAUA,CAAe,UAG7BA,KAIL,QAAQ;AAAA,IACN,mCAAmCA,CAAe,2BAA2BE,CAAkC;AAAA,EAAA,GAE1GE,KANEA;AAOX;AAEO,SAASK,EACdT,GACAC,GACAS,GACAC,IAAe,IACfC,GACAC,GACA;AACA,QAAMC,IAAYf,EAAkBC,GAAiBC,CAAsB,GAErEc,IAAM,IAAI,IAAIJ,GAAMG,CAAS;AACnC,SAAIJ,KACFK,EAAI,aAAa,OAAOC,GAAgCN,CAAK,GAE3DE,KACFA,EAAO,QAAQ,CAACK,GAAOC,MAAQ;AAC7B,IAAAH,EAAI,aAAa,OAAOG,GAAKD,CAAK;AAAA,EACpC,CAAC,GAECJ,MACFE,EAAI,OAAOF,IAENE;AACT;AAQO,SAASI,EACdR,IAAe,IACfC,GACAC,GACK;AACL,QAAM,EAAE,OAAAH,EAAA,IAAUU,EAAA,GAEZnB,IAAyBoB;AAAA,IAC7BC,EAAuB;AAAA,EAAA;AAGzB,SAAOC;AAAA,IACL,MACEd;AAAA,MACE,OAAO,SAAW,MACd,OAAO,SAAS,SAAS,gBACzB;AAAA,MACJR;AAAA,MACAS;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,IAAA;AAAA,IAEJ,CAACZ,GAAwBS,GAAOC,GAAMC,GAAQC,CAAI;AAAA,EAAA;AAEtD;"}
@@ -13,6 +13,7 @@ export type SourceAppConfig = {
13
13
  isPublicized: boolean;
14
14
  shortDescription: string;
15
15
  defaultRealm: Realm;
16
+ area?: string;
16
17
  };
17
18
  export declare const STATIC_SOURCE_APP_CONFIG: SourceAppConfig;
18
19
  export declare const useSourceAppConfigs: (sourceAppConfigTableID: string, additionalFilters?: QueryFilter[]) => SourceAppConfig[] | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"useSourceAppConfigs.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/useSourceAppConfigs.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAW,MAAM,OAAO,CAAA;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAM7D,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,cAAc,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,YAAY,EAAE,OAAO,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,YAAY,EAAE,KAAK,CAAA;CACpB,CAAA;AAGD,eAAO,MAAM,wBAAwB,EAAE,eActC,CAAA;AASD,eAAO,MAAM,mBAAmB,GAC9B,wBAAwB,MAAM,EAC9B,oBAAoB,WAAW,EAAE,KAChC,eAAe,EAAE,GAAG,SAkLtB,CAAA"}
1
+ {"version":3,"file":"useSourceAppConfigs.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/useSourceAppConfigs.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAW,MAAM,OAAO,CAAA;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAM7D,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,cAAc,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,YAAY,EAAE,OAAO,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,YAAY,EAAE,KAAK,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAGD,eAAO,MAAM,wBAAwB,EAAE,eActC,CAAA;AASD,eAAO,MAAM,mBAAmB,GAC9B,wBAAwB,MAAM,EAC9B,oBAAoB,WAAW,EAAE,KAChC,eAAe,EAAE,GAAG,SA0LtB,CAAA"}