synapse-react-client 4.0.2 → 4.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (525) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/assets/icons/AwardScroll.d.ts +5 -0
  3. package/dist/assets/icons/AwardScroll.d.ts.map +1 -0
  4. package/dist/assets/icons/AwardScroll.js +78 -0
  5. package/dist/assets/icons/AwardScroll.js.map +1 -0
  6. package/dist/assets/icons/Baseline.d.ts +5 -0
  7. package/dist/assets/icons/Baseline.d.ts.map +1 -0
  8. package/dist/assets/icons/Baseline.js +43 -0
  9. package/dist/assets/icons/Baseline.js.map +1 -0
  10. package/dist/assets/icons/Challenge.svg +13 -0
  11. package/dist/assets/icons/Challenge.svg.js +7 -0
  12. package/dist/assets/icons/Challenge.svg.js.map +1 -0
  13. package/dist/assets/icons/ClappingHands.d.ts +5 -0
  14. package/dist/assets/icons/ClappingHands.d.ts.map +1 -0
  15. package/dist/assets/icons/ClappingHands.js +106 -0
  16. package/dist/assets/icons/ClappingHands.js.map +1 -0
  17. package/dist/assets/icons/HandWithMoney.d.ts +5 -0
  18. package/dist/assets/icons/HandWithMoney.d.ts.map +1 -0
  19. package/dist/assets/icons/HandWithMoney.js +15 -0
  20. package/dist/assets/icons/HandWithMoney.js.map +1 -0
  21. package/dist/assets/icons/MultiFile.d.ts +5 -0
  22. package/dist/assets/icons/MultiFile.d.ts.map +1 -0
  23. package/dist/assets/icons/MultiFile.js +8 -0
  24. package/dist/assets/icons/MultiFile.js.map +1 -0
  25. package/dist/assets/icons/MultiFile.svg +4 -0
  26. package/dist/assets/icons/MultiFile.svg.js +7 -0
  27. package/dist/assets/icons/MultiFile.svg.js.map +1 -0
  28. package/dist/assets/icons/OpenBook.d.ts +5 -0
  29. package/dist/assets/icons/OpenBook.d.ts.map +1 -0
  30. package/dist/assets/icons/OpenBook.js +99 -0
  31. package/dist/assets/icons/OpenBook.js.map +1 -0
  32. package/dist/assets/icons/Podium.d.ts +5 -0
  33. package/dist/assets/icons/Podium.d.ts.map +1 -0
  34. package/dist/assets/icons/Podium.js +36 -0
  35. package/dist/assets/icons/Podium.js.map +1 -0
  36. package/dist/assets/icons/RosetteRibbon.d.ts +5 -0
  37. package/dist/assets/icons/RosetteRibbon.d.ts.map +1 -0
  38. package/dist/assets/icons/RosetteRibbon.js +36 -0
  39. package/dist/assets/icons/RosetteRibbon.js.map +1 -0
  40. package/dist/assets/icons/StarTrophy.d.ts +5 -0
  41. package/dist/assets/icons/StarTrophy.d.ts.map +1 -0
  42. package/dist/assets/icons/StarTrophy.js +99 -0
  43. package/dist/assets/icons/StarTrophy.js.map +1 -0
  44. package/dist/assets/icons/ThreeStars.d.ts +5 -0
  45. package/dist/assets/icons/ThreeStars.d.ts.map +1 -0
  46. package/dist/assets/icons/ThreeStars.js +71 -0
  47. package/dist/assets/icons/ThreeStars.js.map +1 -0
  48. package/dist/assets/icons/UnpackagableFile.d.ts +5 -0
  49. package/dist/assets/icons/UnpackagableFile.d.ts.map +1 -0
  50. package/dist/assets/icons/UnpackagableFile.js +8 -0
  51. package/dist/assets/icons/UnpackagableFile.js.map +1 -0
  52. package/dist/assets/icons/UnpackagableFile.svg +4 -0
  53. package/dist/assets/icons/UnpackagableFile.svg.js +7 -0
  54. package/dist/assets/icons/UnpackagableFile.svg.js.map +1 -0
  55. package/dist/assets/mui_components/PackagableFile.d.ts.map +1 -1
  56. package/dist/assets/mui_components/PackagableFile.js +5 -4
  57. package/dist/assets/mui_components/PackagableFile.js.map +1 -1
  58. package/dist/assets/mui_components/PackagableFile.svg +3 -0
  59. package/dist/assets/mui_components/PackagableFile.svg.js +7 -0
  60. package/dist/assets/mui_components/PackagableFile.svg.js.map +1 -0
  61. package/dist/assets/themed_icons/index.d.ts +1 -2
  62. package/dist/assets/themed_icons/index.d.ts.map +1 -1
  63. package/dist/assets/themed_icons/index.js +8 -10
  64. package/dist/assets/themed_icons/index.js.map +1 -1
  65. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js +1 -1
  66. package/dist/components/AccessRequirementList/AccessRequirementList.js +4 -4
  67. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.d.ts.map +1 -1
  68. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js +8 -7
  69. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
  70. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js +4 -4
  71. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItem.js +11 -11
  72. package/dist/components/AccessRequirementList/RequirementItem/RequirementItem.js +1 -1
  73. package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js +9 -9
  74. package/dist/components/AccessRequirementList/RequirementItem/UnmanagedACTAccessRequirementItem.js +5 -5
  75. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.d.ts.map +1 -1
  76. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js +36 -35
  77. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
  78. package/dist/components/AclEditor/AclEditor.js +8 -8
  79. package/dist/components/AclEditor/AclEditor.js.map +1 -1
  80. package/dist/components/AclEditor/AclEditor.test-utils.js +34 -34
  81. package/dist/components/AclEditor/AclEditor.test-utils.js.map +1 -1
  82. package/dist/components/AddToDownloadListV2.js +10 -10
  83. package/dist/components/AddToDownloadListV2.js.map +1 -1
  84. package/dist/components/Authentication/AuthenticationMethodSelection.js +1 -1
  85. package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
  86. package/dist/components/Authentication/TwoFactorEnrollmentForm.js +6 -5
  87. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  88. package/dist/components/BasePortalCard/BasePortalCard.css +1 -1
  89. package/dist/components/BasePortalCard/BasePortalCard.d.ts +1 -2
  90. package/dist/components/BasePortalCard/BasePortalCard.d.ts.map +1 -1
  91. package/dist/components/BasePortalCard/BasePortalCard.js +21 -28
  92. package/dist/components/BasePortalCard/BasePortalCard.js.map +1 -1
  93. package/dist/components/BasePortalCard/BasePortalCard.module.scss +13 -1
  94. package/dist/components/BasePortalCard/BasePortalCard.module.scss.js +11 -11
  95. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.css +1 -1
  96. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.d.ts.map +1 -1
  97. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js +25 -25
  98. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js.map +1 -1
  99. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.module.scss +13 -5
  100. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.module.scss.js +5 -5
  101. package/dist/components/CardContainer/CardLink.d.ts +12 -0
  102. package/dist/components/CardContainer/CardLink.d.ts.map +1 -1
  103. package/dist/components/CardContainerLogic/CardContainerLogic.d.ts +5 -1
  104. package/dist/components/CardContainerLogic/CardContainerLogic.d.ts.map +1 -1
  105. package/dist/components/CardContainerLogic/CardContainerLogic.js.map +1 -1
  106. package/dist/components/CardContainerLogic/index.d.ts +1 -1
  107. package/dist/components/CardContainerLogic/index.d.ts.map +1 -1
  108. package/dist/components/CardDeck/TableQueryCardDeck.js +12 -9
  109. package/dist/components/CardDeck/TableQueryCardDeck.js.map +1 -1
  110. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js +33 -33
  111. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js.map +1 -1
  112. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js +12 -12
  113. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.d.ts.map +1 -1
  114. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js +7 -7
  115. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
  116. package/dist/components/ChangePassword/useChangePasswordFormState.js +5 -2
  117. package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
  118. package/dist/components/CitationPopover/CitationPopoverContent.d.ts.map +1 -1
  119. package/dist/components/CitationPopover/CitationPopoverContent.js +13 -12
  120. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  121. package/dist/components/ComponentCollapse.d.ts +6 -10
  122. package/dist/components/ComponentCollapse.d.ts.map +1 -1
  123. package/dist/components/ComponentCollapse.js +31 -35
  124. package/dist/components/ComponentCollapse.js.map +1 -1
  125. package/dist/components/CookiesNotification/CookiesNotification.js +1 -1
  126. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js +12 -10
  127. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js.map +1 -1
  128. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js +10 -5
  129. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js.map +1 -1
  130. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  131. package/dist/components/DataGrid/SynapseGrid.js +43 -38
  132. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  133. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js +10 -5
  134. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js.map +1 -1
  135. package/dist/components/DataGrid/hooks/useExportDataGridToCsv.d.ts.map +1 -1
  136. package/dist/components/DataGrid/hooks/useExportDataGridToCsv.js +9 -7
  137. package/dist/components/DataGrid/hooks/useExportDataGridToCsv.js.map +1 -1
  138. package/dist/components/DirectDownload/DirectDownload.d.ts.map +1 -1
  139. package/dist/components/DirectDownload/DirectDownload.js +23 -23
  140. package/dist/components/DirectDownload/DirectDownload.js.map +1 -1
  141. package/dist/components/DownloadCart/ActionRequiredCard/ActionRequiredCard.js +1 -1
  142. package/dist/components/DownloadCart/AvailableForDownloadTable.d.ts +6 -2
  143. package/dist/components/DownloadCart/AvailableForDownloadTable.d.ts.map +1 -1
  144. package/dist/components/DownloadCart/AvailableForDownloadTable.js +10 -8
  145. package/dist/components/DownloadCart/AvailableForDownloadTable.js.map +1 -1
  146. package/dist/components/DownloadCart/CreatePackageV2.css +1 -0
  147. package/dist/components/DownloadCart/CreatePackageV2.d.ts.map +1 -1
  148. package/dist/components/DownloadCart/CreatePackageV2.js +50 -46
  149. package/dist/components/DownloadCart/CreatePackageV2.js.map +1 -1
  150. package/dist/components/DownloadCart/CreatePackageV2.module.scss +38 -0
  151. package/dist/components/DownloadCart/CreatePackageV2.module.scss.js +14 -0
  152. package/dist/components/DownloadCart/CreatePackageV2.module.scss.js.map +1 -0
  153. package/dist/components/DownloadCart/DownloadCartPage.css +1 -0
  154. package/dist/components/DownloadCart/DownloadCartPage.d.ts.map +1 -1
  155. package/dist/components/DownloadCart/DownloadCartPage.js +316 -186
  156. package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
  157. package/dist/components/DownloadCart/DownloadCartPage.module.scss +217 -0
  158. package/dist/components/DownloadCart/DownloadCartPage.module.scss.js +48 -0
  159. package/dist/components/DownloadCart/DownloadCartPage.module.scss.js.map +1 -0
  160. package/dist/components/DownloadCart/DownloadDetails.js +1 -1
  161. package/dist/components/DownloadCart/DownloadDetails.js.map +1 -1
  162. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +33 -33
  163. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  164. package/dist/components/DownloadCart/DownloadListTable.d.ts +4 -1
  165. package/dist/components/DownloadCart/DownloadListTable.d.ts.map +1 -1
  166. package/dist/components/DownloadCart/DownloadListTable.js +156 -236
  167. package/dist/components/DownloadCart/DownloadListTable.js.map +1 -1
  168. package/dist/components/DownloadCart/RequestDownloadCard.js +1 -1
  169. package/dist/components/DownloadCart/ShowDownloadV2.js +5 -5
  170. package/dist/components/DownloadCart/ShowDownloadV2.js.map +1 -1
  171. package/dist/components/Ecosystem/EcosystemSkeleton.js +10 -5
  172. package/dist/components/Ecosystem/EcosystemSkeleton.js.map +1 -1
  173. package/dist/components/Ecosystem/TableQueryEcosystem.js +1 -1
  174. package/dist/components/EntityAclEditor/EntityAclEditorModal.js +1 -1
  175. package/dist/components/EntityAclEditor/OpenData.js +1 -1
  176. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.d.ts.map +1 -1
  177. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +113 -127
  178. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  179. package/dist/components/EntityCitation/EntityCitation.js +1 -1
  180. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +20 -20
  181. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  182. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js +4 -4
  183. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js.map +1 -1
  184. package/dist/components/EntityFinder/details/view/table/CreatedOnCell.js +1 -1
  185. package/dist/components/EntityFinder/details/view/table/EntityNameCell.js +1 -1
  186. package/dist/components/EntityFinder/details/view/table/FileEntityMD5Cell.js +1 -1
  187. package/dist/components/EntityFinder/details/view/table/FileEntitySizeCell.js +1 -1
  188. package/dist/components/EntityFinder/details/view/table/ModifiedByCell.js +1 -1
  189. package/dist/components/EntityFinder/details/view/table/ModifiedOnCell.js +1 -1
  190. package/dist/components/EntityFinder/details/view/table/ParentProjectCell.js +1 -1
  191. package/dist/components/EntityFinder/tree/EntityTree.js +1 -1
  192. package/dist/components/EntityHeaderTable/EntityHeaderTable.d.ts.map +1 -1
  193. package/dist/components/EntityHeaderTable/EntityHeaderTable.js +39 -39
  194. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  195. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.d.ts +8 -0
  196. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.d.ts.map +1 -0
  197. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.js +46 -0
  198. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.js.map +1 -0
  199. package/dist/components/Evaluation/EvaluationCard.d.ts.map +1 -1
  200. package/dist/components/Evaluation/EvaluationCard.js +35 -41
  201. package/dist/components/Evaluation/EvaluationCard.js.map +1 -1
  202. package/dist/components/Evaluation/EvaluationEditor.d.ts.map +1 -1
  203. package/dist/components/Evaluation/EvaluationEditor.js +95 -90
  204. package/dist/components/Evaluation/EvaluationEditor.js.map +1 -1
  205. package/dist/components/Evaluation/EvaluationRoundEditor.d.ts.map +1 -1
  206. package/dist/components/Evaluation/EvaluationRoundEditor.js +133 -124
  207. package/dist/components/Evaluation/EvaluationRoundEditor.js.map +1 -1
  208. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js +6 -2
  209. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  210. package/dist/components/FeaturedDataTabs/FeaturedDataTabs.js +11 -8
  211. package/dist/components/FeaturedDataTabs/FeaturedDataTabs.js.map +1 -1
  212. package/dist/components/FilePreview/EntityPreview.js +1 -1
  213. package/dist/components/Forum/DiscussionReply.js +10 -10
  214. package/dist/components/Forum/DiscussionThread.js +21 -21
  215. package/dist/components/FullWidthAlert/FullWidthAlert.d.ts +2 -2
  216. package/dist/components/FullWidthAlert/FullWidthAlert.js.map +1 -1
  217. package/dist/components/GenericCard/CardUtils.d.ts.map +1 -1
  218. package/dist/components/GenericCard/CardUtils.js +36 -36
  219. package/dist/components/GenericCard/CardUtils.js.map +1 -1
  220. package/dist/components/GenericCard/CollapsibleDescription.js +25 -25
  221. package/dist/components/GenericCard/GenericCard.d.ts +5 -5
  222. package/dist/components/GenericCard/GenericCard.d.ts.map +1 -1
  223. package/dist/components/GenericCard/GenericCard.js +117 -103
  224. package/dist/components/GenericCard/GenericCard.js.map +1 -1
  225. package/dist/components/GenericCard/LabelMaybeWithIcon.d.ts +10 -0
  226. package/dist/components/GenericCard/LabelMaybeWithIcon.d.ts.map +1 -0
  227. package/dist/components/GenericCard/LabelMaybeWithIcon.js +33 -0
  228. package/dist/components/GenericCard/LabelMaybeWithIcon.js.map +1 -0
  229. package/dist/components/GenericCard/SynapseCardLabel.d.ts +2 -1
  230. package/dist/components/GenericCard/SynapseCardLabel.d.ts.map +1 -1
  231. package/dist/components/GenericCard/SynapseCardLabel.js +95 -85
  232. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  233. package/dist/components/GenericCard/TableRowGenericCard.d.ts +10 -1
  234. package/dist/components/GenericCard/TableRowGenericCard.d.ts.map +1 -1
  235. package/dist/components/GenericCard/TableRowGenericCard.js +248 -209
  236. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  237. package/dist/components/GoalsV2/GoalsV2.Desktop.d.ts.map +1 -1
  238. package/dist/components/GoalsV2/GoalsV2.Desktop.js +14 -15
  239. package/dist/components/GoalsV2/GoalsV2.Desktop.js.map +1 -1
  240. package/dist/components/GoogleAnalytics/GoogleAnalytics.js +1 -1
  241. package/dist/components/HasAccess/HasAccessV2.js +1 -1
  242. package/dist/components/HasAccess/useHasAccess.js +1 -1
  243. package/dist/components/HeaderCard.js +17 -13
  244. package/dist/components/HeaderCard.js.map +1 -1
  245. package/dist/components/IDUReport/IDUReportSubmissionInfo.js +23 -23
  246. package/dist/components/IDUReport/IDUReportSubmissionInfo.js.map +1 -1
  247. package/dist/components/Icon/Icon.js +52 -52
  248. package/dist/components/Icon/Icon.js.map +1 -1
  249. package/dist/components/IconSvg/IconSvg.d.ts +1 -1
  250. package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
  251. package/dist/components/IconSvg/IconSvg.js +215 -171
  252. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  253. package/dist/components/JSONArrayEditor/useParseCsv.d.ts +1 -1
  254. package/dist/components/JSONArrayEditor/useParseCsv.d.ts.map +1 -1
  255. package/dist/components/JSONArrayEditor/useParseCsv.js +9 -9
  256. package/dist/components/JSONArrayEditor/useParseCsv.js.map +1 -1
  257. package/dist/components/Markdown/MarkdownCollapse.js +7 -7
  258. package/dist/components/Markdown/MarkdownEditor.js +11 -11
  259. package/dist/components/Markdown/MarkdownGithub.js +1 -1
  260. package/dist/components/Markdown/MarkdownPopover.js +6 -6
  261. package/dist/components/Markdown/MarkdownPopover.js.map +1 -1
  262. package/dist/components/Markdown/MarkdownSynapse.d.ts.map +1 -1
  263. package/dist/components/Markdown/MarkdownSynapse.js +139 -135
  264. package/dist/components/Markdown/MarkdownSynapse.js.map +1 -1
  265. package/dist/components/Markdown/MarkdownUtils.d.ts +8 -0
  266. package/dist/components/Markdown/MarkdownUtils.d.ts.map +1 -1
  267. package/dist/components/Markdown/MarkdownUtils.js +139 -65
  268. package/dist/components/Markdown/MarkdownUtils.js.map +1 -1
  269. package/dist/components/Markdown/UserMentionModal.js +18 -18
  270. package/dist/components/Markdown/UserMentionModal.js.map +1 -1
  271. package/dist/components/Markdown/widget/MarkdownButton.js +3 -3
  272. package/dist/components/Markdown/widget/MarkdownButton.js.map +1 -1
  273. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.d.ts.map +1 -1
  274. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js +9 -8
  275. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  276. package/dist/components/Plot/SynapsePlot.css +1 -0
  277. package/dist/components/Plot/SynapsePlot.d.ts +2 -0
  278. package/dist/components/Plot/SynapsePlot.d.ts.map +1 -1
  279. package/dist/components/Plot/SynapsePlot.js +43 -39
  280. package/dist/components/Plot/SynapsePlot.js.map +1 -1
  281. package/dist/components/Plot/SynapsePlot.scss +8 -0
  282. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js +1 -1
  283. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +1 -0
  284. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
  285. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +137 -135
  286. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  287. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.d.ts +1 -1
  288. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.d.ts.map +1 -1
  289. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js.map +1 -1
  290. package/dist/components/Resources/Resources.Desktop.js +7 -7
  291. package/dist/components/Resources/Resources.Mobile.js +6 -6
  292. package/dist/components/StorybookComponentWrapper.js +6 -3
  293. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  294. package/dist/components/SubsectionRowRenderer/SubsectionRowRenderer.js +3 -3
  295. package/dist/components/SustainabilityScorecard/SustainabilityScorecardSummary.js +10 -10
  296. package/dist/components/SynapseChat/SynapseChat.d.ts +7 -1
  297. package/dist/components/SynapseChat/SynapseChat.d.ts.map +1 -1
  298. package/dist/components/SynapseChat/SynapseChat.js +76 -67
  299. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  300. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts +2 -1
  301. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts.map +1 -1
  302. package/dist/components/SynapseChat/SynapseChatInteraction.js +83 -58
  303. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  304. package/dist/components/SynapseChat/SynapseChatMessage.d.ts +1 -0
  305. package/dist/components/SynapseChat/SynapseChatMessage.d.ts.map +1 -1
  306. package/dist/components/SynapseChat/SynapseChatMessage.js +16 -15
  307. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  308. package/dist/components/SynapseChat/SynapsePortalChatDialog.d.ts +12 -0
  309. package/dist/components/SynapseChat/SynapsePortalChatDialog.d.ts.map +1 -0
  310. package/dist/components/SynapseChat/SynapsePortalChatDialog.js +30 -0
  311. package/dist/components/SynapseChat/SynapsePortalChatDialog.js.map +1 -0
  312. package/dist/components/SynapseChat/extractMessageFromTraceEvent.d.ts.map +1 -1
  313. package/dist/components/SynapseChat/extractMessageFromTraceEvent.js +22 -16
  314. package/dist/components/SynapseChat/extractMessageFromTraceEvent.js.map +1 -1
  315. package/dist/components/SynapseChat/index.d.ts +2 -0
  316. package/dist/components/SynapseChat/index.d.ts.map +1 -1
  317. package/dist/components/SynapseChat/index.js +5 -3
  318. package/dist/components/SynapseChat/index.js.map +1 -1
  319. package/dist/components/SynapseChat/useChatState.d.ts +1 -1
  320. package/dist/components/SynapseChat/useChatState.d.ts.map +1 -1
  321. package/dist/components/SynapseChat/useChatState.js +10 -7
  322. package/dist/components/SynapseChat/useChatState.js.map +1 -1
  323. package/dist/components/SynapseForm/WarningDialog.d.ts +1 -0
  324. package/dist/components/SynapseForm/WarningDialog.d.ts.map +1 -1
  325. package/dist/components/SynapseForm/WarningDialog.js +18 -16
  326. package/dist/components/SynapseForm/WarningDialog.js.map +1 -1
  327. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js +1 -1
  328. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +25 -25
  329. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  330. package/dist/components/SynapseSearchPageResults/HasAccessChip.js +1 -1
  331. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.d.ts.map +1 -1
  332. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.js +12 -13
  333. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.js.map +1 -1
  334. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js +5 -5
  335. package/dist/components/SynapseTable/ExpandableTableDataCell.d.ts.map +1 -1
  336. package/dist/components/SynapseTable/ExpandableTableDataCell.js +3 -1
  337. package/dist/components/SynapseTable/ExpandableTableDataCell.js.map +1 -1
  338. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +13 -13
  339. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  340. package/dist/components/SynapseTable/SynapseTable.js +4 -4
  341. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.d.ts.map +1 -1
  342. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js +122 -122
  343. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js.map +1 -1
  344. package/dist/components/SynapseTable/TopLevelControls/TopLevelControlsUtils.js +9 -9
  345. package/dist/components/SynapseTable/TopLevelControls/TopLevelControlsUtils.js.map +1 -1
  346. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +5 -5
  347. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +1 -1
  348. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditor.js +1 -1
  349. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +1 -1
  350. package/dist/components/TableFeedCards/TableFeedCards.js +9 -9
  351. package/dist/components/TermsAndConditions/TermsAndConditionsItem.js +10 -10
  352. package/dist/components/TextToComponentCollapse.d.ts +16 -0
  353. package/dist/components/TextToComponentCollapse.d.ts.map +1 -0
  354. package/dist/components/TextToComponentCollapse.js +29 -0
  355. package/dist/components/TextToComponentCollapse.js.map +1 -0
  356. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js +9 -9
  357. package/dist/components/UserSearchBox/UserSearchBox.d.ts +23 -0
  358. package/dist/components/UserSearchBox/UserSearchBox.d.ts.map +1 -0
  359. package/dist/components/UserSearchBox/UserSearchBox.js +146 -0
  360. package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -0
  361. package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js +13 -13
  362. package/dist/components/WizardChoiceButton/WizardChoiceButton.js +3 -3
  363. package/dist/components/dataaccess/AccessHistoryDashboard.js +5 -5
  364. package/dist/components/dataaccess/AccessHistoryDashboard.js.map +1 -1
  365. package/dist/components/dataaccess/AccessRequirementDashboard.js +4 -4
  366. package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
  367. package/dist/components/dataaccess/AccessSubmissionDashboard.js +1 -1
  368. package/dist/components/dataaccess/AccessSubmissionDashboard.js.map +1 -1
  369. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js +5 -5
  370. package/dist/components/dataaccess/UseAccessRequirementTable.js +3 -3
  371. package/dist/components/dataaccess/UseAccessRequirementTable.js.map +1 -1
  372. package/dist/components/doi/CreateOrUpdateDoiModal.js +1 -1
  373. package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js +10 -5
  374. package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js.map +1 -1
  375. package/dist/components/download_list/DownloadConfirmationUI.d.ts +1 -1
  376. package/dist/components/download_list/DownloadConfirmationUI.js +22 -22
  377. package/dist/components/download_list/DownloadConfirmationUI.js.map +1 -1
  378. package/dist/components/download_list/DownloadConfirmationUtils.js +4 -4
  379. package/dist/components/download_list/DownloadConfirmationUtils.js.map +1 -1
  380. package/dist/components/entity/metadata/EntityModal.js +1 -1
  381. package/dist/components/entity/metadata/MetadataTable.js +1 -1
  382. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js +1 -1
  383. package/dist/components/entity/page/title_bar/EntityTitleBarVersionInfo.js +1 -1
  384. package/dist/components/entity/page/title_bar/TitleBarProperties.js +1 -1
  385. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.d.ts.map +1 -1
  386. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js +27 -26
  387. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
  388. package/dist/components/index.js +125 -121
  389. package/dist/components/index.js.map +1 -1
  390. package/dist/components/layout/InfiniteTableLayout.js +1 -1
  391. package/dist/components/row_renderers/ObservationCard.js +12 -11
  392. package/dist/components/row_renderers/ObservationCard.js.map +1 -1
  393. package/dist/components/row_renderers/utils/CardFooter.d.ts +1 -3
  394. package/dist/components/row_renderers/utils/CardFooter.d.ts.map +1 -1
  395. package/dist/components/row_renderers/utils/CardFooter.js +31 -45
  396. package/dist/components/row_renderers/utils/CardFooter.js.map +1 -1
  397. package/dist/components/styled/HoverPopover.css +1 -0
  398. package/dist/components/styled/HoverPopover.d.ts +28 -0
  399. package/dist/components/styled/HoverPopover.d.ts.map +1 -0
  400. package/dist/components/styled/HoverPopover.js +103 -0
  401. package/dist/components/styled/HoverPopover.js.map +1 -0
  402. package/dist/components/styled/HoverPopover.module.scss +9 -0
  403. package/dist/components/styled/HoverPopover.module.scss.js +10 -0
  404. package/dist/components/styled/HoverPopover.module.scss.js.map +1 -0
  405. package/dist/components/styled/index.d.ts +2 -0
  406. package/dist/components/styled/index.d.ts.map +1 -1
  407. package/dist/components/styled/index.js +11 -9
  408. package/dist/components/styled/index.js.map +1 -1
  409. package/dist/components/table/CsvPreview/CsvPreview.js +10 -5
  410. package/dist/components/table/CsvPreview/CsvPreview.js.map +1 -1
  411. package/dist/components/table/CsvPreview/CsvPreviewDialog.js +10 -5
  412. package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
  413. package/dist/components/widgets/Range.js +1 -1
  414. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts.map +1 -1
  415. package/dist/components/widgets/facet-nav/FacetNavPanel.js +35 -32
  416. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  417. package/dist/components/widgets/facet-nav/PlotsContainer.d.ts +1 -1
  418. package/dist/components/widgets/facet-nav/PlotsContainer.d.ts.map +1 -1
  419. package/dist/components/widgets/facet-nav/PlotsContainer.js +69 -68
  420. package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
  421. package/dist/components/widgets/facet-nav/useFacetPlots.d.ts.map +1 -1
  422. package/dist/components/widgets/facet-nav/useFacetPlots.js +24 -21
  423. package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
  424. package/dist/components/widgets/query-filter/FacetFilterControls.js +3 -3
  425. package/dist/features/curator/GridPage/GridPage.js +10 -5
  426. package/dist/features/curator/GridPage/GridPage.js.map +1 -1
  427. package/dist/features/curator/GridPage/components/GridPageTitle.js +10 -5
  428. package/dist/features/curator/GridPage/components/GridPageTitle.js.map +1 -1
  429. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +1 -1
  430. package/dist/index.js +155 -151
  431. package/dist/index.js.map +1 -1
  432. package/dist/mocks/msw/handlers/accessRequirementHandlers.js +5 -5
  433. package/dist/mocks/msw/handlers/projectStorageHandlers.js +5 -5
  434. package/dist/mocks/msw/handlers/wikiHandlers.js +1 -1
  435. package/dist/mocks/msw/handlers.d.ts.map +1 -1
  436. package/dist/mocks/msw/handlers.js +67 -59
  437. package/dist/mocks/msw/handlers.js.map +1 -1
  438. package/dist/style/base/_core.scss +0 -1
  439. package/dist/style/components/_all.scss +0 -2
  440. package/dist/style/components/_cards.scss +22 -0
  441. package/dist/style/components/_download-list-v2.scss +1 -1
  442. package/dist/style/components/_entity-badge.scss +0 -2
  443. package/dist/style/components/_expandable_table_data.scss +3 -3
  444. package/dist/style/components/_query-wrapper-plot-nav.scss +13 -0
  445. package/dist/style/components/facet_nav/_facet-nav-panel.scss +3 -0
  446. package/dist/style/components/facet_nav/_facet-nav.scss +4 -0
  447. package/dist/style/main.css +1 -1
  448. package/dist/synapse-client/SynapseClient.js +118 -118
  449. package/dist/synapse-client/SynapseClient.js.map +1 -1
  450. package/dist/synapse-queries/auth/useOIDC.js +1 -1
  451. package/dist/synapse-queries/auth/useTwoFactorEnrollment.js +1 -1
  452. package/dist/synapse-queries/entity/index.js +6 -6
  453. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js +1 -1
  454. package/dist/synapse-queries/index.js +1 -1
  455. package/dist/synapse-queries/user/usePersonalAccessToken.js +1 -1
  456. package/dist/testutils/vitest.setup.js +10 -11
  457. package/dist/testutils/vitest.setup.js.map +1 -1
  458. package/dist/theme/DefaultTheme.js +1 -1
  459. package/dist/theme/ThemeProvider.d.ts +2 -1
  460. package/dist/theme/ThemeProvider.d.ts.map +1 -1
  461. package/dist/theme/ThemeProvider.js +11 -10
  462. package/dist/theme/ThemeProvider.js.map +1 -1
  463. package/dist/theme/index.js +1 -1
  464. package/dist/theme/mergeTheme.js +1 -1
  465. package/dist/tsconfig.build.tsbuildinfo +1 -1
  466. package/dist/utils/AppUtils/AppUtils.js +1 -1
  467. package/dist/utils/AppUtils/session/ApplicationSessionManager.d.ts.map +1 -1
  468. package/dist/utils/AppUtils/session/ApplicationSessionManager.js.map +1 -1
  469. package/dist/utils/context/FullContextProvider.js +9 -9
  470. package/dist/utils/context/FullContextProvider.js.map +1 -1
  471. package/dist/utils/context/SynapseContext.d.ts.map +1 -1
  472. package/dist/utils/context/SynapseContext.js +1 -0
  473. package/dist/utils/context/SynapseContext.js.map +1 -1
  474. package/dist/utils/functions/SanitizeHtmlUtils.d.ts.map +1 -1
  475. package/dist/utils/functions/SanitizeHtmlUtils.js +34 -40
  476. package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
  477. package/dist/utils/functions/SqlFunctions.d.ts +4 -0
  478. package/dist/utils/functions/SqlFunctions.d.ts.map +1 -1
  479. package/dist/utils/functions/SqlFunctions.js +25 -23
  480. package/dist/utils/functions/SqlFunctions.js.map +1 -1
  481. package/dist/utils/functions/deepLinkingUtils.js +10 -10
  482. package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
  483. package/dist/utils/hooks/index.js +6 -6
  484. package/dist/utils/hooks/useDetectSSOCode.js +3 -3
  485. package/dist/utils/hooks/useGetEntityMetadata.js +1 -1
  486. package/dist/utils/hooks/useNativeSearchParams.d.ts.map +1 -1
  487. package/dist/utils/hooks/useNativeSearchParams.js +1 -1
  488. package/dist/utils/hooks/useNativeSearchParams.js.map +1 -1
  489. package/dist/utils/hooks/useOneSageURL.d.ts.map +1 -1
  490. package/dist/utils/hooks/useOneSageURL.js +15 -15
  491. package/dist/utils/hooks/useOneSageURL.js.map +1 -1
  492. package/dist/utils/hooks/useSourceAppConfigs.d.ts +1 -0
  493. package/dist/utils/hooks/useSourceAppConfigs.d.ts.map +1 -1
  494. package/dist/utils/hooks/useSourceAppConfigs.js +79 -77
  495. package/dist/utils/hooks/useSourceAppConfigs.js.map +1 -1
  496. package/dist/utils/index.js +4 -4
  497. package/package.json +15 -16
  498. package/dist/_virtual/index.js +0 -6
  499. package/dist/_virtual/index.js.map +0 -1
  500. package/dist/_virtual/index2.js +0 -5
  501. package/dist/_virtual/index2.js.map +0 -1
  502. package/dist/_virtual/index3.js +0 -5
  503. package/dist/_virtual/index3.js.map +0 -1
  504. package/dist/_virtual/index4.js +0 -5
  505. package/dist/_virtual/index4.js.map +0 -1
  506. package/dist/_virtual/index5.js +0 -5
  507. package/dist/_virtual/index5.js.map +0 -1
  508. package/dist/assets/themed_icons/Challenge.d.ts +0 -3
  509. package/dist/assets/themed_icons/Challenge.d.ts.map +0 -1
  510. package/dist/assets/themed_icons/Challenge.js +0 -25
  511. package/dist/assets/themed_icons/Challenge.js.map +0 -1
  512. package/dist/components/UserSearchBox/UserSearchBoxV2.d.ts +0 -21
  513. package/dist/components/UserSearchBox/UserSearchBoxV2.d.ts.map +0 -1
  514. package/dist/components/UserSearchBox/UserSearchBoxV2.js +0 -144
  515. package/dist/components/UserSearchBox/UserSearchBoxV2.js.map +0 -1
  516. package/dist/node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js +0 -53
  517. package/dist/node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js.map +0 -1
  518. package/dist/node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js +0 -948
  519. package/dist/node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js.map +0 -1
  520. package/dist/node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js +0 -30
  521. package/dist/node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js.map +0 -1
  522. package/dist/node_modules/.pnpm/vite-plugin-node-polyfills@0.17.0_rollup@4.55.1_vite@7.3.1_@types_node@22.19.13_sass@1._2da6e8f78437c36f3eb7db51bdd4d89e/node_modules/vite-plugin-node-polyfills/shims/dist/index.js +0 -15
  523. package/dist/node_modules/.pnpm/vite-plugin-node-polyfills@0.17.0_rollup@4.55.1_vite@7.3.1_@types_node@22.19.13_sass@1._2da6e8f78437c36f3eb7db51bdd4d89e/node_modules/vite-plugin-node-polyfills/shims/dist/index.js.map +0 -1
  524. package/dist/style/components/_download-cart-page.scss +0 -204
  525. package/dist/style/components/_user-search-box.scss +0 -30
@@ -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":"ApplicationSessionManager.d.ts","sourceRoot":"","sources":["../../../../src/utils/AppUtils/session/ApplicationSessionManager.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8EAA8E,CAAA;AACzH,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAA0B,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAK1E,MAAM,MAAM,8BAA8B,GAAG,iBAAiB,CAAC;IAC7D,+GAA+G;IAC/G,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAE5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8IAA8I;IAC9I,+BAA+B,CAAC,EAAE,MAAM,IAAI,CAAA;IAM5C,8BAA8B,CAAC,EAAE,CAC/B,qBAAqB,EAAE,0BAA0B,EACjD,eAAe,EAAE,MAAM,KACpB,IAAI,CAAA;IACT,KAAK,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAEnC,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC,CAAC,CAAA;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,8BAA8B,2CAgCtC;AAED,eAAe,yBAAyB,CAAA"}
1
+ {"version":3,"file":"ApplicationSessionManager.d.ts","sourceRoot":"","sources":["../../../../src/utils/AppUtils/session/ApplicationSessionManager.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8EAA8E,CAAA;AACzH,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAA0B,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAK1E,MAAM,MAAM,8BAA8B,GAAG,iBAAiB,CAAC;IAC7D,+GAA+G;IAC/G,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAE5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8IAA8I;IAC9I,+BAA+B,CAAC,EAAE,MAAM,IAAI,CAAA;IAM5C,8BAA8B,CAAC,EAAE,CAC/B,qBAAqB,EAAE,0BAA0B,EACjD,eAAe,EAAE,MAAM,KACpB,IAAI,CAAA;IACT,KAAK,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAEnC,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC,CAAC,CAAA;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,8BAA8B,2CA+BtC;AAED,eAAe,yBAAyB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ApplicationSessionManager.js","sources":["../../../../src/utils/AppUtils/session/ApplicationSessionManager.tsx"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { TwoFactorAuthErrorResponse } from '@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse'\nimport { PropsWithChildren } from 'react'\nimport { SynapseContextProvider, SynapseContextType } from '../../context'\nimport { ApplicationSessionContextProvider } from './ApplicationSessionContext'\nimport { AuthenticationGuard } from './AuthenticationGuard'\nimport { useSessionManager } from './useSessionManager'\n\nexport type ApplicationSessionManagerProps = PropsWithChildren<{\n /** The realm that an unauthenticated user should be signed in to. Defaults to \"0\", the public Synapse realm */\n defaultRealmId?: string\n downloadCartPageUrl?: string\n /* If defined, specifies the allowable elapsed time in seconds since the last time the End-User was actively authenticated. If the elapsed time is greater than this value, the session will be cleared and the user will have to re-authenticate. */\n maxAge?: number\n /** Called if the user is not authenticated when the session is initialized. Can be used to trigger an error if authentication is expected. */\n onMissingExpectedAuthentication?: () => void\n /*\n * Callback invoked after the user has successfully signed in through SSO when the purpose of signing in is to disable 2FA on the account.\n * The twoFactorAuthSSOError and twoFaResetToken are passed in the callback and can be used to complete the 2FA reset process.\n * This only needs to be implemented if the app implements the workflow to disable 2FA (i.e. only if the app supports account management).\n */\n onTwoFactorAuthResetThroughSSO?: (\n twoFactorAuthSSOError: TwoFactorAuthErrorResponse,\n twoFaResetToken: string,\n ) => void\n appId?: SynapseContextType['appId']\n /* If true, redirects unauthenticated users to OneSage login after session initialization */\n requireAuthentication?: boolean\n}>\n\n/**\n * The ApplicationSessionManager will manage Synapse user session in an app. The goal is that any custom app should\n * just be able to add this component near the top of its component tree and have the full Synapse login lifecycle managed\n * while exposing minimal complexity to the app itself.\n *\n * Custom per-app behavior should be customized with generalizable props to this component.\n *\n * The session data can be accessed with useApplicationSessionContext.\n *\n * This component must be called within a react-router Router. ApplicationSessionManager also wraps all of its children\n * in a SynapseContextProvider.\n * @param props\n * @constructor\n */\nexport function ApplicationSessionManager(\n props: ApplicationSessionManagerProps,\n) {\n const {\n children,\n downloadCartPageUrl,\n appId,\n requireAuthentication,\n ...hookOptions\n } = props\n\n const { sessionContext, token } = useSessionManager(hookOptions)\n\n return (\n <ApplicationSessionContextProvider context={sessionContext}>\n <SynapseContextProvider\n synapseContext={{\n accessToken: token,\n isAuthenticated: sessionContext.isAuthenticated,\n isInExperimentalMode: SynapseClient.isInSynapseExperimentalMode(),\n utcTime: SynapseClient.getUseUtcTimeFromCookie(),\n downloadCartPageUrl,\n appId: appId,\n }}\n >\n {requireAuthentication ? (\n <AuthenticationGuard>{children}</AuthenticationGuard>\n ) : (\n children\n )}\n </SynapseContextProvider>\n </ApplicationSessionContextProvider>\n )\n}\n\nexport default ApplicationSessionManager\n"],"names":["ApplicationSessionManager","props","children","downloadCartPageUrl","appId","requireAuthentication","hookOptions","sessionContext","token","useSessionManager","jsx","ApplicationSessionContextProvider","SynapseContextProvider","SynapseClient","AuthenticationGuard"],"mappings":";;;;;;;;;;;;;;;;AA4CO,SAASA,EACdC,GACA;AACA,QAAM;AAAA,IACJ,UAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,OAAAC;AAAA,IACA,uBAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACDL,GAEE,EAAE,gBAAAM,GAAgB,OAAAC,MAAUC,EAAkBH,CAAW;AAE/D,SACE,gBAAAI,EAACC,GAAA,EAAkC,SAASJ,GAC1C,UAAA,gBAAAG;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,gBAAgB;AAAA,QACd,aAAaJ;AAAA,QACb,iBAAiBD,EAAe;AAAA,QAChC,sBAAsBM,EAAc,4BAAA;AAAA,QACpC,SAASA,EAAc,wBAAA;AAAA,QACvB,qBAAAV;AAAA,QACA,OAAAC;AAAA,MAAA;AAAA,MAGD,UAAAC,IACC,gBAAAK,EAACI,GAAA,EAAqB,UAAAZ,EAAA,CAAS,IAE/BA;AAAA,IAAA;AAAA,EAAA,GAGN;AAEJ;"}
1
+ {"version":3,"file":"ApplicationSessionManager.js","sources":["../../../../src/utils/AppUtils/session/ApplicationSessionManager.tsx"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { TwoFactorAuthErrorResponse } from '@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse'\nimport { PropsWithChildren } from 'react'\nimport { SynapseContextProvider, SynapseContextType } from '../../context'\nimport { ApplicationSessionContextProvider } from './ApplicationSessionContext'\nimport { AuthenticationGuard } from './AuthenticationGuard'\nimport { useSessionManager } from './useSessionManager'\n\nexport type ApplicationSessionManagerProps = PropsWithChildren<{\n /** The realm that an unauthenticated user should be signed in to. Defaults to \"0\", the public Synapse realm */\n defaultRealmId?: string\n downloadCartPageUrl?: string\n /* If defined, specifies the allowable elapsed time in seconds since the last time the End-User was actively authenticated. If the elapsed time is greater than this value, the session will be cleared and the user will have to re-authenticate. */\n maxAge?: number\n /** Called if the user is not authenticated when the session is initialized. Can be used to trigger an error if authentication is expected. */\n onMissingExpectedAuthentication?: () => void\n /*\n * Callback invoked after the user has successfully signed in through SSO when the purpose of signing in is to disable 2FA on the account.\n * The twoFactorAuthSSOError and twoFaResetToken are passed in the callback and can be used to complete the 2FA reset process.\n * This only needs to be implemented if the app implements the workflow to disable 2FA (i.e. only if the app supports account management).\n */\n onTwoFactorAuthResetThroughSSO?: (\n twoFactorAuthSSOError: TwoFactorAuthErrorResponse,\n twoFaResetToken: string,\n ) => void\n appId?: SynapseContextType['appId']\n /* If true, redirects unauthenticated users to OneSage login after session initialization */\n requireAuthentication?: boolean\n}>\n\n/**\n * The ApplicationSessionManager will manage Synapse user session in an app. The goal is that any custom app should\n * just be able to add this component near the top of its component tree and have the full Synapse login lifecycle managed\n * while exposing minimal complexity to the app itself.\n *\n * Custom per-app behavior should be customized with generalizable props to this component.\n *\n * The session data can be accessed with useApplicationSessionContext.\n *\n * This component must be called within a react-router Router. ApplicationSessionManager also wraps all of its children\n * in a SynapseContextProvider.\n * @param props\n * @constructor\n */\nexport function ApplicationSessionManager(\n props: ApplicationSessionManagerProps,\n) {\n const {\n children,\n downloadCartPageUrl,\n appId,\n requireAuthentication,\n ...hookOptions\n } = props\n const { sessionContext, token } = useSessionManager(hookOptions)\n\n return (\n <ApplicationSessionContextProvider context={sessionContext}>\n <SynapseContextProvider\n synapseContext={{\n accessToken: token,\n isAuthenticated: sessionContext.isAuthenticated,\n isInExperimentalMode: SynapseClient.isInSynapseExperimentalMode(),\n utcTime: SynapseClient.getUseUtcTimeFromCookie(),\n downloadCartPageUrl,\n appId: appId,\n }}\n >\n {requireAuthentication ? (\n <AuthenticationGuard>{children}</AuthenticationGuard>\n ) : (\n children\n )}\n </SynapseContextProvider>\n </ApplicationSessionContextProvider>\n )\n}\n\nexport default ApplicationSessionManager\n"],"names":["ApplicationSessionManager","props","children","downloadCartPageUrl","appId","requireAuthentication","hookOptions","sessionContext","token","useSessionManager","jsx","ApplicationSessionContextProvider","SynapseContextProvider","SynapseClient","AuthenticationGuard"],"mappings":";;;;;;;;;;;;;;;;AA4CO,SAASA,EACdC,GACA;AACA,QAAM;AAAA,IACJ,UAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,OAAAC;AAAA,IACA,uBAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACDL,GACE,EAAE,gBAAAM,GAAgB,OAAAC,MAAUC,EAAkBH,CAAW;AAE/D,SACE,gBAAAI,EAACC,GAAA,EAAkC,SAASJ,GAC1C,UAAA,gBAAAG;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,gBAAgB;AAAA,QACd,aAAaJ;AAAA,QACb,iBAAiBD,EAAe;AAAA,QAChC,sBAAsBM,EAAc,4BAAA;AAAA,QACpC,SAASA,EAAc,wBAAA;AAAA,QACvB,qBAAAV;AAAA,QACA,OAAAC;AAAA,MAAA;AAAA,MAGD,UAAAC,IACC,gBAAAK,EAACI,GAAA,EAAqB,UAAAZ,EAAA,CAAS,IAE/BA;AAAA,IAAA;AAAA,EAAA,GAGN;AAEJ;"}
@@ -1,12 +1,12 @@
1
1
  import { jsx as e } from "react/jsx-runtime";
2
- import { ThemeProvider as c } from "../../theme/ThemeProvider.js";
3
- import { GlobalIsEditingContextProvider as a } from "./GlobalIsEditingContext.js";
2
+ import { ThemeProvider as a } from "../../theme/ThemeProvider.js";
3
+ import { GlobalIsEditingContextProvider as c } from "./GlobalIsEditingContext.js";
4
4
  import { QueryClient as m, QueryClientProvider as p } from "@tanstack/react-query";
5
5
  import { Suspense as u } from "react";
6
6
  import { SynapseContextProvider as f } from "./SynapseContext.js";
7
7
  import { DocumentMetadataProvider as h } from "./DocumentMetadataContext.js";
8
- import { ApplicationSessionContextProvider as g } from "../AppUtils/session/ApplicationSessionContext.js";
9
- const C = {
8
+ import { ApplicationSessionContextProvider as C } from "../AppUtils/session/ApplicationSessionContext.js";
9
+ const g = {
10
10
  defaultOptions: {
11
11
  queries: {
12
12
  staleTime: 1e3 * 60 * 5,
@@ -18,7 +18,7 @@ const C = {
18
18
  refetchOnWindowFocus: !1
19
19
  }
20
20
  }
21
- }, S = new m(C);
21
+ }, x = new m(g);
22
22
  function F(i) {
23
23
  const {
24
24
  children: r,
@@ -34,12 +34,12 @@ function F(i) {
34
34
  setIsEditing: () => {
35
35
  }
36
36
  };
37
- return /* @__PURE__ */ e(p, { client: n ?? S, children: /* @__PURE__ */ e(c, { theme: s, children: /* @__PURE__ */ e(f, { synapseContext: o, children: /* @__PURE__ */ e(
38
- g,
37
+ return /* @__PURE__ */ e(p, { client: n ?? x, children: /* @__PURE__ */ e(a, { theme: s, children: /* @__PURE__ */ e(f, { synapseContext: { ...o }, children: /* @__PURE__ */ e(
38
+ C,
39
39
  {
40
40
  context: d,
41
41
  children: /* @__PURE__ */ e(h, { children: /* @__PURE__ */ e(
42
- a,
42
+ c,
43
43
  {
44
44
  subscribe: t.subscribe,
45
45
  getSnapshot: t.getSnapshot,
@@ -53,6 +53,6 @@ function F(i) {
53
53
  export {
54
54
  F as FullContextProvider,
55
55
  F as default,
56
- C as defaultQueryClientConfig
56
+ g as defaultQueryClientConfig
57
57
  };
58
58
  //# sourceMappingURL=FullContextProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FullContextProvider.js","sources":["../../../src/utils/context/FullContextProvider.tsx"],"sourcesContent":["import { ThemeProvider } from '@/theme/ThemeProvider'\nimport {\n GlobalIsEditingContextProvider,\n IsEditingStore,\n} from '@/utils/context/GlobalIsEditingContext'\nimport { ThemeOptions } from '@mui/material'\nimport {\n QueryClient,\n QueryClientConfig,\n QueryClientProvider,\n} from '@tanstack/react-query'\nimport { PropsWithChildren, Suspense } from 'react'\nimport { SynapseContextProvider, SynapseContextType } from './SynapseContext'\nimport { DocumentMetadataProvider } from './DocumentMetadataContext'\nimport {\n ApplicationSessionContextProvider,\n ApplicationSessionContextType,\n} from '../AppUtils/session/ApplicationSessionContext'\n\nexport const defaultQueryClientConfig = {\n defaultOptions: {\n queries: {\n staleTime: 1000 * 60 * 5, // 5 min\n gcTime: 1000 * 60 * 30, // 30 min\n retry: false, // SynapseClient knows which queries to retry\n refetchOnWindowFocus: false,\n },\n },\n} satisfies QueryClientConfig\n\nconst defaultQueryClient = new QueryClient(defaultQueryClientConfig)\n\nexport type FullContextProviderProps = PropsWithChildren<{\n isEditingStore?: IsEditingStore\n synapseContext: Partial<SynapseContextType>\n queryClient?: QueryClient\n theme?: ThemeOptions\n applicationSessionContext: ApplicationSessionContextType\n}>\n\n/**\n * Provides all context necessary for components in SRC.\n *\n * Contexts include:\n * - SynapseContext\n * - QueryClientContext (react-query)\n * - ThemeContext (@mui)\n * - DocumentMetadataContext - for managing page title and meta descriptions\n * - ApplicationSessionContext - for managing user session state\n * - isEditingStore - used to sync editing state across the application\n *\n * IMPORTANT: The `applicationSessionContext` prop is required. For applications that need\n * full session management (e.g., login/logout), use `ApplicationSessionManager` which\n * provides its own context. For testing or simple use cases, use `MOCK_APPLICATION_SESSION_CONTEXT`.\n */\nexport function FullContextProvider(props: FullContextProviderProps) {\n const {\n children,\n synapseContext,\n queryClient,\n theme,\n isEditingStore: isEditingStoreFromProps,\n applicationSessionContext,\n } = props\n const isEditingStore = isEditingStoreFromProps || {\n subscribe: () => () => {},\n getSnapshot: () => false,\n setIsEditing: () => {},\n }\n\n return (\n <QueryClientProvider client={queryClient ?? defaultQueryClient}>\n <ThemeProvider theme={theme}>\n <SynapseContextProvider synapseContext={synapseContext}>\n <ApplicationSessionContextProvider\n context={applicationSessionContext}\n >\n <DocumentMetadataProvider>\n <GlobalIsEditingContextProvider\n subscribe={isEditingStore.subscribe}\n getSnapshot={isEditingStore.getSnapshot}\n setIsEditing={isEditingStore.setIsEditing}\n >\n <Suspense fallback={null}>{children}</Suspense>\n </GlobalIsEditingContextProvider>\n </DocumentMetadataProvider>\n </ApplicationSessionContextProvider>\n </SynapseContextProvider>\n </ThemeProvider>\n </QueryClientProvider>\n )\n}\n\nexport default FullContextProvider\n"],"names":["defaultQueryClientConfig","defaultQueryClient","QueryClient","FullContextProvider","props","children","synapseContext","queryClient","theme","isEditingStoreFromProps","applicationSessionContext","isEditingStore","jsx","QueryClientProvider","ThemeProvider","SynapseContextProvider","ApplicationSessionContextProvider","DocumentMetadataProvider","GlobalIsEditingContextProvider","Suspense"],"mappings":";;;;;;;;AAmBO,MAAMA,IAA2B;AAAA,EACtC,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,WAAW,MAAO,KAAK;AAAA;AAAA,MACvB,QAAQ,MAAO,KAAK;AAAA;AAAA,MACpB,OAAO;AAAA;AAAA,MACP,sBAAsB;AAAA,IAAA;AAAA,EACxB;AAEJ,GAEMC,IAAqB,IAAIC,EAAYF,CAAwB;AAyB5D,SAASG,EAAoBC,GAAiC;AACnE,QAAM;AAAA,IACJ,UAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,OAAAC;AAAA,IACA,gBAAgBC;AAAA,IAChB,2BAAAC;AAAA,EAAA,IACEN,GACEO,IAAiBF,KAA2B;AAAA,IAChD,WAAW,MAAM,MAAM;AAAA,IAAC;AAAA,IACxB,aAAa,MAAM;AAAA,IACnB,cAAc,MAAM;AAAA,IAAC;AAAA,EAAA;AAGvB,SACE,gBAAAG,EAACC,GAAA,EAAoB,QAAQN,KAAeN,GAC1C,4BAACa,GAAA,EAAc,OAAAN,GACb,UAAA,gBAAAI,EAACG,GAAA,EAAuB,gBAAAT,GACtB,UAAA,gBAAAM;AAAA,IAACI;AAAA,IAAA;AAAA,MACC,SAASN;AAAA,MAET,4BAACO,GAAA,EACC,UAAA,gBAAAL;AAAA,QAACM;AAAA,QAAA;AAAA,UACC,WAAWP,EAAe;AAAA,UAC1B,aAAaA,EAAe;AAAA,UAC5B,cAAcA,EAAe;AAAA,UAE7B,UAAA,gBAAAC,EAACO,GAAA,EAAS,UAAU,MAAO,UAAAd,EAAA,CAAS;AAAA,QAAA;AAAA,MAAA,EACtC,CACF;AAAA,IAAA;AAAA,EAAA,EACF,CACF,GACF,GACF;AAEJ;"}
1
+ {"version":3,"file":"FullContextProvider.js","sources":["../../../src/utils/context/FullContextProvider.tsx"],"sourcesContent":["import { ThemeProvider } from '@/theme/ThemeProvider'\nimport {\n GlobalIsEditingContextProvider,\n IsEditingStore,\n} from '@/utils/context/GlobalIsEditingContext'\nimport { ThemeOptions } from '@mui/material'\nimport {\n QueryClient,\n QueryClientConfig,\n QueryClientProvider,\n} from '@tanstack/react-query'\nimport { PropsWithChildren, Suspense } from 'react'\nimport { SynapseContextProvider, SynapseContextType } from './SynapseContext'\nimport { DocumentMetadataProvider } from './DocumentMetadataContext'\nimport {\n ApplicationSessionContextProvider,\n ApplicationSessionContextType,\n} from '../AppUtils/session/ApplicationSessionContext'\n\nexport const defaultQueryClientConfig = {\n defaultOptions: {\n queries: {\n staleTime: 1000 * 60 * 5, // 5 min\n gcTime: 1000 * 60 * 30, // 30 min\n retry: false, // SynapseClient knows which queries to retry\n refetchOnWindowFocus: false,\n },\n },\n} satisfies QueryClientConfig\n\nconst defaultQueryClient = new QueryClient(defaultQueryClientConfig)\n\nexport type FullContextProviderProps = PropsWithChildren<{\n isEditingStore?: IsEditingStore\n synapseContext: Partial<SynapseContextType>\n queryClient?: QueryClient\n theme?: ThemeOptions\n applicationSessionContext: ApplicationSessionContextType\n}>\n\n/**\n * Provides all context necessary for components in SRC.\n *\n * Contexts include:\n * - SynapseContext\n * - QueryClientContext (react-query)\n * - ThemeContext (@mui)\n * - DocumentMetadataContext - for managing page title and meta descriptions\n * - ApplicationSessionContext - for managing user session state\n * - isEditingStore - used to sync editing state across the application\n *\n * IMPORTANT: The `applicationSessionContext` prop is required. For applications that need\n * full session management (e.g., login/logout), use `ApplicationSessionManager` which\n * provides its own context. For testing or simple use cases, use `MOCK_APPLICATION_SESSION_CONTEXT`.\n */\nexport function FullContextProvider(props: FullContextProviderProps) {\n const {\n children,\n synapseContext,\n queryClient,\n theme,\n isEditingStore: isEditingStoreFromProps,\n applicationSessionContext,\n } = props\n const isEditingStore = isEditingStoreFromProps || {\n subscribe: () => () => {},\n getSnapshot: () => false,\n setIsEditing: () => {},\n }\n\n return (\n <QueryClientProvider client={queryClient ?? defaultQueryClient}>\n <ThemeProvider theme={theme}>\n <SynapseContextProvider synapseContext={{ ...synapseContext }}>\n <ApplicationSessionContextProvider\n context={applicationSessionContext}\n >\n <DocumentMetadataProvider>\n <GlobalIsEditingContextProvider\n subscribe={isEditingStore.subscribe}\n getSnapshot={isEditingStore.getSnapshot}\n setIsEditing={isEditingStore.setIsEditing}\n >\n <Suspense fallback={null}>{children}</Suspense>\n </GlobalIsEditingContextProvider>\n </DocumentMetadataProvider>\n </ApplicationSessionContextProvider>\n </SynapseContextProvider>\n </ThemeProvider>\n </QueryClientProvider>\n )\n}\n\nexport default FullContextProvider\n"],"names":["defaultQueryClientConfig","defaultQueryClient","QueryClient","FullContextProvider","props","children","synapseContext","queryClient","theme","isEditingStoreFromProps","applicationSessionContext","isEditingStore","jsx","QueryClientProvider","ThemeProvider","SynapseContextProvider","ApplicationSessionContextProvider","DocumentMetadataProvider","GlobalIsEditingContextProvider","Suspense"],"mappings":";;;;;;;;AAmBO,MAAMA,IAA2B;AAAA,EACtC,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,WAAW,MAAO,KAAK;AAAA;AAAA,MACvB,QAAQ,MAAO,KAAK;AAAA;AAAA,MACpB,OAAO;AAAA;AAAA,MACP,sBAAsB;AAAA,IAAA;AAAA,EACxB;AAEJ,GAEMC,IAAqB,IAAIC,EAAYF,CAAwB;AAyB5D,SAASG,EAAoBC,GAAiC;AACnE,QAAM;AAAA,IACJ,UAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,OAAAC;AAAA,IACA,gBAAgBC;AAAA,IAChB,2BAAAC;AAAA,EAAA,IACEN,GACEO,IAAiBF,KAA2B;AAAA,IAChD,WAAW,MAAM,MAAM;AAAA,IAAC;AAAA,IACxB,aAAa,MAAM;AAAA,IACnB,cAAc,MAAM;AAAA,IAAC;AAAA,EAAA;AAGvB,SACE,gBAAAG,EAACC,GAAA,EAAoB,QAAQN,KAAeN,GAC1C,UAAA,gBAAAW,EAACE,GAAA,EAAc,OAAAN,GACb,UAAA,gBAAAI,EAACG,GAAA,EAAuB,gBAAgB,EAAE,GAAGT,KAC3C,UAAA,gBAAAM;AAAA,IAACI;AAAA,IAAA;AAAA,MACC,SAASN;AAAA,MAET,4BAACO,GAAA,EACC,UAAA,gBAAAL;AAAA,QAACM;AAAA,QAAA;AAAA,UACC,WAAWP,EAAe;AAAA,UAC1B,aAAaA,EAAe;AAAA,UAC5B,cAAcA,EAAe;AAAA,UAE7B,UAAA,gBAAAC,EAACO,GAAA,EAAS,UAAU,MAAO,UAAAd,EAAA,CAAS;AAAA,QAAA;AAAA,MAAA,EACtC,CACF;AAAA,IAAA;AAAA,EAAA,EACF,CACF,GACF,GACF;AAEJ;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseContext.d.ts","sourceRoot":"","sources":["../../../src/utils/context/SynapseContext.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAA;AAC9E,OAAO,EAAiB,iBAAiB,EAAuB,MAAM,OAAO,CAAA;AAG7E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,uEAAuE;IACvE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,wCAAwC;IACxC,eAAe,EAAE,OAAO,CAAA;IACxB,gDAAgD;IAChD,oBAAoB,EAAE,OAAO,CAAA;IAC7B,6DAA6D;IAC7D,OAAO,EAAE,OAAO,CAAA;IAChB,0HAA0H;IAC1H,iBAAiB,EAAE,OAAO,CAAA;IAC1B,6FAA6F;IAC7F,mBAAmB,EAAE,MAAM,CAAA;IAC3B,2DAA2D;IAC3D,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,uEAAuE;IACvE,UAAU,EAAE,UAAU,CAAA;IACtB,yGAAyG;IACzG,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,aAAa,EAAE,aAAa,CAAA;CAC7B,CAAA;AAeD;;GAEG;AACH,eAAO,MAAM,cAAc,6CAAoD,CAAA;AAE/E,MAAM,MAAM,2BAA2B,GAAG,iBAAiB,CAAC;IAC1D,cAAc,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;CAC7C,CAAC,CAAA;AAEF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,2CA0DxE;AAED,eAAO,MAAM,sBAAsB,8CAA0B,CAAA;AAE7D,wBAAgB,iBAAiB,IAAI,kBAAkB,CAQtD"}
1
+ {"version":3,"file":"SynapseContext.d.ts","sourceRoot":"","sources":["../../../src/utils/context/SynapseContext.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAA;AAC9E,OAAO,EAAiB,iBAAiB,EAAuB,MAAM,OAAO,CAAA;AAG7E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,uEAAuE;IACvE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,wCAAwC;IACxC,eAAe,EAAE,OAAO,CAAA;IACxB,gDAAgD;IAChD,oBAAoB,EAAE,OAAO,CAAA;IAC7B,6DAA6D;IAC7D,OAAO,EAAE,OAAO,CAAA;IAChB,0HAA0H;IAC1H,iBAAiB,EAAE,OAAO,CAAA;IAC1B,6FAA6F;IAC7F,mBAAmB,EAAE,MAAM,CAAA;IAC3B,2DAA2D;IAC3D,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,uEAAuE;IACvE,UAAU,EAAE,UAAU,CAAA;IACtB,yGAAyG;IACzG,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,aAAa,EAAE,aAAa,CAAA;CAC7B,CAAA;AAeD;;GAEG;AACH,eAAO,MAAM,cAAc,6CAAoD,CAAA;AAE/E,MAAM,MAAM,2BAA2B,GAAG,iBAAiB,CAAC;IAC1D,cAAc,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;CAC7C,CAAC,CAAA;AAEF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,2CA2DxE;AAED,eAAO,MAAM,sBAAsB,8CAA0B,CAAA;AAE7D,wBAAgB,iBAAiB,IAAI,kBAAkB,CAQtD"}
@@ -45,6 +45,7 @@ function g(n) {
45
45
  e?.accessToken,
46
46
  e?.isAuthenticated,
47
47
  e?.downloadCartPageUrl,
48
+ e?.peopleSearchPageUrl,
48
49
  e?.isInExperimentalMode,
49
50
  e?.keyFactory,
50
51
  e?.utcTime,
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseContext.js","sources":["../../../src/utils/context/SynapseContext.tsx"],"sourcesContent":["import { SynapseErrorBoundary } from '@/components/error/ErrorBanner'\nimport { KeyFactory } from '@/synapse-queries/KeyFactory'\nimport { SynapseClient } from '@sage-bionetworks/synapse-client/SynapseClient'\nimport { createContext, PropsWithChildren, useContext, useMemo } from 'react'\nimport { BackendDestinationEnum, getEndpoint } from '../functions/getEndpoint'\n\nexport type SynapseContextType = {\n /** The user's access token. If undefined, the user is not logged in */\n accessToken: string | undefined\n /** Whether the user is authenticated */\n isAuthenticated: boolean\n /** If the user has enabled experimental mode */\n isInExperimentalMode: boolean\n /** If the user prefers time to be displayed in UTC format */\n utcTime: boolean\n /** Whether to wrap all children of this context in an error boundary. Useful if this context wraps just one component. */\n withErrorBoundary: boolean\n /** The URL of the download cart page in the current app. Used to properly link components */\n downloadCartPageUrl: string\n /** The URL of the people search page in the current app */\n peopleSearchPageUrl?: string\n /** The key factory to use for react-query. Generated automatically. */\n keyFactory: KeyFactory\n /** The appId identifying the product. Used to brand the Synapse account management site, aka OneSage. */\n appId?: string\n /* API client objects for Synapse. Generated automatically. */\n synapseClient: SynapseClient\n}\n\nconst defaultContext = {\n accessToken: undefined,\n isAuthenticated: false,\n isInExperimentalMode: false,\n utcTime: false,\n withErrorBoundary: false,\n keyFactory: new KeyFactory(undefined),\n downloadCartPageUrl: '/DownloadCart',\n peopleSearchPageUrl: '/PeopleSearch:',\n appId: undefined,\n synapseClient: new SynapseClient(),\n} satisfies SynapseContextType\n\n/**\n * This must be exported to use the context in class components.\n */\nexport const SynapseContext = createContext<SynapseContextType>(defaultContext)\n\nexport type SynapseContextProviderProps = PropsWithChildren<{\n synapseContext?: Partial<SynapseContextType>\n}>\n\n/**\n * Provides context necessary for most components in SRC.\n *\n * The SynapseContextProvider must be wrapped in a react-query QueryClientProvider.\n * @returns\n */\nexport function SynapseContextProvider(props: SynapseContextProviderProps) {\n const { children, synapseContext: providedContext } = props\n const queryKeyFactory = useMemo(\n () => new KeyFactory(providedContext?.accessToken),\n [providedContext?.accessToken],\n )\n\n const basePath = getEndpoint(BackendDestinationEnum.REPO_ENDPOINT)\n\n const synapseApiClient = useMemo(() => {\n if (providedContext?.synapseClient) {\n return providedContext?.synapseClient\n }\n const configurationParameters = {\n accessToken: providedContext?.accessToken,\n basePath: basePath,\n }\n return new SynapseClient(configurationParameters)\n }, [providedContext?.synapseClient, providedContext?.accessToken, basePath])\n\n const synapseContext: SynapseContextType = useMemo(\n () => ({\n accessToken: providedContext?.accessToken,\n isAuthenticated: providedContext?.isAuthenticated ?? false,\n isInExperimentalMode: providedContext?.isInExperimentalMode ?? false,\n utcTime: providedContext?.utcTime ?? false,\n withErrorBoundary: providedContext?.withErrorBoundary ?? false,\n downloadCartPageUrl:\n providedContext?.downloadCartPageUrl ?? '/DownloadCart',\n peopleSearchPageUrl:\n providedContext?.peopleSearchPageUrl ?? '/PeopleSearch:',\n keyFactory: providedContext?.keyFactory ?? queryKeyFactory,\n appId: providedContext?.appId,\n synapseClient: synapseApiClient,\n }),\n [\n providedContext?.accessToken,\n providedContext?.isAuthenticated,\n providedContext?.downloadCartPageUrl,\n providedContext?.isInExperimentalMode,\n providedContext?.keyFactory,\n providedContext?.utcTime,\n providedContext?.withErrorBoundary,\n providedContext?.appId,\n queryKeyFactory,\n synapseApiClient,\n ],\n )\n\n return (\n <SynapseContext.Provider value={synapseContext}>\n {synapseContext?.withErrorBoundary ? (\n <SynapseErrorBoundary>{children}</SynapseErrorBoundary>\n ) : (\n children\n )}\n </SynapseContext.Provider>\n )\n}\n\nexport const SynapseContextConsumer = SynapseContext.Consumer\n\nexport function useSynapseContext(): SynapseContextType {\n const context = useContext(SynapseContext)\n if (context === undefined) {\n throw new Error(\n 'useSynapseContext must be used within a SynapseContextProvider',\n )\n }\n return context\n}\n"],"names":["defaultContext","KeyFactory","SynapseClient","SynapseContext","createContext","SynapseContextProvider","props","children","providedContext","queryKeyFactory","useMemo","basePath","getEndpoint","BackendDestinationEnum","synapseApiClient","configurationParameters","synapseContext","jsx","SynapseErrorBoundary","SynapseContextConsumer","useSynapseContext","context","useContext"],"mappings":";;;;;;AA6BA,MAAMA,IAAiB;AAAA,EACrB,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,sBAAsB;AAAA,EACtB,SAAS;AAAA,EACT,mBAAmB;AAAA,EACnB,YAAY,IAAIC,EAAW,MAAS;AAAA,EACpC,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,OAAO;AAAA,EACP,eAAe,IAAIC,EAAA;AACrB,GAKaC,IAAiBC,EAAkCJ,CAAc;AAYvE,SAASK,EAAuBC,GAAoC;AACzE,QAAM,EAAE,UAAAC,GAAU,gBAAgBC,EAAA,IAAoBF,GAChDG,IAAkBC;AAAA,IACtB,MAAM,IAAIT,EAAWO,GAAiB,WAAW;AAAA,IACjD,CAACA,GAAiB,WAAW;AAAA,EAAA,GAGzBG,IAAWC,EAAYC,EAAuB,aAAa,GAE3DC,IAAmBJ,EAAQ,MAAM;AACrC,QAAIF,GAAiB;AACnB,aAAOA,GAAiB;AAE1B,UAAMO,IAA0B;AAAA,MAC9B,aAAaP,GAAiB;AAAA,MAC9B,UAAAG;AAAA,IAAA;AAEF,WAAO,IAAIT,EAAca,CAAuB;AAAA,EAClD,GAAG,CAACP,GAAiB,eAAeA,GAAiB,aAAaG,CAAQ,CAAC,GAErEK,IAAqCN;AAAA,IACzC,OAAO;AAAA,MACL,aAAaF,GAAiB;AAAA,MAC9B,iBAAiBA,GAAiB,mBAAmB;AAAA,MACrD,sBAAsBA,GAAiB,wBAAwB;AAAA,MAC/D,SAASA,GAAiB,WAAW;AAAA,MACrC,mBAAmBA,GAAiB,qBAAqB;AAAA,MACzD,qBACEA,GAAiB,uBAAuB;AAAA,MAC1C,qBACEA,GAAiB,uBAAuB;AAAA,MAC1C,YAAYA,GAAiB,cAAcC;AAAA,MAC3C,OAAOD,GAAiB;AAAA,MACxB,eAAeM;AAAA,IAAA;AAAA,IAEjB;AAAA,MACEN,GAAiB;AAAA,MACjBA,GAAiB;AAAA,MACjBA,GAAiB;AAAA,MACjBA,GAAiB;AAAA,MACjBA,GAAiB;AAAA,MACjBA,GAAiB;AAAA,MACjBA,GAAiB;AAAA,MACjBA,GAAiB;AAAA,MACjBC;AAAA,MACAK;AAAA,IAAA;AAAA,EACF;AAGF,SACE,gBAAAG,EAACd,EAAe,UAAf,EAAwB,OAAOa,GAC7B,UAAAA,GAAgB,oBACf,gBAAAC,EAACC,GAAA,EAAsB,UAAAX,EAAA,CAAS,IAEhCA,GAEJ;AAEJ;AAEO,MAAMY,IAAyBhB,EAAe;AAE9C,SAASiB,IAAwC;AACtD,QAAMC,IAAUC,EAAWnB,CAAc;AACzC,MAAIkB,MAAY;AACd,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,SAAOA;AACT;"}
1
+ {"version":3,"file":"SynapseContext.js","sources":["../../../src/utils/context/SynapseContext.tsx"],"sourcesContent":["import { SynapseErrorBoundary } from '@/components/error/ErrorBanner'\nimport { KeyFactory } from '@/synapse-queries/KeyFactory'\nimport { SynapseClient } from '@sage-bionetworks/synapse-client/SynapseClient'\nimport { createContext, PropsWithChildren, useContext, useMemo } from 'react'\nimport { BackendDestinationEnum, getEndpoint } from '../functions/getEndpoint'\n\nexport type SynapseContextType = {\n /** The user's access token. If undefined, the user is not logged in */\n accessToken: string | undefined\n /** Whether the user is authenticated */\n isAuthenticated: boolean\n /** If the user has enabled experimental mode */\n isInExperimentalMode: boolean\n /** If the user prefers time to be displayed in UTC format */\n utcTime: boolean\n /** Whether to wrap all children of this context in an error boundary. Useful if this context wraps just one component. */\n withErrorBoundary: boolean\n /** The URL of the download cart page in the current app. Used to properly link components */\n downloadCartPageUrl: string\n /** The URL of the people search page in the current app */\n peopleSearchPageUrl?: string\n /** The key factory to use for react-query. Generated automatically. */\n keyFactory: KeyFactory\n /** The appId identifying the product. Used to brand the Synapse account management site, aka OneSage. */\n appId?: string\n /* API client objects for Synapse. Generated automatically. */\n synapseClient: SynapseClient\n}\n\nconst defaultContext = {\n accessToken: undefined,\n isAuthenticated: false,\n isInExperimentalMode: false,\n utcTime: false,\n withErrorBoundary: false,\n keyFactory: new KeyFactory(undefined),\n downloadCartPageUrl: '/DownloadCart',\n peopleSearchPageUrl: '/PeopleSearch:',\n appId: undefined,\n synapseClient: new SynapseClient(),\n} satisfies SynapseContextType\n\n/**\n * This must be exported to use the context in class components.\n */\nexport const SynapseContext = createContext<SynapseContextType>(defaultContext)\n\nexport type SynapseContextProviderProps = PropsWithChildren<{\n synapseContext?: Partial<SynapseContextType>\n}>\n\n/**\n * Provides context necessary for most components in SRC.\n *\n * The SynapseContextProvider must be wrapped in a react-query QueryClientProvider.\n * @returns\n */\nexport function SynapseContextProvider(props: SynapseContextProviderProps) {\n const { children, synapseContext: providedContext } = props\n const queryKeyFactory = useMemo(\n () => new KeyFactory(providedContext?.accessToken),\n [providedContext?.accessToken],\n )\n\n const basePath = getEndpoint(BackendDestinationEnum.REPO_ENDPOINT)\n\n const synapseApiClient = useMemo(() => {\n if (providedContext?.synapseClient) {\n return providedContext?.synapseClient\n }\n const configurationParameters = {\n accessToken: providedContext?.accessToken,\n basePath: basePath,\n }\n return new SynapseClient(configurationParameters)\n }, [providedContext?.synapseClient, providedContext?.accessToken, basePath])\n\n const synapseContext: SynapseContextType = useMemo(\n () => ({\n accessToken: providedContext?.accessToken,\n isAuthenticated: providedContext?.isAuthenticated ?? false,\n isInExperimentalMode: providedContext?.isInExperimentalMode ?? false,\n utcTime: providedContext?.utcTime ?? false,\n withErrorBoundary: providedContext?.withErrorBoundary ?? false,\n downloadCartPageUrl:\n providedContext?.downloadCartPageUrl ?? '/DownloadCart',\n peopleSearchPageUrl:\n providedContext?.peopleSearchPageUrl ?? '/PeopleSearch:',\n keyFactory: providedContext?.keyFactory ?? queryKeyFactory,\n appId: providedContext?.appId,\n synapseClient: synapseApiClient,\n }),\n [\n providedContext?.accessToken,\n providedContext?.isAuthenticated,\n providedContext?.downloadCartPageUrl,\n providedContext?.peopleSearchPageUrl,\n providedContext?.isInExperimentalMode,\n providedContext?.keyFactory,\n providedContext?.utcTime,\n providedContext?.withErrorBoundary,\n providedContext?.appId,\n queryKeyFactory,\n synapseApiClient,\n ],\n )\n\n return (\n <SynapseContext.Provider value={synapseContext}>\n {synapseContext?.withErrorBoundary ? (\n <SynapseErrorBoundary>{children}</SynapseErrorBoundary>\n ) : (\n children\n )}\n </SynapseContext.Provider>\n )\n}\n\nexport const SynapseContextConsumer = SynapseContext.Consumer\n\nexport function useSynapseContext(): SynapseContextType {\n const context = useContext(SynapseContext)\n if (context === undefined) {\n throw new Error(\n 'useSynapseContext must be used within a SynapseContextProvider',\n )\n }\n return context\n}\n"],"names":["defaultContext","KeyFactory","SynapseClient","SynapseContext","createContext","SynapseContextProvider","props","children","providedContext","queryKeyFactory","useMemo","basePath","getEndpoint","BackendDestinationEnum","synapseApiClient","configurationParameters","synapseContext","jsx","SynapseErrorBoundary","SynapseContextConsumer","useSynapseContext","context","useContext"],"mappings":";;;;;;AA6BA,MAAMA,IAAiB;AAAA,EACrB,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,sBAAsB;AAAA,EACtB,SAAS;AAAA,EACT,mBAAmB;AAAA,EACnB,YAAY,IAAIC,EAAW,MAAS;AAAA,EACpC,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,OAAO;AAAA,EACP,eAAe,IAAIC,EAAA;AACrB,GAKaC,IAAiBC,EAAkCJ,CAAc;AAYvE,SAASK,EAAuBC,GAAoC;AACzE,QAAM,EAAE,UAAAC,GAAU,gBAAgBC,EAAA,IAAoBF,GAChDG,IAAkBC;AAAA,IACtB,MAAM,IAAIT,EAAWO,GAAiB,WAAW;AAAA,IACjD,CAACA,GAAiB,WAAW;AAAA,EAAA,GAGzBG,IAAWC,EAAYC,EAAuB,aAAa,GAE3DC,IAAmBJ,EAAQ,MAAM;AACrC,QAAIF,GAAiB;AACnB,aAAOA,GAAiB;AAE1B,UAAMO,IAA0B;AAAA,MAC9B,aAAaP,GAAiB;AAAA,MAC9B,UAAAG;AAAA,IAAA;AAEF,WAAO,IAAIT,EAAca,CAAuB;AAAA,EAClD,GAAG,CAACP,GAAiB,eAAeA,GAAiB,aAAaG,CAAQ,CAAC,GAErEK,IAAqCN;AAAA,IACzC,OAAO;AAAA,MACL,aAAaF,GAAiB;AAAA,MAC9B,iBAAiBA,GAAiB,mBAAmB;AAAA,MACrD,sBAAsBA,GAAiB,wBAAwB;AAAA,MAC/D,SAASA,GAAiB,WAAW;AAAA,MACrC,mBAAmBA,GAAiB,qBAAqB;AAAA,MACzD,qBACEA,GAAiB,uBAAuB;AAAA,MAC1C,qBACEA,GAAiB,uBAAuB;AAAA,MAC1C,YAAYA,GAAiB,cAAcC;AAAA,MAC3C,OAAOD,GAAiB;AAAA,MACxB,eAAeM;AAAA,IAAA;AAAA,IAEjB;AAAA,MACEN,GAAiB;AAAA,MACjBA,GAAiB;AAAA,MACjBA,GAAiB;AAAA,MACjBA,GAAiB;AAAA,MACjBA,GAAiB;AAAA,MACjBA,GAAiB;AAAA,MACjBA,GAAiB;AAAA,MACjBA,GAAiB;AAAA,MACjBA,GAAiB;AAAA,MACjBC;AAAA,MACAK;AAAA,IAAA;AAAA,EACF;AAGF,SACE,gBAAAG,EAACd,EAAe,UAAf,EAAwB,OAAOa,GAC7B,UAAAA,GAAgB,oBACf,gBAAAC,EAACC,GAAA,EAAsB,UAAAX,EAAA,CAAS,IAEhCA,GAEJ;AAEJ;AAEO,MAAMY,IAAyBhB,EAAe;AAE9C,SAASiB,IAAwC;AACtD,QAAMC,IAAUC,EAAWnB,CAAc;AACzC,MAAIkB,MAAY;AACd,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,SAAOA;AACT;"}
@@ -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":"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"}
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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"}
@@ -3,7 +3,11 @@ export type SQLOperator = ColumnSingleValueFilterOperator | ColumnMultiValueFunc
3
3
  export declare const QUERY_FILTERS_SESSION_STORAGE_KEY: (key: string) => string;
4
4
  export declare function removePrefixIfSynId(value: string): string;
5
5
  export declare const getIgnoredQueryFilterSearchParamKey: (key: string, namespace?: string) => string;
6
+ export declare const SEARCH_TERM = "SEARCH_TERM";
7
+ export declare const SEARCH_ROLE = "SEARCH_ROLE";
8
+ /** @deprecated Use SEARCH_TERM instead */
6
9
  export declare const FTS_SEARCH_TERM = "FTS_SEARCH_TERM";
10
+ /** @deprecated Use SEARCH_ROLE instead */
7
11
  export declare const FTS_SEARCH_ROLE = "FTS_SEARCH_ROLE";
8
12
  /**
9
13
  * Look in local storage for a set of QueryFilters to apply. In addition, given the search params,
@@ -1 +1 @@
1
- {"version":3,"file":"SqlFunctions.d.ts","sourceRoot":"","sources":["../../../src/utils/functions/SqlFunctions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,wBAAwB,EAExB,+BAA+B,EAE/B,WAAW,EACX,GAAG,EACH,YAAY,EAEb,MAAM,iCAAiC,CAAA;AAIxC,MAAM,MAAM,WAAW,GACnB,+BAA+B,GAC/B,wBAAwB,CAAA;AAG5B,eAAO,MAAM,iCAAiC,GAAI,KAAK,MAAM,WAC5B,CAAA;AAEjC,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,UAKhD;AACD,eAAO,MAAM,mCAAmC,GAC9C,KAAK,MAAM,EACX,YAAY,MAAM,WAGnB,CAAA;AAGD,eAAO,MAAM,eAAe,oBAAoB,CAAA;AAEhD,eAAO,MAAM,eAAe,oBAAoB,CAAA;AAEhD;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,GAC/B,eAAe,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACrC,WAAU,WAAkD,EAC5D,oBAAoB,MAAM,KACzB,WAAW,EAAE,GAAG,SAmGlB,CAAA;AAID,eAAO,MAAM,6BAA6B,GAAI,KAAK,MAAM,KAAG,MAG3D,CAAA;AAED,eAAO,MAAM,uCAAuC,GAClD,KAAK,MAAM,KACV;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAU7C,CAAA;AAED,eAAO,MAAM,YAAY,GACvB,eAAe,YAAY,EAAE,EAC7B,YAAY,GAAG,EAAE,oCAWlB,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GACzB,aAAa,MAAM,EACnB,gBAAgB,YAAY,EAAE,EAC9B,eAAe,WAAW,EAAE,KAC3B,MAAM,GAAG,SA0BX,CAAA"}
1
+ {"version":3,"file":"SqlFunctions.d.ts","sourceRoot":"","sources":["../../../src/utils/functions/SqlFunctions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,wBAAwB,EAExB,+BAA+B,EAE/B,WAAW,EACX,GAAG,EACH,YAAY,EAEb,MAAM,iCAAiC,CAAA;AAIxC,MAAM,MAAM,WAAW,GACnB,+BAA+B,GAC/B,wBAAwB,CAAA;AAG5B,eAAO,MAAM,iCAAiC,GAAI,KAAK,MAAM,WAC5B,CAAA;AAEjC,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,UAKhD;AACD,eAAO,MAAM,mCAAmC,GAC9C,KAAK,MAAM,EACX,YAAY,MAAM,WAGnB,CAAA;AAGD,eAAO,MAAM,WAAW,gBAAgB,CAAA;AACxC,eAAO,MAAM,WAAW,gBAAgB,CAAA;AAExC,0CAA0C;AAC1C,eAAO,MAAM,eAAe,oBAAoB,CAAA;AAChD,0CAA0C;AAC1C,eAAO,MAAM,eAAe,oBAAoB,CAAA;AAEhD;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,GAC/B,eAAe,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACrC,WAAU,WAAkD,EAC5D,oBAAoB,MAAM,KACzB,WAAW,EAAE,GAAG,SAmGlB,CAAA;AAID,eAAO,MAAM,6BAA6B,GAAI,KAAK,MAAM,KAAG,MAG3D,CAAA;AAED,eAAO,MAAM,uCAAuC,GAClD,KAAK,MAAM,KACV;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAU7C,CAAA;AAED,eAAO,MAAM,YAAY,GACvB,eAAe,YAAY,EAAE,EAC7B,YAAY,GAAG,EAAE,oCAWlB,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GACzB,aAAa,MAAM,EACnB,gBAAgB,YAAY,EAAE,EAC9B,eAAe,WAAW,EAAE,KAC3B,MAAM,GAAG,SA0BX,CAAA"}
@@ -1,24 +1,24 @@
1
1
  import { ColumnSingleValueFilterOperator as u, ColumnMultiValueFunction as c } from "@sage-bionetworks/synapse-types";
2
2
  import { SYNAPSE_ENTITY_ID_REGEX as d } from "./RegularExpressions.js";
3
3
  import { splitAndTrim as m } from "./StringUtils.js";
4
- const S = 3, g = (e) => `${e}-temp-QueryFilter-array`;
4
+ const S = 3, E = (e) => `${e}-temp-QueryFilter-array`;
5
5
  function f(e) {
6
6
  return e.match(d) ? e.substring(S) : e;
7
7
  }
8
- const F = (e, n) => `__${n ?? ""}_${e}`, E = "FTS_SEARCH_TERM", T = "FTS_SEARCH_ROLE", b = (e, n = u.LIKE, o) => {
9
- const l = o ? sessionStorage.getItem(
10
- g(o)
8
+ const R = (e, n) => `__${n ?? ""}_${e}`, _ = "SEARCH_TERM", T = "SEARCH_ROLE", g = "FTS_SEARCH_TERM", C = "FTS_SEARCH_ROLE", b = (e, n = u.LIKE, o) => {
9
+ const s = o ? sessionStorage.getItem(
10
+ E(o)
11
11
  ) : void 0;
12
12
  let r = [];
13
- if (l && (r = JSON.parse(
14
- l
13
+ if (s && (r = JSON.parse(
14
+ s
15
15
  )), e) {
16
16
  const i = (t) => t.startsWith("qw") || t.startsWith("__");
17
17
  r = r.concat(
18
18
  Object.keys(e || {}).filter(
19
19
  (t) => !i(t) && e[t] != null && e[t].trim() != ""
20
20
  ).map((t) => {
21
- if (t == E)
21
+ if (t == _ || t == g)
22
22
  return {
23
23
  concreteType: "org.sagebionetworks.repo.model.table.TextMatchesQueryFilter",
24
24
  searchExpression: e[t]
@@ -67,7 +67,7 @@ const F = (e, n) => `__${n ?? ""}_${e}`, E = "FTS_SEARCH_TERM", T = "FTS_SEARCH_
67
67
  );
68
68
  }
69
69
  return r.length === 0 ? void 0 : r;
70
- }, C = (e) => {
70
+ }, A = (e) => {
71
71
  const n = e.match(/(from)\s+(syn)\d+/gi);
72
72
  return n && n[0] ? n[0].substr(5).trim() : "";
73
73
  }, v = (e) => {
@@ -76,43 +76,45 @@ const F = (e, n) => `__${n ?? ""}_${e}`, E = "FTS_SEARCH_TERM", T = "FTS_SEARCH_
76
76
  entityId: o[1],
77
77
  versionNumber: o[2] ? parseInt(o[2]) : void 0
78
78
  } : { entityId: void 0, versionNumber: void 0 };
79
- }, R = (e, n) => {
80
- const o = n.map((r) => r.values), l = e.map((r) => r.name);
79
+ }, w = (e, n) => {
80
+ const o = n.map((r) => r.values), s = e.map((r) => r.name);
81
81
  return o.map((r) => {
82
82
  const i = {};
83
- return r.forEach((t, s) => {
84
- i[l[s]] = t;
83
+ return r.forEach((t, l) => {
84
+ i[s[l]] = t;
85
85
  }), i;
86
86
  });
87
- }, w = (e, n, o) => {
87
+ }, N = (e, n, o) => {
88
88
  if (!e)
89
89
  return;
90
- const l = e.toLowerCase();
90
+ const s = e.toLowerCase();
91
91
  if (n) {
92
92
  const r = n.findIndex(
93
- (i) => i.name?.toLowerCase() === l
93
+ (i) => i.name?.toLowerCase() === s
94
94
  );
95
95
  if (r != -1)
96
96
  return r;
97
97
  }
98
98
  if (o) {
99
99
  const r = o.findIndex(
100
- (i) => i.name?.toLowerCase() === l
100
+ (i) => i.name?.toLowerCase() === s
101
101
  );
102
102
  if (r !== -1)
103
103
  return r;
104
104
  }
105
105
  };
106
106
  export {
107
- T as FTS_SEARCH_ROLE,
108
- E as FTS_SEARCH_TERM,
109
- g as QUERY_FILTERS_SESSION_STORAGE_KEY,
107
+ C as FTS_SEARCH_ROLE,
108
+ g as FTS_SEARCH_TERM,
109
+ E as QUERY_FILTERS_SESSION_STORAGE_KEY,
110
+ T as SEARCH_ROLE,
111
+ _ as SEARCH_TERM,
110
112
  b as getAdditionalFilters,
111
- w as getColumnIndex,
112
- F as getIgnoredQueryFilterSearchParamKey,
113
+ N as getColumnIndex,
114
+ R as getIgnoredQueryFilterSearchParamKey,
113
115
  v as parseEntityIdAndVersionFromSqlStatement,
114
- C as parseEntityIdFromSqlStatement,
116
+ A as parseEntityIdFromSqlStatement,
115
117
  f as removePrefixIfSynId,
116
- R as resultToJson
118
+ w as resultToJson
117
119
  };
118
120
  //# sourceMappingURL=SqlFunctions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SqlFunctions.js","sources":["../../../src/utils/functions/SqlFunctions.ts"],"sourcesContent":["import {\n ColumnModel,\n ColumnMultiValueFunction,\n ColumnMultiValueFunctionQueryFilter,\n ColumnSingleValueFilterOperator,\n ColumnSingleValueQueryFilter,\n QueryFilter,\n Row,\n SelectColumn,\n TextMatchesQueryFilter,\n} from '@sage-bionetworks/synapse-types'\nimport { SYNAPSE_ENTITY_ID_REGEX } from './RegularExpressions'\nimport { splitAndTrim } from './StringUtils'\n\nexport type SQLOperator =\n | ColumnSingleValueFilterOperator\n | ColumnMultiValueFunction\n\nconst WITHOUT_SYN_PREFIX = 3\nexport const QUERY_FILTERS_SESSION_STORAGE_KEY = (key: string) =>\n `${key}-temp-QueryFilter-array`\n\nexport function removePrefixIfSynId(value: string) {\n if (value.match(SYNAPSE_ENTITY_ID_REGEX)) {\n return value.substring(WITHOUT_SYN_PREFIX)\n }\n return value\n}\nexport const getIgnoredQueryFilterSearchParamKey = (\n key: string,\n namespace?: string,\n) => {\n return `__${namespace ?? ''}_${key}`\n}\n\n// Special search parameter key that will automatically apply a FTS search term to a Query Wrapper if present\nexport const FTS_SEARCH_TERM = 'FTS_SEARCH_TERM'\n\nexport const FTS_SEARCH_ROLE = 'FTS_SEARCH_ROLE'\n\n/**\n * Look in local storage for a set of QueryFilters to apply. In addition, given the search params,\n * generate a set of QueryFilters to narrow the query to view just related data.\n * May return null if a QueryFilter should not be added.\n * @param sql\n * @param searchParams\n * @param operator\n * @returns\n */\nexport const getAdditionalFilters = (\n searchParams?: Record<string, string>,\n operator: SQLOperator = ColumnSingleValueFilterOperator.LIKE,\n sessionStorageKey?: string,\n): QueryFilter[] | undefined => {\n const sessionStorageQueryFiltersString = sessionStorageKey\n ? sessionStorage.getItem(\n QUERY_FILTERS_SESSION_STORAGE_KEY(sessionStorageKey),\n )\n : undefined\n let additionalFilters: QueryFilter[] = []\n if (sessionStorageQueryFiltersString) {\n additionalFilters = JSON.parse(\n sessionStorageQueryFiltersString,\n ) as QueryFilter[]\n }\n if (searchParams) {\n const isQueryWrapperKey = (key: string) =>\n key.startsWith('qw') || key.startsWith('__')\n additionalFilters = additionalFilters.concat(\n Object.keys(searchParams || {})\n .filter(\n key =>\n !isQueryWrapperKey(key) &&\n searchParams[key] != undefined &&\n searchParams[key].trim() != '',\n )\n .map(key => {\n if (key == FTS_SEARCH_TERM) {\n const filter: TextMatchesQueryFilter = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.TextMatchesQueryFilter',\n searchExpression: searchParams[key],\n }\n return filter\n }\n switch (operator) {\n case ColumnSingleValueFilterOperator.EQUAL: {\n const filter: ColumnSingleValueQueryFilter = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.ColumnSingleValueQueryFilter',\n columnName: key,\n operator: operator,\n values: [searchParams[key]],\n }\n return filter\n }\n case ColumnSingleValueFilterOperator.IN: {\n const filter: ColumnSingleValueQueryFilter = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.ColumnSingleValueQueryFilter',\n columnName: key,\n operator: operator,\n values: splitAndTrim(searchParams[key]),\n }\n return filter\n }\n case ColumnMultiValueFunction.HAS: {\n const filter: ColumnMultiValueFunctionQueryFilter = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.ColumnMultiValueFunctionQueryFilter',\n columnName: key,\n function: operator,\n _function: operator,\n values: splitAndTrim(searchParams[key]),\n }\n return filter\n }\n case ColumnSingleValueFilterOperator.LIKE: {\n // If we use a LIKE statement with a synId the backend will look for a string with the first three\n // characters being 'syn', however, it stores synIds without 'syn', so the query will fail\n // The backend usually parses 'syn' out, but not with the LIKE clause since its expecting a regex, so we\n // parse this out. This will cause a bug if something matches the synId regex but is in free text.\n const filter: ColumnSingleValueQueryFilter = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.ColumnSingleValueQueryFilter',\n columnName: key,\n operator: operator,\n // Add wildcards around the value\n values: [`%${removePrefixIfSynId(searchParams[key])}%`],\n }\n return filter\n }\n case ColumnMultiValueFunction.HAS_LIKE: {\n const filter: ColumnMultiValueFunctionQueryFilter = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.ColumnMultiValueFunctionQueryFilter',\n columnName: key,\n function: operator,\n _function: operator,\n values: searchParams[key].split(',').map(param => {\n // Remove synId prefix for the same reasons as in the LIKE case\n return `%${removePrefixIfSynId(param)}%`\n }),\n }\n return filter\n }\n }\n }),\n )\n }\n\n return additionalFilters.length === 0 ? undefined : additionalFilters\n}\n\n//parses synapse entity id from a sql query string\n//look for a pattern of 'from[some number of spaces]syn[somenumbers]` case insensitive\nexport const parseEntityIdFromSqlStatement = (sql: string): string => {\n const matches = sql.match(/(from)\\s+(syn)\\d+/gi)\n return matches && matches[0] ? matches[0].substr(5).trim() : ''\n}\n\nexport const parseEntityIdAndVersionFromSqlStatement = (\n sql: string,\n): { entityId?: string; versionNumber?: number } => {\n const regex = /from\\s+(syn\\d+)(?:\\.(\\d+))?/i\n const matches = regex.exec(sql)\n if (!matches) {\n return { entityId: undefined, versionNumber: undefined }\n }\n return {\n entityId: matches[1],\n versionNumber: matches[2] ? parseInt(matches[2]) : undefined,\n }\n}\n\nexport const resultToJson = (\n headerColumns: SelectColumn[],\n rowColumns: Row[],\n) => {\n const rows = rowColumns.map(row => row.values)\n const headers = headerColumns.map(column => column.name)\n return rows.map(row => {\n const obj: Record<string, string | null> = {}\n row.forEach((text, cellIndex) => {\n obj[headers[cellIndex]] = text\n })\n return obj\n })\n}\n\n/**\n * Finds the index of the given column name in the selectColumns or columnModels.\n *\n * @returns a non-negative integer if the column is found, or undefined if the column is not found\n * @param columnName\n * @param selectColumns\n * @param columnModels\n */\nexport const getColumnIndex = (\n columnName?: string,\n selectColumns?: SelectColumn[],\n columnModels?: ColumnModel[],\n): number | undefined => {\n if (!columnName) {\n return undefined\n }\n\n const lowerCaseColumnName = columnName.toLowerCase()\n\n if (selectColumns) {\n const findIndexResult = selectColumns.findIndex(\n el => el.name?.toLowerCase() === lowerCaseColumnName,\n )\n if (findIndexResult != -1) {\n return findIndexResult\n }\n }\n\n if (columnModels) {\n const findIndexResult = columnModels.findIndex(\n el => el.name?.toLowerCase() === lowerCaseColumnName,\n )\n if (findIndexResult !== -1) {\n return findIndexResult\n }\n }\n\n return undefined\n}\n"],"names":["WITHOUT_SYN_PREFIX","QUERY_FILTERS_SESSION_STORAGE_KEY","key","removePrefixIfSynId","value","SYNAPSE_ENTITY_ID_REGEX","getIgnoredQueryFilterSearchParamKey","namespace","FTS_SEARCH_TERM","FTS_SEARCH_ROLE","getAdditionalFilters","searchParams","operator","ColumnSingleValueFilterOperator","sessionStorageKey","sessionStorageQueryFiltersString","additionalFilters","isQueryWrapperKey","splitAndTrim","ColumnMultiValueFunction","param","parseEntityIdFromSqlStatement","sql","matches","parseEntityIdAndVersionFromSqlStatement","resultToJson","headerColumns","rowColumns","rows","row","headers","column","obj","text","cellIndex","getColumnIndex","columnName","selectColumns","columnModels","lowerCaseColumnName","findIndexResult","el"],"mappings":"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"}
1
+ {"version":3,"file":"SqlFunctions.js","sources":["../../../src/utils/functions/SqlFunctions.ts"],"sourcesContent":["import {\n ColumnModel,\n ColumnMultiValueFunction,\n ColumnMultiValueFunctionQueryFilter,\n ColumnSingleValueFilterOperator,\n ColumnSingleValueQueryFilter,\n QueryFilter,\n Row,\n SelectColumn,\n TextMatchesQueryFilter,\n} from '@sage-bionetworks/synapse-types'\nimport { SYNAPSE_ENTITY_ID_REGEX } from './RegularExpressions'\nimport { splitAndTrim } from './StringUtils'\n\nexport type SQLOperator =\n | ColumnSingleValueFilterOperator\n | ColumnMultiValueFunction\n\nconst WITHOUT_SYN_PREFIX = 3\nexport const QUERY_FILTERS_SESSION_STORAGE_KEY = (key: string) =>\n `${key}-temp-QueryFilter-array`\n\nexport function removePrefixIfSynId(value: string) {\n if (value.match(SYNAPSE_ENTITY_ID_REGEX)) {\n return value.substring(WITHOUT_SYN_PREFIX)\n }\n return value\n}\nexport const getIgnoredQueryFilterSearchParamKey = (\n key: string,\n namespace?: string,\n) => {\n return `__${namespace ?? ''}_${key}`\n}\n\n// Special search parameter key that will automatically apply a FTS search term to a Query Wrapper if present\nexport const SEARCH_TERM = 'SEARCH_TERM'\nexport const SEARCH_ROLE = 'SEARCH_ROLE'\n\n/** @deprecated Use SEARCH_TERM instead */\nexport const FTS_SEARCH_TERM = 'FTS_SEARCH_TERM'\n/** @deprecated Use SEARCH_ROLE instead */\nexport const FTS_SEARCH_ROLE = 'FTS_SEARCH_ROLE'\n\n/**\n * Look in local storage for a set of QueryFilters to apply. In addition, given the search params,\n * generate a set of QueryFilters to narrow the query to view just related data.\n * May return null if a QueryFilter should not be added.\n * @param sql\n * @param searchParams\n * @param operator\n * @returns\n */\nexport const getAdditionalFilters = (\n searchParams?: Record<string, string>,\n operator: SQLOperator = ColumnSingleValueFilterOperator.LIKE,\n sessionStorageKey?: string,\n): QueryFilter[] | undefined => {\n const sessionStorageQueryFiltersString = sessionStorageKey\n ? sessionStorage.getItem(\n QUERY_FILTERS_SESSION_STORAGE_KEY(sessionStorageKey),\n )\n : undefined\n let additionalFilters: QueryFilter[] = []\n if (sessionStorageQueryFiltersString) {\n additionalFilters = JSON.parse(\n sessionStorageQueryFiltersString,\n ) as QueryFilter[]\n }\n if (searchParams) {\n const isQueryWrapperKey = (key: string) =>\n key.startsWith('qw') || key.startsWith('__')\n additionalFilters = additionalFilters.concat(\n Object.keys(searchParams || {})\n .filter(\n key =>\n !isQueryWrapperKey(key) &&\n searchParams[key] != undefined &&\n searchParams[key].trim() != '',\n )\n .map(key => {\n if (key == SEARCH_TERM || key == FTS_SEARCH_TERM) {\n const filter: TextMatchesQueryFilter = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.TextMatchesQueryFilter',\n searchExpression: searchParams[key],\n }\n return filter\n }\n switch (operator) {\n case ColumnSingleValueFilterOperator.EQUAL: {\n const filter: ColumnSingleValueQueryFilter = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.ColumnSingleValueQueryFilter',\n columnName: key,\n operator: operator,\n values: [searchParams[key]],\n }\n return filter\n }\n case ColumnSingleValueFilterOperator.IN: {\n const filter: ColumnSingleValueQueryFilter = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.ColumnSingleValueQueryFilter',\n columnName: key,\n operator: operator,\n values: splitAndTrim(searchParams[key]),\n }\n return filter\n }\n case ColumnMultiValueFunction.HAS: {\n const filter: ColumnMultiValueFunctionQueryFilter = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.ColumnMultiValueFunctionQueryFilter',\n columnName: key,\n function: operator,\n _function: operator,\n values: splitAndTrim(searchParams[key]),\n }\n return filter\n }\n case ColumnSingleValueFilterOperator.LIKE: {\n // If we use a LIKE statement with a synId the backend will look for a string with the first three\n // characters being 'syn', however, it stores synIds without 'syn', so the query will fail\n // The backend usually parses 'syn' out, but not with the LIKE clause since its expecting a regex, so we\n // parse this out. This will cause a bug if something matches the synId regex but is in free text.\n const filter: ColumnSingleValueQueryFilter = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.ColumnSingleValueQueryFilter',\n columnName: key,\n operator: operator,\n // Add wildcards around the value\n values: [`%${removePrefixIfSynId(searchParams[key])}%`],\n }\n return filter\n }\n case ColumnMultiValueFunction.HAS_LIKE: {\n const filter: ColumnMultiValueFunctionQueryFilter = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.ColumnMultiValueFunctionQueryFilter',\n columnName: key,\n function: operator,\n _function: operator,\n values: searchParams[key].split(',').map(param => {\n // Remove synId prefix for the same reasons as in the LIKE case\n return `%${removePrefixIfSynId(param)}%`\n }),\n }\n return filter\n }\n }\n }),\n )\n }\n\n return additionalFilters.length === 0 ? undefined : additionalFilters\n}\n\n//parses synapse entity id from a sql query string\n//look for a pattern of 'from[some number of spaces]syn[somenumbers]` case insensitive\nexport const parseEntityIdFromSqlStatement = (sql: string): string => {\n const matches = sql.match(/(from)\\s+(syn)\\d+/gi)\n return matches && matches[0] ? matches[0].substr(5).trim() : ''\n}\n\nexport const parseEntityIdAndVersionFromSqlStatement = (\n sql: string,\n): { entityId?: string; versionNumber?: number } => {\n const regex = /from\\s+(syn\\d+)(?:\\.(\\d+))?/i\n const matches = regex.exec(sql)\n if (!matches) {\n return { entityId: undefined, versionNumber: undefined }\n }\n return {\n entityId: matches[1],\n versionNumber: matches[2] ? parseInt(matches[2]) : undefined,\n }\n}\n\nexport const resultToJson = (\n headerColumns: SelectColumn[],\n rowColumns: Row[],\n) => {\n const rows = rowColumns.map(row => row.values)\n const headers = headerColumns.map(column => column.name)\n return rows.map(row => {\n const obj: Record<string, string | null> = {}\n row.forEach((text, cellIndex) => {\n obj[headers[cellIndex]] = text\n })\n return obj\n })\n}\n\n/**\n * Finds the index of the given column name in the selectColumns or columnModels.\n *\n * @returns a non-negative integer if the column is found, or undefined if the column is not found\n * @param columnName\n * @param selectColumns\n * @param columnModels\n */\nexport const getColumnIndex = (\n columnName?: string,\n selectColumns?: SelectColumn[],\n columnModels?: ColumnModel[],\n): number | undefined => {\n if (!columnName) {\n return undefined\n }\n\n const lowerCaseColumnName = columnName.toLowerCase()\n\n if (selectColumns) {\n const findIndexResult = selectColumns.findIndex(\n el => el.name?.toLowerCase() === lowerCaseColumnName,\n )\n if (findIndexResult != -1) {\n return findIndexResult\n }\n }\n\n if (columnModels) {\n const findIndexResult = columnModels.findIndex(\n el => el.name?.toLowerCase() === lowerCaseColumnName,\n )\n if (findIndexResult !== -1) {\n return findIndexResult\n }\n }\n\n return undefined\n}\n"],"names":["WITHOUT_SYN_PREFIX","QUERY_FILTERS_SESSION_STORAGE_KEY","key","removePrefixIfSynId","value","SYNAPSE_ENTITY_ID_REGEX","getIgnoredQueryFilterSearchParamKey","namespace","SEARCH_TERM","SEARCH_ROLE","FTS_SEARCH_TERM","FTS_SEARCH_ROLE","getAdditionalFilters","searchParams","operator","ColumnSingleValueFilterOperator","sessionStorageKey","sessionStorageQueryFiltersString","additionalFilters","isQueryWrapperKey","splitAndTrim","ColumnMultiValueFunction","param","parseEntityIdFromSqlStatement","sql","matches","parseEntityIdAndVersionFromSqlStatement","resultToJson","headerColumns","rowColumns","rows","row","headers","column","obj","text","cellIndex","getColumnIndex","columnName","selectColumns","columnModels","lowerCaseColumnName","findIndexResult","el"],"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 {