synapse-react-client 4.0.19 → 4.0.21

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 (1619) hide show
  1. package/dist/SWC.index.d.ts +1 -1
  2. package/dist/SWC.index.js +1 -1
  3. package/dist/SWC.index.js.map +1 -1
  4. package/dist/aridhia-queries/aridhiaTokenExchange.js.map +1 -1
  5. package/dist/aridhia-queries/useGetAridhiaRequests.js.map +1 -1
  6. package/dist/assets/DefaultColorfulPortalCardBackground.js.map +1 -1
  7. package/dist/assets/GoogleIcon.js.map +1 -1
  8. package/dist/assets/GoogleIcon24.js.map +1 -1
  9. package/dist/assets/homepage/BlinkingLiveIcon.d.ts +1 -1
  10. package/dist/assets/homepage/BlinkingLiveIcon.js.map +1 -1
  11. package/dist/assets/homepage/aacr.js.map +1 -1
  12. package/dist/assets/homepage/cri.js.map +1 -1
  13. package/dist/assets/homepage/ctf.js.map +1 -1
  14. package/dist/assets/homepage/egress.js.map +1 -1
  15. package/dist/assets/homepage/facebook.js.map +1 -1
  16. package/dist/assets/homepage/fisma.js.map +1 -1
  17. package/dist/assets/homepage/gff.js.map +1 -1
  18. package/dist/assets/homepage/github.js.map +1 -1
  19. package/dist/assets/homepage/gray.js.map +1 -1
  20. package/dist/assets/homepage/hipaa-compliant.js.map +1 -1
  21. package/dist/assets/homepage/instagram.js.map +1 -1
  22. package/dist/assets/homepage/linkedin.js.map +1 -1
  23. package/dist/assets/homepage/ml-commons.js.map +1 -1
  24. package/dist/assets/homepage/nih-aging.js.map +1 -1
  25. package/dist/assets/homepage/nih-heart.js.map +1 -1
  26. package/dist/assets/homepage/nih-nci.js.map +1 -1
  27. package/dist/assets/homepage/nih-nimh.js.map +1 -1
  28. package/dist/assets/homepage/ntap.js.map +1 -1
  29. package/dist/assets/homepage/plan-item.js.map +1 -1
  30. package/dist/assets/homepage/powered-by-synapse-feature.js.map +1 -1
  31. package/dist/assets/homepage/precision-governance-feature.js.map +1 -1
  32. package/dist/assets/homepage/python.js.map +1 -1
  33. package/dist/assets/homepage/r.js.map +1 -1
  34. package/dist/assets/homepage/research-credit-feature.js.map +1 -1
  35. package/dist/assets/homepage/seamless-integration-feature.js.map +1 -1
  36. package/dist/assets/homepage/sloan.js.map +1 -1
  37. package/dist/assets/homepage/twitter.js.map +1 -1
  38. package/dist/assets/homepage/users.js.map +1 -1
  39. package/dist/assets/homepage/youtube.js.map +1 -1
  40. package/dist/assets/icons/AccessDataAnywhere.js.map +1 -1
  41. package/dist/assets/icons/AccessPending.js.map +1 -1
  42. package/dist/assets/icons/AccessPendingCloud.js.map +1 -1
  43. package/dist/assets/icons/AddAd.js.map +1 -1
  44. package/dist/assets/icons/AddToList.js.map +1 -1
  45. package/dist/assets/icons/Alert.js.map +1 -1
  46. package/dist/assets/icons/Arrow.js.map +1 -1
  47. package/dist/assets/icons/AwardScroll.js.map +1 -1
  48. package/dist/assets/icons/Baseline.js.map +1 -1
  49. package/dist/assets/icons/Cavatica.js.map +1 -1
  50. package/dist/assets/icons/CertifiedUser.js.map +1 -1
  51. package/dist/assets/icons/Challenge.js.map +1 -1
  52. package/dist/assets/icons/Checkbox/Checked.js.map +1 -1
  53. package/dist/assets/icons/Checkbox/Checked2.js.map +1 -1
  54. package/dist/assets/icons/Checkbox/Indeterminate.js.map +1 -1
  55. package/dist/assets/icons/Checkbox/Indeterminate2.js.map +1 -1
  56. package/dist/assets/icons/Checkbox/Unchecked.js.map +1 -1
  57. package/dist/assets/icons/Checkbox/Unchecked2.js.map +1 -1
  58. package/dist/assets/icons/ClappingHands.js.map +1 -1
  59. package/dist/assets/icons/CloudWarning.js.map +1 -1
  60. package/dist/assets/icons/CommunicateFindings.js.map +1 -1
  61. package/dist/assets/icons/CreateVersion.js.map +1 -1
  62. package/dist/assets/icons/DNA_Two.js.map +1 -1
  63. package/dist/assets/icons/Data2.js.map +1 -1
  64. package/dist/assets/icons/DoubleQuotes.js.map +1 -1
  65. package/dist/assets/icons/EmailAddressAdornment.js.map +1 -1
  66. package/dist/assets/icons/FileWithShield.js.map +1 -1
  67. package/dist/assets/icons/FileWithShield2.js.map +1 -1
  68. package/dist/assets/icons/FrontHand.js.map +1 -1
  69. package/dist/assets/icons/HandWithMoney.js.map +1 -1
  70. package/dist/assets/icons/IconCopy.js.map +1 -1
  71. package/dist/assets/icons/IconMinus.js.map +1 -1
  72. package/dist/assets/icons/IconPlus.js.map +1 -1
  73. package/dist/assets/icons/Java.js.map +1 -1
  74. package/dist/assets/icons/MintDoi.js.map +1 -1
  75. package/dist/assets/icons/MultiFile.js.map +1 -1
  76. package/dist/assets/icons/MultiFile2.js.map +1 -1
  77. package/dist/assets/icons/NoData.js.map +1 -1
  78. package/dist/assets/icons/NoSearchResults.js.map +1 -1
  79. package/dist/assets/icons/ORCIDIcon.js.map +1 -1
  80. package/dist/assets/icons/OpenBook.js.map +1 -1
  81. package/dist/assets/icons/Podium.js.map +1 -1
  82. package/dist/assets/icons/Python.js.map +1 -1
  83. package/dist/assets/icons/QueryStructuredData.js.map +1 -1
  84. package/dist/assets/icons/RLogo.js.map +1 -1
  85. package/dist/assets/icons/RecordProvenance.js.map +1 -1
  86. package/dist/assets/icons/RosetteRibbon.js.map +1 -1
  87. package/dist/assets/icons/SageFullLogo.js.map +1 -1
  88. package/dist/assets/icons/SearchImage.js.map +1 -1
  89. package/dist/assets/icons/ShareYourResearch.js.map +1 -1
  90. package/dist/assets/icons/Sort.js.map +1 -1
  91. package/dist/assets/icons/StarTrophy.js.map +1 -1
  92. package/dist/assets/icons/SynapseFullLogo.js.map +1 -1
  93. package/dist/assets/icons/SynapseIconWhite.js.map +1 -1
  94. package/dist/assets/icons/SynapseLogoName.js.map +1 -1
  95. package/dist/assets/icons/TasksIcon.js.map +1 -1
  96. package/dist/assets/icons/Terminal.js.map +1 -1
  97. package/dist/assets/icons/ThreeStars.js.map +1 -1
  98. package/dist/assets/icons/UnpackagableFile.js.map +1 -1
  99. package/dist/assets/icons/UnpackagableFile2.js.map +1 -1
  100. package/dist/assets/icons/ValidatedProfile.js.map +1 -1
  101. package/dist/assets/icons/account-certified.js.map +1 -1
  102. package/dist/assets/icons/account-enabled-mfa.js.map +1 -1
  103. package/dist/assets/icons/account-validated.js.map +1 -1
  104. package/dist/assets/icons/bioChemicalPhysical.js.map +1 -1
  105. package/dist/assets/icons/chart2.js.map +1 -1
  106. package/dist/assets/icons/columns.js.map +1 -1
  107. package/dist/assets/icons/columnsDarkTheme.js.map +1 -1
  108. package/dist/assets/icons/computationalTool.js.map +1 -1
  109. package/dist/assets/icons/dataReuse.js.map +1 -1
  110. package/dist/assets/icons/emailAddressAdornment2.js.map +1 -1
  111. package/dist/assets/icons/emailWithNotification.js.map +1 -1
  112. package/dist/assets/icons/error_page/maintenance.js.map +1 -1
  113. package/dist/assets/icons/error_page/no-access.js.map +1 -1
  114. package/dist/assets/icons/error_page/unavailable.js.map +1 -1
  115. package/dist/assets/icons/file.js.map +1 -1
  116. package/dist/assets/icons/inSilicoModel.js.map +1 -1
  117. package/dist/assets/icons/institution.js.map +1 -1
  118. package/dist/assets/icons/json-form-tool-no-submissions.js.map +1 -1
  119. package/dist/assets/icons/modelSystem.js.map +1 -1
  120. package/dist/assets/icons/mouse.js.map +1 -1
  121. package/dist/assets/icons/organizations.js.map +1 -1
  122. package/dist/assets/icons/person.js.map +1 -1
  123. package/dist/assets/icons/spatialProfiling.js.map +1 -1
  124. package/dist/assets/icons/standardDataModel.js.map +1 -1
  125. package/dist/assets/icons/study-active.js.map +1 -1
  126. package/dist/assets/icons/study-complete.js.map +1 -1
  127. package/dist/assets/icons/subscribe_plus.js.map +1 -1
  128. package/dist/assets/icons/synapse-logo.js.map +1 -1
  129. package/dist/assets/icons/terms/CheckIcon.js.map +1 -1
  130. package/dist/assets/icons/translational.js.map +1 -1
  131. package/dist/assets/icons/tree_horizontal.js.map +1 -1
  132. package/dist/assets/illustrations/acknowledgement_statements_illustration.js.map +1 -1
  133. package/dist/assets/illustrations/challenges_illustration.js.map +1 -1
  134. package/dist/assets/illustrations/cohort_builder_illustration.js.map +1 -1
  135. package/dist/assets/illustrations/data_access_management_illustration.js.map +1 -1
  136. package/dist/assets/illustrations/datasets_illustration.js.map +1 -1
  137. package/dist/assets/illustrations/diagonalLinePattern.js.map +1 -1
  138. package/dist/assets/illustrations/discussions_illustration.js.map +1 -1
  139. package/dist/assets/illustrations/docker_illustration.js.map +1 -1
  140. package/dist/assets/illustrations/donation_illustration.js.map +1 -1
  141. package/dist/assets/illustrations/favorites_illustration.js.map +1 -1
  142. package/dist/assets/illustrations/files_illustration.js.map +1 -1
  143. package/dist/assets/illustrations/following_illustration.js.map +1 -1
  144. package/dist/assets/illustrations/index.js.map +1 -1
  145. package/dist/assets/illustrations/left_dot_blob_dark_illustration.js.map +1 -1
  146. package/dist/assets/illustrations/left_dot_blob_illustration.js.map +1 -1
  147. package/dist/assets/illustrations/projects_illustration.js.map +1 -1
  148. package/dist/assets/illustrations/right_dot_blob_dark_illustration.js.map +1 -1
  149. package/dist/assets/illustrations/right_dot_blob_illustration.js.map +1 -1
  150. package/dist/assets/illustrations/tables_illustration.js.map +1 -1
  151. package/dist/assets/illustrations/teams_illustration.js.map +1 -1
  152. package/dist/assets/illustrations/trash_can_illustration.js.map +1 -1
  153. package/dist/assets/illustrations/underconstruction_illustration.js.map +1 -1
  154. package/dist/assets/illustrations/wikis_illustration.js.map +1 -1
  155. package/dist/assets/logos/other/ad-workbench-logo.js.map +1 -1
  156. package/dist/assets/logos/other/cavatica-logo.js.map +1 -1
  157. package/dist/assets/logos/other/pluto-logo.js.map +1 -1
  158. package/dist/assets/logos/other/terra-logo.js.map +1 -1
  159. package/dist/assets/mui_components/AccessManagement.js.map +1 -1
  160. package/dist/assets/mui_components/AccountCertified.js.map +1 -1
  161. package/dist/assets/mui_components/AccountRegistered.js.map +1 -1
  162. package/dist/assets/mui_components/AccountValidated.js.map +1 -1
  163. package/dist/assets/mui_components/ActionKey.js.map +1 -1
  164. package/dist/assets/mui_components/BioChemicalPhysical.js.map +1 -1
  165. package/dist/assets/mui_components/Chromatin.js.map +1 -1
  166. package/dist/assets/mui_components/Clinical.js.map +1 -1
  167. package/dist/assets/mui_components/ComputationalTool.js.map +1 -1
  168. package/dist/assets/mui_components/Data.js.map +1 -1
  169. package/dist/assets/mui_components/DataLocked.js.map +1 -1
  170. package/dist/assets/mui_components/DataReuse.js.map +1 -1
  171. package/dist/assets/mui_components/Dataset.js.map +1 -1
  172. package/dist/assets/mui_components/DatasetCollection.js.map +1 -1
  173. package/dist/assets/mui_components/Docker.js.map +1 -1
  174. package/dist/assets/mui_components/GeneExpression.js.map +1 -1
  175. package/dist/assets/mui_components/GeneVariants.js.map +1 -1
  176. package/dist/assets/mui_components/HelpChatBubble.js.map +1 -1
  177. package/dist/assets/mui_components/Imaging.js.map +1 -1
  178. package/dist/assets/mui_components/InSilicoModel.js.map +1 -1
  179. package/dist/assets/mui_components/Kinomics.js.map +1 -1
  180. package/dist/assets/mui_components/LineGraph.js.map +1 -1
  181. package/dist/assets/mui_components/ModelSystem.js.map +1 -1
  182. package/dist/assets/mui_components/Other.js.map +1 -1
  183. package/dist/assets/mui_components/PackagableFile.js.map +1 -1
  184. package/dist/assets/mui_components/PackagableFile2.js.map +1 -1
  185. package/dist/assets/mui_components/Proteomics.js.map +1 -1
  186. package/dist/assets/mui_components/Rat.js.map +1 -1
  187. package/dist/assets/mui_components/SpatialProfiling.js.map +1 -1
  188. package/dist/assets/sustainability/darkDialPosition1.js.map +1 -1
  189. package/dist/assets/sustainability/darkDialPosition2.js.map +1 -1
  190. package/dist/assets/sustainability/darkDialPosition3.js.map +1 -1
  191. package/dist/assets/sustainability/darkDialPosition4.js.map +1 -1
  192. package/dist/assets/sustainability/dialPosition1.js.map +1 -1
  193. package/dist/assets/sustainability/dialPosition2.js.map +1 -1
  194. package/dist/assets/sustainability/dialPosition3.js.map +1 -1
  195. package/dist/assets/sustainability/dialPosition4.js.map +1 -1
  196. package/dist/assets/themed_icons/Active.js.map +1 -1
  197. package/dist/assets/themed_icons/Chart.js.map +1 -1
  198. package/dist/assets/themed_icons/Close.js.map +1 -1
  199. package/dist/assets/themed_icons/Collapse.js.map +1 -1
  200. package/dist/assets/themed_icons/Columns.js.map +1 -1
  201. package/dist/assets/themed_icons/ColumnsDark.js.map +1 -1
  202. package/dist/assets/themed_icons/Database.js.map +1 -1
  203. package/dist/assets/themed_icons/Download.js.map +1 -1
  204. package/dist/assets/themed_icons/Expand.js.map +1 -1
  205. package/dist/assets/themed_icons/Explore.js.map +1 -1
  206. package/dist/assets/themed_icons/ExternalLink.js.map +1 -1
  207. package/dist/assets/themed_icons/Filter.js.map +1 -1
  208. package/dist/assets/themed_icons/Program.js.map +1 -1
  209. package/dist/assets/themed_icons/Project.js.map +1 -1
  210. package/dist/assets/themed_icons/Publication.js.map +1 -1
  211. package/dist/assets/themed_icons/Search.js.map +1 -1
  212. package/dist/assets/themed_icons/Settings.js.map +1 -1
  213. package/dist/assets/themed_icons/SortDown.js.map +1 -1
  214. package/dist/assets/themed_icons/SortUp.js.map +1 -1
  215. package/dist/assets/themed_icons/SqlEditorIcon.js.map +1 -1
  216. package/dist/assets/themed_icons/Study.js.map +1 -1
  217. package/dist/assets/themed_icons/ToolClinical.js.map +1 -1
  218. package/dist/assets/themed_icons/ToolComputational.js.map +1 -1
  219. package/dist/assets/themed_icons/ToolExperimental.js.map +1 -1
  220. package/dist/assets/themed_icons/VerticalDots.js.map +1 -1
  221. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js.map +1 -1
  222. package/dist/components/AccessRequirement/EntityActionsRequired.js.map +1 -1
  223. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.js.map +1 -1
  224. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js.map +1 -1
  225. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js +10 -11
  226. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
  227. package/dist/components/AccessRequirementList/AccessRequirementList.js +73 -76
  228. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  229. package/dist/components/AccessRequirementList/AccessRequirementListItem.js.map +1 -1
  230. package/dist/components/AccessRequirementList/AccessRequirementListUtils.js.map +1 -1
  231. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/CancelRequestDataAccess.js.map +1 -1
  232. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
  233. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js.map +1 -1
  234. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DocumentTemplate.js.map +1 -1
  235. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js.map +1 -1
  236. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItem.js.map +1 -1
  237. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.js.map +1 -1
  238. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestDataAccessSuccess.js.map +1 -1
  239. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
  240. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.js.map +1 -1
  241. package/dist/components/AccessRequirementList/RequirementItem/AuthenticatedRequirement.js.map +1 -1
  242. package/dist/components/AccessRequirementList/RequirementItem/CertificationRequirement.js.map +1 -1
  243. package/dist/components/AccessRequirementList/RequirementItem/LockAccessRequirementItem.js.map +1 -1
  244. package/dist/components/AccessRequirementList/RequirementItem/RequirementItem.js.map +1 -1
  245. package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js.map +1 -1
  246. package/dist/components/AccessRequirementList/RequirementItem/TwoFactorAuthEnabledRequirement.js.map +1 -1
  247. package/dist/components/AccessRequirementList/RequirementItem/UnmanagedACTAccessRequirementItem.js.map +1 -1
  248. package/dist/components/AccessRequirementList/RequirementItem/ValidationRequirement.js.map +1 -1
  249. package/dist/components/AccessRequirementRelatedProjectsList/AccessRequirementRelatedProjectsList.js.map +1 -1
  250. package/dist/components/AccessTokenPage/AccessTokenCard/AccessTokenCard.js.map +1 -1
  251. package/dist/components/AccessTokenPage/AccessTokenPage.js.map +1 -1
  252. package/dist/components/AccessTokenPage/CreateAccessTokenModal.js.map +1 -1
  253. package/dist/components/AccountLevelBadge/AccountLevelBadge.js.map +1 -1
  254. package/dist/components/AccountLevelBadges/AccountLevelBadges.js.map +1 -1
  255. package/dist/components/AccountLevelBadges/useRevokeCertificationUI.js.map +1 -1
  256. package/dist/components/AcknowledgementsPage/AcknowledgementsDialog.js.map +1 -1
  257. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
  258. package/dist/components/AcknowledgementsPage/StudyAcknowledgement.js.map +1 -1
  259. package/dist/components/AcknowledgementsPage/StudyAcknowledgements.js.map +1 -1
  260. package/dist/components/AclEditor/AclEditor.js.map +1 -1
  261. package/dist/components/AclEditor/AclEditor.test-utils.js.map +1 -1
  262. package/dist/components/AclEditor/AclEditorSkeleton.js.map +1 -1
  263. package/dist/components/AclEditor/PermissionLevelMenu.js.map +1 -1
  264. package/dist/components/AclEditor/ReadOnlyPermissionLevel.js.map +1 -1
  265. package/dist/components/AclEditor/ResourceAccessAndUserGroupHeader.js +2 -4
  266. package/dist/components/AclEditor/ResourceAccessAndUserGroupHeader.js.map +1 -1
  267. package/dist/components/AclEditor/ResourceAccessItem.js.map +1 -1
  268. package/dist/components/AclEditor/useSortResourceAccessList.js.map +1 -1
  269. package/dist/components/AclEditor/useUpdateAcl.js.map +1 -1
  270. package/dist/components/AdaptiveTwoColumnLayout/AdaptiveTwoColumnLayout.js.map +1 -1
  271. package/dist/components/AddToDownloadListV2.js.map +1 -1
  272. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  273. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js.map +1 -1
  274. package/dist/components/Authentication/AuthenticationMethodSelection.js.map +1 -1
  275. package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
  276. package/dist/components/Authentication/LoginFlowBackButton.js.map +1 -1
  277. package/dist/components/Authentication/LoginForm.js.map +1 -1
  278. package/dist/components/Authentication/LoginMethod.js.map +1 -1
  279. package/dist/components/Authentication/LoginMethodButton.js.map +1 -1
  280. package/dist/components/Authentication/Logout.js.map +1 -1
  281. package/dist/components/Authentication/OneTimePasswordForm.js.map +1 -1
  282. package/dist/components/Authentication/PasswordField.js.map +1 -1
  283. package/dist/components/Authentication/RecoveryCodeForm.js.map +1 -1
  284. package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
  285. package/dist/components/Authentication/RegenerateBackupCodesWarning.js.map +1 -1
  286. package/dist/components/Authentication/Reset2FAWarning.js.map +1 -1
  287. package/dist/components/Authentication/StandaloneLoginForm.js.map +1 -1
  288. package/dist/components/Authentication/TOTPForm.js.map +1 -1
  289. package/dist/components/Authentication/TwoFactorAuthSettingsPanel.js.map +1 -1
  290. package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
  291. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  292. package/dist/components/Authentication/TwoFactorSecretDialog.js.map +1 -1
  293. package/dist/components/Authentication/UsernamePasswordForm.js.map +1 -1
  294. package/dist/components/BasePortalCard/BasePortalCard.js.map +1 -1
  295. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js.map +1 -1
  296. package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  297. package/dist/components/CTASectionWrapper/CTASectionWrapper.js.map +1 -1
  298. package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js.map +1 -1
  299. package/dist/components/CardContainer/CardConfiguration.d.ts +2 -0
  300. package/dist/components/CardContainer/CardConfiguration.d.ts.map +1 -1
  301. package/dist/components/CardContainer/CardContainer.d.ts.map +1 -1
  302. package/dist/components/CardContainer/CardContainer.js +3 -3
  303. package/dist/components/CardContainer/CardContainer.js.map +1 -1
  304. package/dist/components/CardContainerLogic/CardContainerLogic.d.ts +1 -0
  305. package/dist/components/CardContainerLogic/CardContainerLogic.d.ts.map +1 -1
  306. package/dist/components/CardContainerLogic/CardContainerLogic.js.map +1 -1
  307. package/dist/components/CardDeck/CardDeck.Desktop.js.map +1 -1
  308. package/dist/components/CardDeck/CardDeck.Mobile.js.map +1 -1
  309. package/dist/components/CardDeck/CardDeck.js.map +1 -1
  310. package/dist/components/CardDeck/TableQueryCardDeck.js.map +1 -1
  311. package/dist/components/CardGridWithLinks/CardGridWithLinks.js.map +1 -1
  312. package/dist/components/CertificationQuiz/CertificationAnswer.js.map +1 -1
  313. package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
  314. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js.map +1 -1
  315. package/dist/components/ChallengeDetailPage/ChallengeDetailPage.js.map +1 -1
  316. package/dist/components/ChallengeRegisterButton/ChallengeRegisterButton.js.map +1 -1
  317. package/dist/components/ChallengeRequirementsModal/ChallengeRequirementsModal.js.map +1 -1
  318. package/dist/components/ChallengeSubmission/AddExternalRepo.js.map +1 -1
  319. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js.map +1 -1
  320. package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
  321. package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js +62 -64
  322. package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js.map +1 -1
  323. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
  324. package/dist/components/ChallengeSubmission/EvaluationQueueList.js.map +1 -1
  325. package/dist/components/ChallengeSubmission/SubmissionCommitList.js.map +1 -1
  326. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
  327. package/dist/components/ChallengeTeamWizard/ChallengeTeamSearch.js.map +1 -1
  328. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js.map +1 -1
  329. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js +96 -102
  330. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js.map +1 -1
  331. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
  332. package/dist/components/ChallengeTeamWizard/MembershipRequestForm.js.map +1 -1
  333. package/dist/components/ChallengeTeamWizard/OpenMembershipInvitation.js.map +1 -1
  334. package/dist/components/ChallengeTeamWizard/RegistrationSuccessful.js.map +1 -1
  335. package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js.map +1 -1
  336. package/dist/components/ChallengeTeamWizard/useCreateAndRegisterChallengeTeam.js.map +1 -1
  337. package/dist/components/ChangePassword/ChangePassword.js.map +1 -1
  338. package/dist/components/ChangePassword/ChangePasswordWithToken.js.map +1 -1
  339. package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
  340. package/dist/components/CitationPopover/CitationPopover.js.map +1 -1
  341. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  342. package/dist/components/CitationPopover/CitationPopoverUtils.js.map +1 -1
  343. package/dist/components/CitationPopover/useCitation.js.map +1 -1
  344. package/dist/components/ColorGradient/ColorGradient.js.map +1 -1
  345. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.js.map +1 -1
  346. package/dist/components/ColumnFilter/ColumnFilter.js.map +1 -1
  347. package/dist/components/ComponentCollapse.js.map +1 -1
  348. package/dist/components/ConfirmationDialog/ConfirmationDialog.js.map +1 -1
  349. package/dist/components/CookiesNotification/CookiePreferencesDialog.js.map +1 -1
  350. package/dist/components/CookiesNotification/CookiesNotification.d.ts.map +1 -1
  351. package/dist/components/CookiesNotification/CookiesNotification.js +9 -9
  352. package/dist/components/CookiesNotification/CookiesNotification.js.map +1 -1
  353. package/dist/components/CopyToClipboardIcon.js.map +1 -1
  354. package/dist/components/CopyToClipboardInput/CopyToClipboardInput.js.map +1 -1
  355. package/dist/components/CopyToClipboardString/CopyToClipboardString.js.map +1 -1
  356. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js.map +1 -1
  357. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizardUtils.js.map +1 -1
  358. package/dist/components/CreateProjectModal/CreateProjectModal.js.map +1 -1
  359. package/dist/components/CreateProjectModal/ProjectVisibilityRadioGroup.js.map +1 -1
  360. package/dist/components/CreateTableViewWizard/CreateTableViewWizard.js.map +1 -1
  361. package/dist/components/CreateTableViewWizard/CreateTableViewWizardUtils.js.map +1 -1
  362. package/dist/components/CreateTableViewWizard/TableNameForm.js.map +1 -1
  363. package/dist/components/CreateTableViewWizard/TableTypeSelection.js.map +1 -1
  364. package/dist/components/CreateTableViewWizard/ViewTypeSelection.js.map +1 -1
  365. package/dist/components/CrispChat/CrispChat.js.map +1 -1
  366. package/dist/components/DataExplorer/DataExplorer.css +1 -1
  367. package/dist/components/DataExplorer/DataExplorer.js +28 -31
  368. package/dist/components/DataExplorer/DataExplorer.js.map +1 -1
  369. package/dist/components/DataExplorer/DataExplorer.module.js +16 -16
  370. package/dist/components/DataExplorer/DataExplorer.module.js.map +1 -1
  371. package/dist/components/DataExplorer/DataExplorer.module.scss +26 -6
  372. package/dist/components/DataGrid/DataGrid.js +72 -72
  373. package/dist/components/DataGrid/DataGrid.js.map +1 -1
  374. package/dist/components/DataGrid/DataGridTypes.js.map +1 -1
  375. package/dist/components/DataGrid/DataGridWebSocket.d.ts +2 -0
  376. package/dist/components/DataGrid/DataGridWebSocket.d.ts.map +1 -1
  377. package/dist/components/DataGrid/DataGridWebSocket.js +9 -10
  378. package/dist/components/DataGrid/DataGridWebSocket.js.map +1 -1
  379. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js.map +1 -1
  380. package/dist/components/DataGrid/StartGridSession.js.map +1 -1
  381. package/dist/components/DataGrid/SynapseGrid.d.ts +3 -1
  382. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  383. package/dist/components/DataGrid/SynapseGrid.js +219 -211
  384. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  385. package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
  386. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js.map +1 -1
  387. package/dist/components/DataGrid/columns/DateTimeColumn.js.map +1 -1
  388. package/dist/components/DataGrid/columns/GridAutocompleteChip.js.map +1 -1
  389. package/dist/components/DataGrid/columns/useGridAutocompleteState.js.map +1 -1
  390. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.d.ts +5 -3
  391. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.d.ts.map +1 -1
  392. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js +46 -47
  393. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js.map +1 -1
  394. package/dist/components/DataGrid/components/ExportCsvFromGridButton.js.map +1 -1
  395. package/dist/components/DataGrid/components/GridMenuButton/GridMenuButton.js.map +1 -1
  396. package/dist/components/DataGrid/components/GridSessionSelectionField.js.map +1 -1
  397. package/dist/components/DataGrid/components/UploadCsvToGridButton.js.map +1 -1
  398. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js.map +1 -1
  399. package/dist/components/DataGrid/components/ValidationAlert.js.map +1 -1
  400. package/dist/components/DataGrid/components/contextMenu.js.map +1 -1
  401. package/dist/components/DataGrid/hooks/useColumnResizeHandles.d.ts.map +1 -1
  402. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js +3 -1
  403. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js.map +1 -1
  404. package/dist/components/DataGrid/hooks/useExportDataGridToCsv.js.map +1 -1
  405. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.js.map +1 -1
  406. package/dist/components/DataGrid/hooks/useGridReplicaUsers.js.map +1 -1
  407. package/dist/components/DataGrid/hooks/useGridUndoRedo.js.map +1 -1
  408. package/dist/components/DataGrid/hooks/useRemoteSelections.js.map +1 -1
  409. package/dist/components/DataGrid/hooks/useStack.js.map +1 -1
  410. package/dist/components/DataGrid/useCRDTModelView.js.map +1 -1
  411. package/dist/components/DataGrid/useDataGridWebsocket.d.ts +2 -0
  412. package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
  413. package/dist/components/DataGrid/useDataGridWebsocket.js +12 -2
  414. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  415. package/dist/components/DataGrid/useInitializeGridConnection.js.map +1 -1
  416. package/dist/components/DataGrid/useMergeGridWithRecordSet.js.map +1 -1
  417. package/dist/components/DataGrid/useMergeGridWithSource.js.map +1 -1
  418. package/dist/components/DataGrid/useMergeGridWithTable.js.map +1 -1
  419. package/dist/components/DataGrid/utils/DataGridUtils.js.map +1 -1
  420. package/dist/components/DataGrid/utils/MessageCounter.js.map +1 -1
  421. package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
  422. package/dist/components/DataGrid/utils/calculateColumnWidth.js.map +1 -1
  423. package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
  424. package/dist/components/DataGrid/utils/columnFactory.js +1 -0
  425. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  426. package/dist/components/DataGrid/utils/computeReplicaSelectionModel.js.map +1 -1
  427. package/dist/components/DataGrid/utils/convertActionToModelChange.js.map +1 -1
  428. package/dist/components/DataGrid/utils/createTestModel.js.map +1 -1
  429. package/dist/components/DataGrid/utils/enrichRowsWithChangeInfo.js.map +1 -1
  430. package/dist/components/DataGrid/utils/extractColumnValidationMessages.js.map +1 -1
  431. package/dist/components/DataGrid/utils/getCellAuthorSid.js.map +1 -1
  432. package/dist/components/DataGrid/utils/getCellClassName.js.map +1 -1
  433. package/dist/components/DataGrid/utils/getChangeTooltipText.js.map +1 -1
  434. package/dist/components/DataGrid/utils/getEmptyValue.js.map +1 -1
  435. package/dist/components/DataGrid/utils/getReplicaCategory.js.map +1 -1
  436. package/dist/components/DataGrid/utils/isValidationUpToDateForRow.js.map +1 -1
  437. package/dist/components/DataGrid/utils/json-rx/JsonRx.js.map +1 -1
  438. package/dist/components/DataGrid/utils/json-rx/JsonRxMessage.js.map +1 -1
  439. package/dist/components/DataGrid/utils/json-rx/JsonRxNotification.js.map +1 -1
  440. package/dist/components/DataGrid/utils/json-rx/JsonRxRequest.js.map +1 -1
  441. package/dist/components/DataGrid/utils/json-rx/JsonRxRequestComplete.js.map +1 -1
  442. package/dist/components/DataGrid/utils/json-rx/JsonRxResponse.js.map +1 -1
  443. package/dist/components/DataGrid/utils/json-rx/JsonRxResponseComplete.js.map +1 -1
  444. package/dist/components/DataGrid/utils/logicalTimestampToString.js.map +1 -1
  445. package/dist/components/DataGrid/utils/mapOperationsToModelChanges.js.map +1 -1
  446. package/dist/components/DataGrid/utils/modelColsToGrid.js.map +1 -1
  447. package/dist/components/DataGrid/utils/modelRowsToGrid.js.map +1 -1
  448. package/dist/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType.js.map +1 -1
  449. package/dist/components/DataGrid/utils/replicaSelectionToGridSelection.js.map +1 -1
  450. package/dist/components/DataGrid/utils/schemaAwarePasteValue.js.map +1 -1
  451. package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
  452. package/dist/components/DatasetJsonLdScript.js.map +1 -1
  453. package/dist/components/DateTimePicker/DateTimePicker.js.map +1 -1
  454. package/dist/components/Dialog/ConfirmCloseWithoutSavingDialog.js.map +1 -1
  455. package/dist/components/DialogBase.js.map +1 -1
  456. package/dist/components/DirectDownload/DirectDownload.js.map +1 -1
  457. package/dist/components/DirectDownload/FileEntityDirectDownload.js.map +1 -1
  458. package/dist/components/DirectDownloadButton.js.map +1 -1
  459. package/dist/components/DownloadCart/ActionRequiredCard/ActionRequiredCard.js.map +1 -1
  460. package/dist/components/DownloadCart/ActionRequiredListItem.js.map +1 -1
  461. package/dist/components/DownloadCart/AvailableForDownloadTable.js.map +1 -1
  462. package/dist/components/DownloadCart/CreatePackageV2.js.map +1 -1
  463. package/dist/components/DownloadCart/DirectProgrammaticDownload.js.map +1 -1
  464. package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
  465. package/dist/components/DownloadCart/DownloadDetails.js.map +1 -1
  466. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  467. package/dist/components/DownloadCart/DownloadListActionsRequired.js.map +1 -1
  468. package/dist/components/DownloadCart/DownloadListStats.js.map +1 -1
  469. package/dist/components/DownloadCart/DownloadListTable.js.map +1 -1
  470. package/dist/components/DownloadCart/EnableTwoFaRequirementCard.js.map +1 -1
  471. package/dist/components/DownloadCart/MeetAccessRequirementCard.js.map +1 -1
  472. package/dist/components/DownloadCart/RequestDownloadCard.js.map +1 -1
  473. package/dist/components/DownloadCart/ShowDownloadV2.js.map +1 -1
  474. package/dist/components/DownloadCart/TableQueryActionsRequired.js.map +1 -1
  475. package/dist/components/DownloadCart/fileNameUtils.js.map +1 -1
  476. package/dist/components/DraggableDialog/DraggableDialog.js.map +1 -1
  477. package/dist/components/DropdownSelect/DropdownSelect.js.map +1 -1
  478. package/dist/components/DynamicForm/DynamicForm.js.map +1 -1
  479. package/dist/components/DynamicForm/DynamicFormModal.js.map +1 -1
  480. package/dist/components/Ecosystem/EcosystemCard.js.map +1 -1
  481. package/dist/components/Ecosystem/EcosystemLayout.js.map +1 -1
  482. package/dist/components/Ecosystem/EcosystemSkeleton.js.map +1 -1
  483. package/dist/components/Ecosystem/TableQueryEcosystem.js.map +1 -1
  484. package/dist/components/EntityAclEditor/CreateOrDeleteLocalSharingSettingsButton.js.map +1 -1
  485. package/dist/components/EntityAclEditor/EntityAclEditor.js.map +1 -1
  486. package/dist/components/EntityAclEditor/EntityAclEditorModal.js.map +1 -1
  487. package/dist/components/EntityAclEditor/InheritanceMessage.js.map +1 -1
  488. package/dist/components/EntityAclEditor/OpenData.js.map +1 -1
  489. package/dist/components/EntityAclEditor/useNotifyNewACLUsers.js.map +1 -1
  490. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +68 -70
  491. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  492. package/dist/components/EntityCitation/EntityCitation.js.map +1 -1
  493. package/dist/components/EntityCitation/EntityCitationUtils.js.map +1 -1
  494. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +32 -35
  495. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  496. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
  497. package/dist/components/EntityFinder/Breadcrumbs.js.map +1 -1
  498. package/dist/components/EntityFinder/EntityFinder.js +134 -136
  499. package/dist/components/EntityFinder/EntityFinder.js.map +1 -1
  500. package/dist/components/EntityFinder/EntityFinderModal.js.map +1 -1
  501. package/dist/components/EntityFinder/EntityIdTextField.js.map +1 -1
  502. package/dist/components/EntityFinder/VersionSelectionType.js.map +1 -1
  503. package/dist/components/EntityFinder/details/EntityDetailsList.js +20 -20
  504. package/dist/components/EntityFinder/details/EntityDetailsList.js.map +1 -1
  505. package/dist/components/EntityFinder/details/configurations/EntityChildrenDetails.js.map +1 -1
  506. package/dist/components/EntityFinder/details/configurations/FavoritesDetails.js.map +1 -1
  507. package/dist/components/EntityFinder/details/configurations/ProjectListDetails.js.map +1 -1
  508. package/dist/components/EntityFinder/details/configurations/ReferenceDetails.js.map +1 -1
  509. package/dist/components/EntityFinder/details/configurations/SearchDetails.js.map +1 -1
  510. package/dist/components/EntityFinder/details/view/DetailsView.js +67 -67
  511. package/dist/components/EntityFinder/details/view/DetailsView.js.map +1 -1
  512. package/dist/components/EntityFinder/details/view/VersionColumnHeader.js +1 -1
  513. package/dist/components/EntityFinder/details/view/VersionColumnHeader.js.map +1 -1
  514. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js.map +1 -1
  515. package/dist/components/EntityFinder/details/view/table/CreatedOnCell.js.map +1 -1
  516. package/dist/components/EntityFinder/details/view/table/DateCell.js.map +1 -1
  517. package/dist/components/EntityFinder/details/view/table/EntityBadgeIconsCell.js.map +1 -1
  518. package/dist/components/EntityFinder/details/view/table/EntityFinderCheckboxCell.js.map +1 -1
  519. package/dist/components/EntityFinder/details/view/table/EntityFinderVersionCell.js.map +1 -1
  520. package/dist/components/EntityFinder/details/view/table/EntityNameCell.js.map +1 -1
  521. package/dist/components/EntityFinder/details/view/table/EntityTypeCell.js.map +1 -1
  522. package/dist/components/EntityFinder/details/view/table/FileEntityDirectDownloadCell.js.map +1 -1
  523. package/dist/components/EntityFinder/details/view/table/FileEntityMD5Cell.js.map +1 -1
  524. package/dist/components/EntityFinder/details/view/table/FileEntitySizeCell.js.map +1 -1
  525. package/dist/components/EntityFinder/details/view/table/ModifiedByCell.js.map +1 -1
  526. package/dist/components/EntityFinder/details/view/table/ModifiedOnCell.js.map +1 -1
  527. package/dist/components/EntityFinder/details/view/table/ParentProjectCell.js.map +1 -1
  528. package/dist/components/EntityFinder/details/view/table/UserBadgeCell.js.map +1 -1
  529. package/dist/components/EntityFinder/tree/EntityTree.js +80 -80
  530. package/dist/components/EntityFinder/tree/EntityTree.js.map +1 -1
  531. package/dist/components/EntityFinder/tree/VirtualizedTree.js +31 -31
  532. package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
  533. package/dist/components/EntityFinder/useEntitySelection.js.map +1 -1
  534. package/dist/components/EntityForm/EntityForm.js.map +1 -1
  535. package/dist/components/EntityHeaderTable/DebouncedInput.js.map +1 -1
  536. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  537. package/dist/components/EntityHeaderTable/EntityHeaderTableCellRenderers.js.map +1 -1
  538. package/dist/components/EntityHeaderTable/Filter.js.map +1 -1
  539. package/dist/components/EntityHeaderTable/useEntityHeaderTableState.js.map +1 -1
  540. package/dist/components/EntityIcon.js.map +1 -1
  541. package/dist/components/EntityLink.js.map +1 -1
  542. package/dist/components/EntitySubjectsSelector/EntitySubjectsSelector.js.map +1 -1
  543. package/dist/components/EntityTreeTable/EntityTreeTable.js.map +1 -1
  544. package/dist/components/EntityTreeTable/components/AutoLoadMore.js.map +1 -1
  545. package/dist/components/EntityTreeTable/components/ColumnHeaders.js.map +1 -1
  546. package/dist/components/EntityTreeTable/components/EntityBadgeIconsCell.js.map +1 -1
  547. package/dist/components/EntityTreeTable/components/EntityNameCell.js.map +1 -1
  548. package/dist/components/EntityTreeTable/components/EntityTreeTableContext.js.map +1 -1
  549. package/dist/components/EntityTreeTable/components/EntityTreeTableRow.js.map +1 -1
  550. package/dist/components/EntityTreeTable/components/EntityTreeTableView.js.map +1 -1
  551. package/dist/components/EntityTreeTable/components/IdCell.js.map +1 -1
  552. package/dist/components/EntityTreeTable/components/IdColumnHeader.js.map +1 -1
  553. package/dist/components/EntityTreeTable/hooks/useEntityTreeState.js.map +1 -1
  554. package/dist/components/EntityTreeTable/hooks/useTableColumns.js.map +1 -1
  555. package/dist/components/EntityTreeTable/hooks/useTableData.js.map +1 -1
  556. package/dist/components/EntityTreeTable/hooks/useTreeOperationsWithDirectFetch.js.map +1 -1
  557. package/dist/components/EntityUpload/EntityUpload.js.map +1 -1
  558. package/dist/components/EntityUpload/EntityUploadModal.js +29 -31
  559. package/dist/components/EntityUpload/EntityUploadModal.js.map +1 -1
  560. package/dist/components/EntityUpload/EntityUploadPromptDialog.js.map +1 -1
  561. package/dist/components/EntityUpload/ExternalObjectStoreCredentialsForm.js.map +1 -1
  562. package/dist/components/EntityUpload/FileUploadProgress.js.map +1 -1
  563. package/dist/components/EntityUpload/LinkToURL.js.map +1 -1
  564. package/dist/components/EntityUpload/ProjectStorageLimitAlert.js.map +1 -1
  565. package/dist/components/EntityViewScopeEditor/EntityViewMaskEditor.js.map +1 -1
  566. package/dist/components/EntityViewScopeEditor/EntityViewScopeEditor.js.map +1 -1
  567. package/dist/components/EntityViewScopeEditor/EntityViewScopeEditorModal.js.map +1 -1
  568. package/dist/components/Evaluation/CreatedOnByUserDiv.js.map +1 -1
  569. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.js.map +1 -1
  570. package/dist/components/Evaluation/EvaluationCard.js.map +1 -1
  571. package/dist/components/Evaluation/EvaluationEditor.js.map +1 -1
  572. package/dist/components/Evaluation/EvaluationEditorPage.js.map +1 -1
  573. package/dist/components/Evaluation/EvaluationRoundEditor.js.map +1 -1
  574. package/dist/components/Evaluation/EvaluationRoundEditorDropdown.js.map +1 -1
  575. package/dist/components/Evaluation/EvaluationRoundEditorList.js.map +1 -1
  576. package/dist/components/Evaluation/input_models/models.js.map +1 -1
  577. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptions.js.map +1 -1
  578. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js.map +1 -1
  579. package/dist/components/EvaluationFinder/EvaluationFinder.js.map +1 -1
  580. package/dist/components/ExperimentalMode/ExperimentalMode.d.ts.map +1 -1
  581. package/dist/components/ExperimentalMode/ExperimentalMode.js +24 -30
  582. package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
  583. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
  584. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  585. package/dist/components/FeaturedDataTabs/FacetPlotsCardGrid.js.map +1 -1
  586. package/dist/components/FeaturedDataTabs/FeaturedDataPlots.js.map +1 -1
  587. package/dist/components/FeaturedDataTabs/FeaturedDataTabs.js.map +1 -1
  588. package/dist/components/FeaturedDataTabs/QueryPerFacetPlotsCard.js.map +1 -1
  589. package/dist/components/FeaturedDataTabs/SingleQueryFacetPlotsCards.js.map +1 -1
  590. package/dist/components/FeaturedResearch/FeaturedResearch.js +16 -18
  591. package/dist/components/FeaturedResearch/FeaturedResearch.js.map +1 -1
  592. package/dist/components/FeaturedToolsList/FeaturedToolCard.js.map +1 -1
  593. package/dist/components/FeaturedToolsList/FeaturedToolsList.js.map +1 -1
  594. package/dist/components/FilePreview/EntityPreview.js.map +1 -1
  595. package/dist/components/FilePreview/FileEntityPreview.js.map +1 -1
  596. package/dist/components/FilePreview/FileHandleContentRenderer.js.map +1 -1
  597. package/dist/components/FilePreview/HtmlPreview/HtmlPreview.js.map +1 -1
  598. package/dist/components/FilePreview/PdfPreview.js.map +1 -1
  599. package/dist/components/FilePreview/PreviewRendererType.js.map +1 -1
  600. package/dist/components/FilePreview/PreviewUtils.js.map +1 -1
  601. package/dist/components/FileUpload/FileUpload.js.map +1 -1
  602. package/dist/components/Forum/DiscussionReply.js.map +1 -1
  603. package/dist/components/Forum/DiscussionSearchResult.js.map +1 -1
  604. package/dist/components/Forum/DiscussionThread.js.map +1 -1
  605. package/dist/components/Forum/ForumPage.js.map +1 -1
  606. package/dist/components/Forum/ForumTable.js.map +1 -1
  607. package/dist/components/Forum/ForumThreadEditor.js.map +1 -1
  608. package/dist/components/Forum/SubscribersModal.js.map +1 -1
  609. package/dist/components/ForumSearch/ForumSearch.js.map +1 -1
  610. package/dist/components/FullTextSearch/FullTextSearch.js.map +1 -1
  611. package/dist/components/FullTextSearch/FullTextSearchUtils.js.map +1 -1
  612. package/dist/components/FullWidthAlert/FullWidthAlert.js.map +1 -1
  613. package/dist/components/GenericCard/BioregistryRules.js.map +1 -1
  614. package/dist/components/GenericCard/CardUtils.js.map +1 -1
  615. package/dist/components/GenericCard/CollapsibleDescription.js.map +1 -1
  616. package/dist/components/GenericCard/CroissantButton/CroissantButton.js.map +1 -1
  617. package/dist/components/GenericCard/GenericCard.d.ts +2 -0
  618. package/dist/components/GenericCard/GenericCard.d.ts.map +1 -1
  619. package/dist/components/GenericCard/GenericCard.js +76 -64
  620. package/dist/components/GenericCard/GenericCard.js.map +1 -1
  621. package/dist/components/GenericCard/GenericCardActionButton.js.map +1 -1
  622. package/dist/components/GenericCard/GenericCardIcon.js.map +1 -1
  623. package/dist/components/GenericCard/GenericCardTitle.js.map +1 -1
  624. package/dist/components/GenericCard/LabelMaybeWithIcon.js.map +1 -1
  625. package/dist/components/GenericCard/Linkify.js.map +1 -1
  626. package/dist/components/GenericCard/PortalDOI/PortalDOI.js.map +1 -1
  627. package/dist/components/GenericCard/PortalDOI/PortalDOIUtils.js.map +1 -1
  628. package/dist/components/GenericCard/SynapseCardLabel.js +1 -1
  629. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  630. package/dist/components/GenericCard/TableRowGenericCard.d.ts.map +1 -1
  631. package/dist/components/GenericCard/TableRowGenericCard.js +33 -25
  632. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  633. package/dist/components/GenericCard/useResolvedSynapseEntity.js.map +1 -1
  634. package/dist/components/Goals/Goals.Desktop.js.map +1 -1
  635. package/dist/components/Goals/Goals.Mobile.js.map +1 -1
  636. package/dist/components/Goals/Goals.js +25 -27
  637. package/dist/components/Goals/Goals.js.map +1 -1
  638. package/dist/components/GoalsV2/GoalsV2.Desktop.js.map +1 -1
  639. package/dist/components/GoalsV2/GoalsV2.Mobile.js.map +1 -1
  640. package/dist/components/GoalsV2/GoalsV2.js +14 -16
  641. package/dist/components/GoalsV2/GoalsV2.js.map +1 -1
  642. package/dist/components/GoalsV3/GoalsV3.Desktop.js.map +1 -1
  643. package/dist/components/GoalsV3/GoalsV3.Mobile.js.map +1 -1
  644. package/dist/components/GoalsV3/GoalsV3.js +14 -16
  645. package/dist/components/GoalsV3/GoalsV3.js.map +1 -1
  646. package/dist/components/GoogleAnalytics/GoogleAnalytics.js.map +1 -1
  647. package/dist/components/GoogleMap/GoogleMap.js.map +1 -1
  648. package/dist/components/GoogleMap/SynapseUserMarker.js.map +1 -1
  649. package/dist/components/HasAccess/AccessIcon.js +10 -10
  650. package/dist/components/HasAccess/AccessIcon.js.map +1 -1
  651. package/dist/components/HasAccess/HasAccessV2.js.map +1 -1
  652. package/dist/components/HasAccess/useHasAccess.js.map +1 -1
  653. package/dist/components/HeaderCard/HeaderCardV2.js.map +1 -1
  654. package/dist/components/HeaderCard.js.map +1 -1
  655. package/dist/components/HelpPopover/HelpPopover.js.map +1 -1
  656. package/dist/components/HexGrid/HexGrid.js.map +1 -1
  657. package/dist/components/IDUReport/IDUReport.js.map +1 -1
  658. package/dist/components/IDUReport/IDUReportSubmissionInfo.js.map +1 -1
  659. package/dist/components/Icon/Icon.js.map +1 -1
  660. package/dist/components/IconList.js.map +1 -1
  661. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  662. package/dist/components/IconSvgButton.js.map +1 -1
  663. package/dist/components/ImageCardGridWithLinks/ImageCardGridWithLinks.js +7 -9
  664. package/dist/components/ImageCardGridWithLinks/ImageCardGridWithLinks.js.map +1 -1
  665. package/dist/components/ImageFromSynapseTable.js.map +1 -1
  666. package/dist/components/InteractiveCopyIdsIcon.js.map +1 -1
  667. package/dist/components/JSONArrayEditor/JSONArrayEditor.js.map +1 -1
  668. package/dist/components/JSONArrayEditor/JSONArrayEditorModal.js.map +1 -1
  669. package/dist/components/JSONArrayEditor/useParseCsv.js.map +1 -1
  670. package/dist/components/JsonLdScript.js.map +1 -1
  671. package/dist/components/JsonSchemaForm/JsonSchemaForm.js.map +1 -1
  672. package/dist/components/JsonSchemaForm/templates/ArrayFieldDescriptionTemplate.js.map +1 -1
  673. package/dist/components/JsonSchemaForm/templates/ArrayFieldItemButtonTemplate.js.map +1 -1
  674. package/dist/components/JsonSchemaForm/templates/ArrayFieldItemTemplate.js.map +1 -1
  675. package/dist/components/JsonSchemaForm/templates/ArrayFieldTemplate.js.map +1 -1
  676. package/dist/components/JsonSchemaForm/templates/ArrayFieldTitleTemplate.js.map +1 -1
  677. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js.map +1 -1
  678. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js.map +1 -1
  679. package/dist/components/JsonSchemaForm/templates/DescriptionFieldTemplate.js.map +1 -1
  680. package/dist/components/JsonSchemaForm/templates/ErrorListTemplate.js.map +1 -1
  681. package/dist/components/JsonSchemaForm/templates/FieldDescriptionTable.js.map +1 -1
  682. package/dist/components/JsonSchemaForm/templates/FieldErrorTemplate.js.map +1 -1
  683. package/dist/components/JsonSchemaForm/templates/FieldTemplate.js.map +1 -1
  684. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  685. package/dist/components/JsonSchemaForm/widgets/BooleanWidget.js.map +1 -1
  686. package/dist/components/JsonSchemaForm/widgets/DateTimeWidget.js.map +1 -1
  687. package/dist/components/JsonSchemaForm/widgets/SelectWidget.js.map +1 -1
  688. package/dist/components/LoadingScreen/LoadingScreen.js.map +1 -1
  689. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.js.map +1 -1
  690. package/dist/components/Markdown/GovernanceMarkdownGithub.js.map +1 -1
  691. package/dist/components/Markdown/MarkdownCollapse.js.map +1 -1
  692. package/dist/components/Markdown/MarkdownEditor.js.map +1 -1
  693. package/dist/components/Markdown/MarkdownGithub.js.map +1 -1
  694. package/dist/components/Markdown/MarkdownPopover.js.map +1 -1
  695. package/dist/components/Markdown/MarkdownSynapse.d.ts.map +1 -1
  696. package/dist/components/Markdown/MarkdownSynapse.js +75 -106
  697. package/dist/components/Markdown/MarkdownSynapse.js.map +1 -1
  698. package/dist/components/Markdown/MarkdownUtils.d.ts +14 -4
  699. package/dist/components/Markdown/MarkdownUtils.d.ts.map +1 -1
  700. package/dist/components/Markdown/MarkdownUtils.js +38 -37
  701. package/dist/components/Markdown/MarkdownUtils.js.map +1 -1
  702. package/dist/components/Markdown/MarkdownWidget.js.map +1 -1
  703. package/dist/components/Markdown/SynapseWikiContext.js.map +1 -1
  704. package/dist/components/Markdown/UserMentionModal.js.map +1 -1
  705. package/dist/components/Markdown/widget/Bookmarks.js.map +1 -1
  706. package/dist/components/Markdown/widget/MarkdownButton.js.map +1 -1
  707. package/dist/components/Markdown/widget/MarkdownEntityPreview.js.map +1 -1
  708. package/dist/components/Markdown/widget/MarkdownIDUReport.js.map +1 -1
  709. package/dist/components/Markdown/widget/MarkdownProvenanceGraph.js.map +1 -1
  710. package/dist/components/Markdown/widget/MarkdownSynapseImage.js.map +1 -1
  711. package/dist/components/Markdown/widget/MarkdownSynapsePlot.js.map +1 -1
  712. package/dist/components/Markdown/widget/MarkdownSynapseTable.js.map +1 -1
  713. package/dist/components/Markdown/widget/MarkdownTableOfContents.js.map +1 -1
  714. package/dist/components/Markdown/widget/MarkdownUserOrTeamBadge.js.map +1 -1
  715. package/dist/components/Markdown/widget/MarkdownVideo.js.map +1 -1
  716. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  717. package/dist/components/ModalDownload/ModalDownload.FormSchema.js.map +1 -1
  718. package/dist/components/ModalDownload/ModalDownload.js.map +1 -1
  719. package/dist/components/MuiContainer.js.map +1 -1
  720. package/dist/components/OAuthClientAclEditor/OAuthAclEditorModal.js.map +1 -1
  721. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js.map +1 -1
  722. package/dist/components/OAuthClientManagement/CreateOAuthClient.js.map +1 -1
  723. package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
  724. package/dist/components/OrientationBanner/OrientationBanner.js.map +1 -1
  725. package/dist/components/PageProgress/PageProgress.js.map +1 -1
  726. package/dist/components/Plot/BarPlot.js.map +1 -1
  727. package/dist/components/Plot/DotPlot.js.map +1 -1
  728. package/dist/components/Plot/Plot.d.ts +12 -1
  729. package/dist/components/Plot/Plot.d.ts.map +1 -1
  730. package/dist/components/Plot/Plot.js +5 -1
  731. package/dist/components/Plot/Plot.js.map +1 -1
  732. package/dist/components/Plot/PlotPanelHeader.js.map +1 -1
  733. package/dist/components/Plot/SynapsePlot.js.map +1 -1
  734. package/dist/components/Plot/SynapseSankeyPlot.css +1 -0
  735. package/dist/components/Plot/SynapseSankeyPlot.d.ts +54 -0
  736. package/dist/components/Plot/SynapseSankeyPlot.d.ts.map +1 -0
  737. package/dist/components/Plot/SynapseSankeyPlot.js +359 -0
  738. package/dist/components/Plot/SynapseSankeyPlot.js.map +1 -0
  739. package/dist/components/Plot/SynapseSankeyPlot.module.js +15 -0
  740. package/dist/components/Plot/SynapseSankeyPlot.module.js.map +1 -0
  741. package/dist/components/Plot/SynapseSankeyPlot.module.scss +63 -0
  742. package/dist/components/Plot/ThemesPlot.js.map +1 -1
  743. package/dist/components/Plot/UpsetPlot.js.map +1 -1
  744. package/dist/components/Plot/index.d.ts +3 -1
  745. package/dist/components/Plot/index.d.ts.map +1 -1
  746. package/dist/components/Plot/index.js +2 -1
  747. package/dist/components/Plot/safe-react-plotly-factory.js.map +1 -1
  748. package/dist/components/PortalAclEditor/PortalAclEditor.js.map +1 -1
  749. package/dist/components/PortalAclEditor/PortalAclEditorModal.js.map +1 -1
  750. package/dist/components/PortalFeatureHighlights/PortalFeatureHighlights.js.map +1 -1
  751. package/dist/components/PortalFeaturedPartners/PortalFeaturedPartners.js +4 -6
  752. package/dist/components/PortalFeaturedPartners/PortalFeaturedPartners.js.map +1 -1
  753. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.js.map +1 -1
  754. package/dist/components/PortalList/CreatePortalModal.js.map +1 -1
  755. package/dist/components/PortalList/PortalCard.js.map +1 -1
  756. package/dist/components/PortalList/PortalList.js.map +1 -1
  757. package/dist/components/PortalSectionHeader/PortalSectionHeader.js.map +1 -1
  758. package/dist/components/ProgrammaticInstructionsModal/ProgrammaticInstructionsModal.js +69 -69
  759. package/dist/components/ProgrammaticInstructionsModal/ProgrammaticInstructionsModal.js.map +1 -1
  760. package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js.map +1 -1
  761. package/dist/components/Programs/Programs.Desktop.js.map +1 -1
  762. package/dist/components/Programs/Programs.Mobile.js.map +1 -1
  763. package/dist/components/Programs/Programs.js.map +1 -1
  764. package/dist/components/ProjectStorage/ProjectDataAvailability.js.map +1 -1
  765. package/dist/components/ProvenanceGraph/ActivityNodeLabel.js.map +1 -1
  766. package/dist/components/ProvenanceGraph/EntityNodeLabel.js.map +1 -1
  767. package/dist/components/ProvenanceGraph/EntityPlaceholderNodeLabel.js.map +1 -1
  768. package/dist/components/ProvenanceGraph/ExpandGraphNodeLabel.js.map +1 -1
  769. package/dist/components/ProvenanceGraph/ExternalGraphNodeLabel.js.map +1 -1
  770. package/dist/components/ProvenanceGraph/ProvenanceEntityIcon.js.map +1 -1
  771. package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js.map +1 -1
  772. package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
  773. package/dist/components/ProvenanceGraph/ProvenanceGraphUtils.js.map +1 -1
  774. package/dist/components/ProvenanceGraph/ProvenanceUtils.js +13 -13
  775. package/dist/components/ProvenanceGraph/ProvenanceUtils.js.map +1 -1
  776. package/dist/components/ProvenanceGraph/UndefinedNodeLabel.js.map +1 -1
  777. package/dist/components/QueryContext/QueryContext.js.map +1 -1
  778. package/dist/components/QueryCount/QueryCount.js.map +1 -1
  779. package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
  780. package/dist/components/QuerySortSelector.js.map +1 -1
  781. package/dist/components/QueryVisualizationWrapper/NoContentPlaceholder.js.map +1 -1
  782. package/dist/components/QueryVisualizationWrapper/QueryVisualizationContext.js.map +1 -1
  783. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
  784. package/dist/components/QueryWrapper/QueryWrapper.js +27 -27
  785. package/dist/components/QueryWrapper/QueryWrapper.js.map +1 -1
  786. package/dist/components/QueryWrapper/QueryWrapperLoadingScreen.js.map +1 -1
  787. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js.map +1 -1
  788. package/dist/components/QueryWrapper/TableRowSelectionState.js.map +1 -1
  789. package/dist/components/QueryWrapper/ViewMoreQueryResultsButton.js.map +1 -1
  790. package/dist/components/QueryWrapper/generateEncodedPathAndQueryForSelectedFacetURL.js.map +1 -1
  791. package/dist/components/QueryWrapper/useComputeRowSelectionPrimaryKey.js.map +1 -1
  792. package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js.map +1 -1
  793. package/dist/components/QueryWrapper/useGetQueryMetadata.js.map +1 -1
  794. package/dist/components/QueryWrapper/useHasFacetedSelectColumn.js.map +1 -1
  795. package/dist/components/QueryWrapper/useOnQueryDataChange.js.map +1 -1
  796. package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
  797. package/dist/components/QueryWrapperPlotNav/LastUpdatedOn.js.map +1 -1
  798. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  799. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js.map +1 -1
  800. package/dist/components/QueryWrapperPlotNav/RowSetView.js.map +1 -1
  801. package/dist/components/QueryWrapperPlotNav/UseRowSet.js.map +1 -1
  802. package/dist/components/RORInstitutionField/RORInstitutionField.js.map +1 -1
  803. package/dist/components/RecentPublicationsGrid/RecentPublicationsGrid.js +6 -8
  804. package/dist/components/RecentPublicationsGrid/RecentPublicationsGrid.js.map +1 -1
  805. package/dist/components/RegisterPageLogoutPrompt/RegisterPageLogoutPrompt.js.map +1 -1
  806. package/dist/components/ReleaseCard/ReleaseCard.js.map +1 -1
  807. package/dist/components/ReleaseCard/ReleaseCardLarge.js.map +1 -1
  808. package/dist/components/ReleaseCard/ReleaseCardMedium.js.map +1 -1
  809. package/dist/components/ReleaseCard/ReleaseCardUtils.js.map +1 -1
  810. package/dist/components/RenderIfInView/RenderIfInView.js.map +1 -1
  811. package/dist/components/ResizableContainer/ResizableContainer.js.map +1 -1
  812. package/dist/components/ResizableContainer/hooks/useResizable.js.map +1 -1
  813. package/dist/components/Resources/Resources.Desktop.js.map +1 -1
  814. package/dist/components/Resources/Resources.Mobile.js.map +1 -1
  815. package/dist/components/Resources/Resources.js +8 -11
  816. package/dist/components/Resources/Resources.js.map +1 -1
  817. package/dist/components/RowDataTable/RowDataTable.js.map +1 -1
  818. package/dist/components/RowDataTable/RowDataTableWithQuery.js.map +1 -1
  819. package/dist/components/RssFeedCards/RssFeedCards.js.map +1 -1
  820. package/dist/components/SageResourcesPopover/SageResourcesPopover.js.map +1 -1
  821. package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.js.map +1 -1
  822. package/dist/components/SchemaDrivenAnnotationEditor/SchemaDrivenAnnotationEditor.js.map +1 -1
  823. package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.js.map +1 -1
  824. package/dist/components/SchemaDrivenAnnotationEditor/field/SynapseAnnotationsRJSFObjectField.js.map +1 -1
  825. package/dist/components/SchemaDrivenAnnotationEditor/template/AdditionalPropertyContext.js.map +1 -1
  826. package/dist/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.js.map +1 -1
  827. package/dist/components/SchemaDrivenAnnotationEditor/template/SynapseAnnotationsWrapIfAdditionalTemplate.js.map +1 -1
  828. package/dist/components/SchemaDrivenAnnotationEditor/widget/TextWidget.js.map +1 -1
  829. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts +13 -12
  830. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
  831. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +88 -77
  832. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
  833. package/dist/components/SearchQueryWrapper/SearchQueryWrapper.js.map +1 -1
  834. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.js.map +1 -1
  835. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  836. package/dist/components/SetBasicAccessRequirementFields/AccessRequirementTextInstructions.js.map +1 -1
  837. package/dist/components/SetBasicAccessRequirementFields/AccessRequirementWikiInstructions.js.map +1 -1
  838. package/dist/components/SetBasicAccessRequirementFields/AccessorRequirements.js.map +1 -1
  839. package/dist/components/SetBasicAccessRequirementFields/GovernanceUtils.js.map +1 -1
  840. package/dist/components/SetBasicAccessRequirementFields/SetBasicAccessRequirementFields.js.map +1 -1
  841. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
  842. package/dist/components/ShareThisPage/ShareThisPage.js.map +1 -1
  843. package/dist/components/ShowMore/ShowMore.js.map +1 -1
  844. package/dist/components/SignInButton.js.map +1 -1
  845. package/dist/components/SignInRequiredModal/SignInRequiredModal.js.map +1 -1
  846. package/dist/components/Skeleton/SkeletonButton.js.map +1 -1
  847. package/dist/components/Skeleton/SkeletonInlineBlock.js.map +1 -1
  848. package/dist/components/Skeleton/SkeletonParagraph.js.map +1 -1
  849. package/dist/components/Skeleton/SkeletonTable.js.map +1 -1
  850. package/dist/components/SmartLink/SmartButton.js.map +1 -1
  851. package/dist/components/SmartLink/SmartLink.js.map +1 -1
  852. package/dist/components/SmartLink/useSmartLink.js.map +1 -1
  853. package/dist/components/SourceAppImage.js.map +1 -1
  854. package/dist/components/SpinnerButton/SpinnerButton.js.map +1 -1
  855. package/dist/components/SqlDefinedTableEditor/SqlDefinedTableEditor.js.map +1 -1
  856. package/dist/components/SqlDefinedTableEditor/SqlDefinedTableEditorModal.js.map +1 -1
  857. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js.map +1 -1
  858. package/dist/components/StatisticsPlot.js.map +1 -1
  859. package/dist/components/StepperDialog/StepperDialog.js.map +1 -1
  860. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  861. package/dist/components/SubmissionViewScopeEditor/SubmissionViewScopeEditor.js.map +1 -1
  862. package/dist/components/SubmissionViewScopeEditor/SubmissionViewScopeEditorModal.js.map +1 -1
  863. package/dist/components/SubscriptionPage/ForumTopic.js.map +1 -1
  864. package/dist/components/SubscriptionPage/SubscriptionItem.js.map +1 -1
  865. package/dist/components/SubscriptionPage/SubscriptionPage.js.map +1 -1
  866. package/dist/components/SubscriptionPage/ThreadTopic.js.map +1 -1
  867. package/dist/components/SubscriptionPage/Topic.js.map +1 -1
  868. package/dist/components/SubsectionRowRenderer/SubsectionRowRenderer.js.map +1 -1
  869. package/dist/components/SustainabilityScorecard/Dial.js.map +1 -1
  870. package/dist/components/SustainabilityScorecard/DialLayout.js.map +1 -1
  871. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
  872. package/dist/components/SustainabilityScorecard/SustainabilityScorecardSummary.js.map +1 -1
  873. package/dist/components/SustainabilityScorecard/SustainabilityScorecardUtils.js.map +1 -1
  874. package/dist/components/SynapseChat/AccessLevelMenu.js.map +1 -1
  875. package/dist/components/SynapseChat/GridAgentChat.js.map +1 -1
  876. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  877. package/dist/components/SynapseChat/SynapseChatDialog.js.map +1 -1
  878. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  879. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  880. package/dist/components/SynapseChat/SynapsePortalChatDialog.js.map +1 -1
  881. package/dist/components/SynapseChat/extractMessageFromTraceEvent.js.map +1 -1
  882. package/dist/components/SynapseChat/useChatState.js.map +1 -1
  883. package/dist/components/SynapseFooter/SynapseFooter.js.map +1 -1
  884. package/dist/components/SynapseFooter/SynapseLinksColumn.js.map +1 -1
  885. package/dist/components/SynapseForm/DataDebug.js.map +1 -1
  886. package/dist/components/SynapseForm/Header.js.map +1 -1
  887. package/dist/components/SynapseForm/NavButtons.js.map +1 -1
  888. package/dist/components/SynapseForm/StepsSideNav.js.map +1 -1
  889. package/dist/components/SynapseForm/SummaryTable.js.map +1 -1
  890. package/dist/components/SynapseForm/SynapseForm.js.map +1 -1
  891. package/dist/components/SynapseForm/SynapseFormCheckboxWidget.js.map +1 -1
  892. package/dist/components/SynapseForm/SynapseFormCheckboxesWidget.js.map +1 -1
  893. package/dist/components/SynapseForm/SynapseFormRadioWidget.js.map +1 -1
  894. package/dist/components/SynapseForm/SynapseFormSubmissionGrid.js.map +1 -1
  895. package/dist/components/SynapseForm/SynapseFormUtils.js.map +1 -1
  896. package/dist/components/SynapseForm/SynapseFormWrapper.js.map +1 -1
  897. package/dist/components/SynapseForm/WarningDialog.js.map +1 -1
  898. package/dist/components/SynapseForm/types.js.map +1 -1
  899. package/dist/components/SynapseForm/useGetFormPropsFromSearchParams.js.map +1 -1
  900. package/dist/components/SynapseHomepageV2/FloatingBlobsBackground.js.map +1 -1
  901. package/dist/components/SynapseHomepageV2/HomepageStyles.js.map +1 -1
  902. package/dist/components/SynapseHomepageV2/SynapseByTheNumbers.js.map +1 -1
  903. package/dist/components/SynapseHomepageV2/SynapseByTheNumbersItem.js.map +1 -1
  904. package/dist/components/SynapseHomepageV2/SynapseFeatureItem.js.map +1 -1
  905. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js.map +1 -1
  906. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasets.js.map +1 -1
  907. package/dist/components/SynapseHomepageV2/SynapseFeatures.js.map +1 -1
  908. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js +18 -21
  909. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js.map +1 -1
  910. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js.map +1 -1
  911. package/dist/components/SynapseHomepageV2/SynapseHomepageSearch.js.map +1 -1
  912. package/dist/components/SynapseHomepageV2/SynapseHomepageV2.js.map +1 -1
  913. package/dist/components/SynapseHomepageV2/SynapseHotdrops.js.map +1 -1
  914. package/dist/components/SynapseHomepageV2/SynapseHotdropsItem.js.map +1 -1
  915. package/dist/components/SynapseHomepageV2/SynapseInAction.js.map +1 -1
  916. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
  917. package/dist/components/SynapseHomepageV2/SynapsePartners.js.map +1 -1
  918. package/dist/components/SynapseHomepageV2/SynapsePlan.js.map +1 -1
  919. package/dist/components/SynapseHomepageV2/SynapsePlanContent.js.map +1 -1
  920. package/dist/components/SynapseHomepageV2/SynapsePlans.js.map +1 -1
  921. package/dist/components/SynapseHomepageV2/SynapsePlansPage.js.map +1 -1
  922. package/dist/components/SynapseHomepageV2/SynapseSearchChips.js.map +1 -1
  923. package/dist/components/SynapseHomepageV2/SynapseTrendingProjects.js.map +1 -1
  924. package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js.map +1 -1
  925. package/dist/components/SynapseHomepageV2/WordPressNews.js.map +1 -1
  926. package/dist/components/SynapseHomepageV2/WordPressNewsItem.js.map +1 -1
  927. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +78 -78
  928. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  929. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  930. package/dist/components/SynapseSearchPageResults/HasAccessChip.js.map +1 -1
  931. package/dist/components/SynapseSearchPageResults/HighlightedTypography.js.map +1 -1
  932. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanel.js.map +1 -1
  933. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js.map +1 -1
  934. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.js.map +1 -1
  935. package/dist/components/SynapseSearchPageResults/SynapseSearchPage.js.map +1 -1
  936. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
  937. package/dist/components/SynapseSearchPageResults/SynapseSearchPageRouter.js.map +1 -1
  938. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js.map +1 -1
  939. package/dist/components/SynapseSearchPageResults/chipStyles.js.map +1 -1
  940. package/dist/components/SynapseTable/CustomControls/CustomControlButton.js.map +1 -1
  941. package/dist/components/SynapseTable/CustomControls/CustomControlPanel.js.map +1 -1
  942. package/dist/components/SynapseTable/CustomControls/CustomControls.js.map +1 -1
  943. package/dist/components/SynapseTable/EntityIDColumnCopyIcon.js.map +1 -1
  944. package/dist/components/SynapseTable/ExpandCollapseButton.js.map +1 -1
  945. package/dist/components/SynapseTable/ExpandableTableDataCell.js.map +1 -1
  946. package/dist/components/SynapseTable/NoContentAvailable.js.map +1 -1
  947. package/dist/components/SynapseTable/NoContentPlaceholderType.js.map +1 -1
  948. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +4 -4
  949. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  950. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js.map +1 -1
  951. package/dist/components/SynapseTable/SearchResultsNotFound.js.map +1 -1
  952. package/dist/components/SynapseTable/SearchV2.js.map +1 -1
  953. package/dist/components/SynapseTable/SqlEditor.js.map +1 -1
  954. package/dist/components/SynapseTable/SynapseTable.js.map +1 -1
  955. package/dist/components/SynapseTable/SynapseTableCell/EntityIdList.js.map +1 -1
  956. package/dist/components/SynapseTable/SynapseTableCell/EvaluationIdRenderer.js.map +1 -1
  957. package/dist/components/SynapseTable/SynapseTableCell/JSON/ComplexJSONRenderer.js.map +1 -1
  958. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONArrayRenderer.js.map +1 -1
  959. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONObjectRenderer.js.map +1 -1
  960. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONPrimitiveRenderer.js.map +1 -1
  961. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONRendererUtils.js.map +1 -1
  962. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONTableCellRenderer.js.map +1 -1
  963. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js.map +1 -1
  964. package/dist/components/SynapseTable/SynapseTableCell/UserIdList.js.map +1 -1
  965. package/dist/components/SynapseTable/SynapseTableConstants.js.map +1 -1
  966. package/dist/components/SynapseTable/SynapseTableContext.js.map +1 -1
  967. package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
  968. package/dist/components/SynapseTable/SynapseTableUtils.js.map +1 -1
  969. package/dist/components/SynapseTable/TableIsEmpty.js.map +1 -1
  970. package/dist/components/SynapseTable/TablePagination.js.map +1 -1
  971. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts.map +1 -1
  972. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js +63 -74
  973. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
  974. package/dist/components/SynapseTable/TopLevelControls/TopLevelControlsUtils.js.map +1 -1
  975. package/dist/components/SynapseTable/datasets/DatasetEditorCheckboxCell.js.map +1 -1
  976. package/dist/components/SynapseTable/datasets/DatasetEditorUtils.js.map +1 -1
  977. package/dist/components/SynapseTable/datasets/DatasetEditorVersionCell.js.map +1 -1
  978. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +131 -133
  979. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  980. package/dist/components/SynapseTable/datasets/EntityFetchErrorCell.js.map +1 -1
  981. package/dist/components/SynapseTable/export/ADDiscoveryPortalInstructions.js.map +1 -1
  982. package/dist/components/SynapseTable/export/ExportToAnalysisPlatformDialog.js +48 -51
  983. package/dist/components/SynapseTable/export/ExportToAnalysisPlatformDialog.js.map +1 -1
  984. package/dist/components/SynapseTable/export/ExternalAnalysisPlatformInstructions.js.map +1 -1
  985. package/dist/components/SynapseTable/export/ExternalAnalysisPlatformsConstants.js.map +1 -1
  986. package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js.map +1 -1
  987. package/dist/components/SynapseTable/export/ExternalPlatformDisclaimer.js.map +1 -1
  988. package/dist/components/SynapseTable/table-top/ColumnSelection.js.map +1 -1
  989. package/dist/components/SynapseTable/table-top/DownloadLoginModal.js.map +1 -1
  990. package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
  991. package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
  992. package/dist/components/SynapseTable/useTableSort.js.map +1 -1
  993. package/dist/components/SystemUseNotification/SystemUseNotification.js.map +1 -1
  994. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.d.ts.map +1 -1
  995. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +72 -68
  996. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  997. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/DefaultValueField.js.map +1 -1
  998. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/FieldWithRecommendedMinimum.js.map +1 -1
  999. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/MultiValueField.js.map +1 -1
  1000. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
  1001. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditor.js.map +1 -1
  1002. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorTestUtils.js.map +1 -1
  1003. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts +27 -1
  1004. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
  1005. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js +47 -36
  1006. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  1007. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +10 -10
  1008. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  1009. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js.map +1 -1
  1010. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.d.ts +12 -12
  1011. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.js.map +1 -1
  1012. package/dist/components/TableColumnSchemaEditor/Validators/BooleanSchema.d.ts +4 -1
  1013. package/dist/components/TableColumnSchemaEditor/Validators/BooleanSchema.d.ts.map +1 -1
  1014. package/dist/components/TableColumnSchemaEditor/Validators/BooleanSchema.js.map +1 -1
  1015. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.d.ts +167 -517
  1016. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.d.ts.map +1 -1
  1017. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.js +65 -65
  1018. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.js.map +1 -1
  1019. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.d.ts +1 -1
  1020. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.d.ts.map +1 -1
  1021. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js.map +1 -1
  1022. package/dist/components/TableColumnSchemaEditor/Validators/DefaultValueValidator.js.map +1 -1
  1023. package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.d.ts +1 -1
  1024. package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.d.ts.map +1 -1
  1025. package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.js +6 -13
  1026. package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.js.map +1 -1
  1027. package/dist/components/TableColumnSchemaEditor/Validators/EntityIdSchema.d.ts +1 -1
  1028. package/dist/components/TableColumnSchemaEditor/Validators/EntityIdSchema.d.ts.map +1 -1
  1029. package/dist/components/TableColumnSchemaEditor/Validators/EntityIdSchema.js.map +1 -1
  1030. package/dist/components/TableColumnSchemaEditor/Validators/EnumValuesValidator.js.map +1 -1
  1031. package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.d.ts +1 -1
  1032. package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.d.ts.map +1 -1
  1033. package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.js +2 -2
  1034. package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.js.map +1 -1
  1035. package/dist/components/TableColumnSchemaEditor/Validators/OptionalStringSchema.d.ts +1 -1
  1036. package/dist/components/TableColumnSchemaEditor/Validators/OptionalStringSchema.d.ts.map +1 -1
  1037. package/dist/components/TableColumnSchemaEditor/Validators/OptionalStringSchema.js.map +1 -1
  1038. package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.d.ts +2 -2
  1039. package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.d.ts.map +1 -1
  1040. package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.js +15 -16
  1041. package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.js.map +1 -1
  1042. package/dist/components/TableFeedCards/TableFeedCards.js.map +1 -1
  1043. package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
  1044. package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js.map +1 -1
  1045. package/dist/components/TanStackTable/StyledTanStackTable.js.map +1 -1
  1046. package/dist/components/TanStackTable/StyledVirtualTanStackTable.js.map +1 -1
  1047. package/dist/components/TanStackTable/TableBody.js.map +1 -1
  1048. package/dist/components/TanStackTable/TableCellRenderer.js.map +1 -1
  1049. package/dist/components/TanStackTable/TanStackTableUtils.js.map +1 -1
  1050. package/dist/components/TeamBadge.js.map +1 -1
  1051. package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js.map +1 -1
  1052. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
  1053. package/dist/components/TemplateComponent.js.map +1 -1
  1054. package/dist/components/TemporaryBanner/TemporaryBanner.js.map +1 -1
  1055. package/dist/components/TermsAndConditions/TermsAndConditions.js.map +1 -1
  1056. package/dist/components/TermsAndConditions/TermsAndConditionsItem.js.map +1 -1
  1057. package/dist/components/TextField/TextField.js.map +1 -1
  1058. package/dist/components/TextField/TextFieldWithWordLimit.js.map +1 -1
  1059. package/dist/components/TextToComponentCollapse.js.map +1 -1
  1060. package/dist/components/ThemeGallery/ThemeGallery.js.map +1 -1
  1061. package/dist/components/TimelinePlot/TimelineLegendItem.js.map +1 -1
  1062. package/dist/components/TimelinePlot/TimelinePhase.js.map +1 -1
  1063. package/dist/components/TimelinePlot/TimelinePlot.js.map +1 -1
  1064. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js.map +1 -1
  1065. package/dist/components/TimelinePlot/phasesQueryResponseData.js.map +1 -1
  1066. package/dist/components/ToastMessage/ToastMessage.js.map +1 -1
  1067. package/dist/components/TotalQueryResults.js.map +1 -1
  1068. package/dist/components/UserCard/Avatar.js.map +1 -1
  1069. package/dist/components/UserCard/UserBadge.js.map +1 -1
  1070. package/dist/components/UserCard/UserCard.js.map +1 -1
  1071. package/dist/components/UserCard/UserCardContextMenu.js.map +1 -1
  1072. package/dist/components/UserCard/UserCardLarge.js.map +1 -1
  1073. package/dist/components/UserCard/UserCardMedium.js.map +1 -1
  1074. package/dist/components/UserCardList/UserCardList.js.map +1 -1
  1075. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Desktop.js.map +1 -1
  1076. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Mobile.js.map +1 -1
  1077. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.js.map +1 -1
  1078. package/dist/components/UserCardList/UserCardListRotate.js.map +1 -1
  1079. package/dist/components/UserOrTeamBadge/UserOrTeamBadge.js.map +1 -1
  1080. package/dist/components/UserOrTeamBadge/useUserOrTeam.js.map +1 -1
  1081. package/dist/components/UserProfileLinks/UserChallenges.js.map +1 -1
  1082. package/dist/components/UserProfileLinks/UserProfileLinks.js.map +1 -1
  1083. package/dist/components/UserProfileLinks/UserProjects.js.map +1 -1
  1084. package/dist/components/UserProfileLinks/UserTeams.js.map +1 -1
  1085. package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -1
  1086. package/dist/components/Webhook/CreateWebhookModal.js.map +1 -1
  1087. package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
  1088. package/dist/components/Webhook/WebhookVerificationDialog.js.map +1 -1
  1089. package/dist/components/WikiMarkdownEditor/WikiMarkdownEditor.js.map +1 -1
  1090. package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js.map +1 -1
  1091. package/dist/components/WizardChoiceButton/WizardChoiceButton.js.map +1 -1
  1092. package/dist/components/WizardChoiceButton/WizardChoiceButtonDescription.js.map +1 -1
  1093. package/dist/components/WizardChoiceButton/WizardChoiceButtonGroup.js.map +1 -1
  1094. package/dist/components/WordPress/WordPressLatestPostChip.js.map +1 -1
  1095. package/dist/components/WordPress/useWordPressCategories.js.map +1 -1
  1096. package/dist/components/WordPress/useWordPressPosts.js.map +1 -1
  1097. package/dist/components/dataaccess/AccessApprovalsTable.js.map +1 -1
  1098. package/dist/components/dataaccess/AccessHistoryDashboard.js.map +1 -1
  1099. package/dist/components/dataaccess/AccessRequestSubmissionTable.js.map +1 -1
  1100. package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
  1101. package/dist/components/dataaccess/AccessRequirementSearchBox/AccessRequirementSearchBox.js.map +1 -1
  1102. package/dist/components/dataaccess/AccessRequirementTable.js.map +1 -1
  1103. package/dist/components/dataaccess/AccessSubmissionDashboard.js.map +1 -1
  1104. package/dist/components/dataaccess/RejectDataAccessRequestModal.js.map +1 -1
  1105. package/dist/components/dataaccess/RejectProfileValidationRequestModal.js.map +1 -1
  1106. package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
  1107. package/dist/components/dataaccess/SubmissionPage/ApproveSubmissionConfirmationModal.js.map +1 -1
  1108. package/dist/components/dataaccess/SubmissionPage/CancelDataAccessRequestConfirmationModal.js.map +1 -1
  1109. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js.map +1 -1
  1110. package/dist/components/dataaccess/UseAccessRequirementTable.js.map +1 -1
  1111. package/dist/components/dataaccess/UserAccessRequestHistory/SubmissionSortStateTranslator.js.map +1 -1
  1112. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js.map +1 -1
  1113. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js.map +1 -1
  1114. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.js.map +1 -1
  1115. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  1116. package/dist/components/doi/DoiFormSchemas.js.map +1 -1
  1117. package/dist/components/doi/PrivateEntityDoiWarning.js.map +1 -1
  1118. package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js.map +1 -1
  1119. package/dist/components/download_list/DownloadConfirmationUI.js +30 -32
  1120. package/dist/components/download_list/DownloadConfirmationUI.js.map +1 -1
  1121. package/dist/components/download_list/DownloadConfirmationUtils.js.map +1 -1
  1122. package/dist/components/download_list/DownloadDetails.js.map +1 -1
  1123. package/dist/components/download_list/index.js.map +1 -1
  1124. package/dist/components/entity/metadata/AnnotationsTable.js.map +1 -1
  1125. package/dist/components/entity/metadata/EntityAnnotationKey.js.map +1 -1
  1126. package/dist/components/entity/metadata/EntityModal.js.map +1 -1
  1127. package/dist/components/entity/metadata/MetadataTable.js.map +1 -1
  1128. package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
  1129. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  1130. package/dist/components/entity/page/breadcrumbs/EntityPageBreadcrumbs.js.map +1 -1
  1131. package/dist/components/entity/page/title_bar/CitationsDialog.js.map +1 -1
  1132. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js.map +1 -1
  1133. package/dist/components/entity/page/title_bar/EntityTitleBarVersionInfo.js.map +1 -1
  1134. package/dist/components/entity/page/title_bar/TitleBarProperties.js.map +1 -1
  1135. package/dist/components/entity/page/title_bar/useDataCiteUsage.js.map +1 -1
  1136. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
  1137. package/dist/components/entity/page/title_bar/useGetMentions.js.map +1 -1
  1138. package/dist/components/error/ErrorBanner.js.map +1 -1
  1139. package/dist/components/error/ErrorChip.js.map +1 -1
  1140. package/dist/components/error/ErrorPage.js +24 -24
  1141. package/dist/components/error/ErrorPage.js.map +1 -1
  1142. package/dist/components/error/RouteErrorBoundary.js.map +1 -1
  1143. package/dist/components/error/SendMessageToEntityOwnerDialog.js.map +1 -1
  1144. package/dist/components/error/SynapseObjectDOIInfo.js.map +1 -1
  1145. package/dist/components/favorites/FavoriteButton.js.map +1 -1
  1146. package/dist/components/favorites/FavoritesPage.js.map +1 -1
  1147. package/dist/components/file/upload/BasicFileHandleUpload.js.map +1 -1
  1148. package/dist/components/file/upload/MultiFileUploadProgress.js.map +1 -1
  1149. package/dist/components/file/upload/UploadFilePanel.js.map +1 -1
  1150. package/dist/components/form/RadioGroupWithOtherString.js.map +1 -1
  1151. package/dist/components/home_page/ExpandableContent.js.map +1 -1
  1152. package/dist/components/index.js +48 -47
  1153. package/dist/components/layout/InfiniteTableLayout.js.map +1 -1
  1154. package/dist/components/layout/SWCHeader.js.map +1 -1
  1155. package/dist/components/layout/SWCPageLayout.js.map +1 -1
  1156. package/dist/components/menu/ComplexMenu.js.map +1 -1
  1157. package/dist/components/menu/DropdownMenu.js.map +1 -1
  1158. package/dist/components/row_renderers/Dataset.js.map +1 -1
  1159. package/dist/components/row_renderers/Funder.js.map +1 -1
  1160. package/dist/components/row_renderers/ObservationCard.js.map +1 -1
  1161. package/dist/components/row_renderers/utils/CardFooter.js.map +1 -1
  1162. package/dist/components/row_renderers/utils/ChipContainer.js.map +1 -1
  1163. package/dist/components/styled/HoverPopover.js.map +1 -1
  1164. package/dist/components/styled/InlineBadge.js.map +1 -1
  1165. package/dist/components/styled/InputSizedButton.js.map +1 -1
  1166. package/dist/components/styled/LargeButton.js.map +1 -1
  1167. package/dist/components/styled/LeftRightPanel.js.map +1 -1
  1168. package/dist/components/styled/LightTooltip.js.map +1 -1
  1169. package/dist/components/styled/StyledFormControl.js.map +1 -1
  1170. package/dist/components/styled/StyledPopover.js.map +1 -1
  1171. package/dist/components/styled/StyledTableContainer.js.map +1 -1
  1172. package/dist/components/styled/WideButton.js.map +1 -1
  1173. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js +39 -42
  1174. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js.map +1 -1
  1175. package/dist/components/table/CsvPreview/CsvPreview.js.map +1 -1
  1176. package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
  1177. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js.map +1 -1
  1178. package/dist/components/table/CsvPreview/CsvUploadPreviewContent.js.map +1 -1
  1179. package/dist/components/table/CsvPreview/UpdateTableWithCsvDialog.js.map +1 -1
  1180. package/dist/components/table/CsvPreview/useCreateTableFromCsv.js.map +1 -1
  1181. package/dist/components/table/CsvPreview/useCsvUploadPreview.js +11 -11
  1182. package/dist/components/table/CsvPreview/useCsvUploadPreview.js.map +1 -1
  1183. package/dist/components/table/CsvPreview/useUploadCsvToExistingTable.js.map +1 -1
  1184. package/dist/components/table/CsvTableDescriptorForm/CsvTableDescriptorForm.js.map +1 -1
  1185. package/dist/components/trash/TrashCanList.js.map +1 -1
  1186. package/dist/components/utils/Blocker.js.map +1 -1
  1187. package/dist/components/utils/ConditionalWrapper.js.map +1 -1
  1188. package/dist/components/utils/VisibilityObserver.js.map +1 -1
  1189. package/dist/components/widgets/ElementWithTooltip.js.map +1 -1
  1190. package/dist/components/widgets/EntityColumnImage.js.map +1 -1
  1191. package/dist/components/widgets/FileHandleLink.js.map +1 -1
  1192. package/dist/components/widgets/ImageFileHandle.js.map +1 -1
  1193. package/dist/components/widgets/LoginAwareButton.js.map +1 -1
  1194. package/dist/components/widgets/Range.js.map +1 -1
  1195. package/dist/components/widgets/RangeSlider/RangeSlider.js.map +1 -1
  1196. package/dist/components/widgets/SynapseImage.js.map +1 -1
  1197. package/dist/components/widgets/SynapseVideo.js.map +1 -1
  1198. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  1199. package/dist/components/widgets/facet-nav/FacetPlotLegendList.js.map +1 -1
  1200. package/dist/components/widgets/facet-nav/FacetPlotLegendTable.js.map +1 -1
  1201. package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.js.map +1 -1
  1202. package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
  1203. package/dist/components/widgets/facet-nav/PlotsContainerSkeleton.js.map +1 -1
  1204. package/dist/components/widgets/facet-nav/SelectionCriteriaPill.js.map +1 -1
  1205. package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js.map +1 -1
  1206. package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
  1207. package/dist/components/widgets/query-filter/CombinedRangeFacetFilter.js.map +1 -1
  1208. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
  1209. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterDropdown.js.map +1 -1
  1210. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js.map +1 -1
  1211. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterSkeleton.js.map +1 -1
  1212. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js.map +1 -1
  1213. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.js.map +1 -1
  1214. package/dist/components/widgets/query-filter/FacetChip.js.map +1 -1
  1215. package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
  1216. package/dist/components/widgets/query-filter/FacetFilterHeader.js.map +1 -1
  1217. package/dist/components/widgets/query-filter/FacetFilterSkeleton.js.map +1 -1
  1218. package/dist/components/widgets/query-filter/FacetFilterUtils.js.map +1 -1
  1219. package/dist/components/widgets/query-filter/JsonColumnFacetFilters.js.map +1 -1
  1220. package/dist/components/widgets/query-filter/RangeFacetFilter.js +3 -3
  1221. package/dist/components/widgets/query-filter/RangeFacetFilter.js.map +1 -1
  1222. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js +41 -41
  1223. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js.map +1 -1
  1224. package/dist/features/curator/GridPage/GridPage.js.map +1 -1
  1225. package/dist/features/curator/GridPage/components/GridPageRouter.js.map +1 -1
  1226. package/dist/features/curator/GridPage/components/GridPageTitle.js.map +1 -1
  1227. package/dist/features/curator/GridPage/components/UpdateGridPageSearchParamsForm.js.map +1 -1
  1228. package/dist/features/curator/dashboard/CuratorDashboard.js.map +1 -1
  1229. package/dist/features/curator/dashboard/components/CurationTaskCard.js.map +1 -1
  1230. package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -1
  1231. package/dist/features/curator/dashboard/components/UserOrTeamChip.js.map +1 -1
  1232. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts +5 -0
  1233. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts.map +1 -1
  1234. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +227 -181
  1235. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
  1236. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts.map +1 -1
  1237. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +3 -0
  1238. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  1239. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
  1240. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
  1241. package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.js.map +1 -1
  1242. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js.map +1 -1
  1243. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.js.map +1 -1
  1244. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.d.ts.map +1 -1
  1245. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +1 -1
  1246. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js.map +1 -1
  1247. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js.map +1 -1
  1248. package/dist/features/entity/metadata-task/utils/constants.d.ts +5 -0
  1249. package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -1
  1250. package/dist/features/entity/metadata-task/utils/constants.js +2 -2
  1251. package/dist/features/entity/metadata-task/utils/constants.js.map +1 -1
  1252. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.js.map +1 -1
  1253. package/dist/features/entity/metadata-task/utils/getGridSourceIdForTask.js.map +1 -1
  1254. package/dist/features/entity/metadata-task/utils/getLatestGridSessionForSource.js.map +1 -1
  1255. package/dist/features/entity/metadata-task/utils/taskHasAssignee.js.map +1 -1
  1256. package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js.map +1 -1
  1257. package/dist/index.js +54 -53
  1258. package/dist/index.js.map +1 -1
  1259. package/dist/mocks/MockAccessApprovals.js.map +1 -1
  1260. package/dist/mocks/MockSynapseContext.js.map +1 -1
  1261. package/dist/mocks/accessRequirement/mockAccessRequirementAcls.js.map +1 -1
  1262. package/dist/mocks/accessRequirement/mockAccessRequirements.js.map +1 -1
  1263. package/dist/mocks/applicationSessionContext/MockApplicationSessionContext.js.map +1 -1
  1264. package/dist/mocks/challenge/mockChallenge.js.map +1 -1
  1265. package/dist/mocks/chat/mockChat.js.map +1 -1
  1266. package/dist/mocks/curation/mockCurationTask.js.map +1 -1
  1267. package/dist/mocks/dataaccess/MockDataAccessRequest.js.map +1 -1
  1268. package/dist/mocks/dataaccess/MockResearchProject.js.map +1 -1
  1269. package/dist/mocks/dataaccess/MockSubmission.js.map +1 -1
  1270. package/dist/mocks/dataaccess/mockAccessRequest.js.map +1 -1
  1271. package/dist/mocks/discussion/mock_discussion.js.map +1 -1
  1272. package/dist/mocks/doi/MockDoi.js.map +1 -1
  1273. package/dist/mocks/entity/index.js.map +1 -1
  1274. package/dist/mocks/entity/mockDataset.js.map +1 -1
  1275. package/dist/mocks/entity/mockDatasetCollection.js.map +1 -1
  1276. package/dist/mocks/entity/mockEntity.js.map +1 -1
  1277. package/dist/mocks/entity/mockEvaluationQueue.js.map +1 -1
  1278. package/dist/mocks/entity/mockFileEntity.js.map +1 -1
  1279. package/dist/mocks/entity/mockFileEntityACLVariants.js.map +1 -1
  1280. package/dist/mocks/entity/mockFileView.js.map +1 -1
  1281. package/dist/mocks/entity/mockGeneratedEntityData.js.map +1 -1
  1282. package/dist/mocks/entity/mockProject.js.map +1 -1
  1283. package/dist/mocks/entity/mockProjectView.js.map +1 -1
  1284. package/dist/mocks/entity/mockReleaseCardsTable.js.map +1 -1
  1285. package/dist/mocks/entity/mockRootEntity.js.map +1 -1
  1286. package/dist/mocks/entity/mockTableEntity.js.map +1 -1
  1287. package/dist/mocks/faker/fakerUtils.js.map +1 -1
  1288. package/dist/mocks/faker/generateDiscussion.js.map +1 -1
  1289. package/dist/mocks/faker/generateEvaluation.js.map +1 -1
  1290. package/dist/mocks/faker/generateFakeEntity.js.map +1 -1
  1291. package/dist/mocks/faker/generateSubscription.js.map +1 -1
  1292. package/dist/mocks/mockAnnotationColumns.js.map +1 -1
  1293. package/dist/mocks/mockCertificationQuiz.js.map +1 -1
  1294. package/dist/mocks/mockDataCatalogQuery.js.map +1 -1
  1295. package/dist/mocks/mockFileViewQuery.js.map +1 -1
  1296. package/dist/mocks/mockOAuthClientAcls.js.map +1 -1
  1297. package/dist/mocks/mockQueryResponseData.js.map +1 -1
  1298. package/dist/mocks/mockQueryResponseDataWithManyEnumFacets.js.map +1 -1
  1299. package/dist/mocks/mockSchema.js.map +1 -1
  1300. package/dist/mocks/mockSearchQueryData.js +2 -2
  1301. package/dist/mocks/mockSearchQueryData.js.map +1 -1
  1302. package/dist/mocks/mockShortIo.js.map +1 -1
  1303. package/dist/mocks/mockSourceAppConfigQuery.js.map +1 -1
  1304. package/dist/mocks/mockSubscription.js.map +1 -1
  1305. package/dist/mocks/mockWiki.js.map +1 -1
  1306. package/dist/mocks/mockWikiPageKey.js.map +1 -1
  1307. package/dist/mocks/mock_drug_tool_data.js.map +1 -1
  1308. package/dist/mocks/mock_file_handle.js.map +1 -1
  1309. package/dist/mocks/mock_file_statistics.js.map +1 -1
  1310. package/dist/mocks/mock_has_access_data.js.map +1 -1
  1311. package/dist/mocks/mock_upload_destination.js.map +1 -1
  1312. package/dist/mocks/msw/handlers/accessRequirementAclHandlers.js.map +1 -1
  1313. package/dist/mocks/msw/handlers/accessRequirementHandlers.js.map +1 -1
  1314. package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
  1315. package/dist/mocks/msw/handlers/authHandlers.js.map +1 -1
  1316. package/dist/mocks/msw/handlers/challengeHandlers.js.map +1 -1
  1317. package/dist/mocks/msw/handlers/changePasswordHandlers.js.map +1 -1
  1318. package/dist/mocks/msw/handlers/chatHandlers.js.map +1 -1
  1319. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js.map +1 -1
  1320. package/dist/mocks/msw/handlers/dataciteHandlers.js.map +1 -1
  1321. package/dist/mocks/msw/handlers/discussionHandlers.js.map +1 -1
  1322. package/dist/mocks/msw/handlers/doiHandlers.js.map +1 -1
  1323. package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
  1324. package/dist/mocks/msw/handlers/evaluationHandlers.js.map +1 -1
  1325. package/dist/mocks/msw/handlers/featureFlagHandlers.js.map +1 -1
  1326. package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
  1327. package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
  1328. package/dist/mocks/msw/handlers/messageHandlers.js.map +1 -1
  1329. package/dist/mocks/msw/handlers/oauthClientAclHandlers.js.map +1 -1
  1330. package/dist/mocks/msw/handlers/personalAccessTokenHandlers.js.map +1 -1
  1331. package/dist/mocks/msw/handlers/projectStorageHandlers.js.map +1 -1
  1332. package/dist/mocks/msw/handlers/realmHandlers.js.map +1 -1
  1333. package/dist/mocks/msw/handlers/researchProjectHandlers.js.map +1 -1
  1334. package/dist/mocks/msw/handlers/resetTwoFactorAuthHandlers.js.map +1 -1
  1335. package/dist/mocks/msw/handlers/schemaHandlers.js.map +1 -1
  1336. package/dist/mocks/msw/handlers/searchQueryHandlers.d.ts +1 -1
  1337. package/dist/mocks/msw/handlers/searchQueryHandlers.d.ts.map +1 -1
  1338. package/dist/mocks/msw/handlers/searchQueryHandlers.js +6 -3
  1339. package/dist/mocks/msw/handlers/searchQueryHandlers.js.map +1 -1
  1340. package/dist/mocks/msw/handlers/shortIoHandlers.js.map +1 -1
  1341. package/dist/mocks/msw/handlers/subscriptionHandlers.js.map +1 -1
  1342. package/dist/mocks/msw/handlers/tableQueryHandlers.js.map +1 -1
  1343. package/dist/mocks/msw/handlers/tableQueryService.js.map +1 -1
  1344. package/dist/mocks/msw/handlers/teamHandlers.js.map +1 -1
  1345. package/dist/mocks/msw/handlers/termsOfServiceHandlers.js.map +1 -1
  1346. package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
  1347. package/dist/mocks/msw/handlers/webhookHandlers.js.map +1 -1
  1348. package/dist/mocks/msw/handlers/wikiHandlers.js.map +1 -1
  1349. package/dist/mocks/msw/handlers.js.map +1 -1
  1350. package/dist/mocks/msw/server.d.ts +1 -1
  1351. package/dist/mocks/msw/server.d.ts.map +1 -1
  1352. package/dist/mocks/msw/server.js.map +1 -1
  1353. package/dist/mocks/msw/util/BasicMockedCrudService.js.map +1 -1
  1354. package/dist/mocks/oauth/MockClient.js.map +1 -1
  1355. package/dist/mocks/personalAccessToken/mockPersonalAccessToken.js.map +1 -1
  1356. package/dist/mocks/projectStorage/mockProjectStorageLimits.js.map +1 -1
  1357. package/dist/mocks/provenance/mockActivity.js.map +1 -1
  1358. package/dist/mocks/query/defaultFileViewColumnModels.js.map +1 -1
  1359. package/dist/mocks/query/mockFeaturedDataTabsQueryData.js.map +1 -1
  1360. package/dist/mocks/query/mockHomepageQueryResultData.js.map +1 -1
  1361. package/dist/mocks/query/mockProjectViewQueryResults.js.map +1 -1
  1362. package/dist/mocks/query/mockRejectionReasonsTableQueryResultBundle.js.map +1 -1
  1363. package/dist/mocks/query/mockReleaseCardsTableQueryResultBundle.js.map +1 -1
  1364. package/dist/mocks/query/mockUserCardTableQueryResultBundle.d.ts +13 -0
  1365. package/dist/mocks/query/mockUserCardTableQueryResultBundle.d.ts.map +1 -1
  1366. package/dist/mocks/query/mockUserCardTableQueryResultBundle.js +27 -0
  1367. package/dist/mocks/query/mockUserCardTableQueryResultBundle.js.map +1 -1
  1368. package/dist/mocks/query/mock_query_data.js.map +1 -1
  1369. package/dist/mocks/query/syn16787123.js.map +1 -1
  1370. package/dist/mocks/query/syn17328596.js.map +1 -1
  1371. package/dist/mocks/query/syn51735464.js.map +1 -1
  1372. package/dist/mocks/query/syn51735464GroupBySpecies.js.map +1 -1
  1373. package/dist/mocks/realm/mockRealmPrincipal.js.map +1 -1
  1374. package/dist/mocks/team/mockTeam.js.map +1 -1
  1375. package/dist/mocks/termsOfService/mockTermsOfService.js.map +1 -1
  1376. package/dist/mocks/user/mock_user_profile.js.map +1 -1
  1377. package/dist/mocks/usergroup/mockUserGroup.js.map +1 -1
  1378. package/dist/ror-client/index.js.map +1 -1
  1379. package/dist/stories/ColorPaletteInspector.js.map +1 -1
  1380. package/dist/stories/ToastDemo.js.map +1 -1
  1381. package/dist/stories/stubs/Alert/MuiAlert.js.map +1 -1
  1382. package/dist/stories/stubs/Button/MuiButton.js.map +1 -1
  1383. package/dist/stories/stubs/Dialog/MuiDialog.js.map +1 -1
  1384. package/dist/stories/stubs/TextField/MuiTextField.js.map +1 -1
  1385. package/dist/stories/stubs/Tooltip/MuiTooltip.js.map +1 -1
  1386. package/dist/style/components/_cards.scss +10 -0
  1387. package/dist/style/components/_data-grid-extra.css +1 -1
  1388. package/dist/style/components/_data-grid-extra.scss +7 -1
  1389. package/dist/style/main.css +1 -1
  1390. package/dist/synapse-client/HttpClient.js.map +1 -1
  1391. package/dist/synapse-client/SynapseClient.d.ts.map +1 -1
  1392. package/dist/synapse-client/SynapseClient.js +499 -505
  1393. package/dist/synapse-client/SynapseClient.js.map +1 -1
  1394. package/dist/synapse-client/SynapseClientUtils.js.map +1 -1
  1395. package/dist/synapse-queries/InfiniteQueryUtils.js.map +1 -1
  1396. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  1397. package/dist/synapse-queries/QueryFilterUtils.js.map +1 -1
  1398. package/dist/synapse-queries/QueryMatching.test-utils.js.map +1 -1
  1399. package/dist/synapse-queries/asynchronous/usePollAsynchronousJob.js.map +1 -1
  1400. package/dist/synapse-queries/auth/useChangePassword.js.map +1 -1
  1401. package/dist/synapse-queries/auth/useOIDC.js.map +1 -1
  1402. package/dist/synapse-queries/auth/useResetPassword.js.map +1 -1
  1403. package/dist/synapse-queries/auth/useTwoFactorEnrollment.js.map +1 -1
  1404. package/dist/synapse-queries/challenge/useChallenge.js.map +1 -1
  1405. package/dist/synapse-queries/chat/useChat.js.map +1 -1
  1406. package/dist/synapse-queries/croissant/useGetCroissantUrl.js.map +1 -1
  1407. package/dist/synapse-queries/curation/task/useCurationTask.d.ts +1 -0
  1408. package/dist/synapse-queries/curation/task/useCurationTask.d.ts.map +1 -1
  1409. package/dist/synapse-queries/curation/task/useCurationTask.js +12 -2
  1410. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  1411. package/dist/synapse-queries/dataaccess/useAccessApprovals.js.map +1 -1
  1412. package/dist/synapse-queries/dataaccess/useAccessRequirements.js.map +1 -1
  1413. package/dist/synapse-queries/dataaccess/useDataAccessSubmission.js.map +1 -1
  1414. package/dist/synapse-queries/dataaccess/useGetApprovedSubmissionInfo.js.map +1 -1
  1415. package/dist/synapse-queries/dataaccess/useRestrictionInformation.js.map +1 -1
  1416. package/dist/synapse-queries/docker/useGetDockerTag.js.map +1 -1
  1417. package/dist/synapse-queries/doi/useDOI.js.map +1 -1
  1418. package/dist/synapse-queries/download/useDownloadList.js.map +1 -1
  1419. package/dist/synapse-queries/entity/useActionsRequiredForTableQuery.js.map +1 -1
  1420. package/dist/synapse-queries/entity/useEntity.js.map +1 -1
  1421. package/dist/synapse-queries/entity/useEntityBoundSchema.js.map +1 -1
  1422. package/dist/synapse-queries/entity/useEntityBundle.js.map +1 -1
  1423. package/dist/synapse-queries/entity/useExportTableQueryToAnalysisPlatform.js.map +1 -1
  1424. package/dist/synapse-queries/entity/useExportToADWorkbench.js.map +1 -1
  1425. package/dist/synapse-queries/entity/useExportToCavatica.js.map +1 -1
  1426. package/dist/synapse-queries/entity/useExportToPluto.js.map +1 -1
  1427. package/dist/synapse-queries/entity/useExportToTerra.js.map +1 -1
  1428. package/dist/synapse-queries/entity/useGetEntityActionsRequired.js.map +1 -1
  1429. package/dist/synapse-queries/entity/useGetEntityChallenge.js.map +1 -1
  1430. package/dist/synapse-queries/entity/useGetEntityChildren.js.map +1 -1
  1431. package/dist/synapse-queries/entity/useGetEntityForum.js.map +1 -1
  1432. package/dist/synapse-queries/entity/useGetEntityHeaders.js.map +1 -1
  1433. package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
  1434. package/dist/synapse-queries/entity/useProjectStorage.js.map +1 -1
  1435. package/dist/synapse-queries/entity/useSchema.js.map +1 -1
  1436. package/dist/synapse-queries/evaluation/useEvaluation.js.map +1 -1
  1437. package/dist/synapse-queries/featureflags/useGetFeatureFlag.js.map +1 -1
  1438. package/dist/synapse-queries/file/UploadToS3.js.map +1 -1
  1439. package/dist/synapse-queries/file/useDirectUploadToS3.js.map +1 -1
  1440. package/dist/synapse-queries/file/useFileHandle.js.map +1 -1
  1441. package/dist/synapse-queries/file/useFiles.js.map +1 -1
  1442. package/dist/synapse-queries/file/useSynapseMultipartUpload.js.map +1 -1
  1443. package/dist/synapse-queries/file/useUploadDestination.js.map +1 -1
  1444. package/dist/synapse-queries/forum/useForum.js.map +1 -1
  1445. package/dist/synapse-queries/forum/useReply.js.map +1 -1
  1446. package/dist/synapse-queries/forum/useThread.js.map +1 -1
  1447. package/dist/synapse-queries/github/useGithub.js.map +1 -1
  1448. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
  1449. package/dist/synapse-queries/grid/useExportGrid.js.map +1 -1
  1450. package/dist/synapse-queries/grid/useGridPresignedUrl.js.map +1 -1
  1451. package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
  1452. package/dist/synapse-queries/grid/useImportCsvIntoGrid.js.map +1 -1
  1453. package/dist/synapse-queries/message/useMessage.js.map +1 -1
  1454. package/dist/synapse-queries/oauth/useOAuthClient.js.map +1 -1
  1455. package/dist/synapse-queries/portal/useListPortals.js.map +1 -1
  1456. package/dist/synapse-queries/portal/usePortal.js.map +1 -1
  1457. package/dist/synapse-queries/provenance/useGetActivityForEntity.js.map +1 -1
  1458. package/dist/synapse-queries/realm/useRealmPrincipals.js.map +1 -1
  1459. package/dist/synapse-queries/ror/index.js.map +1 -1
  1460. package/dist/synapse-queries/search/useSearch.js.map +1 -1
  1461. package/dist/synapse-queries/search/useSuggestion.js.map +1 -1
  1462. package/dist/synapse-queries/subscription/useSubscription.js.map +1 -1
  1463. package/dist/synapse-queries/table/useColumnModel.js.map +1 -1
  1464. package/dist/synapse-queries/table/useDefiningSql.js.map +1 -1
  1465. package/dist/synapse-queries/table/useDownloadTable.js.map +1 -1
  1466. package/dist/synapse-queries/table/useGetCsvPreview.js.map +1 -1
  1467. package/dist/synapse-queries/table/useTableUpdateTransaction.js.map +1 -1
  1468. package/dist/synapse-queries/team/useTeam.js.map +1 -1
  1469. package/dist/synapse-queries/team/useTeamList.js.map +1 -1
  1470. package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
  1471. package/dist/synapse-queries/termsOfService/useTermsOfService.js.map +1 -1
  1472. package/dist/synapse-queries/trash/useTrashCan.js.map +1 -1
  1473. package/dist/synapse-queries/user/useCertificationQuiz.js.map +1 -1
  1474. package/dist/synapse-queries/user/useFavorites.js.map +1 -1
  1475. package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
  1476. package/dist/synapse-queries/user/useGetUserProjects.js.map +1 -1
  1477. package/dist/synapse-queries/user/useGetUserTeams.js.map +1 -1
  1478. package/dist/synapse-queries/user/usePersonalAccessToken.js.map +1 -1
  1479. package/dist/synapse-queries/user/useProjects.js.map +1 -1
  1480. package/dist/synapse-queries/user/useRevokeCertification.js.map +1 -1
  1481. package/dist/synapse-queries/user/useUserBundle.js.map +1 -1
  1482. package/dist/synapse-queries/user/useUserGroupHeader.js.map +1 -1
  1483. package/dist/synapse-queries/verificationSubmission/useVerificationSubmission.js.map +1 -1
  1484. package/dist/synapse-queries/webhook/useWebhook.js.map +1 -1
  1485. package/dist/synapse-queries/wiki/useWiki.js.map +1 -1
  1486. package/dist/testutils/ComponentToBePassedPropsCustomMatcher.js.map +1 -1
  1487. package/dist/testutils/IsEditingStoreTestUtils.js +17 -0
  1488. package/dist/testutils/IsEditingStoreTestUtils.js.map +1 -0
  1489. package/dist/testutils/LocationTracker.js.map +1 -1
  1490. package/dist/testutils/MarkdownSynapseUtils.js.map +1 -1
  1491. package/dist/testutils/ReactQueryMockUtils.js.map +1 -1
  1492. package/dist/testutils/TestingLibraryUtils.js +18 -16
  1493. package/dist/testutils/TestingLibraryUtils.js.map +1 -1
  1494. package/dist/testutils/muiDatePickerMock.js.map +1 -1
  1495. package/dist/testutils/vitest.setup.js.map +1 -1
  1496. package/dist/theme/DefaultTheme.js.map +1 -1
  1497. package/dist/theme/ThemeProvider.js.map +1 -1
  1498. package/dist/theme/mergeTheme.js.map +1 -1
  1499. package/dist/theme/palette/Palettes.js.map +1 -1
  1500. package/dist/theme/spreadSx.js.map +1 -1
  1501. package/dist/theme/typography/Link.js.map +1 -1
  1502. package/dist/theme/typography/Typography.js.map +1 -1
  1503. package/dist/tsconfig.build.tsbuildinfo +1 -1
  1504. package/dist/utils/APIConstants.js.map +1 -1
  1505. package/dist/utils/AppUtils/AppUtils.d.ts.map +1 -1
  1506. package/dist/utils/AppUtils/AppUtils.js +11 -11
  1507. package/dist/utils/AppUtils/AppUtils.js.map +1 -1
  1508. package/dist/utils/AppUtils/session/ApplicationSessionContext.js.map +1 -1
  1509. package/dist/utils/AppUtils/session/ApplicationSessionManager.js.map +1 -1
  1510. package/dist/utils/AppUtils/session/AuthenticationGuard.js.map +1 -1
  1511. package/dist/utils/AppUtils/session/SessionInitializedGuard.js.map +1 -1
  1512. package/dist/utils/AppUtils/session/SynapseSessionManager.js.map +1 -1
  1513. package/dist/utils/AppUtils/session/useSessionManager.js.map +1 -1
  1514. package/dist/utils/ContentTypeUtils.js.map +1 -1
  1515. package/dist/utils/OrientationBannerConstants.js.map +1 -1
  1516. package/dist/utils/PermissionLevelToAccessType.js.map +1 -1
  1517. package/dist/utils/SynapseConstants.js.map +1 -1
  1518. package/dist/utils/analytics/sendAnalyticsEvent.js.map +1 -1
  1519. package/dist/utils/analytics/sendSearchEvent.js.map +1 -1
  1520. package/dist/utils/analytics/useGoogleAnalytics.js.map +1 -1
  1521. package/dist/utils/appendFinalQueryParamKey.js.map +1 -1
  1522. package/dist/utils/challenge/evaluation/EvaluationUtils.js.map +1 -1
  1523. package/dist/utils/context/AridhiaContext.js.map +1 -1
  1524. package/dist/utils/context/DocumentMetadataContext.js.map +1 -1
  1525. package/dist/utils/context/FullContextProvider.js.map +1 -1
  1526. package/dist/utils/context/GlobalIsEditingContext.js.map +1 -1
  1527. package/dist/utils/context/SynapseContext.js.map +1 -1
  1528. package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
  1529. package/dist/utils/functions/AccessControlListUtils.js.map +1 -1
  1530. package/dist/utils/functions/ArrayUtils.js.map +1 -1
  1531. package/dist/utils/functions/DateFormatter.js.map +1 -1
  1532. package/dist/utils/functions/DateTimeUtils.js.map +1 -1
  1533. package/dist/utils/functions/EntityTypeUtils.js.map +1 -1
  1534. package/dist/utils/functions/FileHandleUtils.js.map +1 -1
  1535. package/dist/utils/functions/GridApiUtils.js.map +1 -1
  1536. package/dist/utils/functions/IsEqualTreatUndefinedAsMissing.js.map +1 -1
  1537. package/dist/utils/functions/IsExternalLink.js.map +1 -1
  1538. package/dist/utils/functions/ObjectUtils.js.map +1 -1
  1539. package/dist/utils/functions/QueryFilterUtils.js.map +1 -1
  1540. package/dist/utils/functions/RealmUtils.js.map +1 -1
  1541. package/dist/utils/functions/RegularExpressions.js.map +1 -1
  1542. package/dist/utils/functions/ResolveLinkEntity.js.map +1 -1
  1543. package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
  1544. package/dist/utils/functions/SanitizeHtmlUtils.test-utils.js.map +1 -1
  1545. package/dist/utils/functions/SqlFunctions.js.map +1 -1
  1546. package/dist/utils/functions/StringUtils.js.map +1 -1
  1547. package/dist/utils/functions/TableColumnSchemaUtils.js.map +1 -1
  1548. package/dist/utils/functions/calculateFriendlyFileSize.js.map +1 -1
  1549. package/dist/utils/functions/colorPalette.js.map +1 -1
  1550. package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
  1551. package/dist/utils/functions/dispatchDownloadListChangeEvent.js.map +1 -1
  1552. package/dist/utils/functions/generateCsrfToken.js.map +1 -1
  1553. package/dist/utils/functions/getDataFromFromStorage.js.map +1 -1
  1554. package/dist/utils/functions/getEndpoint.js +3 -3
  1555. package/dist/utils/functions/getEndpoint.js.map +1 -1
  1556. package/dist/utils/functions/getPrincipalDisplayName.js.map +1 -1
  1557. package/dist/utils/functions/getSynapseEntityUrl.js.map +1 -1
  1558. package/dist/utils/functions/getSynapseWebClientLink.js.map +1 -1
  1559. package/dist/utils/functions/getUserData.js.map +1 -1
  1560. package/dist/utils/functions/queryUtils.js.map +1 -1
  1561. package/dist/utils/functions/testDownloadSpeed.js.map +1 -1
  1562. package/dist/utils/functions/unCamelCase.js.map +1 -1
  1563. package/dist/utils/hooks/useConfirmItems.js.map +1 -1
  1564. package/dist/utils/hooks/useCookiePreferences.d.ts.map +1 -1
  1565. package/dist/utils/hooks/useCookiePreferences.js +24 -23
  1566. package/dist/utils/hooks/useCookiePreferences.js.map +1 -1
  1567. package/dist/utils/hooks/useCreateShortUrl.js.map +1 -1
  1568. package/dist/utils/hooks/useDebouncedEffect.js.map +1 -1
  1569. package/dist/utils/hooks/useDetectSSOCode.js.map +1 -1
  1570. package/dist/utils/hooks/useDirectDownloadHandler.js.map +1 -1
  1571. package/dist/utils/hooks/useGetEntityMetadata.js.map +1 -1
  1572. package/dist/utils/hooks/useGetGoalData.js +2 -4
  1573. package/dist/utils/hooks/useGetGoalData.js.map +1 -1
  1574. package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
  1575. package/dist/utils/hooks/useGetIsAllSelectedInfiniteList.js.map +1 -1
  1576. package/dist/utils/hooks/useImageUrlUtils.js.map +1 -1
  1577. package/dist/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.js.map +1 -1
  1578. package/dist/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.js.map +1 -1
  1579. package/dist/utils/hooks/useImmutableTableQuery/useTableQueryReducer.js.map +1 -1
  1580. package/dist/utils/hooks/useIsBot.js.map +1 -1
  1581. package/dist/utils/hooks/useJsonLdScriptElement.js.map +1 -1
  1582. package/dist/utils/hooks/useListState.js.map +1 -1
  1583. package/dist/utils/hooks/useLogin.js.map +1 -1
  1584. package/dist/utils/hooks/useMediaPrintOnly.js.map +1 -1
  1585. package/dist/utils/hooks/useMutuallyExclusiveState.js.map +1 -1
  1586. package/dist/utils/hooks/useNativeSearchParams.js.map +1 -1
  1587. package/dist/utils/hooks/useOneSageURL.js.map +1 -1
  1588. package/dist/utils/hooks/useOverlay.js.map +1 -1
  1589. package/dist/utils/hooks/usePreFetchResource.js.map +1 -1
  1590. package/dist/utils/hooks/useQuerySearchParam.js.map +1 -1
  1591. package/dist/utils/hooks/useScrollFadeTransition.js.map +1 -1
  1592. package/dist/utils/hooks/useSet.js.map +1 -1
  1593. package/dist/utils/hooks/useShowDesktop.js.map +1 -1
  1594. package/dist/utils/hooks/useSourceAppConfigs.js.map +1 -1
  1595. package/dist/utils/hooks/useTableImageUrl.js.map +1 -1
  1596. package/dist/utils/hooks/useTraceUpdate.js.map +1 -1
  1597. package/dist/utils/hooks/useTrackTransientListItems.js.map +1 -1
  1598. package/dist/utils/hooks/useUploadFileEntity/getActiveUploadCount.js.map +1 -1
  1599. package/dist/utils/hooks/useUploadFileEntity/getFileEntityIdWithSameName.js.map +1 -1
  1600. package/dist/utils/hooks/useUploadFileEntity/useCreateFolderPath.js.map +1 -1
  1601. package/dist/utils/hooks/useUploadFileEntity/useCreatePathsAndGetParentId.js.map +1 -1
  1602. package/dist/utils/hooks/useUploadFileEntity/useLinkFileEntityToURL.js.map +1 -1
  1603. package/dist/utils/hooks/useUploadFileEntity/usePrepareFileEntityUpload.js.map +1 -1
  1604. package/dist/utils/hooks/useUploadFileEntity/useTrackFileUploads.js.map +1 -1
  1605. package/dist/utils/hooks/useUploadFileEntity/useUploadFileEntities.js.map +1 -1
  1606. package/dist/utils/hooks/useUploadFileEntity/useUploadFiles.js.map +1 -1
  1607. package/dist/utils/hooks/useUploadFileEntity/willUploadsExceedStorageLimit.js.map +1 -1
  1608. package/dist/utils/html/TargetEnum.js.map +1 -1
  1609. package/dist/utils/jsonschema/SchemaAnnotationUtils.js.map +1 -1
  1610. package/dist/utils/jsonschema/getEnumeratedValues.js.map +1 -1
  1611. package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.js.map +1 -1
  1612. package/dist/utils/jsonschema/getRequiredAttributes.js.map +1 -1
  1613. package/dist/utils/jsonschema/getSchemaForProperty.js.map +1 -1
  1614. package/dist/utils/jsonschema/getSchemaPropertyInfo.js.map +1 -1
  1615. package/dist/utils/jsonschema/getType.js.map +1 -1
  1616. package/dist/utils/searchDefaults.js.map +1 -1
  1617. package/dist/utils/slots/SlotUtils.js.map +1 -1
  1618. package/dist/utils/types/IsType.js.map +1 -1
  1619. package/package.json +68 -65
@@ -1 +1 @@
1
- {"version":3,"file":"useColumnResizeHandles.js","names":["useEffect","useRef","Column","useResizeObserver","ResizeHandleElement","HTMLDivElement","__cellElement","HTMLElement","__columnName","UseColumnResizeHandlesProps","wrapperRef","React","RefObject","colValues","onColumnResize","columnName","newWidth","ResizeState","startX","startWidth","handle","initialLeft","ColumnResizeManager","COLUMN_MIN_WIDTH_PX","handlesMap","Map","cleanupFunctions","Array","activeResize","gridContainer","headerRow","Element","observer","MutationObserver","constructor","name","width","updateColumns","syncHandles","initialize","querySelector","setupEventListeners","createNewHandle","Error","document","createElement","className","dataset","style","position","top","cursor","pointerEvents","zIndex","onMouseDown","e","MouseEvent","handleMouseDown","addEventListener","push","removeEventListener","appendChild","set","createOrUpdateHandle","cellElement","columnIndex","id","get","updateHandlePosition","gridHeight","scrollHeight","left","offsetLeft","offsetWidth","height","display","preventDefault","stopPropagation","currentColumnName","currentCellElement","currentLeft","parseFloat","clientX","classList","add","body","handleMouseMove","deltaX","handleMouseUp","Math","max","remove","headerCells","querySelectorAll","length","visibleColumns","Set","forEach","cell","index","cellText","textContent","trim","actualColumnIndex","findIndex","col","has","requestAnimationFrame","observe","childList","subtree","disconnect","cleanup","item","clear","useColumnResizeHandles","t0","$","_c","managerRef","t1","entry","current","contentRect","manager","success","t2","t3","t4","t5","Symbol","for"],"sources":["../../../../src/components/DataGrid/hooks/useColumnResizeHandles.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { Column } from '@sage-bionetworks/react-datasheet-grid'\nimport { useResizeObserver } from '@react-hookz/web'\n\n// Extended HTMLDivElement with custom properties for resize handles\ninterface ResizeHandleElement extends HTMLDivElement {\n __cellElement?: HTMLElement\n __columnName?: string\n}\n\ntype UseColumnResizeHandlesProps = {\n wrapperRef: React.RefObject<HTMLDivElement | null>\n colValues: Column[]\n onColumnResize: (columnName: string, newWidth: number) => void\n}\n\ninterface ResizeState {\n columnName: string\n startX: number\n startWidth: number\n handle: HTMLDivElement\n initialLeft: number\n}\n\n/**\n * Encapsulates all column resize handle logic and state management.\n * Manages handle creation, positioning, mouse interactions, and cleanup.\n */\nclass ColumnResizeManager {\n private static readonly COLUMN_MIN_WIDTH_PX = 50\n\n private handlesMap = new Map<string, ResizeHandleElement>()\n private cleanupFunctions: Array<(() => void) | HTMLDivElement> = []\n private activeResize: ResizeState | null = null\n private gridContainer: HTMLElement | null = null\n private headerRow: Element | null = null\n private observer: MutationObserver | null = null\n\n constructor(\n private colValues: Column[],\n private onColumnResize: (name: string, width: number) => void,\n ) {}\n\n /**\n * Update the column values and callback without reinitializing.\n */\n updateColumns(\n colValues: Column[],\n onColumnResize: (name: string, width: number) => void,\n ): void {\n this.colValues = colValues\n this.onColumnResize = onColumnResize\n // Resync handles with new column data\n this.syncHandles()\n }\n\n /**\n * Initialize the manager by finding grid elements and setting up event listeners.\n * Returns true if initialization was successful, false otherwise.\n */\n initialize(wrapperRef: HTMLDivElement): boolean {\n const gridContainer = wrapperRef.querySelector(\n '.dsg-container',\n ) as HTMLElement\n\n if (!gridContainer) {\n return false\n }\n\n const headerRow = gridContainer.querySelector('.dsg-row.dsg-row-header')\n\n if (!headerRow) {\n return false\n }\n\n this.gridContainer = gridContainer\n this.headerRow = headerRow\n\n this.setupEventListeners()\n this.syncHandles()\n\n return true\n }\n\n /**\n * Creates a new resize handle element with mousedown listener.\n */\n private createNewHandle(columnName: string): ResizeHandleElement {\n if (!this.gridContainer) {\n throw new Error('Cannot create handle without grid container')\n }\n\n const handle = document.createElement('div') as ResizeHandleElement\n handle.className = 'column-resize-handle'\n handle.dataset.columnName = columnName\n handle.style.position = 'absolute'\n handle.style.top = '0'\n handle.style.width = '8px'\n handle.style.cursor = 'col-resize'\n handle.style.pointerEvents = 'auto'\n handle.style.zIndex = '1000'\n\n const onMouseDown = (e: MouseEvent) => this.handleMouseDown(e, handle)\n handle.addEventListener('mousedown', onMouseDown)\n\n this.cleanupFunctions.push(() =>\n handle.removeEventListener('mousedown', onMouseDown),\n )\n\n this.gridContainer.appendChild(handle)\n this.cleanupFunctions.push(handle)\n this.handlesMap.set(columnName, handle)\n\n return handle\n }\n\n /**\n * Creates or updates a handle for a given cell element.\n */\n private createOrUpdateHandle(\n cellElement: HTMLElement,\n columnIndex: number,\n ): void {\n const columnName = this.colValues[columnIndex]?.id as string\n if (!columnName || !this.gridContainer) return\n\n let handle = this.handlesMap.get(columnName)\n\n if (!handle) {\n handle = this.createNewHandle(columnName)\n }\n\n this.updateHandlePosition(handle, cellElement)\n }\n\n /**\n * Updates the position and size of a handle based on its cell element.\n */\n private updateHandlePosition(\n handle: ResizeHandleElement,\n cellElement: HTMLElement,\n ): void {\n if (!this.gridContainer) return\n\n const gridHeight = this.gridContainer.scrollHeight\n const left = cellElement.offsetLeft + cellElement.offsetWidth - 3\n\n handle.__cellElement = cellElement\n handle.__columnName = handle.dataset.columnName\n handle.style.left = `${left}px`\n handle.style.height = `${gridHeight}px`\n handle.style.display = '' // Ensure visible\n }\n\n /**\n * Handles mousedown event on a resize handle to initiate dragging.\n */\n private handleMouseDown(e: MouseEvent, handle: ResizeHandleElement): void {\n e.preventDefault()\n e.stopPropagation()\n\n // Read the column info fresh at mousedown time\n const currentColumnName = handle.__columnName\n const currentCellElement = handle.__cellElement\n\n if (!currentColumnName || !currentCellElement) return\n\n // Get current width and position at the time of mousedown\n const currentLeft = parseFloat(handle.style.left)\n\n this.activeResize = {\n columnName: currentColumnName,\n startX: e.clientX,\n startWidth: currentCellElement.offsetWidth,\n handle,\n initialLeft: currentLeft,\n }\n\n handle.classList.add('is-resizing')\n document.body.classList.add('col-resizing')\n }\n\n /**\n * Handles mousemove event to update handle position during drag.\n */\n private handleMouseMove = (e: MouseEvent): void => {\n if (!this.activeResize) return\n\n const { startX, handle, initialLeft } = this.activeResize\n const deltaX = e.clientX - startX\n handle.style.left = `${initialLeft + deltaX}px`\n }\n\n /**\n * Handles mouseup/mouseleave to finalize the resize operation.\n */\n private handleMouseUp = (e: MouseEvent): void => {\n if (!this.activeResize) return\n\n const { columnName, startX, startWidth, handle } = this.activeResize\n const deltaX = e.clientX - startX\n const newWidth = Math.max(\n ColumnResizeManager.COLUMN_MIN_WIDTH_PX,\n startWidth + deltaX,\n )\n\n handle.classList.remove('is-resizing')\n document.body.classList.remove('col-resizing')\n this.activeResize = null\n\n // Only update state when drag is complete\n this.onColumnResize(columnName, newWidth)\n }\n\n /**\n * Synchronizes handles with currently visible columns in the header.\n * Handles virtualization by showing/hiding handles as columns appear/disappear.\n */\n private syncHandles = (): void => {\n if (this.activeResize || !this.headerRow) return // Don't sync during resize\n\n const headerCells = this.headerRow.querySelectorAll('.dsg-cell')\n if (headerCells.length <= 1) return\n\n // Track which columns are currently visible\n const visibleColumns = new Set<string>()\n\n // Update or create handles for visible columns\n headerCells.forEach((cell: Element, index: number) => {\n if (index === 0) return // Skip gutter column\n\n const cellElement = cell as HTMLElement\n\n // Get the column name from the cell's text content\n // This is more reliable than using DOM index with virtualization\n const cellText = cellElement.textContent?.trim() || ''\n\n // Find the actual column index in colValues by matching the id (column name)\n // Note: col.title may be a React element (e.g. ColumnHeaderWithTooltip), so we use col.id\n const actualColumnIndex = this.colValues.findIndex(\n col => col.id === cellText,\n )\n\n if (actualColumnIndex !== -1) {\n const columnName = this.colValues[actualColumnIndex]?.id as string\n visibleColumns.add(columnName)\n this.createOrUpdateHandle(cellElement, actualColumnIndex)\n }\n })\n\n // Hide handles for columns that are no longer visible (virtualized out)\n this.handlesMap.forEach((handle, columnName) => {\n if (!visibleColumns.has(columnName)) {\n handle.style.display = 'none'\n }\n })\n }\n\n /**\n * Sets up all event listeners for mouse interactions, scroll, and virtualization.\n */\n private setupEventListeners(): void {\n if (!this.gridContainer || !this.headerRow) return\n\n // Global mouse event listeners\n document.addEventListener('mousemove', this.handleMouseMove)\n document.addEventListener('mouseup', this.handleMouseUp)\n document.addEventListener('mouseleave', this.handleMouseUp)\n\n // Scroll listener for updating handle positions\n this.gridContainer.addEventListener('scroll', this.syncHandles)\n\n // MutationObserver to detect when columns are added/removed due to virtualization\n this.observer = new MutationObserver(() => {\n // Debounce mutations to avoid excessive syncs\n requestAnimationFrame(() => {\n this.syncHandles()\n })\n })\n\n this.observer.observe(this.headerRow, {\n childList: true, // Watch for added/removed columns\n subtree: true,\n })\n\n // Register cleanup functions\n this.cleanupFunctions.push(() => {\n document.removeEventListener('mousemove', this.handleMouseMove)\n document.removeEventListener('mouseup', this.handleMouseUp)\n document.removeEventListener('mouseleave', this.handleMouseUp)\n this.gridContainer?.removeEventListener('scroll', this.syncHandles)\n this.observer?.disconnect()\n })\n }\n\n /**\n * Cleans up all handles, event listeners, and resets state.\n */\n cleanup(): void {\n // Ensure cursor class is removed\n document.body.classList.remove('col-resizing')\n\n // Reset active resize state\n if (this.activeResize) {\n this.activeResize.handle?.classList.remove('is-resizing')\n this.activeResize = null\n }\n\n // Run all cleanup functions and remove handles\n this.cleanupFunctions.forEach(item => {\n if (typeof item === 'function') {\n item()\n } else {\n // It's a handle element, remove it\n item.remove()\n }\n })\n\n this.cleanupFunctions = []\n this.handlesMap.clear()\n this.gridContainer = null\n this.headerRow = null\n this.observer = null\n }\n}\n\n/**\n * Custom hook that manages interactive column resize handles for a data grid.\n * Creates, positions, and updates resize handles that allow users to drag column borders.\n * Handles virtualization, scrolling, and proper cleanup.\n */\nexport function useColumnResizeHandles({\n wrapperRef,\n colValues,\n onColumnResize,\n}: UseColumnResizeHandlesProps) {\n const managerRef = useRef<ColumnResizeManager | null>(null)\n\n // Use react-hookz useResizeObserver to detect when wrapper is rendered and sized\n useResizeObserver(wrapperRef, entry => {\n if (!wrapperRef.current || !entry || entry.contentRect.height === 0) {\n return\n }\n\n // Initialize manager if not already done\n if (!managerRef.current) {\n const manager = new ColumnResizeManager(colValues, onColumnResize)\n const success = manager.initialize(wrapperRef.current)\n if (success) {\n managerRef.current = manager\n }\n }\n })\n\n useEffect(() => {\n // Update columns when they change instead of full reinitialization\n if (managerRef.current) {\n managerRef.current.updateColumns(colValues, onColumnResize)\n }\n }, [colValues, onColumnResize])\n\n useEffect(() => {\n // Cleanup on unmount\n return () => {\n managerRef.current?.cleanup()\n managerRef.current = null\n }\n }, [])\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useColumnResizeHandles.js","names":["useEffect","useRef","Column","useResizeObserver","ResizeHandleElement","HTMLDivElement","__cellElement","HTMLElement","__columnName","UseColumnResizeHandlesProps","wrapperRef","React","RefObject","colValues","onColumnResize","columnName","newWidth","ResizeState","startX","startWidth","handle","initialLeft","ColumnResizeManager","COLUMN_MIN_WIDTH_PX","handlesMap","Map","cleanupFunctions","Array","activeResize","gridContainer","headerRow","Element","observer","MutationObserver","constructor","name","width","updateColumns","syncHandles","initialize","querySelector","setupEventListeners","createNewHandle","Error","document","createElement","className","dataset","style","position","top","cursor","pointerEvents","zIndex","onMouseDown","e","MouseEvent","handleMouseDown","addEventListener","push","removeEventListener","appendChild","set","createOrUpdateHandle","cellElement","columnIndex","id","get","updateHandlePosition","gridHeight","scrollHeight","left","offsetLeft","offsetWidth","height","display","preventDefault","stopPropagation","currentColumnName","currentCellElement","currentLeft","parseFloat","clientX","classList","add","body","handleMouseMove","deltaX","handleMouseUp","Math","max","remove","headerCells","querySelectorAll","length","visibleColumns","Set","forEach","cell","index","columnId","textContent","trim","actualColumnIndex","findIndex","col","has","requestAnimationFrame","observe","childList","subtree","disconnect","cleanup","item","clear","useColumnResizeHandles","t0","$","_c","managerRef","t1","entry","current","contentRect","manager","success","t2","t3","t4","t5","Symbol","for"],"sources":["../../../../src/components/DataGrid/hooks/useColumnResizeHandles.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { Column } from '@sage-bionetworks/react-datasheet-grid'\nimport { useResizeObserver } from '@react-hookz/web'\n\n// Extended HTMLDivElement with custom properties for resize handles\ninterface ResizeHandleElement extends HTMLDivElement {\n __cellElement?: HTMLElement\n __columnName?: string\n}\n\ntype UseColumnResizeHandlesProps = {\n wrapperRef: React.RefObject<HTMLDivElement | null>\n colValues: Column[]\n onColumnResize: (columnName: string, newWidth: number) => void\n}\n\ninterface ResizeState {\n columnName: string\n startX: number\n startWidth: number\n handle: HTMLDivElement\n initialLeft: number\n}\n\n/**\n * Encapsulates all column resize handle logic and state management.\n * Manages handle creation, positioning, mouse interactions, and cleanup.\n */\nclass ColumnResizeManager {\n private static readonly COLUMN_MIN_WIDTH_PX = 50\n\n private handlesMap = new Map<string, ResizeHandleElement>()\n private cleanupFunctions: Array<(() => void) | HTMLDivElement> = []\n private activeResize: ResizeState | null = null\n private gridContainer: HTMLElement | null = null\n private headerRow: Element | null = null\n private observer: MutationObserver | null = null\n\n constructor(\n private colValues: Column[],\n private onColumnResize: (name: string, width: number) => void,\n ) {}\n\n /**\n * Update the column values and callback without reinitializing.\n */\n updateColumns(\n colValues: Column[],\n onColumnResize: (name: string, width: number) => void,\n ): void {\n this.colValues = colValues\n this.onColumnResize = onColumnResize\n // Resync handles with new column data\n this.syncHandles()\n }\n\n /**\n * Initialize the manager by finding grid elements and setting up event listeners.\n * Returns true if initialization was successful, false otherwise.\n */\n initialize(wrapperRef: HTMLDivElement): boolean {\n const gridContainer = wrapperRef.querySelector(\n '.dsg-container',\n ) as HTMLElement\n\n if (!gridContainer) {\n return false\n }\n\n const headerRow = gridContainer.querySelector('.dsg-row.dsg-row-header')\n\n if (!headerRow) {\n return false\n }\n\n this.gridContainer = gridContainer\n this.headerRow = headerRow\n\n this.setupEventListeners()\n this.syncHandles()\n\n return true\n }\n\n /**\n * Creates a new resize handle element with mousedown listener.\n */\n private createNewHandle(columnName: string): ResizeHandleElement {\n if (!this.gridContainer) {\n throw new Error('Cannot create handle without grid container')\n }\n\n const handle = document.createElement('div') as ResizeHandleElement\n handle.className = 'column-resize-handle'\n handle.dataset.columnName = columnName\n handle.style.position = 'absolute'\n handle.style.top = '0'\n handle.style.width = '8px'\n handle.style.cursor = 'col-resize'\n handle.style.pointerEvents = 'auto'\n handle.style.zIndex = '1000'\n\n const onMouseDown = (e: MouseEvent) => this.handleMouseDown(e, handle)\n handle.addEventListener('mousedown', onMouseDown)\n\n this.cleanupFunctions.push(() =>\n handle.removeEventListener('mousedown', onMouseDown),\n )\n\n this.gridContainer.appendChild(handle)\n this.cleanupFunctions.push(handle)\n this.handlesMap.set(columnName, handle)\n\n return handle\n }\n\n /**\n * Creates or updates a handle for a given cell element.\n */\n private createOrUpdateHandle(\n cellElement: HTMLElement,\n columnIndex: number,\n ): void {\n const columnName = this.colValues[columnIndex]?.id as string\n if (!columnName || !this.gridContainer) return\n\n let handle = this.handlesMap.get(columnName)\n\n if (!handle) {\n handle = this.createNewHandle(columnName)\n }\n\n this.updateHandlePosition(handle, cellElement)\n }\n\n /**\n * Updates the position and size of a handle based on its cell element.\n */\n private updateHandlePosition(\n handle: ResizeHandleElement,\n cellElement: HTMLElement,\n ): void {\n if (!this.gridContainer) return\n\n const gridHeight = this.gridContainer.scrollHeight\n const left = cellElement.offsetLeft + cellElement.offsetWidth - 3\n\n handle.__cellElement = cellElement\n handle.__columnName = handle.dataset.columnName\n handle.style.left = `${left}px`\n handle.style.height = `${gridHeight}px`\n handle.style.display = '' // Ensure visible\n }\n\n /**\n * Handles mousedown event on a resize handle to initiate dragging.\n */\n private handleMouseDown(e: MouseEvent, handle: ResizeHandleElement): void {\n e.preventDefault()\n e.stopPropagation()\n\n // Read the column info fresh at mousedown time\n const currentColumnName = handle.__columnName\n const currentCellElement = handle.__cellElement\n\n if (!currentColumnName || !currentCellElement) return\n\n // Get current width and position at the time of mousedown\n const currentLeft = parseFloat(handle.style.left)\n\n this.activeResize = {\n columnName: currentColumnName,\n startX: e.clientX,\n startWidth: currentCellElement.offsetWidth,\n handle,\n initialLeft: currentLeft,\n }\n\n handle.classList.add('is-resizing')\n document.body.classList.add('col-resizing')\n }\n\n /**\n * Handles mousemove event to update handle position during drag.\n */\n private handleMouseMove = (e: MouseEvent): void => {\n if (!this.activeResize) return\n\n const { startX, handle, initialLeft } = this.activeResize\n const deltaX = e.clientX - startX\n handle.style.left = `${initialLeft + deltaX}px`\n }\n\n /**\n * Handles mouseup/mouseleave to finalize the resize operation.\n */\n private handleMouseUp = (e: MouseEvent): void => {\n if (!this.activeResize) return\n\n const { columnName, startX, startWidth, handle } = this.activeResize\n const deltaX = e.clientX - startX\n const newWidth = Math.max(\n ColumnResizeManager.COLUMN_MIN_WIDTH_PX,\n startWidth + deltaX,\n )\n\n handle.classList.remove('is-resizing')\n document.body.classList.remove('col-resizing')\n this.activeResize = null\n\n // Only update state when drag is complete\n this.onColumnResize(columnName, newWidth)\n }\n\n /**\n * Synchronizes handles with currently visible columns in the header.\n * Handles virtualization by showing/hiding handles as columns appear/disappear.\n */\n private syncHandles = (): void => {\n if (this.activeResize || !this.headerRow) return // Don't sync during resize\n\n const headerCells = this.headerRow.querySelectorAll('.dsg-cell')\n if (headerCells.length <= 1) return\n\n // Track which columns are currently visible\n const visibleColumns = new Set<string>()\n\n // Update or create handles for visible columns\n headerCells.forEach((cell: Element, index: number) => {\n if (index === 0) return // Skip gutter column\n\n const cellElement = cell as HTMLElement\n\n // Prefer the data-column-id attribute set by ColumnHeaderWithTooltip over\n // textContent, which can include extra characters (e.g. the required \"*\").\n const columnId =\n cellElement.querySelector<HTMLElement>('[data-column-id]')?.dataset\n .columnId ??\n cellElement.textContent?.trim() ??\n ''\n\n // Find the actual column index in colValues by matching the id (column name)\n // Note: col.title may be a React element (e.g. ColumnHeaderWithTooltip), so we use col.id\n const actualColumnIndex = this.colValues.findIndex(\n col => col.id === columnId,\n )\n\n if (actualColumnIndex !== -1) {\n const columnName = this.colValues[actualColumnIndex]?.id as string\n visibleColumns.add(columnName)\n this.createOrUpdateHandle(cellElement, actualColumnIndex)\n }\n })\n\n // Hide handles for columns that are no longer visible (virtualized out)\n this.handlesMap.forEach((handle, columnName) => {\n if (!visibleColumns.has(columnName)) {\n handle.style.display = 'none'\n }\n })\n }\n\n /**\n * Sets up all event listeners for mouse interactions, scroll, and virtualization.\n */\n private setupEventListeners(): void {\n if (!this.gridContainer || !this.headerRow) return\n\n // Global mouse event listeners\n document.addEventListener('mousemove', this.handleMouseMove)\n document.addEventListener('mouseup', this.handleMouseUp)\n document.addEventListener('mouseleave', this.handleMouseUp)\n\n // Scroll listener for updating handle positions\n this.gridContainer.addEventListener('scroll', this.syncHandles)\n\n // MutationObserver to detect when columns are added/removed due to virtualization\n this.observer = new MutationObserver(() => {\n // Debounce mutations to avoid excessive syncs\n requestAnimationFrame(() => {\n this.syncHandles()\n })\n })\n\n this.observer.observe(this.headerRow, {\n childList: true, // Watch for added/removed columns\n subtree: true,\n })\n\n // Register cleanup functions\n this.cleanupFunctions.push(() => {\n document.removeEventListener('mousemove', this.handleMouseMove)\n document.removeEventListener('mouseup', this.handleMouseUp)\n document.removeEventListener('mouseleave', this.handleMouseUp)\n this.gridContainer?.removeEventListener('scroll', this.syncHandles)\n this.observer?.disconnect()\n })\n }\n\n /**\n * Cleans up all handles, event listeners, and resets state.\n */\n cleanup(): void {\n // Ensure cursor class is removed\n document.body.classList.remove('col-resizing')\n\n // Reset active resize state\n if (this.activeResize) {\n this.activeResize.handle?.classList.remove('is-resizing')\n this.activeResize = null\n }\n\n // Run all cleanup functions and remove handles\n this.cleanupFunctions.forEach(item => {\n if (typeof item === 'function') {\n item()\n } else {\n // It's a handle element, remove it\n item.remove()\n }\n })\n\n this.cleanupFunctions = []\n this.handlesMap.clear()\n this.gridContainer = null\n this.headerRow = null\n this.observer = null\n }\n}\n\n/**\n * Custom hook that manages interactive column resize handles for a data grid.\n * Creates, positions, and updates resize handles that allow users to drag column borders.\n * Handles virtualization, scrolling, and proper cleanup.\n */\nexport function useColumnResizeHandles({\n wrapperRef,\n colValues,\n onColumnResize,\n}: UseColumnResizeHandlesProps) {\n const managerRef = useRef<ColumnResizeManager | null>(null)\n\n // Use react-hookz useResizeObserver to detect when wrapper is rendered and sized\n useResizeObserver(wrapperRef, entry => {\n if (!wrapperRef.current || !entry || entry.contentRect.height === 0) {\n return\n }\n\n // Initialize manager if not already done\n if (!managerRef.current) {\n const manager = new ColumnResizeManager(colValues, onColumnResize)\n const success = manager.initialize(wrapperRef.current)\n if (success) {\n managerRef.current = manager\n }\n }\n })\n\n useEffect(() => {\n // Update columns when they change instead of full reinitialization\n if (managerRef.current) {\n managerRef.current.updateColumns(colValues, onColumnResize)\n }\n }, [colValues, onColumnResize])\n\n useEffect(() => {\n // Cleanup on unmount\n return () => {\n managerRef.current?.cleanup()\n managerRef.current = null\n }\n }, [])\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useExportDataGridToCsv.js","names":["useExportGridAsCsv","displayToast","useSynapseContext","getFileHandleByIdURL","UseExportDataGridToCsvOptions","gridSessionId","filename","useExportDataGridToCsv","options","$","_c","accessToken","t0","onSuccess","data","resultsFileHandleId","then","presignedUrl","fetch","_temp","blob","blobUrl","URL","createObjectURL","link","document","createElement","href","timestamp","Date","toISOString","replace","setAttribute","body","appendChild","click","removeChild","revokeObjectURL","catch","_temp2","onError","_temp3","mutate","exportGrid","isPending","t1","sessionId","includeEtag","includeRowIdAndRowVersion","concreteType","exportToCsv","t2","isExporting","error","reason","err","Error","message","response"],"sources":["../../../../src/components/DataGrid/hooks/useExportDataGridToCsv.ts"],"sourcesContent":["import { useExportGridAsCsv } from '@/synapse-queries/grid/useExportGrid'\nimport { displayToast } from '../../ToastMessage'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { getFileHandleByIdURL } from '@/synapse-client/SynapseClient'\n\nexport interface UseExportDataGridToCsvOptions {\n gridSessionId: string\n filename: string\n}\n\nexport function useExportDataGridToCsv(options: UseExportDataGridToCsvOptions) {\n const { gridSessionId, filename } = options\n const { accessToken } = useSynapseContext()\n\n const { mutate: exportGrid, isPending } = useExportGridAsCsv({\n onSuccess: data => {\n if (data?.resultsFileHandleId) {\n // Get presigned URL and trigger download\n getFileHandleByIdURL(data.resultsFileHandleId, accessToken)\n .then(presignedUrl => {\n // Fetch the file as a blob to control the filename\n return fetch(presignedUrl)\n .then(response => response.blob())\n .then(blob => {\n // Create a blob URL with our custom filename\n const blobUrl = URL.createObjectURL(blob)\n const link = document.createElement('a')\n link.href = blobUrl\n // Generate filename with timestamp\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-')\n link.setAttribute('download', `${filename}-${timestamp}.csv`)\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n // Clean up the blob URL\n URL.revokeObjectURL(blobUrl)\n\n displayToast('CSV export completed successfully', 'success')\n })\n })\n .catch(err => {\n displayToast(\n `Failed to download CSV: ${\n err instanceof Error ? err.message : 'Unknown error'\n }`,\n 'danger',\n )\n })\n }\n },\n onError: error => {\n displayToast(\n `CSV export failed: ${error.reason || 'Unknown error'}`,\n 'danger',\n )\n },\n })\n\n const exportToCsv = () => {\n exportGrid({\n sessionId: gridSessionId,\n includeEtag: false,\n includeRowIdAndRowVersion: false,\n concreteType:\n 'org.sagebionetworks.repo.model.grid.DownloadFromGridRequest',\n })\n }\n\n return {\n exportToCsv,\n isExporting: isPending,\n }\n}\n"],"mappings":";;;;;;;AAUA,SAAOO,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EACL,EAAAL,kBAAAC,gBAAoCE,GACpC,EAAAG,mBAAwBT,GAAmB,EAAAU;AAAA,CAAAH,EAAA,OAAAE,KAAAF,EAAA,OAAAH,KAEkBM,IAAA;EAAAC,YAChDC,MAAA;AACT,GAAIA,GAAIC,uBAENZ,EAAqBW,EAAIC,qBAAsBJ,EAAY,CAAAK,MACnDC,MAEGC,MAAMD,EAAa,CAAAD,KAClBG,EAA4B,CAAAH,MAC5BI,MAAA;IAEJ,IAAAC,IAAgBC,IAAGC,gBAAiBH,EAAK,EACzCI,IAAaC,SAAQC,cAAe,IAAI;AACxCF,MAAIG,OAAQN;IAEZ,IAAAO,qBAAkB,IAAIC,MAAM,EAAAC,aAAc,CAAAC,QAAS,SAAS,IAAI;AAQhE9B,IAPAuB,EAAIQ,aAAc,YAAY,GAAG1B,EAAQ,GAAIsB,EAAS,MAAO,EAC7DH,SAAQQ,KAAKC,YAAaV,EAAK,EAC/BA,EAAIW,OAAQ,EACZV,SAAQQ,KAAKG,YAAaZ,EAAK,EAE/BF,IAAGe,gBAAiBhB,EAAQ,EAE5BpB,EAAa,qCAAqC,UAAU;KAEjE,CAAC,CAAAqC,MACKC,EAOL;;EAEPC,SACQC;EAMV,EAAAhC,EAAA,KAAAE,GAAAF,EAAA,KAAAH,GAAAG,EAAA,KAAAG,KAAAA,IAAAH,EAAA;CA1CD,IAAA,EAAAiC,QAAAC,GAAAC,iBAA0C5C,EAAmBY,EA0C3D,EAAAiC;AAAA,CAAApC,EAAA,OAAAkC,KAAAlC,EAAA,OAAAJ,KAEkBwC,UAAA;AAClBF,IAAW;GAAAG,WACEzC;GAAa0C,aACX;GAAKC,2BACS;GAAKC,cAE9B;GACH,CAAC;IACHxC,EAAA,KAAAkC,GAAAlC,EAAA,KAAAJ,GAAAI,EAAA,KAAAoC,KAAAA,IAAApC,EAAA;CARD,IAAAyC,IAAoBL,GAQnBM;AAKA,QALA1C,EAAA,OAAAyC,KAAAzC,EAAA,OAAAmC,KAEMO,IAAA;EAAAD;EAAAE,aAEQR;EACd,EAAAnC,EAAA,KAAAyC,GAAAzC,EAAA,KAAAmC,GAAAnC,EAAA,KAAA0C,KAAAA,IAAA1C,EAAA,IAHM0C;;AA1DF,SAAAV,EAAAY,GAAA;AAyCDpD,GACE,sBAAsBoD,EAAKC,UAAL,mBACtB,SACD;;AA5CA,SAAAf,EAAAgB,GAAA;AA+BKtD,GACE,2BACEsD,aAAeC,QAAQD,EAAGE,UAA1B,mBAEF,SACD;;AApCN,SAAAtC,EAAAuC,GAAA;AAAA,QAYyBA,EAAQtC,MAAO"}
1
+ {"version":3,"file":"useExportDataGridToCsv.js","names":["useExportGridAsCsv","displayToast","useSynapseContext","getFileHandleByIdURL","UseExportDataGridToCsvOptions","gridSessionId","filename","useExportDataGridToCsv","options","$","_c","accessToken","t0","onSuccess","data","resultsFileHandleId","then","presignedUrl","fetch","_temp","blob","blobUrl","URL","createObjectURL","link","document","createElement","href","timestamp","Date","toISOString","replace","setAttribute","body","appendChild","click","removeChild","revokeObjectURL","catch","_temp2","onError","_temp3","mutate","exportGrid","isPending","t1","sessionId","includeEtag","includeRowIdAndRowVersion","concreteType","exportToCsv","t2","isExporting","error","reason","err","Error","message","response"],"sources":["../../../../src/components/DataGrid/hooks/useExportDataGridToCsv.ts"],"sourcesContent":["import { useExportGridAsCsv } from '@/synapse-queries/grid/useExportGrid'\nimport { displayToast } from '../../ToastMessage'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { getFileHandleByIdURL } from '@/synapse-client/SynapseClient'\n\nexport interface UseExportDataGridToCsvOptions {\n gridSessionId: string\n filename: string\n}\n\nexport function useExportDataGridToCsv(options: UseExportDataGridToCsvOptions) {\n const { gridSessionId, filename } = options\n const { accessToken } = useSynapseContext()\n\n const { mutate: exportGrid, isPending } = useExportGridAsCsv({\n onSuccess: data => {\n if (data?.resultsFileHandleId) {\n // Get presigned URL and trigger download\n getFileHandleByIdURL(data.resultsFileHandleId, accessToken)\n .then(presignedUrl => {\n // Fetch the file as a blob to control the filename\n return fetch(presignedUrl)\n .then(response => response.blob())\n .then(blob => {\n // Create a blob URL with our custom filename\n const blobUrl = URL.createObjectURL(blob)\n const link = document.createElement('a')\n link.href = blobUrl\n // Generate filename with timestamp\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-')\n link.setAttribute('download', `${filename}-${timestamp}.csv`)\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n // Clean up the blob URL\n URL.revokeObjectURL(blobUrl)\n\n displayToast('CSV export completed successfully', 'success')\n })\n })\n .catch(err => {\n displayToast(\n `Failed to download CSV: ${\n err instanceof Error ? err.message : 'Unknown error'\n }`,\n 'danger',\n )\n })\n }\n },\n onError: error => {\n displayToast(\n `CSV export failed: ${error.reason || 'Unknown error'}`,\n 'danger',\n )\n },\n })\n\n const exportToCsv = () => {\n exportGrid({\n sessionId: gridSessionId,\n includeEtag: false,\n includeRowIdAndRowVersion: false,\n concreteType:\n 'org.sagebionetworks.repo.model.grid.DownloadFromGridRequest',\n })\n }\n\n return {\n exportToCsv,\n isExporting: isPending,\n }\n}\n"],"mappings":";;;;;;;AAUA,SAAOO,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GACL,EAAAL,kBAAAC,gBAAoCE,GACpC,EAAAG,mBAAwBT,EAAkB,GAACU;CAAA,AAAAH,EAAA,OAAAE,KAAAF,EAAA,OAAAH,KAEkBM,IAAA;EAAAC,YAChDC,MAAA;GACT,AAAIA,GAAIC,uBAENZ,EAAqBW,EAAIC,qBAAsBJ,CAAW,EAACK,MACnDC,MAEGC,MAAMD,CAAY,EAACD,KAClBG,CAA2B,EAACH,MAC5BI,MAAA;IAEJ,IAAAC,IAAgBC,IAAGC,gBAAiBH,CAAI,GACxCI,IAAaC,SAAQC,cAAe,GAAG;IACvCF,EAAIG,OAAQN;IAEZ,IAAAO,qBAAkB,IAAIC,KAAK,GAACC,YAAa,EAACC,QAAS,SAAS,GAAG;IAQ/D9B,AAPAuB,EAAIQ,aAAc,YAAY,GAAG1B,EAAQ,GAAIsB,EAAS,KAAM,GAC5DH,SAAQQ,KAAKC,YAAaV,CAAI,GAC9BA,EAAIW,MAAO,GACXV,SAAQQ,KAAKG,YAAaZ,CAAI,GAE9BF,IAAGe,gBAAiBhB,CAAO,GAE3BpB,EAAa,qCAAqC,SAAS;GAAC,CAC7D,CACJ,EAACqC,MACKC,CAON;EACJ;EACFC,SACQC;CAMX,GAAChC,EAAA,KAAAE,GAAAF,EAAA,KAAAH,GAAAG,EAAA,KAAAG,KAAAA,IAAAH,EAAA;CA1CD,IAAA,EAAAiC,QAAAC,GAAAC,iBAA0C5C,EAAmBY,CA0C5D,GAACiC;CAAA,AAAApC,EAAA,OAAAkC,KAAAlC,EAAA,OAAAJ,KAEkBwC,UAAA;EAClBF,EAAW;GAAAG,WACEzC;GAAa0C,aACX;GAAKC,2BACS;GAAKC,cAE9B;EACJ,CAAC;CAAC,GACHxC,EAAA,KAAAkC,GAAAlC,EAAA,KAAAJ,GAAAI,EAAA,KAAAoC,KAAAA,IAAApC,EAAA;CARD,IAAAyC,IAAoBL,GAQnBM;CAKA,OALA1C,EAAA,OAAAyC,KAAAzC,EAAA,OAAAmC,KAEMO,IAAA;EAAAD;EAAAE,aAEQR;CACf,GAACnC,EAAA,KAAAyC,GAAAzC,EAAA,KAAAmC,GAAAnC,EAAA,KAAA0C,KAAAA,IAAA1C,EAAA,IAHM0C;AAGN;AA7DI,SAAAV,EAAAY,GAAA;CAyCDpD,EACE,sBAAsBoD,EAAKC,UAAL,mBACtB,QACF;AAAC;AA5CA,SAAAf,EAAAgB,GAAA;CA+BKtD,EACE,2BACEsD,aAAeC,QAAQD,EAAGE,UAA1B,mBAEF,QACF;AAAC;AApCN,SAAAtC,EAAAuC,GAAA;CAAA,OAYyBA,EAAQtC,KAAM;AAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useGetSchemaForGrid.js","names":["useGetEntity","useGetSchema","GridSession","instanceOfEntityView","createComparator","createMerger","createShallowAllOfMerge","createDeduplicator","createIntersector","JSONSchema7","isObject","useMemo","compareSchemaDefinitions","compareSchemaValues","mergeArrayOfSchemaDefinitions","intersectJson","deduplicateJsonSchemaDef","shallowAllOfMerge","GRID_ENTITY_READONLY_PROPERTIES","addReadonlyToEntityProperties","jsonSchema","properties","updatedProperties","propertiesToMakeReadonly","forEach","prop","readOnly","useGetSchemaForGrid","session","$","_c","t0","gridJsonSchema$Id","t1","enabled","data","t2","sourceEntityId","t3","entityData","undefined","includeBaseEntitySchema","t4","select","entityJsonSchema","t5","t6","allOf"],"sources":["../../../../src/components/DataGrid/hooks/useGetSchemaForGrid.ts"],"sourcesContent":["import { useGetEntity, useGetSchema } from '@/synapse-queries/index'\nimport {\n GridSession,\n instanceOfEntityView,\n} from '@sage-bionetworks/synapse-client'\nimport {\n createComparator,\n createMerger,\n createShallowAllOfMerge,\n} from '@x0k/json-schema-merge'\nimport {\n createDeduplicator,\n createIntersector,\n} from '@x0k/json-schema-merge/lib/array'\nimport { JSONSchema7 } from 'json-schema'\nimport isObject from 'lodash-es/isObject'\nimport { useMemo } from 'react'\n\nconst { compareSchemaDefinitions, compareSchemaValues } = createComparator()\nconst { mergeArrayOfSchemaDefinitions } = createMerger({\n intersectJson: createIntersector(compareSchemaValues),\n deduplicateJsonSchemaDef: createDeduplicator(compareSchemaDefinitions),\n})\nconst shallowAllOfMerge = createShallowAllOfMerge(mergeArrayOfSchemaDefinitions)\n\nconst GRID_ENTITY_READONLY_PROPERTIES = [\n 'name',\n 'id',\n 'createdBy',\n 'createdOn',\n 'modifiedBy',\n 'modifiedOn',\n 'etag',\n 'concreteType',\n 'parentId',\n 'path',\n 'type',\n 'currentVersion',\n 'benefactorId',\n 'dataFileHandleId',\n 'dataFileName',\n 'dataFileSizeBytes',\n 'dataFileMD5Hex',\n 'dataFileConcreteType',\n 'dataFileBucket',\n 'dataFileKey',\n]\n\n/**\n * The Synapse JSON Schemas for entities do not indicate which properties should be readOnly.\n * Amend the schema to mark certain properties as readOnly so they cannot be edited in the grid.\n */\nfunction addReadonlyToEntityProperties(jsonSchema: JSONSchema7): JSONSchema7 {\n if (!jsonSchema.properties) {\n return jsonSchema\n }\n\n const updatedProperties = { ...jsonSchema.properties }\n\n // List of properties to mark as read-only\n const propertiesToMakeReadonly = GRID_ENTITY_READONLY_PROPERTIES\n\n propertiesToMakeReadonly.forEach(prop => {\n if (updatedProperties[prop]) {\n updatedProperties[prop] = {\n ...(isObject(updatedProperties[prop]) ? updatedProperties[prop] : {}),\n readOnly: true,\n }\n } else {\n updatedProperties[prop] = { readOnly: true }\n }\n })\n\n return {\n ...jsonSchema,\n properties: updatedProperties,\n }\n}\n\n/**\n * Hook to get the JSON schema for a Data Grid, merging in the base Entity schema if the source entity is an EntityView.\n * @param session - The GridSession object.\n */\nexport default function useGetSchemaForGrid(session: GridSession | null) {\n const { data: jsonSchema } = useGetSchema(session?.gridJsonSchema$Id ?? '', {\n enabled: !!session?.gridJsonSchema$Id,\n })\n\n const { data: entityData } = useGetEntity(\n session?.sourceEntityId,\n undefined,\n {\n enabled: !!session?.sourceEntityId,\n },\n )\n\n let includeBaseEntitySchema = false\n if (entityData && instanceOfEntityView(entityData)) {\n includeBaseEntitySchema = true\n }\n\n const { data: entityJsonSchema } = useGetSchema(\n 'org.sagebionetworks-repo.model.Entity',\n {\n enabled: includeBaseEntitySchema,\n select: addReadonlyToEntityProperties,\n },\n )\n\n return useMemo(() => {\n if (jsonSchema && entityJsonSchema) {\n return shallowAllOfMerge({\n allOf: [entityJsonSchema, jsonSchema],\n }) as JSONSchema7\n } else {\n return jsonSchema\n }\n }, [jsonSchema, entityJsonSchema])\n}\n"],"mappings":";;;;;;;;;AAkBA,IAAM,EAAEY,6BAA0BC,2BAAwBT,GAAkB,EACtE,EAAEU,qCAAkCT,EAAa;CACrDU,eAAeP,EAAkBK,EAAoB;CACrDG,0BAA0BT,EAAmBK,EAAwB;CACtE,CAAC,EACIK,IAAoBX,EAAwBQ,EAA8B,EAE1EI,IAAkC;CACtC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAMD,SAASC,EAA8BC,GAAsC;AAC3E,KAAI,CAACA,EAAWC,WACd,QAAOD;CAGT,IAAME,IAAoB,EAAE,GAAGF,EAAWC,YAAY;AAgBtD,QAXAE,EAAyBC,SAAQC,MAAQ;AACvC,EAAIH,EAAkBG,KACpBH,EAAkBG,KAAQ;GACxB,GAAIf,EAASY,EAAkBG,GAAM,GAAGH,EAAkBG,KAAQ,EAAE;GACpEC,UAAU;GACX,GAEDJ,EAAkBG,KAAQ,EAAEC,UAAU,IAAM;GAE9C,EAEK;EACL,GAAGN;EACHC,YAAYC;EACb;;AAOH,SAAeK,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EAEFC,IAAA,CAAC,CAACH,GAAOI,mBAAmBC;AAAA,CAAAJ,EAAA,OAAAE,IACtCE,IAAAJ,EAAA,MAF2EI,IAAA,EAAAC,SACjEH,GACV,EAAAF,EAAA,KAAAE,GAAAF,EAAA,KAAAI;CAFD,IAAA,EAAAE,MAAAf,MAA6BnB,EAAa2B,GAAOI,qBAAP,IAAkCC,EAE1E,EAMWG,IAAA,CAAC,CAACR,GAAOS,gBAAgBC;AAAA,CAAAT,EAAA,OAAAO,IACnCE,IAAAT,EAAA,MAFDS,IAAA,EAAAJ,SACWE,GACV,EAAAP,EAAA,KAAAO,GAAAP,EAAA,KAAAS;CALH,IAAA,EAAAH,MAAAI,MAA6BvC,EAC3B4B,GAAOS,gBACPG,KAAAA,GACAF,EAGD,EAEDG,IAA8B;AAC9B,CAAIF,KAAcpC,EAAqBoC,EAAW,KAChDE,IAA0BA;CAC3B,IAAAC;AAAA,CAAAb,EAAA,OAAAY,IAOEC,IAAAb,EAAA,MAHDa,IAAA;EAAAR,SACWO;EAAuBE,QACxBxB;EACT,EAAAU,EAAA,KAAAY,GAAAZ,EAAA,KAAAa;CALH,IAAA,EAAAP,MAAAS,MAAmC3C,EACjC,yCACAyC,EAID,EAAAG;AAGC,KAAIzB,KAAAwB,GAA8B;EAAA,IAAAE;AAChCD,EADgChB,EAAA,OAAAe,KAAAf,EAAA,OAAAT,KACzB0B,IAAA7B,EAAkB,EAAA8B,OAChB,CAACH,GAAkBxB,EAAU,EACrC,CAAC,EAAAS,EAAA,KAAAe,GAAAf,EAAA,KAAAT,GAAAS,EAAA,KAAAiB,KAAAA,IAAAjB,EAAA,IAFFgB,IAAOC;OAIPD,KAAOzB;AACR,QAPIyB"}
1
+ {"version":3,"file":"useGetSchemaForGrid.js","names":["useGetEntity","useGetSchema","GridSession","instanceOfEntityView","createComparator","createMerger","createShallowAllOfMerge","createDeduplicator","createIntersector","JSONSchema7","isObject","useMemo","compareSchemaDefinitions","compareSchemaValues","mergeArrayOfSchemaDefinitions","intersectJson","deduplicateJsonSchemaDef","shallowAllOfMerge","GRID_ENTITY_READONLY_PROPERTIES","addReadonlyToEntityProperties","jsonSchema","properties","updatedProperties","propertiesToMakeReadonly","forEach","prop","readOnly","useGetSchemaForGrid","session","$","_c","t0","gridJsonSchema$Id","t1","enabled","data","t2","sourceEntityId","t3","entityData","undefined","includeBaseEntitySchema","t4","select","entityJsonSchema","t5","t6","allOf"],"sources":["../../../../src/components/DataGrid/hooks/useGetSchemaForGrid.ts"],"sourcesContent":["import { useGetEntity, useGetSchema } from '@/synapse-queries/index'\nimport {\n GridSession,\n instanceOfEntityView,\n} from '@sage-bionetworks/synapse-client'\nimport {\n createComparator,\n createMerger,\n createShallowAllOfMerge,\n} from '@x0k/json-schema-merge'\nimport {\n createDeduplicator,\n createIntersector,\n} from '@x0k/json-schema-merge/lib/array'\nimport { JSONSchema7 } from 'json-schema'\nimport isObject from 'lodash-es/isObject'\nimport { useMemo } from 'react'\n\nconst { compareSchemaDefinitions, compareSchemaValues } = createComparator()\nconst { mergeArrayOfSchemaDefinitions } = createMerger({\n intersectJson: createIntersector(compareSchemaValues),\n deduplicateJsonSchemaDef: createDeduplicator(compareSchemaDefinitions),\n})\nconst shallowAllOfMerge = createShallowAllOfMerge(mergeArrayOfSchemaDefinitions)\n\nconst GRID_ENTITY_READONLY_PROPERTIES = [\n 'name',\n 'id',\n 'createdBy',\n 'createdOn',\n 'modifiedBy',\n 'modifiedOn',\n 'etag',\n 'concreteType',\n 'parentId',\n 'path',\n 'type',\n 'currentVersion',\n 'benefactorId',\n 'dataFileHandleId',\n 'dataFileName',\n 'dataFileSizeBytes',\n 'dataFileMD5Hex',\n 'dataFileConcreteType',\n 'dataFileBucket',\n 'dataFileKey',\n]\n\n/**\n * The Synapse JSON Schemas for entities do not indicate which properties should be readOnly.\n * Amend the schema to mark certain properties as readOnly so they cannot be edited in the grid.\n */\nfunction addReadonlyToEntityProperties(jsonSchema: JSONSchema7): JSONSchema7 {\n if (!jsonSchema.properties) {\n return jsonSchema\n }\n\n const updatedProperties = { ...jsonSchema.properties }\n\n // List of properties to mark as read-only\n const propertiesToMakeReadonly = GRID_ENTITY_READONLY_PROPERTIES\n\n propertiesToMakeReadonly.forEach(prop => {\n if (updatedProperties[prop]) {\n updatedProperties[prop] = {\n ...(isObject(updatedProperties[prop]) ? updatedProperties[prop] : {}),\n readOnly: true,\n }\n } else {\n updatedProperties[prop] = { readOnly: true }\n }\n })\n\n return {\n ...jsonSchema,\n properties: updatedProperties,\n }\n}\n\n/**\n * Hook to get the JSON schema for a Data Grid, merging in the base Entity schema if the source entity is an EntityView.\n * @param session - The GridSession object.\n */\nexport default function useGetSchemaForGrid(session: GridSession | null) {\n const { data: jsonSchema } = useGetSchema(session?.gridJsonSchema$Id ?? '', {\n enabled: !!session?.gridJsonSchema$Id,\n })\n\n const { data: entityData } = useGetEntity(\n session?.sourceEntityId,\n undefined,\n {\n enabled: !!session?.sourceEntityId,\n },\n )\n\n let includeBaseEntitySchema = false\n if (entityData && instanceOfEntityView(entityData)) {\n includeBaseEntitySchema = true\n }\n\n const { data: entityJsonSchema } = useGetSchema(\n 'org.sagebionetworks-repo.model.Entity',\n {\n enabled: includeBaseEntitySchema,\n select: addReadonlyToEntityProperties,\n },\n )\n\n return useMemo(() => {\n if (jsonSchema && entityJsonSchema) {\n return shallowAllOfMerge({\n allOf: [entityJsonSchema, jsonSchema],\n }) as JSONSchema7\n } else {\n return jsonSchema\n }\n }, [jsonSchema, entityJsonSchema])\n}\n"],"mappings":";;;;;;;;;AAkBA,IAAM,EAAEY,6BAA0BC,2BAAwBT,EAAiB,GACrE,EAAEU,qCAAkCT,EAAa;CACrDU,eAAeP,EAAkBK,CAAmB;CACpDG,0BAA0BT,EAAmBK,CAAwB;AACvE,CAAC,GACKK,IAAoBX,EAAwBQ,CAA6B,GAEzEI,IAAkC;CACtC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AAAa;AAOf,SAASC,EAA8BC,GAAsC;CAC3E,IAAI,CAACA,EAAWC,YACd,OAAOD;CAGT,IAAME,IAAoB,EAAE,GAAGF,EAAWC,WAAW;CAgBrD,OAXAE,EAAyBC,SAAQC,MAAQ;EACvC,AAAIH,EAAkBG,KACpBH,EAAkBG,KAAQ;GACxB,GAAIf,EAASY,EAAkBG,EAAK,IAAIH,EAAkBG,KAAQ,CAAC;GACnEC,UAAU;EACZ,IAEAJ,EAAkBG,KAAQ,EAAEC,UAAU,GAAK;CAE/C,CAAC,GAEM;EACL,GAAGN;EACHC,YAAYC;CACd;AACF;AAMA,SAAeK,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAEFC,IAAA,CAAC,CAACH,GAAOI,mBAAmBC;CAAA,AAAAJ,EAAA,OAAAE,IACtCE,IAAAJ,EAAA,MAF2EI,IAAA,EAAAC,SACjEH,EACX,GAACF,EAAA,KAAAE,GAAAF,EAAA,KAAAI;CAFD,IAAA,EAAAE,MAAAf,MAA6BnB,EAAa2B,GAAOI,qBAAP,IAAkCC,CAE3E,GAMYG,IAAA,CAAC,CAACR,GAAOS,gBAAgBC;CAAA,AAAAT,EAAA,OAAAO,IACnCE,IAAAT,EAAA,MAFDS,IAAA,EAAAJ,SACWE,EACX,GAACP,EAAA,KAAAO,GAAAP,EAAA,KAAAS;CALH,IAAA,EAAAH,MAAAI,MAA6BvC,EAC3B4B,GAAOS,gBACPG,KAAAA,GACAF,CAGF,GAEAG,IAA8B;CAC9B,AAAIF,KAAcpC,EAAqBoC,CAAU,MAC/CE,IAA0BA;CAC3B,IAAAC;CAAA,AAAAb,EAAA,OAAAY,IAOEC,IAAAb,EAAA,MAHDa,IAAA;EAAAR,SACWO;EAAuBE,QACxBxB;CACV,GAACU,EAAA,KAAAY,GAAAZ,EAAA,KAAAa;CALH,IAAA,EAAAP,MAAAS,MAAmC3C,EACjC,yCACAyC,CAIF,GAACG;CAGC,IAAIzB,KAAAwB,GAA8B;EAAA,IAAAE;EAChCD,AADgChB,EAAA,OAAAe,KAAAf,EAAA,OAAAT,KACzB0B,IAAA7B,EAAkB,EAAA8B,OAChB,CAACH,GAAkBxB,CAAU,EACtC,CAAC,GAACS,EAAA,KAAAe,GAAAf,EAAA,KAAAT,GAAAS,EAAA,KAAAiB,KAAAA,IAAAjB,EAAA,IAFFgB,IAAOC;CAEU,OAEjBD,IAAOzB;CACR,OAPIyB;AAQ2B"}
@@ -1 +1 @@
1
- {"version":3,"file":"useGridReplicaUsers.js","names":["useSynapseContext","useQueries","getReplicaCategory","ReplicaCategory","GridReplicaInfo","UserProfile","getUserProfileQuery","useMemo","useDeepCompareMemoize","ReplicaUserInfo","replicaInfo","category","profile","useGridReplicaUsers","replicas","localReplicaId","currentUserId","$","_c","accessToken","keyFactory","t0","filter","_temp","attributableReplicas","t1","Set","map","_temp2","Boolean","t2","uniqueUserIds","t3","queries","userId","staleTime","profileQueries","t4","_temp3","stableProfileData","profileByUserId","Map","forEach","userId_0","i","data","set","result","replica","replicaId","createdBy","get","undefined","q","r_0","r","replicaType"],"sources":["../../../../src/components/DataGrid/hooks/useGridReplicaUsers.ts"],"sourcesContent":["import { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { useQueries } from '@tanstack/react-query'\nimport {\n getReplicaCategory,\n type ReplicaCategory,\n} from '@/components/DataGrid/utils/getReplicaCategory'\nimport type { GridReplicaInfo } from '@sage-bionetworks/synapse-client'\nimport type { UserProfile } from '@sage-bionetworks/synapse-types'\nimport { getUserProfileQuery } from '@/synapse-queries/user/useUserBundle'\nimport { useMemo } from 'react'\nimport { useDeepCompareMemoize } from 'use-deep-compare-effect'\n\nexport interface ReplicaUserInfo {\n replicaInfo: GridReplicaInfo\n category: ReplicaCategory\n profile: UserProfile | undefined\n}\n\n/**\n * Given the list of replicas in the current session and the local replica ID,\n * fetches user profiles for each non-SERVICE replica and returns a map from\n * replicaId → ReplicaUserInfo for use in attribution and coloring.\n */\nexport function useGridReplicaUsers(\n replicas: GridReplicaInfo[],\n localReplicaId: number | null,\n currentUserId: string | undefined,\n): Map<number, ReplicaUserInfo> {\n const { accessToken, keyFactory } = useSynapseContext()\n\n // Only query non-SERVICE replicas (SERVICE replicas are ignored for attribution)\n const attributableReplicas = useMemo(\n () => replicas.filter(r => r.replicaType !== 'SERVICE'),\n [replicas],\n )\n\n // Deduplicate user IDs so we only fetch each profile once\n const uniqueUserIds = useMemo(\n () => [\n ...new Set(\n attributableReplicas.map(r => r.createdBy).filter(Boolean) as string[],\n ),\n ],\n [attributableReplicas],\n )\n\n const profileQueries = useQueries({\n queries: uniqueUserIds.map(userId => ({\n ...getUserProfileQuery(userId, { accessToken, keyFactory }),\n staleTime: 5 * 60 * 1000, // profiles are stable within a session\n })),\n })\n\n const stableProfileData = useDeepCompareMemoize(\n profileQueries.map(q => q.data),\n )\n\n return useMemo(() => {\n // Build userId → profile map from query results\n const profileByUserId = new Map<string, UserProfile>()\n uniqueUserIds.forEach((userId, i) => {\n const data = stableProfileData[i]\n if (data) profileByUserId.set(userId, data)\n })\n\n const result = new Map<number, ReplicaUserInfo>()\n for (const replica of attributableReplicas) {\n if (replica.replicaId == null) continue\n const category =\n localReplicaId != null && currentUserId != null\n ? getReplicaCategory(replica, currentUserId, localReplicaId)\n : null\n if (category === null) continue\n result.set(replica.replicaId, {\n replicaInfo: replica,\n category,\n profile: replica.createdBy\n ? profileByUserId.get(replica.createdBy)\n : undefined,\n })\n }\n return result\n }, [\n attributableReplicas,\n uniqueUserIds,\n stableProfileData,\n localReplicaId,\n currentUserId,\n ])\n}\n"],"mappings":";;;;;;;AAuBA,SAAOa,EAAAC,GAAAC,GAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAKL,EAAAC,gBAAAC,kBAAoCpB,GAAmB,EAAAqB;AAAA,CAAAJ,EAAA,OAAAH,IAIEO,IAAAJ,EAAA,MAAjDI,IAAAP,EAAQQ,OAAQC,EAAiC,EAAAN,EAAA,KAAAH,GAAAG,EAAA,KAAAI;CADzD,IAAAG,IACQH,GAEPI;AAAA,CAAAR,EAAA,OAAAO,IAOIC,IAAAR,EAAA,MAFEQ,IAAA,IAAIC,IACLF,EAAoBG,IAAKC,EAAiB,CAAAN,OAAQO,QAAQ,CAC3D,EAAAZ,EAAA,KAAAO,GAAAP,EAAA,KAAAQ;CAAA,IAAAK;AAAA,CAAAb,EAAA,OAAAQ,IACFK,IAAAb,EAAA,MAJKa,IAAA,CAAA,GACDL,EAGJ,EAAAR,EAAA,KAAAQ,GAAAR,EAAA,KAAAa;CALH,IAAAC,IACQD,GAMPE;AAAA,CAAAf,EAAA,OAAAE,KAAAF,EAAA,OAAAG,KAAAH,EAAA,OAAAc,KAEiCC,IAAA,EAAAC,SACvBF,EAAaJ,KAAKO,OAAW;EAAA,GACjC5B,EAAoB4B,GAAQ;GAAAf;GAAAC;GAA2B,CAAC;EAAAe,WAChD;EACZ,EAAC,EACH,EAAAlB,EAAA,KAAAE,GAAAF,EAAA,KAAAG,GAAAH,EAAA,KAAAc,GAAAd,EAAA,KAAAe,KAAAA,IAAAf,EAAA;CALD,IAAAmB,IAAuBnC,EAAW+B,EAKhC,EAAAK;AAAA,CAAApB,EAAA,QAAAmB,IAG+BC,IAAApB,EAAA,OAA/BoB,IAAAD,EAAcT,IAAKW,EAAY,EAAArB,EAAA,MAAAmB,GAAAnB,EAAA,MAAAoB;CADjC,IAAAE,IAA0B/B,EACxB6B,EACD,EAAAG;AAAA,CAAAvB,EAAA,QAAAsB,KAAAtB,EAAA,QAAAc,KAICS,oBAAwB,IAAIC,KAA0B,EACtDV,EAAaW,SAASC,GAAAC,MAAA;EACpB,IAAAC,IAAaN,EAAkBK;AAC/B,EAAIC,KAAML,EAAeM,IAAKZ,GAAQW,EAAK;GAC3C,EAAA5B,EAAA,MAAAsB,GAAAtB,EAAA,MAAAc,GAAAd,EAAA,MAAAuB,KAAAA,IAAAvB,EAAA;CAAA,IAAA8B;AAAA,KAAA9B,EAAA,QAAAO,KAAAP,EAAA,QAAAD,KAAAC,EAAA,QAAAF,KAAAE,EAAA,QAAAuB,GAAA;AAEFO,sBAAe,IAAIN,KAA8B;AACjD,OAAK,IAAAO,KAAiBxB,GAAoB;AACxC,OAAIwB,EAAOC,aAAc,KAAM;GAC/B,IAAAtC,IACEI,KAAkB,QAAQC,KAAiB,OACvCd,EAAmB8C,GAAShC,GAAeD,EACvC,GAFR;AAGEJ,SAAa,QACjBoC,EAAMD,IAAKE,EAAOC,WAAY;IAAAvC,aACfsC;IAAOrC;IAAAC,SAEXoC,EAAOE,YACZV,EAAeW,IAAKH,EAAOE,UAClB,GAFJE,KAAAA;IAGV,CAAC;;AACHnC,EAAAA,EAAA,MAAAO,GAAAP,EAAA,MAAAD,GAAAC,EAAA,MAAAF,GAAAE,EAAA,MAAAuB,GAAAvB,EAAA,MAAA8B;OAAAA,KAAA9B,EAAA;AAAA,QACD8B;;AA1DG,SAAAT,EAAAe,GAAA;AAAA,QA+BqBA,EAACR;;AA/BtB,SAAAjB,EAAA0B,GAAA;AAAA,QAiB+BC,EAACL;;AAjBhC,SAAA3B,EAAAgC,GAAA;AAAA,QASwBA,EAACC,gBAAiB"}
1
+ {"version":3,"file":"useGridReplicaUsers.js","names":["useSynapseContext","useQueries","getReplicaCategory","ReplicaCategory","GridReplicaInfo","UserProfile","getUserProfileQuery","useMemo","useDeepCompareMemoize","ReplicaUserInfo","replicaInfo","category","profile","useGridReplicaUsers","replicas","localReplicaId","currentUserId","$","_c","accessToken","keyFactory","t0","filter","_temp","attributableReplicas","t1","Set","map","_temp2","Boolean","t2","uniqueUserIds","t3","queries","userId","staleTime","profileQueries","t4","_temp3","stableProfileData","profileByUserId","Map","forEach","userId_0","i","data","set","result","replica","replicaId","createdBy","get","undefined","q","r_0","r","replicaType"],"sources":["../../../../src/components/DataGrid/hooks/useGridReplicaUsers.ts"],"sourcesContent":["import { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { useQueries } from '@tanstack/react-query'\nimport {\n getReplicaCategory,\n type ReplicaCategory,\n} from '@/components/DataGrid/utils/getReplicaCategory'\nimport type { GridReplicaInfo } from '@sage-bionetworks/synapse-client'\nimport type { UserProfile } from '@sage-bionetworks/synapse-types'\nimport { getUserProfileQuery } from '@/synapse-queries/user/useUserBundle'\nimport { useMemo } from 'react'\nimport { useDeepCompareMemoize } from 'use-deep-compare-effect'\n\nexport interface ReplicaUserInfo {\n replicaInfo: GridReplicaInfo\n category: ReplicaCategory\n profile: UserProfile | undefined\n}\n\n/**\n * Given the list of replicas in the current session and the local replica ID,\n * fetches user profiles for each non-SERVICE replica and returns a map from\n * replicaId → ReplicaUserInfo for use in attribution and coloring.\n */\nexport function useGridReplicaUsers(\n replicas: GridReplicaInfo[],\n localReplicaId: number | null,\n currentUserId: string | undefined,\n): Map<number, ReplicaUserInfo> {\n const { accessToken, keyFactory } = useSynapseContext()\n\n // Only query non-SERVICE replicas (SERVICE replicas are ignored for attribution)\n const attributableReplicas = useMemo(\n () => replicas.filter(r => r.replicaType !== 'SERVICE'),\n [replicas],\n )\n\n // Deduplicate user IDs so we only fetch each profile once\n const uniqueUserIds = useMemo(\n () => [\n ...new Set(\n attributableReplicas.map(r => r.createdBy).filter(Boolean) as string[],\n ),\n ],\n [attributableReplicas],\n )\n\n const profileQueries = useQueries({\n queries: uniqueUserIds.map(userId => ({\n ...getUserProfileQuery(userId, { accessToken, keyFactory }),\n staleTime: 5 * 60 * 1000, // profiles are stable within a session\n })),\n })\n\n const stableProfileData = useDeepCompareMemoize(\n profileQueries.map(q => q.data),\n )\n\n return useMemo(() => {\n // Build userId → profile map from query results\n const profileByUserId = new Map<string, UserProfile>()\n uniqueUserIds.forEach((userId, i) => {\n const data = stableProfileData[i]\n if (data) profileByUserId.set(userId, data)\n })\n\n const result = new Map<number, ReplicaUserInfo>()\n for (const replica of attributableReplicas) {\n if (replica.replicaId == null) continue\n const category =\n localReplicaId != null && currentUserId != null\n ? getReplicaCategory(replica, currentUserId, localReplicaId)\n : null\n if (category === null) continue\n result.set(replica.replicaId, {\n replicaInfo: replica,\n category,\n profile: replica.createdBy\n ? profileByUserId.get(replica.createdBy)\n : undefined,\n })\n }\n return result\n }, [\n attributableReplicas,\n uniqueUserIds,\n stableProfileData,\n localReplicaId,\n currentUserId,\n ])\n}\n"],"mappings":";;;;;;;AAuBA,SAAOa,EAAAC,GAAAC,GAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAKL,EAAAC,gBAAAC,kBAAoCpB,EAAkB,GAACqB;CAAA,AAAAJ,EAAA,OAAAH,IAIEO,IAAAJ,EAAA,MAAjDI,IAAAP,EAAQQ,OAAQC,CAAgC,GAACN,EAAA,KAAAH,GAAAG,EAAA,KAAAI;CADzD,IAAAG,IACQH,GAEPI;CAAA,AAAAR,EAAA,OAAAO,IAOIC,IAAAR,EAAA,MAFEQ,IAAA,IAAIC,IACLF,EAAoBG,IAAKC,CAAgB,EAACN,OAAQO,OAAO,CAC3D,GAACZ,EAAA,KAAAO,GAAAP,EAAA,KAAAQ;CAAA,IAAAK;CAAA,AAAAb,EAAA,OAAAQ,IACFK,IAAAb,EAAA,MAJKa,IAAA,CAAA,GACDL,CAEF,GACFR,EAAA,KAAAQ,GAAAR,EAAA,KAAAa;CALH,IAAAC,IACQD,GAMPE;CAAA,AAAAf,EAAA,OAAAE,KAAAF,EAAA,OAAAG,KAAAH,EAAA,OAAAc,KAEiCC,IAAA,EAAAC,SACvBF,EAAaJ,KAAKO,OAAW;EAAA,GACjC5B,EAAoB4B,GAAQ;GAAAf;GAAAC;EAA0B,CAAC;EAACe,WAChD;CACb,EAAE,EACJ,GAAClB,EAAA,KAAAE,GAAAF,EAAA,KAAAG,GAAAH,EAAA,KAAAc,GAAAd,EAAA,KAAAe,KAAAA,IAAAf,EAAA;CALD,IAAAmB,IAAuBnC,EAAW+B,CAKjC,GAACK;CAAA,AAAApB,EAAA,QAAAmB,IAG+BC,IAAApB,EAAA,OAA/BoB,IAAAD,EAAcT,IAAKW,CAAW,GAACrB,EAAA,MAAAmB,GAAAnB,EAAA,MAAAoB;CADjC,IAAAE,IAA0B/B,EACxB6B,CACF,GAACG;CAAA,AAAAvB,EAAA,QAAAsB,KAAAtB,EAAA,QAAAc,KAICS,oBAAwB,IAAIC,IAAyB,GACrDV,EAAaW,SAASC,GAAAC,MAAA;EACpB,IAAAC,IAAaN,EAAkBK;EAC/B,AAAIC,KAAML,EAAeM,IAAKZ,GAAQW,CAAI;CAAC,CAC5C,GAAC5B,EAAA,MAAAsB,GAAAtB,EAAA,MAAAc,GAAAd,EAAA,MAAAuB,KAAAA,IAAAvB,EAAA;CAAA,IAAA8B;CAAA,IAAA9B,EAAA,QAAAO,KAAAP,EAAA,QAAAD,KAAAC,EAAA,QAAAF,KAAAE,EAAA,QAAAuB,GAAA;EAEFO,oBAAe,IAAIN,IAA6B;EAChD,KAAK,IAAAO,KAAiBxB,GAAoB;GACxC,IAAIwB,EAAOC,aAAc,MAAM;GAC/B,IAAAtC,IACEI,KAAkB,QAAQC,KAAiB,OACvCd,EAAmB8C,GAAShC,GAAeD,CACxC,IAFP;GAGEJ,MAAa,QACjBoC,EAAMD,IAAKE,EAAOC,WAAY;IAAAvC,aACfsC;IAAOrC;IAAAC,SAEXoC,EAAOE,YACZV,EAAeW,IAAKH,EAAOE,SACnB,IAFHE,KAAAA;GAGX,CAAC;EAAC;EACHnC,AAAAA,EAAA,MAAAO,GAAAP,EAAA,MAAAD,GAAAC,EAAA,MAAAF,GAAAE,EAAA,MAAAuB,GAAAvB,EAAA,MAAA8B;CAAA,OAAAA,IAAA9B,EAAA;CAAA,OACD8B;AAAa;AA1DV,SAAAT,EAAAe,GAAA;CAAA,OA+BqBA,EAACR;AAAK;AA/B3B,SAAAjB,EAAA0B,GAAA;CAAA,OAiB+BC,EAACL;AAAU;AAjB1C,SAAA3B,EAAAgC,GAAA;CAAA,OASwBA,EAACC,gBAAiB;AAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"useGridUndoRedo.js","names":["GridMenuButton","KeyboardArrowDownIcon","Menu","MenuItem","useCallback","useEffect","useState","DataGridRow","Operation","ModelChange","convertActionToModelChange","useStack","SingleGridAction","type","rowIndex","previousValue","newValue","CompositeGridAction","actions","GridAction","batchGridActions","MAX_UNDO_STEPS","MAX_REDO_STEPS","useGridUndoRedo","onApplyModelChange","$","_c","t0","Symbol","for","undoStack","t1","redoStack","undoAnchorEl","setUndoAnchorEl","redoAnchorEl","setRedoAnchorEl","undoOpen","Boolean","redoOpen","t2","event","currentTarget","handleUndoClick","t3","event_0","handleRedoClick","t4","handleUndoClose","t5","handleRedoClose","t6","isEmpty","lastAction","peek","lastType","sameTypeCount","i","stack","length","i_0","totalActions","size","getUndoPreview","t7","lastAction_0","sameTypeCount_0","i_1","getRedoPreview","t8","undoPreview","t9","redoPreview","t10","actionToUndo","pop","i_2","child","inverseOp","push","inverseOperation","handleUndo","t11","actionToRedo","i_3","child_0","originalOp","originalOperation","handleRedo","t12","t13","handleKeyDown","event_1","ctrlKey","key","shiftKey","metaKey","preventDefault","window","addEventListener","removeEventListener","t14","action","addToUndoStack","t15","clear","clearUndoStack","t16","clearRedoStack","t17","operations","rowValues","batch","operation","start","fromRowIndex","end","toRowIndex","i_4","newRow","oldVal","slice","newVal","forEach","newRow_0","idx","oldRow","deletedRows","row","idx_0","addOperationsToUndoStack","t18","undefined","t19","t20","t21","t22","t23","toLowerCase","t24","t25","undoUI","t26","t27","t28","t29","t30","t31","t32","t33","redoUI","t34","t35","t36","undoTotalActions","redoTotalActions"],"sources":["../../../../src/components/DataGrid/hooks/useGridUndoRedo.tsx"],"sourcesContent":["import GridMenuButton from '@/components/DataGrid/components/GridMenuButton/GridMenuButton'\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'\nimport { Menu, MenuItem } from '@mui/material'\nimport { useCallback, useEffect, useState } from 'react'\nimport { DataGridRow, Operation } from '../DataGridTypes'\nimport { ModelChange } from '../utils/applyModelChange'\nimport { convertActionToModelChange } from '../utils/convertActionToModelChange'\nimport { useStack } from './useStack'\n\n/**\n * Represents a single action in the grid that can be undone or redone\n */\nexport type SingleGridAction = {\n type: 'CREATE' | 'DELETE' | 'UPDATE'\n rowIndex: number\n previousValue?: DataGridRow\n newValue?: DataGridRow\n}\n\n/**\n * Composite action for batch undo/redo\n */\nexport type CompositeGridAction = {\n type: 'COMPOSITE'\n actions: SingleGridAction[]\n}\n\n/**\n * GridAction can be a single or composite action\n */\nexport type GridAction = SingleGridAction | CompositeGridAction\n\n/**\n * Helper to batch multiple single actions into a composite action\n */\nexport function batchGridActions(\n actions: SingleGridAction[],\n): CompositeGridAction {\n return {\n type: 'COMPOSITE',\n actions,\n }\n}\n\nconst MAX_UNDO_STEPS = 100\nconst MAX_REDO_STEPS = 100\n\n/**\n * Hook to manage undo/redo functionality for a grid backed by a CRDT model.\n *\n * @param onApplyModelChange - Function to apply model changes and commit\n */\nexport function useGridUndoRedo(\n onApplyModelChange: (change: ModelChange) => void,\n) {\n // Tracks the stack of undoable actions in LIFO order\n const undoStack = useStack<GridAction>([], MAX_UNDO_STEPS)\n const redoStack = useStack<GridAction>([], MAX_REDO_STEPS)\n\n // Separate state for undo and redo menus\n const [undoAnchorEl, setUndoAnchorEl] = useState<null | HTMLElement>(null)\n const [redoAnchorEl, setRedoAnchorEl] = useState<null | HTMLElement>(null)\n const undoOpen = Boolean(undoAnchorEl)\n const redoOpen = Boolean(redoAnchorEl)\n\n const handleUndoClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n setUndoAnchorEl(event.currentTarget)\n }\n\n const handleRedoClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n setRedoAnchorEl(event.currentTarget)\n }\n\n const handleUndoClose = () => setUndoAnchorEl(null)\n const handleRedoClose = () => setRedoAnchorEl(null)\n\n // Generate preview information for the undo menu\n const getUndoPreview = useCallback(() => {\n if (undoStack.isEmpty()) return null\n\n const lastAction = undoStack.peek()\n let lastType: string\n let sameTypeCount = 0\n\n if (lastAction.type === 'COMPOSITE') {\n lastType = 'COMPOSITE'\n // Count consecutive composites from the end\n for (let i = undoStack.stack.length - 1; i >= 0; i--) {\n if (undoStack.stack[i].type === 'COMPOSITE') {\n sameTypeCount++\n } else {\n break\n }\n }\n } else {\n lastType = lastAction.type\n for (let i = undoStack.stack.length - 1; i >= 0; i--) {\n if (undoStack.stack[i].type === lastType) {\n sameTypeCount++\n } else {\n break\n }\n }\n }\n\n return {\n lastType,\n sameTypeCount,\n totalActions: undoStack.size,\n }\n }, [undoStack])\n\n // Generate preview information for the redo menu\n const getRedoPreview = useCallback(() => {\n if (redoStack.isEmpty()) return null\n\n const lastAction = redoStack.peek()\n let lastType: string\n let sameTypeCount = 0\n\n if (lastAction.type === 'COMPOSITE') {\n lastType = 'COMPOSITE'\n // Always treat composite as a single atomic action for preview\n sameTypeCount = 1\n } else {\n lastType = lastAction.type\n for (let i = redoStack.stack.length - 1; i >= 0; i--) {\n if (redoStack.stack[i].type === lastType) {\n sameTypeCount++\n } else {\n break\n }\n }\n }\n\n return {\n lastType,\n sameTypeCount,\n totalActions: redoStack.size,\n }\n }, [redoStack])\n\n const undoPreview = getUndoPreview()\n const redoPreview = getRedoPreview()\n\n /**\n * Undo the most recent action\n */\n const handleUndo = useCallback(() => {\n if (undoStack.isEmpty()) return\n const actionToUndo = undoStack.pop()\n if (actionToUndo) {\n // If composite, undo all child actions in reverse order\n if (actionToUndo.type === 'COMPOSITE') {\n for (let i = actionToUndo.actions.length - 1; i >= 0; i--) {\n const child = actionToUndo.actions[i]\n const inverseOp = convertActionToModelChange(child, 'undo')\n if (inverseOp) {\n onApplyModelChange(inverseOp)\n }\n }\n // Push the composite action itself to the redo stack\n redoStack.push(actionToUndo)\n } else {\n const inverseOperation = convertActionToModelChange(\n actionToUndo,\n 'undo',\n )\n if (!inverseOperation) return\n onApplyModelChange(inverseOperation)\n // Push the single action to the redo stack\n redoStack.push(actionToUndo)\n }\n }\n handleUndoClose()\n }, [onApplyModelChange, undoStack, redoStack])\n\n /**\n * Redo the most recent undone action\n */\n const handleRedo = useCallback(() => {\n if (redoStack.isEmpty()) return\n\n const actionToRedo = redoStack.pop()\n\n if (actionToRedo) {\n // If composite, redo all child actions in order\n if (actionToRedo.type === 'COMPOSITE') {\n for (let i = 0; i < actionToRedo.actions.length; i++) {\n const child = actionToRedo.actions[i]\n const originalOp = convertActionToModelChange(child, 'redo')\n if (originalOp) {\n onApplyModelChange(originalOp)\n }\n }\n // Push the composite action itself back to the undo stack\n undoStack.push(actionToRedo)\n } else {\n const originalOperation = convertActionToModelChange(\n actionToRedo,\n 'redo',\n )\n if (!originalOperation) return\n onApplyModelChange(originalOperation)\n // Push the single action back to the undo stack\n undoStack.push(actionToRedo)\n }\n }\n handleRedoClose()\n }, [redoStack, undoStack, onApplyModelChange])\n\n // Keyboard shortcuts for both undo and redo\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n (event.ctrlKey && event.key === 'z' && !event.shiftKey) ||\n (event.metaKey && event.key === 'z' && !event.shiftKey)\n ) {\n event.preventDefault()\n handleUndo()\n } else if (\n (event.ctrlKey && event.key === 'y') ||\n (event.ctrlKey && event.shiftKey && event.key === 'z') ||\n (event.metaKey && event.shiftKey && event.key === 'z')\n ) {\n event.preventDefault()\n handleRedo()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => {\n window.removeEventListener('keydown', handleKeyDown)\n }\n }, [handleUndo, handleRedo])\n\n const addToUndoStack = (action: GridAction) => {\n undoStack.push(action)\n }\n\n const clearUndoStack = () => undoStack.clear()\n\n const clearRedoStack = () => redoStack.clear()\n\n const addOperationsToUndoStack = (\n operations: Operation[],\n rowValues: DataGridRow[],\n newValue: DataGridRow[],\n ) => {\n // Clear redo stack since new changes invalidate redo history\n clearRedoStack()\n\n const batch: SingleGridAction[] = []\n\n for (const operation of operations) {\n const start = operation.fromRowIndex\n const end = operation.toRowIndex\n\n if (operation.type === 'CREATE') {\n for (let i = start; i < end; i++) {\n const newRow = newValue[i]\n batch.push({\n type: 'CREATE',\n rowIndex: i,\n newValue: newRow,\n })\n }\n }\n\n if (operation.type === 'UPDATE') {\n const oldVal = rowValues.slice(start, end)\n const newVal = newValue.slice(start, end)\n\n newVal.forEach((newRow: DataGridRow, idx: number) => {\n const oldRow = oldVal[idx]\n const rowIndex = start + idx\n batch.push({\n type: 'UPDATE',\n rowIndex,\n previousValue: oldRow,\n newValue: newRow,\n })\n })\n }\n\n if (operation.type === 'DELETE') {\n const deletedRows = rowValues.slice(start, end)\n deletedRows.forEach((row, idx) => {\n batch.push({\n type: 'DELETE',\n rowIndex: start + idx,\n previousValue: row,\n })\n })\n }\n }\n if (batch.length === 1) {\n addToUndoStack(batch[0])\n } else if (batch.length > 1) {\n addToUndoStack(batchGridActions(batch))\n }\n }\n\n const undoUI = (\n <>\n <GridMenuButton\n variant={'outlined'}\n aria-controls={undoOpen ? 'undo-menu' : undefined}\n aria-haspopup=\"true\"\n onClick={handleUndoClick}\n disabled={!undoPreview}\n endIcon={<KeyboardArrowDownIcon />}\n >\n Undo {undoPreview && `(${undoPreview.totalActions})`}\n </GridMenuButton>\n <Menu\n id=\"undo-menu\"\n anchorEl={undoAnchorEl}\n open={undoOpen}\n onClose={handleUndoClose}\n >\n {undoPreview ? (\n <MenuItem key=\"lastAction\" onClick={handleUndo}>\n Undo last {undoPreview.lastType.toLowerCase()} action\n </MenuItem>\n ) : (\n <MenuItem disabled>No actions to undo</MenuItem>\n )}\n </Menu>\n </>\n )\n\n const redoUI = (\n <>\n <GridMenuButton\n variant={'outlined'}\n aria-controls={redoOpen ? 'redo-menu' : undefined}\n aria-haspopup=\"true\"\n onClick={handleRedoClick}\n disabled={!redoPreview}\n endIcon={<KeyboardArrowDownIcon />}\n >\n Redo {redoPreview && `(${redoPreview.totalActions})`}\n </GridMenuButton>\n <Menu\n id=\"redo-menu\"\n anchorEl={redoAnchorEl}\n open={redoOpen}\n onClose={handleRedoClose}\n >\n {redoPreview ? (\n <MenuItem key=\"lastAction\" onClick={handleRedo}>\n Redo last {redoPreview.lastType.toLowerCase()} action\n </MenuItem>\n ) : (\n <MenuItem disabled>No actions to redo</MenuItem>\n )}\n </Menu>\n </>\n )\n\n return {\n // Undo\n undoPreview,\n handleUndo,\n addToUndoStack,\n clearUndoStack,\n addOperationsToUndoStack,\n undoUI,\n undoTotalActions: undoPreview ? undoPreview.totalActions : 0,\n\n // Redo\n redoPreview,\n redoUI,\n redoTotalActions: redoPreview ? redoPreview.totalActions : 0,\n handleRedo,\n clearRedoStack,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useGridUndoRedo.js","names":["GridMenuButton","KeyboardArrowDownIcon","Menu","MenuItem","useCallback","useEffect","useState","DataGridRow","Operation","ModelChange","convertActionToModelChange","useStack","SingleGridAction","type","rowIndex","previousValue","newValue","CompositeGridAction","actions","GridAction","batchGridActions","MAX_UNDO_STEPS","MAX_REDO_STEPS","useGridUndoRedo","onApplyModelChange","$","_c","t0","Symbol","for","undoStack","t1","redoStack","undoAnchorEl","setUndoAnchorEl","redoAnchorEl","setRedoAnchorEl","undoOpen","Boolean","redoOpen","t2","event","currentTarget","handleUndoClick","t3","event_0","handleRedoClick","t4","handleUndoClose","t5","handleRedoClose","t6","isEmpty","lastAction","peek","lastType","sameTypeCount","i","stack","length","i_0","totalActions","size","getUndoPreview","t7","lastAction_0","sameTypeCount_0","i_1","getRedoPreview","t8","undoPreview","t9","redoPreview","t10","actionToUndo","pop","i_2","child","inverseOp","push","inverseOperation","handleUndo","t11","actionToRedo","i_3","child_0","originalOp","originalOperation","handleRedo","t12","t13","handleKeyDown","event_1","ctrlKey","key","shiftKey","metaKey","preventDefault","window","addEventListener","removeEventListener","t14","action","addToUndoStack","t15","clear","clearUndoStack","t16","clearRedoStack","t17","operations","rowValues","batch","operation","start","fromRowIndex","end","toRowIndex","i_4","newRow","oldVal","slice","newVal","forEach","newRow_0","idx","oldRow","deletedRows","row","idx_0","addOperationsToUndoStack","t18","undefined","t19","t20","t21","t22","t23","toLowerCase","t24","t25","undoUI","t26","t27","t28","t29","t30","t31","t32","t33","redoUI","t34","t35","t36","undoTotalActions","redoTotalActions"],"sources":["../../../../src/components/DataGrid/hooks/useGridUndoRedo.tsx"],"sourcesContent":["import GridMenuButton from '@/components/DataGrid/components/GridMenuButton/GridMenuButton'\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'\nimport { Menu, MenuItem } from '@mui/material'\nimport { useCallback, useEffect, useState } from 'react'\nimport { DataGridRow, Operation } from '../DataGridTypes'\nimport { ModelChange } from '../utils/applyModelChange'\nimport { convertActionToModelChange } from '../utils/convertActionToModelChange'\nimport { useStack } from './useStack'\n\n/**\n * Represents a single action in the grid that can be undone or redone\n */\nexport type SingleGridAction = {\n type: 'CREATE' | 'DELETE' | 'UPDATE'\n rowIndex: number\n previousValue?: DataGridRow\n newValue?: DataGridRow\n}\n\n/**\n * Composite action for batch undo/redo\n */\nexport type CompositeGridAction = {\n type: 'COMPOSITE'\n actions: SingleGridAction[]\n}\n\n/**\n * GridAction can be a single or composite action\n */\nexport type GridAction = SingleGridAction | CompositeGridAction\n\n/**\n * Helper to batch multiple single actions into a composite action\n */\nexport function batchGridActions(\n actions: SingleGridAction[],\n): CompositeGridAction {\n return {\n type: 'COMPOSITE',\n actions,\n }\n}\n\nconst MAX_UNDO_STEPS = 100\nconst MAX_REDO_STEPS = 100\n\n/**\n * Hook to manage undo/redo functionality for a grid backed by a CRDT model.\n *\n * @param onApplyModelChange - Function to apply model changes and commit\n */\nexport function useGridUndoRedo(\n onApplyModelChange: (change: ModelChange) => void,\n) {\n // Tracks the stack of undoable actions in LIFO order\n const undoStack = useStack<GridAction>([], MAX_UNDO_STEPS)\n const redoStack = useStack<GridAction>([], MAX_REDO_STEPS)\n\n // Separate state for undo and redo menus\n const [undoAnchorEl, setUndoAnchorEl] = useState<null | HTMLElement>(null)\n const [redoAnchorEl, setRedoAnchorEl] = useState<null | HTMLElement>(null)\n const undoOpen = Boolean(undoAnchorEl)\n const redoOpen = Boolean(redoAnchorEl)\n\n const handleUndoClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n setUndoAnchorEl(event.currentTarget)\n }\n\n const handleRedoClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n setRedoAnchorEl(event.currentTarget)\n }\n\n const handleUndoClose = () => setUndoAnchorEl(null)\n const handleRedoClose = () => setRedoAnchorEl(null)\n\n // Generate preview information for the undo menu\n const getUndoPreview = useCallback(() => {\n if (undoStack.isEmpty()) return null\n\n const lastAction = undoStack.peek()\n let lastType: string\n let sameTypeCount = 0\n\n if (lastAction.type === 'COMPOSITE') {\n lastType = 'COMPOSITE'\n // Count consecutive composites from the end\n for (let i = undoStack.stack.length - 1; i >= 0; i--) {\n if (undoStack.stack[i].type === 'COMPOSITE') {\n sameTypeCount++\n } else {\n break\n }\n }\n } else {\n lastType = lastAction.type\n for (let i = undoStack.stack.length - 1; i >= 0; i--) {\n if (undoStack.stack[i].type === lastType) {\n sameTypeCount++\n } else {\n break\n }\n }\n }\n\n return {\n lastType,\n sameTypeCount,\n totalActions: undoStack.size,\n }\n }, [undoStack])\n\n // Generate preview information for the redo menu\n const getRedoPreview = useCallback(() => {\n if (redoStack.isEmpty()) return null\n\n const lastAction = redoStack.peek()\n let lastType: string\n let sameTypeCount = 0\n\n if (lastAction.type === 'COMPOSITE') {\n lastType = 'COMPOSITE'\n // Always treat composite as a single atomic action for preview\n sameTypeCount = 1\n } else {\n lastType = lastAction.type\n for (let i = redoStack.stack.length - 1; i >= 0; i--) {\n if (redoStack.stack[i].type === lastType) {\n sameTypeCount++\n } else {\n break\n }\n }\n }\n\n return {\n lastType,\n sameTypeCount,\n totalActions: redoStack.size,\n }\n }, [redoStack])\n\n const undoPreview = getUndoPreview()\n const redoPreview = getRedoPreview()\n\n /**\n * Undo the most recent action\n */\n const handleUndo = useCallback(() => {\n if (undoStack.isEmpty()) return\n const actionToUndo = undoStack.pop()\n if (actionToUndo) {\n // If composite, undo all child actions in reverse order\n if (actionToUndo.type === 'COMPOSITE') {\n for (let i = actionToUndo.actions.length - 1; i >= 0; i--) {\n const child = actionToUndo.actions[i]\n const inverseOp = convertActionToModelChange(child, 'undo')\n if (inverseOp) {\n onApplyModelChange(inverseOp)\n }\n }\n // Push the composite action itself to the redo stack\n redoStack.push(actionToUndo)\n } else {\n const inverseOperation = convertActionToModelChange(\n actionToUndo,\n 'undo',\n )\n if (!inverseOperation) return\n onApplyModelChange(inverseOperation)\n // Push the single action to the redo stack\n redoStack.push(actionToUndo)\n }\n }\n handleUndoClose()\n }, [onApplyModelChange, undoStack, redoStack])\n\n /**\n * Redo the most recent undone action\n */\n const handleRedo = useCallback(() => {\n if (redoStack.isEmpty()) return\n\n const actionToRedo = redoStack.pop()\n\n if (actionToRedo) {\n // If composite, redo all child actions in order\n if (actionToRedo.type === 'COMPOSITE') {\n for (let i = 0; i < actionToRedo.actions.length; i++) {\n const child = actionToRedo.actions[i]\n const originalOp = convertActionToModelChange(child, 'redo')\n if (originalOp) {\n onApplyModelChange(originalOp)\n }\n }\n // Push the composite action itself back to the undo stack\n undoStack.push(actionToRedo)\n } else {\n const originalOperation = convertActionToModelChange(\n actionToRedo,\n 'redo',\n )\n if (!originalOperation) return\n onApplyModelChange(originalOperation)\n // Push the single action back to the undo stack\n undoStack.push(actionToRedo)\n }\n }\n handleRedoClose()\n }, [redoStack, undoStack, onApplyModelChange])\n\n // Keyboard shortcuts for both undo and redo\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n (event.ctrlKey && event.key === 'z' && !event.shiftKey) ||\n (event.metaKey && event.key === 'z' && !event.shiftKey)\n ) {\n event.preventDefault()\n handleUndo()\n } else if (\n (event.ctrlKey && event.key === 'y') ||\n (event.ctrlKey && event.shiftKey && event.key === 'z') ||\n (event.metaKey && event.shiftKey && event.key === 'z')\n ) {\n event.preventDefault()\n handleRedo()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => {\n window.removeEventListener('keydown', handleKeyDown)\n }\n }, [handleUndo, handleRedo])\n\n const addToUndoStack = (action: GridAction) => {\n undoStack.push(action)\n }\n\n const clearUndoStack = () => undoStack.clear()\n\n const clearRedoStack = () => redoStack.clear()\n\n const addOperationsToUndoStack = (\n operations: Operation[],\n rowValues: DataGridRow[],\n newValue: DataGridRow[],\n ) => {\n // Clear redo stack since new changes invalidate redo history\n clearRedoStack()\n\n const batch: SingleGridAction[] = []\n\n for (const operation of operations) {\n const start = operation.fromRowIndex\n const end = operation.toRowIndex\n\n if (operation.type === 'CREATE') {\n for (let i = start; i < end; i++) {\n const newRow = newValue[i]\n batch.push({\n type: 'CREATE',\n rowIndex: i,\n newValue: newRow,\n })\n }\n }\n\n if (operation.type === 'UPDATE') {\n const oldVal = rowValues.slice(start, end)\n const newVal = newValue.slice(start, end)\n\n newVal.forEach((newRow: DataGridRow, idx: number) => {\n const oldRow = oldVal[idx]\n const rowIndex = start + idx\n batch.push({\n type: 'UPDATE',\n rowIndex,\n previousValue: oldRow,\n newValue: newRow,\n })\n })\n }\n\n if (operation.type === 'DELETE') {\n const deletedRows = rowValues.slice(start, end)\n deletedRows.forEach((row, idx) => {\n batch.push({\n type: 'DELETE',\n rowIndex: start + idx,\n previousValue: row,\n })\n })\n }\n }\n if (batch.length === 1) {\n addToUndoStack(batch[0])\n } else if (batch.length > 1) {\n addToUndoStack(batchGridActions(batch))\n }\n }\n\n const undoUI = (\n <>\n <GridMenuButton\n variant={'outlined'}\n aria-controls={undoOpen ? 'undo-menu' : undefined}\n aria-haspopup=\"true\"\n onClick={handleUndoClick}\n disabled={!undoPreview}\n endIcon={<KeyboardArrowDownIcon />}\n >\n Undo {undoPreview && `(${undoPreview.totalActions})`}\n </GridMenuButton>\n <Menu\n id=\"undo-menu\"\n anchorEl={undoAnchorEl}\n open={undoOpen}\n onClose={handleUndoClose}\n >\n {undoPreview ? (\n <MenuItem key=\"lastAction\" onClick={handleUndo}>\n Undo last {undoPreview.lastType.toLowerCase()} action\n </MenuItem>\n ) : (\n <MenuItem disabled>No actions to undo</MenuItem>\n )}\n </Menu>\n </>\n )\n\n const redoUI = (\n <>\n <GridMenuButton\n variant={'outlined'}\n aria-controls={redoOpen ? 'redo-menu' : undefined}\n aria-haspopup=\"true\"\n onClick={handleRedoClick}\n disabled={!redoPreview}\n endIcon={<KeyboardArrowDownIcon />}\n >\n Redo {redoPreview && `(${redoPreview.totalActions})`}\n </GridMenuButton>\n <Menu\n id=\"redo-menu\"\n anchorEl={redoAnchorEl}\n open={redoOpen}\n onClose={handleRedoClose}\n >\n {redoPreview ? (\n <MenuItem key=\"lastAction\" onClick={handleRedo}>\n Redo last {redoPreview.lastType.toLowerCase()} action\n </MenuItem>\n ) : (\n <MenuItem disabled>No actions to redo</MenuItem>\n )}\n </Menu>\n </>\n )\n\n return {\n // Undo\n undoPreview,\n handleUndo,\n addToUndoStack,\n clearUndoStack,\n addOperationsToUndoStack,\n undoUI,\n undoTotalActions: undoPreview ? undoPreview.totalActions : 0,\n\n // Redo\n redoPreview,\n redoUI,\n redoTotalActions: redoPreview ? redoPreview.totalActions : 0,\n handleRedo,\n clearRedoStack,\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useRemoteSelections.js","names":["useMemo","GridModel","GridModelSnapshot","ReplicaSelectionModel","GridReplicaInfo","replicaSelectionToGridSelection","GridSelectionRange","RemoteSelection","replicaId","range","colorIndex","useRemoteSelections","modelSnapshot","model","replicas","localReplicaId","$","_c","t0","bb0","t1","Symbol","for","selectionMap","selection","Record","results","replica","rid","isConnected","replicaType","selectionModel","String","push"],"sources":["../../../../src/components/DataGrid/hooks/useRemoteSelections.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport type {\n GridModel,\n GridModelSnapshot,\n ReplicaSelectionModel,\n} from '../DataGridTypes'\nimport type { GridReplicaInfo } from '@sage-bionetworks/synapse-client'\nimport {\n replicaSelectionToGridSelection,\n type GridSelectionRange,\n} from '../utils/replicaSelectionToGridSelection'\n\nexport interface RemoteSelection {\n replicaId: number\n range: GridSelectionRange\n /** 0-7 color index, derived from replicaId for a stable per-session color. */\n colorIndex: number\n}\n\n/**\n * Derives remote replica selection ranges from the CRDT model's selection map.\n * The server mirrors each replica's selection into the model under\n * `snapshot.selection[replicaId]`, so no extra API calls are needed.\n */\nexport function useRemoteSelections(\n modelSnapshot: GridModelSnapshot | null | undefined,\n model: GridModel | null | undefined,\n replicas: GridReplicaInfo[],\n localReplicaId: number | null,\n): RemoteSelection[] {\n return useMemo(() => {\n if (!modelSnapshot || !model) return []\n\n const selectionMap = modelSnapshot.selection as Record<\n string,\n ReplicaSelectionModel\n >\n if (!selectionMap) return []\n\n const results: RemoteSelection[] = []\n\n for (const replica of replicas) {\n const rid = replica.replicaId\n if (rid == null || rid === localReplicaId) continue\n if (!replica.isConnected) continue\n if (replica.replicaType === 'SERVICE') continue\n\n const selectionModel = selectionMap[String(rid)]\n if (!selectionModel) continue\n\n try {\n const range = replicaSelectionToGridSelection(selectionModel, model)\n if (range) {\n results.push({\n replicaId: rid,\n range,\n colorIndex: rid % 8,\n })\n }\n } catch {\n // Ignore stale/malformed selection data for a replica\n }\n }\n\n return results\n }, [modelSnapshot, model, replicas, localReplicaId])\n}\n"],"mappings":";;;AAwBA,SAAOW,EAAAC,GAAAC,GAAAC,GAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EAAAC;AAAAC,MAAA;AAOH,MAAI,CAACP,KAAD,CAAmBC,GAAK;GAAA,IAAAO;AAAEF,GAAFF,EAAA,OAAAK,OAAAC,IAAA,4BAAA,IAASF,IAAA,EAAE,EAAAJ,EAAA,KAAAI,KAAAA,IAAAJ,EAAA,IAATE,IAAOE;AAAP,SAAAD;;EAE9B,IAAAI,IAAqBX,EAAaY;AAIlC,MAAI,CAACD,GAAY;GAAA,IAAAH;AAAEF,GAAFF,EAAA,OAAAK,OAAAC,IAAA,4BAAA,IAASF,IAAA,EAAE,EAAAJ,EAAA,KAAAI,KAAAA,IAAAJ,EAAA,IAATE,IAAOE;AAAP,SAAAD;;EAAS,IAAAO;AAAA,MAAAV,EAAA,OAAAD,KAAAC,EAAA,OAAAH,KAAAG,EAAA,OAAAF,KAAAE,EAAA,OAAAO,GAAA;AAE5BG,OAAmC,EAAE;AAErC,QAAK,IAAAC,KAAiBb,GAAQ;IAC5B,IAAAc,IAAYD,EAAOnB;AAGnB,QAFIoB,KAAO,QAAQA,MAAQb,KACvB,CAACY,EAAOE,eACRF,EAAOG,gBAAiB,UAAW;IAEvC,IAAAC,IAAuBR,EAAaS,OAAOJ,EAAI;AAC1CG,UAEL,KAAA;KACE,IAAAtB,IAAcJ,EAAgC0B,GAAgBlB,EAAM;AACpE,KAAIJ,KACFiB,EAAOO,KAAM;MAAAzB,WACAoB;MAAGnB;MAAAC,YAEFkB,IAAM;MACnB,CAAC;YACH;;AAIJZ,GAAAA,EAAA,KAAAD,GAAAC,EAAA,KAAAH,GAAAG,EAAA,KAAAF,GAAAE,EAAA,KAAAO,GAAAP,EAAA,KAAAU;QAAAA,KAAAV,EAAA;AAEDE,MAAOQ;;AAAO,QAlCTR"}
1
+ {"version":3,"file":"useRemoteSelections.js","names":["useMemo","GridModel","GridModelSnapshot","ReplicaSelectionModel","GridReplicaInfo","replicaSelectionToGridSelection","GridSelectionRange","RemoteSelection","replicaId","range","colorIndex","useRemoteSelections","modelSnapshot","model","replicas","localReplicaId","$","_c","t0","bb0","t1","Symbol","for","selectionMap","selection","Record","results","replica","rid","isConnected","replicaType","selectionModel","String","push"],"sources":["../../../../src/components/DataGrid/hooks/useRemoteSelections.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport type {\n GridModel,\n GridModelSnapshot,\n ReplicaSelectionModel,\n} from '../DataGridTypes'\nimport type { GridReplicaInfo } from '@sage-bionetworks/synapse-client'\nimport {\n replicaSelectionToGridSelection,\n type GridSelectionRange,\n} from '../utils/replicaSelectionToGridSelection'\n\nexport interface RemoteSelection {\n replicaId: number\n range: GridSelectionRange\n /** 0-7 color index, derived from replicaId for a stable per-session color. */\n colorIndex: number\n}\n\n/**\n * Derives remote replica selection ranges from the CRDT model's selection map.\n * The server mirrors each replica's selection into the model under\n * `snapshot.selection[replicaId]`, so no extra API calls are needed.\n */\nexport function useRemoteSelections(\n modelSnapshot: GridModelSnapshot | null | undefined,\n model: GridModel | null | undefined,\n replicas: GridReplicaInfo[],\n localReplicaId: number | null,\n): RemoteSelection[] {\n return useMemo(() => {\n if (!modelSnapshot || !model) return []\n\n const selectionMap = modelSnapshot.selection as Record<\n string,\n ReplicaSelectionModel\n >\n if (!selectionMap) return []\n\n const results: RemoteSelection[] = []\n\n for (const replica of replicas) {\n const rid = replica.replicaId\n if (rid == null || rid === localReplicaId) continue\n if (!replica.isConnected) continue\n if (replica.replicaType === 'SERVICE') continue\n\n const selectionModel = selectionMap[String(rid)]\n if (!selectionModel) continue\n\n try {\n const range = replicaSelectionToGridSelection(selectionModel, model)\n if (range) {\n results.push({\n replicaId: rid,\n range,\n colorIndex: rid % 8,\n })\n }\n } catch {\n // Ignore stale/malformed selection data for a replica\n }\n }\n\n return results\n }, [modelSnapshot, model, replicas, localReplicaId])\n}\n"],"mappings":";;;AAwBA,SAAOW,EAAAC,GAAAC,GAAAC,GAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAAC;CAAAC,KAAA;EAOH,IAAI,CAACP,KAAD,CAAmBC,GAAK;GAAA,IAAAO;GAAEF,AAAFF,EAAA,OAAAK,OAAAC,IAAA,2BAAA,KAASF,IAAA,CAAA,GAAEJ,EAAA,KAAAI,KAAAA,IAAAJ,EAAA,IAATE,IAAOE;GAAP,MAAAD;EAAS;EAEvC,IAAAI,IAAqBX,EAAaY;EAIlC,IAAI,CAACD,GAAY;GAAA,IAAAH;GAAEF,AAAFF,EAAA,OAAAK,OAAAC,IAAA,2BAAA,KAASF,IAAA,CAAA,GAAEJ,EAAA,KAAAI,KAAAA,IAAAJ,EAAA,IAATE,IAAOE;GAAP,MAAAD;EAAS;EAAA,IAAAO;EAAA,IAAAV,EAAA,OAAAD,KAAAC,EAAA,OAAAH,KAAAG,EAAA,OAAAF,KAAAE,EAAA,OAAAO,GAAA;GAE5BG,IAAmC,CAAA;GAEnC,KAAK,IAAAC,KAAiBb,GAAQ;IAC5B,IAAAc,IAAYD,EAAOnB;IAGnB,IAFIoB,KAAO,QAAQA,MAAQb,KACvB,CAACY,EAAOE,eACRF,EAAOG,gBAAiB,WAAW;IAEvC,IAAAC,IAAuBR,EAAaS,OAAOJ,CAAG;IACzCG,OAEL,IAAA;KACE,IAAAtB,IAAcJ,EAAgC0B,GAAgBlB,CAAK;KACnE,AAAIJ,KACFiB,EAAOO,KAAM;MAAAzB,WACAoB;MAAGnB;MAAAC,YAEFkB,IAAM;KACpB,CAAC;IACF,QAAA,CAAA;GAGF;GACFZ,AAAAA,EAAA,KAAAD,GAAAC,EAAA,KAAAH,GAAAG,EAAA,KAAAF,GAAAE,EAAA,KAAAO,GAAAP,EAAA,KAAAU;EAAA,OAAAA,IAAAV,EAAA;EAEDE,IAAOQ;CAAO;CAAA,OAlCTR;AAmC6C"}
@@ -1 +1 @@
1
- {"version":3,"file":"useStack.js","names":["useCallback","useState","useStack","t0","maxSize","$","_c","t1","undefined","stack","currentStack","setCurrentStack","t2","item","prev","newStack","length","shift","push","t3","popped","_temp","pop","t4","peek","t5","Symbol","for","clear","t6","isEmpty","t7","size","prev_0","slice"],"sources":["../../../../src/components/DataGrid/hooks/useStack.tsx"],"sourcesContent":["import { useCallback, useState } from 'react'\n\n/**\n * Hook for managing a stack data structure\n * @param stack - Initial stack items\n * @param maxSize - Optional maximum stack size. When exceeded, oldest items are removed\n */ export function useStack<T>(stack: T[] = [], maxSize?: number) {\n const [currentStack, setCurrentStack] = useState<T[]>(stack)\n\n const push = useCallback(\n (item: T) => {\n setCurrentStack(prev => {\n // Push a new item onto the top of the stack\n const newStack = [...prev, item]\n\n // Enforce maximum stack size by removing oldest element (bottom of stack)\n if (maxSize && newStack.length > maxSize) {\n newStack.shift()\n }\n\n return newStack\n })\n },\n [maxSize],\n )\n\n const pop = useCallback(() => {\n if (currentStack.length === 0) return undefined\n\n const popped = currentStack[currentStack.length - 1]\n setCurrentStack(prev => prev.slice(0, -1))\n return popped\n }, [currentStack])\n\n const peek = useCallback(() => {\n return currentStack[currentStack.length - 1]\n }, [currentStack])\n\n const clear = useCallback(() => {\n setCurrentStack([])\n }, [])\n\n const isEmpty = useCallback(() => currentStack.length === 0, [currentStack])\n\n return {\n stack: currentStack,\n push,\n pop,\n clear,\n peek,\n size: currentStack.length,\n isEmpty,\n }\n}\n"],"mappings":";;;AAMI,SAAOE,EAAAC,GAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAAAC;AAAA,CAAAF,EAAA,OAAAF,IAAoCI,IAAAF,EAAA,MAAfE,IAAAJ,MAAAK,KAAAA,IAAA,EAAe,GAAfL,GAAeE,EAAA,KAAAF,GAAAE,EAAA,KAAAE;CAC7C,IAAA,CAAAG,GAAAC,KAAwCV,EAAcQ,EAAM,EAAAG;AAAA,CAAAP,EAAA,OAAAD,IAezDQ,IAAAP,EAAA,MAZDO,KAAAC,MAAA;AACEF,KAAgBG,MAAA;GAEd,IAAAC,IAAiB,CAAA,GAAID,GAAMD,EAAK;AAK/B,UAFGT,KAAWW,EAAQC,SAAUZ,KAC/BW,EAAQE,OAAQ,EAGXF;IACP;IACHV,EAAA,KAAAD,GAAAC,EAAA,KAAAO;CAbH,IAAAM,IAAaN,GAeZO;AAAA,CAAAd,EAAA,OAAAK,IAQAS,IAAAd,EAAA,MANuBc,UAAA;AACtB,MAAIT,EAAYM,WAAY,EAAC;EAE7B,IAAAI,IAAeV,EAAaA,EAAYM,SAAU;AACR,SAA1CL,EAAgBU,EAA0B,EACnCD;IACRf,EAAA,KAAAK,GAAAL,EAAA,KAAAc;CAND,IAAAG,IAAYH,GAMMI;AAAA,CAAAlB,EAAA,OAAAK,IAIjBa,IAAAlB,EAAA,MAFwBkB,UAChBb,EAAaA,EAAYM,SAAU,IAC3CX,EAAA,KAAAK,GAAAL,EAAA,KAAAkB;CAFD,IAAAC,IAAaD,GAEKE;AAAA,CAAApB,EAAA,OAAAqB,OAAAC,IAAA,4BAAA,IAEQF,UAAA;AACxBd,IAAgB,EAAE,CAAC;IACpBN,EAAA,KAAAoB,KAAAA,IAAApB,EAAA;CAFD,IAAAuB,IAAcH,GAERI;AAAA,CAAAxB,EAAA,OAAAK,EAAAM,SAEqDa,IAAAxB,EAAA,OAA/BwB,UAAMnB,EAAYM,WAAY,GAACX,EAAA,KAAAK,EAAAM,QAAAX,EAAA,MAAAwB;CAA3D,IAAAC,IAAgBD,GAA4DE;AAU3E,QAV2E1B,EAAA,QAAAK,KAAAL,EAAA,QAAAyB,KAAAzB,EAAA,QAAAmB,KAAAnB,EAAA,QAAAiB,KAAAjB,EAAA,QAAAa,KAErEa,IAAA;EAAAtB,OACEC;EAAYQ;EAAAI;EAAAM;EAAAJ;EAAAQ,MAKbtB,EAAYM;EAAOc;EAE1B,EAAAzB,EAAA,MAAAK,GAAAL,EAAA,MAAAyB,GAAAzB,EAAA,MAAAmB,GAAAnB,EAAA,MAAAiB,GAAAjB,EAAA,MAAAa,GAAAb,EAAA,MAAA0B,KAAAA,IAAA1B,EAAA,KARM0B;;AAtCE,SAAAV,EAAAY,GAAA;AAAA,QAwBiBnB,EAAIoB,MAAO,GAAG,GAAG"}
1
+ {"version":3,"file":"useStack.js","names":["useCallback","useState","useStack","t0","maxSize","$","_c","t1","undefined","stack","currentStack","setCurrentStack","t2","item","prev","newStack","length","shift","push","t3","popped","_temp","pop","t4","peek","t5","Symbol","for","clear","t6","isEmpty","t7","size","prev_0","slice"],"sources":["../../../../src/components/DataGrid/hooks/useStack.tsx"],"sourcesContent":["import { useCallback, useState } from 'react'\n\n/**\n * Hook for managing a stack data structure\n * @param stack - Initial stack items\n * @param maxSize - Optional maximum stack size. When exceeded, oldest items are removed\n */ export function useStack<T>(stack: T[] = [], maxSize?: number) {\n const [currentStack, setCurrentStack] = useState<T[]>(stack)\n\n const push = useCallback(\n (item: T) => {\n setCurrentStack(prev => {\n // Push a new item onto the top of the stack\n const newStack = [...prev, item]\n\n // Enforce maximum stack size by removing oldest element (bottom of stack)\n if (maxSize && newStack.length > maxSize) {\n newStack.shift()\n }\n\n return newStack\n })\n },\n [maxSize],\n )\n\n const pop = useCallback(() => {\n if (currentStack.length === 0) return undefined\n\n const popped = currentStack[currentStack.length - 1]\n setCurrentStack(prev => prev.slice(0, -1))\n return popped\n }, [currentStack])\n\n const peek = useCallback(() => {\n return currentStack[currentStack.length - 1]\n }, [currentStack])\n\n const clear = useCallback(() => {\n setCurrentStack([])\n }, [])\n\n const isEmpty = useCallback(() => currentStack.length === 0, [currentStack])\n\n return {\n stack: currentStack,\n push,\n pop,\n clear,\n peek,\n size: currentStack.length,\n isEmpty,\n }\n}\n"],"mappings":";;;AAMI,SAAOE,EAAAC,GAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAAAC;CAAA,AAAAF,EAAA,OAAAF,IAAoCI,IAAAF,EAAA,MAAfE,IAAAJ,MAAAK,KAAAA,IAAA,CAAA,IAAAL,GAAeE,EAAA,KAAAF,GAAAE,EAAA,KAAAE;CAC7C,IAAA,CAAAG,GAAAC,KAAwCV,EAAcQ,CAAK,GAACG;CAAA,AAAAP,EAAA,OAAAD,IAezDQ,IAAAP,EAAA,MAZDO,KAAAC,MAAA;EACEF,GAAgBG,MAAA;GAEd,IAAAC,IAAiB,CAAA,GAAID,GAAMD,CAAI;GAK9B,OAFGT,KAAWW,EAAQC,SAAUZ,KAC/BW,EAAQE,MAAO,GAGVF;EAAQ,CAChB;CAAC,GACHV,EAAA,KAAAD,GAAAC,EAAA,KAAAO;CAbH,IAAAM,IAAaN,GAeZO;CAAA,AAAAd,EAAA,OAAAK,IAQAS,IAAAd,EAAA,MANuBc,UAAA;EACtB,IAAIT,EAAYM,WAAY,GAAC;EAE7B,IAAAI,IAAeV,EAAaA,EAAYM,SAAU;EACR,OAA1CL,EAAgBU,CAAyB,GAClCD;CAAM,GACdf,EAAA,KAAAK,GAAAL,EAAA,KAAAc;CAND,IAAAG,IAAYH,GAMMI;CAAA,AAAAlB,EAAA,OAAAK,IAIjBa,IAAAlB,EAAA,MAFwBkB,UAChBb,EAAaA,EAAYM,SAAU,IAC3CX,EAAA,KAAAK,GAAAL,EAAA,KAAAkB;CAFD,IAAAC,IAAaD,GAEKE;CAAA,AAAApB,EAAA,OAAAqB,OAAAC,IAAA,2BAAA,KAEQF,UAAA;EACxBd,EAAgB,CAAA,CAAE;CAAC,GACpBN,EAAA,KAAAoB,KAAAA,IAAApB,EAAA;CAFD,IAAAuB,IAAcH,GAERI;CAAA,AAAAxB,EAAA,OAAAK,EAAAM,SAEqDa,IAAAxB,EAAA,OAA/BwB,UAAMnB,EAAYM,WAAY,GAACX,EAAA,KAAAK,EAAAM,QAAAX,EAAA,MAAAwB;CAA3D,IAAAC,IAAgBD,GAA4DE;CAU3E,OAV2E1B,EAAA,QAAAK,KAAAL,EAAA,QAAAyB,KAAAzB,EAAA,QAAAmB,KAAAnB,EAAA,QAAAiB,KAAAjB,EAAA,QAAAa,KAErEa,IAAA;EAAAtB,OACEC;EAAYQ;EAAAI;EAAAM;EAAAJ;EAAAQ,MAKbtB,EAAYM;EAAOc;CAE3B,GAACzB,EAAA,MAAAK,GAAAL,EAAA,MAAAyB,GAAAzB,EAAA,MAAAmB,GAAAnB,EAAA,MAAAiB,GAAAjB,EAAA,MAAAa,GAAAb,EAAA,MAAA0B,KAAAA,IAAA1B,EAAA,KARM0B;AAQN;AA9CQ,SAAAV,EAAAY,GAAA;CAAA,OAwBiBnB,EAAIoB,MAAO,GAAG,EAAE;AAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useCRDTModelView.js","names":["JsonNode","Model","useCallback","useMemo","useSyncExternalStore","noop","useCRDTModelView","model","$","_c","t0","bb0","_temp","api","subscribe","t1","getSnapshot"],"sources":["../../../src/components/DataGrid/useCRDTModelView.ts"],"sourcesContent":["import { JsonNode, Model } from 'json-joy/lib/json-crdt'\nimport { useCallback, useMemo, useSyncExternalStore } from 'react'\nimport noop from 'lodash-es/noop'\n\nexport function useCRDTModelView<T extends JsonNode = JsonNode>(\n model: Model<T> | null | undefined,\n) {\n const subscribe = useMemo(() => {\n if (!model) return () => noop\n return model.api.subscribe\n }, [model])\n\n const getSnapshot = useCallback(() => {\n if (!model) return null\n return model.api.getSnapshot()\n }, [model])\n\n return useSyncExternalStore(subscribe, getSnapshot)\n}\n"],"mappings":";;;;AAIA,SAAOM,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EAAAC;AAAAC,MAAA;AAIH,MAAI,CAACJ,GAAK;AAAEG,OAAOE;AAAP,SAAAD;;AACZD,MAAOH,EAAKM,IAAIC;;CAFlB,IAAAA,IAAkBJ,GAGPK;AAKA,QALAP,EAAA,OAAAD,IAKVQ,IAAAP,EAAA,MAH+BO,UACzBR,IACEA,EAAKM,IAAIG,aAAc,GADX,MAEpBR,EAAA,KAAAD,GAAAC,EAAA,KAAAO,IAEMX,EAAqBU,GAAWE,EAAY;;AAb9C,SAAAJ,IAAA;AAAA,QAIsBP"}
1
+ {"version":3,"file":"useCRDTModelView.js","names":["JsonNode","Model","useCallback","useMemo","useSyncExternalStore","noop","useCRDTModelView","model","$","_c","t0","bb0","_temp","api","subscribe","t1","getSnapshot"],"sources":["../../../src/components/DataGrid/useCRDTModelView.ts"],"sourcesContent":["import { JsonNode, Model } from 'json-joy/lib/json-crdt'\nimport { useCallback, useMemo, useSyncExternalStore } from 'react'\nimport noop from 'lodash-es/noop'\n\nexport function useCRDTModelView<T extends JsonNode = JsonNode>(\n model: Model<T> | null | undefined,\n) {\n const subscribe = useMemo(() => {\n if (!model) return () => noop\n return model.api.subscribe\n }, [model])\n\n const getSnapshot = useCallback(() => {\n if (!model) return null\n return model.api.getSnapshot()\n }, [model])\n\n return useSyncExternalStore(subscribe, getSnapshot)\n}\n"],"mappings":";;;;AAIA,SAAOM,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAAC;CAAAC,KAAA;EAIH,IAAI,CAACJ,GAAK;GAAEG,IAAOE;GAAP,MAAAD;EAAiB;EAC7BD,IAAOH,EAAKM,IAAIC;CAAU;CAF5B,IAAAA,IAAkBJ,GAGPK;CAKA,OALAP,EAAA,OAAAD,IAKVQ,IAAAP,EAAA,MAH+BO,UACzBR,IACEA,EAAKM,IAAIG,YAAa,IADV,MAEpBR,EAAA,KAAAD,GAAAC,EAAA,KAAAO,IAEMX,EAAqBU,GAAWE,CAAW;AAAC;AAb9C,SAAAJ,IAAA;CAAA,OAIsBP;AAAI"}
@@ -22,6 +22,7 @@ interface WebSocketState {
22
22
  websocketInstance: DataGridWebSocket | null;
23
23
  connectionAttemptId: number | null;
24
24
  connectionError: unknown;
25
+ websocketError: unknown;
25
26
  }
26
27
  export declare const initialWebSocketState: WebSocketState;
27
28
  /**
@@ -84,6 +85,7 @@ export declare function useDataGridWebSocket(options?: UseDataGridWebSocketOptio
84
85
  connect: (replicaId: number, sessionId: string) => void;
85
86
  presignedUrl: string | null;
86
87
  errorEstablishingWebsocketConnection: unknown;
88
+ websocketError: unknown;
87
89
  hasSufficientData: boolean;
88
90
  };
89
91
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"useDataGridWebsocket.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/useDataGridWebsocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAG/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAKvD,UAAU,cAAc;IACtB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB;;;OAGG;IACH,uBAAuB,EAAE,OAAO,CAAA;IAChC;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,YAAY,EAAE,OAAO,CAAA;IACrB,gBAAgB,EAAE;QAChB,SAAS,EAAE,MAAM,CAAA;QACjB,SAAS,EAAE,MAAM,CAAA;KAClB,GAAG,IAAI,CAAA;IACR,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAC3C,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,eAAe,EAAE,OAAO,CAAA;CACzB;AAyGD,eAAO,MAAM,qBAAqB,EAAE,cAUnC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,2BAA2B;IAC1C,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC/B,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAA;CACnC;AAED,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAoD1D,MAAM,aAAa,MAAM;;;;EA8IxC"}
1
+ {"version":3,"file":"useDataGridWebsocket.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/useDataGridWebsocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAG/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAKvD,UAAU,cAAc;IACtB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB;;;OAGG;IACH,uBAAuB,EAAE,OAAO,CAAA;IAChC;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,YAAY,EAAE,OAAO,CAAA;IACrB,gBAAgB,EAAE;QAChB,SAAS,EAAE,MAAM,CAAA;QACjB,SAAS,EAAE,MAAM,CAAA;KAClB,GAAG,IAAI,CAAA;IACR,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAC3C,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,eAAe,EAAE,OAAO,CAAA;IACxB,cAAc,EAAE,OAAO,CAAA;CACxB;AAgHD,eAAO,MAAM,qBAAqB,EAAE,cAWnC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,2BAA2B;IAC1C,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC/B,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAA;CACnC;AAED,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAsD1D,MAAM,aAAa,MAAM;;;;;EA+IxC"}
@@ -59,6 +59,10 @@ function c(e, t) {
59
59
  connectionError: t.payload,
60
60
  isConnecting: !1
61
61
  };
62
+ case "WEBSOCKET_ERROR": return {
63
+ ...e,
64
+ websocketError: t.payload
65
+ };
62
66
  default: return e;
63
67
  }
64
68
  }
@@ -71,7 +75,8 @@ var l = {
71
75
  connectionParams: null,
72
76
  websocketInstance: null,
73
77
  connectionAttemptId: null,
74
- connectionError: null
78
+ connectionError: null,
79
+ websocketError: null
75
80
  };
76
81
  function u(u) {
77
82
  let [d, f] = a(c, l), p = o(0), m = o(null), h = t(d.model), g = s(), { mutateAsync: _, isPending: v, error: y, presignedUrl: b, reset: x, clearPresignedUrl: S } = e(), C = n((e) => {
@@ -88,7 +93,11 @@ function u(u) {
88
93
  onReplicaConnected: u?.onReplicaConnected,
89
94
  onReplicaDisconnected: u?.onReplicaDisconnected,
90
95
  onSyncStart: () => f({ type: "SYNC_STARTED" }),
91
- onSyncEnd: () => f({ type: "SYNC_ENDED" })
96
+ onSyncEnd: () => f({ type: "SYNC_ENDED" }),
97
+ onError: (e) => f({
98
+ type: "WEBSOCKET_ERROR",
99
+ payload: e
100
+ })
92
101
  }), [
93
102
  C,
94
103
  u?.onGridReady,
@@ -170,6 +179,7 @@ function u(u) {
170
179
  connect: T,
171
180
  presignedUrl: b,
172
181
  errorEstablishingWebsocketConnection: d.connectionError ?? y,
182
+ websocketError: d.websocketError,
173
183
  hasSufficientData: D(d.model)
174
184
  };
175
185
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useDataGridWebsocket.js","names":["GridModel","useCRDTModelView","useCallback","useEffect","useMemo","useReducer","useRef","DataGridWebSocket","useEstablishWebsocketConnection","useDocumentVisibility","WebSocketState","model","hasCompletedInitialSync","isSyncing","isConnected","isConnecting","connectionParams","replicaId","sessionId","websocketInstance","connectionAttemptId","connectionError","WebSocketAction","type","payload","attemptId","websocketReducer","state","action","isSameConnection","initialWebSocketState","UseDataGridWebSocketOptions","onGridReady","onReplicaConnected","onReplicaDisconnected","useDataGridWebSocket","options","dispatch","connectionAttemptCounter","activeConnectionAttemptIdRef","modelSnapshot","isDocumentVisible","mutateAsync","establishWebsocketConnection","isPending","isEstablishingWebsocketConnection","error","errorEstablishingWebsocketConnection","presignedUrl","reset","resetEstablishWebsocketConnection","clearPresignedUrl","handleModelCreate","newModel","websocketOptionsWithoutModel","onStatusChange","open","onModelCreate","onSyncStart","onSyncEnd","connect","isDifferentConnection","current","websocketOptions","then","ws","disconnect","catch","err","console","previousConnectionParams","previous","isModelRenderable","api","getSnapshot","columnNames","columnOrder","rows","columnsReady","length","orderReady","rowsReady","hasSufficientData"],"sources":["../../../src/components/DataGrid/useDataGridWebsocket.ts"],"sourcesContent":["import { GridModel } from '@/components/DataGrid/DataGridTypes'\nimport { useCRDTModelView } from '@/components/DataGrid/useCRDTModelView'\nimport { useCallback, useEffect, useMemo, useReducer, useRef } from 'react'\nimport { DataGridWebSocket } from './DataGridWebSocket'\nimport { useEstablishWebsocketConnection } from '@/synapse-queries/grid/useEstablishWebsocketConnection'\nimport { useDocumentVisibility } from '@react-hookz/web'\n\n// State type\ninterface WebSocketState {\n model: GridModel | null\n /**\n * True if the WebSocket has finished the initial sync and can process CRDT updates.\n * Corresponds to the `GRID_READY` action.\n */\n hasCompletedInitialSync: boolean\n /**\n * True while a clock-sync exchange is in progress. Set on every outgoing\n * `synchronize-clock` and cleared on `ResponseComplete`, which the server\n * sends once per exchange to signal \"we're synchronized\" — not per request.\n */\n isSyncing: boolean\n isConnected: boolean\n isConnecting: boolean\n connectionParams: {\n replicaId: number\n sessionId: string\n } | null\n websocketInstance: DataGridWebSocket | null\n connectionAttemptId: number | null\n connectionError: unknown\n}\n\n// Action types\ntype WebSocketAction =\n | {\n type: 'CONNECT_REQUESTED'\n payload: { replicaId: number; sessionId: string; attemptId: number }\n }\n | { type: 'CONNECTION_ESTABLISHED'; payload: DataGridWebSocket }\n | { type: 'CONNECTION_OPENED' }\n | { type: 'CONNECTION_CLOSED' }\n | { type: 'GRID_READY' }\n | { type: 'SYNC_STARTED' }\n | { type: 'SYNC_ENDED' }\n | { type: 'MODEL_CREATED'; payload: GridModel }\n | { type: 'CONNECTION_ERROR'; payload: unknown }\n\n// Reducer function\nfunction websocketReducer(\n state: WebSocketState,\n action: WebSocketAction,\n): WebSocketState {\n switch (action.type) {\n case 'CONNECT_REQUESTED': {\n const isSameConnection =\n state.connectionParams &&\n state.connectionParams.replicaId === action.payload.replicaId &&\n state.connectionParams.sessionId === action.payload.sessionId\n\n return {\n ...state,\n connectionParams: {\n replicaId: action.payload.replicaId,\n sessionId: action.payload.sessionId,\n },\n hasCompletedInitialSync: isSameConnection\n ? state.hasCompletedInitialSync\n : false,\n isSyncing: false,\n model: isSameConnection ? state.model : null,\n isConnected: false,\n isConnecting: false,\n connectionAttemptId: action.payload.attemptId,\n connectionError: null,\n }\n }\n\n case 'CONNECTION_ESTABLISHED':\n return {\n ...state,\n websocketInstance: action.payload,\n isConnecting: true,\n }\n\n case 'CONNECTION_OPENED':\n return {\n ...state,\n isConnected: true,\n isConnecting: false,\n }\n\n case 'CONNECTION_CLOSED':\n return {\n ...state,\n isConnected: false,\n isConnecting: false,\n isSyncing: false,\n }\n\n case 'GRID_READY':\n return {\n ...state,\n hasCompletedInitialSync: true,\n }\n\n case 'SYNC_STARTED':\n return {\n ...state,\n isSyncing: true,\n }\n\n case 'SYNC_ENDED':\n return {\n ...state,\n isSyncing: false,\n }\n\n case 'MODEL_CREATED':\n return {\n ...state,\n model: action.payload,\n }\n\n case 'CONNECTION_ERROR':\n return {\n ...state,\n connectionError: action.payload,\n isConnecting: false,\n }\n\n default:\n return state\n }\n}\n\nexport const initialWebSocketState: WebSocketState = {\n model: null,\n hasCompletedInitialSync: false,\n isSyncing: false,\n isConnected: false,\n isConnecting: false,\n connectionParams: null,\n websocketInstance: null,\n connectionAttemptId: null,\n connectionError: null,\n}\n\n/**\n * Custom hook to manage a DataGrid WebSocket connection.\n * Handles:\n * - Fetching presigned URLs via a mutation hook\n * - Instantiating the DataGridWebSocket\n * - Connection status tracking\n * - Reconnection on disconnect\n * - Grid model updates and snapshot tracking\n */\nexport interface UseDataGridWebSocketOptions {\n onGridReady?: () => void\n onReplicaConnected?: () => void\n onReplicaDisconnected?: () => void\n}\n\nexport function useDataGridWebSocket(options?: UseDataGridWebSocketOptions) {\n const [state, dispatch] = useReducer(websocketReducer, initialWebSocketState)\n\n const connectionAttemptCounter = useRef(0)\n const activeConnectionAttemptIdRef = useRef<number | null>(null)\n\n const modelSnapshot = useCRDTModelView(state.model)\n\n const isDocumentVisible = useDocumentVisibility()\n\n const {\n mutateAsync: establishWebsocketConnection,\n isPending: isEstablishingWebsocketConnection,\n error: errorEstablishingWebsocketConnection,\n presignedUrl,\n reset: resetEstablishWebsocketConnection,\n clearPresignedUrl,\n } = useEstablishWebsocketConnection()\n\n // Update model creation handler - only set model, don't reset to null on disconnect\n const handleModelCreate = useCallback(\n (newModel: GridModel) => {\n dispatch({ type: 'MODEL_CREATED', payload: newModel })\n },\n [dispatch],\n )\n\n // Memoize websocket options to prevent unnecessary re-renders (excluding model to avoid circular deps)\n const websocketOptionsWithoutModel = useMemo(\n () => ({\n onGridReady: () => {\n dispatch({ type: 'GRID_READY' })\n options?.onGridReady?.()\n },\n onStatusChange: (open: boolean) =>\n dispatch({ type: open ? 'CONNECTION_OPENED' : 'CONNECTION_CLOSED' }),\n onModelCreate: handleModelCreate,\n onReplicaConnected: options?.onReplicaConnected,\n onReplicaDisconnected: options?.onReplicaDisconnected,\n onSyncStart: () => dispatch({ type: 'SYNC_STARTED' }),\n onSyncEnd: () => dispatch({ type: 'SYNC_ENDED' }),\n }),\n [\n handleModelCreate,\n options?.onGridReady,\n options?.onReplicaConnected,\n options?.onReplicaDisconnected,\n ],\n )\n\n // Initiate (or re-initiate) a connection\n const connect = useCallback(\n (replicaId: number, sessionId: string) => {\n resetEstablishWebsocketConnection()\n\n const isDifferentConnection =\n !state.connectionParams ||\n state.connectionParams.replicaId !== replicaId ||\n state.connectionParams.sessionId !== sessionId\n\n if (isDifferentConnection) {\n clearPresignedUrl()\n }\n\n connectionAttemptCounter.current += 1\n const attemptId = connectionAttemptCounter.current\n\n dispatch({\n type: 'CONNECT_REQUESTED',\n payload: { replicaId, sessionId, attemptId },\n })\n },\n [\n dispatch,\n state.connectionParams,\n resetEstablishWebsocketConnection,\n clearPresignedUrl,\n connectionAttemptCounter,\n ],\n )\n\n /**\n * Establish the WebSocket connection when conditions are met.\n * Uses the current model state at connection time for reconnections to the same session.\n * Note: Changes to `model` alone do NOT trigger reconnection - only changes to connection\n * params, visibility, or connection status will trigger a new connection attempt.\n */\n useEffect(() => {\n // Don't attempt connection if conditions aren't met\n const { connectionParams, connectionAttemptId } = state\n\n if (\n !connectionParams ||\n connectionAttemptId === null ||\n state.isConnected ||\n state.isConnecting ||\n isEstablishingWebsocketConnection ||\n errorEstablishingWebsocketConnection ||\n state.connectionError ||\n !isDocumentVisible\n ) {\n return\n }\n\n activeConnectionAttemptIdRef.current = connectionAttemptId\n\n // Use current model state for reconnections to same session\n // (model may have been created by a previous connection)\n establishWebsocketConnection({\n replicaId: connectionParams.replicaId,\n sessionId: connectionParams.sessionId,\n websocketOptions: {\n ...websocketOptionsWithoutModel,\n model: state.model, // Current model at connection time\n },\n })\n .then(ws => {\n if (activeConnectionAttemptIdRef.current !== connectionAttemptId) {\n ws.disconnect()\n return\n }\n\n dispatch({ type: 'CONNECTION_ESTABLISHED', payload: ws })\n })\n .catch(err => {\n dispatch({ type: 'CONNECTION_ERROR', payload: err })\n console.error('Failed to establish WebSocket', err)\n })\n }, [\n state,\n state.connectionParams,\n state.connectionAttemptId,\n state.isConnected,\n state.isConnecting,\n isEstablishingWebsocketConnection,\n errorEstablishingWebsocketConnection,\n isDocumentVisible,\n establishWebsocketConnection,\n websocketOptionsWithoutModel,\n ])\n\n const previousConnectionParams =\n useRef<WebSocketState['connectionParams']>(null)\n\n useEffect(() => {\n const previous = previousConnectionParams.current\n const current = state.connectionParams\n\n if (\n previous &&\n current &&\n (previous.replicaId !== current.replicaId ||\n previous.sessionId !== current.sessionId)\n ) {\n state.websocketInstance?.disconnect()\n }\n\n previousConnectionParams.current = current\n }, [state.connectionParams, state.websocketInstance])\n\n useEffect(() => {\n return () => {\n state.websocketInstance?.disconnect()\n activeConnectionAttemptIdRef.current = null\n }\n }, [state.websocketInstance])\n\n /**\n * Checks if the model snapshot contains the minimum data required for rendering (columns and rows).\n */\n function isModelRenderable(model: GridModel | null) {\n if (!model || !model.api.getSnapshot() || !modelSnapshot) {\n return false\n }\n const { columnNames, columnOrder, rows } = modelSnapshot\n const columnsReady = columnNames.length >= 1\n const orderReady = columnOrder.length >= 1\n const rowsReady = rows.length >= 0\n return columnsReady && orderReady && rowsReady\n }\n\n return {\n isConnected: state.isConnected,\n websocketInstance: state.websocketInstance,\n hasCompletedInitialSync: state.hasCompletedInitialSync,\n isSyncing: state.isSyncing,\n model: state.model,\n modelSnapshot,\n connect,\n presignedUrl,\n errorEstablishingWebsocketConnection:\n state.connectionError ?? errorEstablishingWebsocketConnection,\n hasSufficientData: isModelRenderable(state.model),\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useDataGridWebsocket.js","names":["GridModel","useCRDTModelView","useCallback","useEffect","useMemo","useReducer","useRef","DataGridWebSocket","useEstablishWebsocketConnection","useDocumentVisibility","WebSocketState","model","hasCompletedInitialSync","isSyncing","isConnected","isConnecting","connectionParams","replicaId","sessionId","websocketInstance","connectionAttemptId","connectionError","websocketError","WebSocketAction","type","payload","attemptId","websocketReducer","state","action","isSameConnection","initialWebSocketState","UseDataGridWebSocketOptions","onGridReady","onReplicaConnected","onReplicaDisconnected","useDataGridWebSocket","options","dispatch","connectionAttemptCounter","activeConnectionAttemptIdRef","modelSnapshot","isDocumentVisible","mutateAsync","establishWebsocketConnection","isPending","isEstablishingWebsocketConnection","error","errorEstablishingWebsocketConnection","presignedUrl","reset","resetEstablishWebsocketConnection","clearPresignedUrl","handleModelCreate","newModel","websocketOptionsWithoutModel","onStatusChange","open","onModelCreate","onSyncStart","onSyncEnd","onError","connect","isDifferentConnection","current","websocketOptions","then","ws","disconnect","catch","err","console","previousConnectionParams","previous","isModelRenderable","api","getSnapshot","columnNames","columnOrder","rows","columnsReady","length","orderReady","rowsReady","hasSufficientData"],"sources":["../../../src/components/DataGrid/useDataGridWebsocket.ts"],"sourcesContent":["import { GridModel } from '@/components/DataGrid/DataGridTypes'\nimport { useCRDTModelView } from '@/components/DataGrid/useCRDTModelView'\nimport { useCallback, useEffect, useMemo, useReducer, useRef } from 'react'\nimport { DataGridWebSocket } from './DataGridWebSocket'\nimport { useEstablishWebsocketConnection } from '@/synapse-queries/grid/useEstablishWebsocketConnection'\nimport { useDocumentVisibility } from '@react-hookz/web'\n\n// State type\ninterface WebSocketState {\n model: GridModel | null\n /**\n * True if the WebSocket has finished the initial sync and can process CRDT updates.\n * Corresponds to the `GRID_READY` action.\n */\n hasCompletedInitialSync: boolean\n /**\n * True while a clock-sync exchange is in progress. Set on every outgoing\n * `synchronize-clock` and cleared on `ResponseComplete`, which the server\n * sends once per exchange to signal \"we're synchronized\" — not per request.\n */\n isSyncing: boolean\n isConnected: boolean\n isConnecting: boolean\n connectionParams: {\n replicaId: number\n sessionId: string\n } | null\n websocketInstance: DataGridWebSocket | null\n connectionAttemptId: number | null\n connectionError: unknown\n websocketError: unknown\n}\n\n// Action types\ntype WebSocketAction =\n | {\n type: 'CONNECT_REQUESTED'\n payload: { replicaId: number; sessionId: string; attemptId: number }\n }\n | { type: 'CONNECTION_ESTABLISHED'; payload: DataGridWebSocket }\n | { type: 'CONNECTION_OPENED' }\n | { type: 'CONNECTION_CLOSED' }\n | { type: 'GRID_READY' }\n | { type: 'SYNC_STARTED' }\n | { type: 'SYNC_ENDED' }\n | { type: 'MODEL_CREATED'; payload: GridModel }\n | { type: 'CONNECTION_ERROR'; payload: unknown }\n | { type: 'WEBSOCKET_ERROR'; payload: unknown }\n\n// Reducer function\nfunction websocketReducer(\n state: WebSocketState,\n action: WebSocketAction,\n): WebSocketState {\n switch (action.type) {\n case 'CONNECT_REQUESTED': {\n const isSameConnection =\n state.connectionParams &&\n state.connectionParams.replicaId === action.payload.replicaId &&\n state.connectionParams.sessionId === action.payload.sessionId\n\n return {\n ...state,\n connectionParams: {\n replicaId: action.payload.replicaId,\n sessionId: action.payload.sessionId,\n },\n hasCompletedInitialSync: isSameConnection\n ? state.hasCompletedInitialSync\n : false,\n isSyncing: false,\n model: isSameConnection ? state.model : null,\n isConnected: false,\n isConnecting: false,\n connectionAttemptId: action.payload.attemptId,\n connectionError: null,\n }\n }\n\n case 'CONNECTION_ESTABLISHED':\n return {\n ...state,\n websocketInstance: action.payload,\n isConnecting: true,\n }\n\n case 'CONNECTION_OPENED':\n return {\n ...state,\n isConnected: true,\n isConnecting: false,\n }\n\n case 'CONNECTION_CLOSED':\n return {\n ...state,\n isConnected: false,\n isConnecting: false,\n isSyncing: false,\n }\n\n case 'GRID_READY':\n return {\n ...state,\n hasCompletedInitialSync: true,\n }\n\n case 'SYNC_STARTED':\n return {\n ...state,\n isSyncing: true,\n }\n\n case 'SYNC_ENDED':\n return {\n ...state,\n isSyncing: false,\n }\n\n case 'MODEL_CREATED':\n return {\n ...state,\n model: action.payload,\n }\n\n case 'CONNECTION_ERROR':\n return {\n ...state,\n connectionError: action.payload,\n isConnecting: false,\n }\n\n case 'WEBSOCKET_ERROR':\n return {\n ...state,\n websocketError: action.payload,\n }\n\n default:\n return state\n }\n}\n\nexport const initialWebSocketState: WebSocketState = {\n model: null,\n hasCompletedInitialSync: false,\n isSyncing: false,\n isConnected: false,\n isConnecting: false,\n connectionParams: null,\n websocketInstance: null,\n connectionAttemptId: null,\n connectionError: null,\n websocketError: null,\n}\n\n/**\n * Custom hook to manage a DataGrid WebSocket connection.\n * Handles:\n * - Fetching presigned URLs via a mutation hook\n * - Instantiating the DataGridWebSocket\n * - Connection status tracking\n * - Reconnection on disconnect\n * - Grid model updates and snapshot tracking\n */\nexport interface UseDataGridWebSocketOptions {\n onGridReady?: () => void\n onReplicaConnected?: () => void\n onReplicaDisconnected?: () => void\n}\n\nexport function useDataGridWebSocket(options?: UseDataGridWebSocketOptions) {\n const [state, dispatch] = useReducer(websocketReducer, initialWebSocketState)\n\n const connectionAttemptCounter = useRef(0)\n const activeConnectionAttemptIdRef = useRef<number | null>(null)\n\n const modelSnapshot = useCRDTModelView(state.model)\n\n const isDocumentVisible = useDocumentVisibility()\n\n const {\n mutateAsync: establishWebsocketConnection,\n isPending: isEstablishingWebsocketConnection,\n error: errorEstablishingWebsocketConnection,\n presignedUrl,\n reset: resetEstablishWebsocketConnection,\n clearPresignedUrl,\n } = useEstablishWebsocketConnection()\n\n // Update model creation handler - only set model, don't reset to null on disconnect\n const handleModelCreate = useCallback(\n (newModel: GridModel) => {\n dispatch({ type: 'MODEL_CREATED', payload: newModel })\n },\n [dispatch],\n )\n\n // Memoize websocket options to prevent unnecessary re-renders (excluding model to avoid circular deps)\n const websocketOptionsWithoutModel = useMemo(\n () => ({\n onGridReady: () => {\n dispatch({ type: 'GRID_READY' })\n options?.onGridReady?.()\n },\n onStatusChange: (open: boolean) =>\n dispatch({ type: open ? 'CONNECTION_OPENED' : 'CONNECTION_CLOSED' }),\n onModelCreate: handleModelCreate,\n onReplicaConnected: options?.onReplicaConnected,\n onReplicaDisconnected: options?.onReplicaDisconnected,\n onSyncStart: () => dispatch({ type: 'SYNC_STARTED' }),\n onSyncEnd: () => dispatch({ type: 'SYNC_ENDED' }),\n onError: (error: unknown) =>\n dispatch({ type: 'WEBSOCKET_ERROR', payload: error }),\n }),\n [\n handleModelCreate,\n options?.onGridReady,\n options?.onReplicaConnected,\n options?.onReplicaDisconnected,\n ],\n )\n\n // Initiate (or re-initiate) a connection\n const connect = useCallback(\n (replicaId: number, sessionId: string) => {\n resetEstablishWebsocketConnection()\n\n const isDifferentConnection =\n !state.connectionParams ||\n state.connectionParams.replicaId !== replicaId ||\n state.connectionParams.sessionId !== sessionId\n\n if (isDifferentConnection) {\n clearPresignedUrl()\n }\n\n connectionAttemptCounter.current += 1\n const attemptId = connectionAttemptCounter.current\n\n dispatch({\n type: 'CONNECT_REQUESTED',\n payload: { replicaId, sessionId, attemptId },\n })\n },\n [\n dispatch,\n state.connectionParams,\n resetEstablishWebsocketConnection,\n clearPresignedUrl,\n connectionAttemptCounter,\n ],\n )\n\n /**\n * Establish the WebSocket connection when conditions are met.\n * Uses the current model state at connection time for reconnections to the same session.\n * Note: Changes to `model` alone do NOT trigger reconnection - only changes to connection\n * params, visibility, or connection status will trigger a new connection attempt.\n */\n useEffect(() => {\n // Don't attempt connection if conditions aren't met\n const { connectionParams, connectionAttemptId } = state\n\n if (\n !connectionParams ||\n connectionAttemptId === null ||\n state.isConnected ||\n state.isConnecting ||\n isEstablishingWebsocketConnection ||\n errorEstablishingWebsocketConnection ||\n state.connectionError ||\n !isDocumentVisible\n ) {\n return\n }\n\n activeConnectionAttemptIdRef.current = connectionAttemptId\n\n // Use current model state for reconnections to same session\n // (model may have been created by a previous connection)\n establishWebsocketConnection({\n replicaId: connectionParams.replicaId,\n sessionId: connectionParams.sessionId,\n websocketOptions: {\n ...websocketOptionsWithoutModel,\n model: state.model, // Current model at connection time\n },\n })\n .then(ws => {\n if (activeConnectionAttemptIdRef.current !== connectionAttemptId) {\n ws.disconnect()\n return\n }\n\n dispatch({ type: 'CONNECTION_ESTABLISHED', payload: ws })\n })\n .catch(err => {\n dispatch({ type: 'CONNECTION_ERROR', payload: err })\n console.error('Failed to establish WebSocket', err)\n })\n }, [\n state,\n state.connectionParams,\n state.connectionAttemptId,\n state.isConnected,\n state.isConnecting,\n isEstablishingWebsocketConnection,\n errorEstablishingWebsocketConnection,\n isDocumentVisible,\n establishWebsocketConnection,\n websocketOptionsWithoutModel,\n ])\n\n const previousConnectionParams =\n useRef<WebSocketState['connectionParams']>(null)\n\n useEffect(() => {\n const previous = previousConnectionParams.current\n const current = state.connectionParams\n\n if (\n previous &&\n current &&\n (previous.replicaId !== current.replicaId ||\n previous.sessionId !== current.sessionId)\n ) {\n state.websocketInstance?.disconnect()\n }\n\n previousConnectionParams.current = current\n }, [state.connectionParams, state.websocketInstance])\n\n useEffect(() => {\n return () => {\n state.websocketInstance?.disconnect()\n activeConnectionAttemptIdRef.current = null\n }\n }, [state.websocketInstance])\n\n /**\n * Checks if the model snapshot contains the minimum data required for rendering (columns and rows).\n */\n function isModelRenderable(model: GridModel | null) {\n if (!model || !model.api.getSnapshot() || !modelSnapshot) {\n return false\n }\n const { columnNames, columnOrder, rows } = modelSnapshot\n const columnsReady = columnNames.length >= 1\n const orderReady = columnOrder.length >= 1\n const rowsReady = rows.length >= 0\n return columnsReady && orderReady && rowsReady\n }\n\n return {\n isConnected: state.isConnected,\n websocketInstance: state.websocketInstance,\n hasCompletedInitialSync: state.hasCompletedInitialSync,\n isSyncing: state.isSyncing,\n model: state.model,\n modelSnapshot,\n connect,\n presignedUrl,\n errorEstablishingWebsocketConnection:\n state.connectionError ?? errorEstablishingWebsocketConnection,\n websocketError: state.websocketError,\n hasSufficientData: isModelRenderable(state.model),\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useInitializeGridConnection.js","names":["useCreateGridReplica","useCreateGridSession","useSynapseContext","CreateGridRequest","GridReplica","GridSession","useMutation","UseMutationOptions","CreateOrGetGridSessionInput","createGridRequest","sessionId","useCreateOrGetExistingGridSession","$","_c","mutateAsync","startGridSession","synapseClient","t0","mutationFn","t1","Error","gridSessionResponse","console","log","gridSession","gridServicesClient","getRepoV1GridSessionSessionId","useInitializeGridConnection","options","createOrGetSession","createReplicaId","sessionIdArg","session","createReplicaResponse","replica","t2","error","cause"],"sources":["../../../src/components/DataGrid/useInitializeGridConnection.ts"],"sourcesContent":["import {\n useCreateGridReplica,\n useCreateGridSession,\n} from '@/synapse-queries/grid/useGridSession'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport {\n CreateGridRequest,\n GridReplica,\n GridSession,\n} from '@sage-bionetworks/synapse-client'\nimport { useMutation, UseMutationOptions } from '@tanstack/react-query'\n\nexport type CreateOrGetGridSessionInput = {\n createGridRequest?: CreateGridRequest\n sessionId?: string\n}\n\n/**\n * Create a new grid session or retrieve an existing one based on the provided SQL query or session ID.\n */\nfunction useCreateOrGetExistingGridSession() {\n const { mutateAsync: startGridSession } = useCreateGridSession()\n const { synapseClient } = useSynapseContext()\n return useMutation<GridSession, unknown, CreateOrGetGridSessionInput>({\n mutationFn: async ({ createGridRequest, sessionId }) => {\n if (!(createGridRequest || sessionId)) {\n throw new Error(\n 'Must provide either a CreateGridRequest or sessionId to create or get a grid session.',\n )\n }\n\n if (createGridRequest) {\n const gridSessionResponse = await startGridSession(createGridRequest)\n console.log('Grid session started:', gridSessionResponse)\n return gridSessionResponse.gridSession!\n }\n\n // The input is a sessionId, so retrieve the session object\n console.log(`Joining existing session ID: ${sessionId}`)\n return await synapseClient.gridServicesClient.getRepoV1GridSessionSessionId(\n {\n sessionId: sessionId!,\n },\n )\n },\n })\n}\n\n/**\n * Mutation to establish a grid connection by creating or getting an existing session and creating a replica.\n *\n * @param gridSqlOrSessionId - The SQL query or session ID to use for the grid connection.\n * @param schemaId - Optional schema ID to associate with the session.\n * @param options\n */\nexport default function useInitializeGridConnection(\n options?: Omit<\n UseMutationOptions<\n { session: GridSession; replica: GridReplica },\n unknown,\n CreateOrGetGridSessionInput\n >,\n 'mutationFn'\n >,\n) {\n const { mutateAsync: createOrGetSession } =\n useCreateOrGetExistingGridSession()\n const { mutateAsync: createReplicaId } = useCreateGridReplica()\n\n return useMutation<\n { session: GridSession; replica: GridReplica },\n unknown,\n CreateOrGetGridSessionInput\n >({\n ...options,\n mutationFn: async ({ createGridRequest, sessionId: sessionIdArg }) => {\n if (!(createGridRequest || sessionIdArg)) {\n throw new Error(\n 'Must provide either a SQL query, recordSetId, or sessionId to initialize grid connection.',\n )\n }\n const session = await createOrGetSession({\n createGridRequest,\n sessionId: sessionIdArg,\n })\n const sessionId = session.sessionId!\n try {\n const createReplicaResponse = await createReplicaId(sessionId)\n console.log('Replica created:', createReplicaResponse)\n const replica = createReplicaResponse.replica!\n\n return {\n session,\n replica,\n }\n } catch (error) {\n throw new Error('Error starting session:', { cause: error })\n }\n },\n })\n}\n"],"mappings":";;;;;AAoBA,SAAAW,IAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EACE,EAAAC,aAAAC,MAA0Cd,GAAsB,EAChE,EAAAe,qBAA0Bd,GAAmB,EAAAe;AAuB5C,QAvB4CL,EAAA,OAAAG,KAAAH,EAAA,OAAAI,KACyBC,IAAA,EAAAC,YACxD,OAAAC,MAAA;EAAO,IAAA,EAAAV,sBAAAC,iBAAAS;AACjB,MAAI,EAAEV,KAAAC,GACJ,OAAUU,MACR,wFACD;AAGH,MAAIX,GAAiB;GACnB,IAAAY,IAA4B,MAAMN,EAAiBN,EAAkB;AACZ,UAAzDa,QAAOC,IAAK,yBAAyBF,EAAoB,EAClDA,EAAmBG;;AAI4B,SAAxDF,QAAOC,IAAK,gCAAgCb,IAAY,EACjD,MAAMM,EAAaS,mBAAmBC,8BAC3C,EAAAhB,cAGF,CAAC;IAEJ,EAAAE,EAAA,KAAAG,GAAAH,EAAA,KAAAI,GAAAJ,EAAA,KAAAK,KAAAA,IAAAL,EAAA,IAtBMN,EAA+DW,EAsBpE;;AAUJ,SAAeU,EAAAC,GAAA;CAAA,IAAAhB,IAAAC,EAAA,EAAA,EAUb,EAAAC,aAAAe,MACElB,GAAmC,EACrC,EAAAG,aAAAgB,MAAyC9B,GAAsB,EAAAiB;AAAA,CAAAL,EAAA,OAAAiB,KAAAjB,EAAA,OAAAkB,KAQjDb,IAAA,OAAAE,MAAA;EAAO,IAAA,EAAAV,sBAAAC,WAAAqB,MAAAZ;AACjB,MAAI,EAAEV,KAAAsB,GACJ,OAAUX,MACR,4FACD;EAEH,IAAAY,IAAgB,MAAMH,EAAmB;GAAApB;GAAAC,WAE5BqB;GACZ,CAAC,EACFrB,IAAkBsB,EAAOtB;AACzB,MAAA;GACE,IAAAuB,IAA8B,MAAMH,EAAgBpB,EAAU;AAEhB,UAD9CY,QAAOC,IAAK,oBAAoBU,EAAsB,EAG/C;IAAAD;IAAAE,SAFSD,EAAqBC;IAKpC;WAAAC,GAAA;AAED,SAAUf,MAAM,2BAA2B,EAAAiB,OAASD,GAAO,CAAC;;IAE/DxB,EAAA,KAAAiB,GAAAjB,EAAA,KAAAkB,GAAAlB,EAAA,KAAAK,KAAAA,IAAAL,EAAA;CAAA,IAAAO;AACF,QADEP,EAAA,OAAAgB,KAAAhB,EAAA,OAAAK,KAzBDE,IAAA;EAAA,GACGS;EAAOV,YACED;EAwBb,EAAAL,EAAA,KAAAgB,GAAAhB,EAAA,KAAAK,GAAAL,EAAA,KAAAO,KAAAA,IAAAP,EAAA,IA9BMN,EAILa,EA0BA"}
1
+ {"version":3,"file":"useInitializeGridConnection.js","names":["useCreateGridReplica","useCreateGridSession","useSynapseContext","CreateGridRequest","GridReplica","GridSession","useMutation","UseMutationOptions","CreateOrGetGridSessionInput","createGridRequest","sessionId","useCreateOrGetExistingGridSession","$","_c","mutateAsync","startGridSession","synapseClient","t0","mutationFn","t1","Error","gridSessionResponse","console","log","gridSession","gridServicesClient","getRepoV1GridSessionSessionId","useInitializeGridConnection","options","createOrGetSession","createReplicaId","sessionIdArg","session","createReplicaResponse","replica","t2","error","cause"],"sources":["../../../src/components/DataGrid/useInitializeGridConnection.ts"],"sourcesContent":["import {\n useCreateGridReplica,\n useCreateGridSession,\n} from '@/synapse-queries/grid/useGridSession'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport {\n CreateGridRequest,\n GridReplica,\n GridSession,\n} from '@sage-bionetworks/synapse-client'\nimport { useMutation, UseMutationOptions } from '@tanstack/react-query'\n\nexport type CreateOrGetGridSessionInput = {\n createGridRequest?: CreateGridRequest\n sessionId?: string\n}\n\n/**\n * Create a new grid session or retrieve an existing one based on the provided SQL query or session ID.\n */\nfunction useCreateOrGetExistingGridSession() {\n const { mutateAsync: startGridSession } = useCreateGridSession()\n const { synapseClient } = useSynapseContext()\n return useMutation<GridSession, unknown, CreateOrGetGridSessionInput>({\n mutationFn: async ({ createGridRequest, sessionId }) => {\n if (!(createGridRequest || sessionId)) {\n throw new Error(\n 'Must provide either a CreateGridRequest or sessionId to create or get a grid session.',\n )\n }\n\n if (createGridRequest) {\n const gridSessionResponse = await startGridSession(createGridRequest)\n console.log('Grid session started:', gridSessionResponse)\n return gridSessionResponse.gridSession!\n }\n\n // The input is a sessionId, so retrieve the session object\n console.log(`Joining existing session ID: ${sessionId}`)\n return await synapseClient.gridServicesClient.getRepoV1GridSessionSessionId(\n {\n sessionId: sessionId!,\n },\n )\n },\n })\n}\n\n/**\n * Mutation to establish a grid connection by creating or getting an existing session and creating a replica.\n *\n * @param gridSqlOrSessionId - The SQL query or session ID to use for the grid connection.\n * @param schemaId - Optional schema ID to associate with the session.\n * @param options\n */\nexport default function useInitializeGridConnection(\n options?: Omit<\n UseMutationOptions<\n { session: GridSession; replica: GridReplica },\n unknown,\n CreateOrGetGridSessionInput\n >,\n 'mutationFn'\n >,\n) {\n const { mutateAsync: createOrGetSession } =\n useCreateOrGetExistingGridSession()\n const { mutateAsync: createReplicaId } = useCreateGridReplica()\n\n return useMutation<\n { session: GridSession; replica: GridReplica },\n unknown,\n CreateOrGetGridSessionInput\n >({\n ...options,\n mutationFn: async ({ createGridRequest, sessionId: sessionIdArg }) => {\n if (!(createGridRequest || sessionIdArg)) {\n throw new Error(\n 'Must provide either a SQL query, recordSetId, or sessionId to initialize grid connection.',\n )\n }\n const session = await createOrGetSession({\n createGridRequest,\n sessionId: sessionIdArg,\n })\n const sessionId = session.sessionId!\n try {\n const createReplicaResponse = await createReplicaId(sessionId)\n console.log('Replica created:', createReplicaResponse)\n const replica = createReplicaResponse.replica!\n\n return {\n session,\n replica,\n }\n } catch (error) {\n throw new Error('Error starting session:', { cause: error })\n }\n },\n })\n}\n"],"mappings":";;;;;AAoBA,SAAAW,IAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GACE,EAAAC,aAAAC,MAA0Cd,EAAqB,GAC/D,EAAAe,qBAA0Bd,EAAkB,GAACe;CAuB5C,OAvB4CL,EAAA,OAAAG,KAAAH,EAAA,OAAAI,KACyBC,IAAA,EAAAC,YACxD,OAAAC,MAAA;EAAO,IAAA,EAAAV,sBAAAC,iBAAAS;EACjB,IAAI,EAAEV,KAAAC,IACJ,MAAUU,MACR,uFACF;EAGF,IAAIX,GAAiB;GACnB,IAAAY,IAA4B,MAAMN,EAAiBN,CAAiB;GACX,OAAzDa,QAAOC,IAAK,yBAAyBF,CAAmB,GACjDA,EAAmBG;EAAY;EAIgB,OAAxDF,QAAOC,IAAK,gCAAgCb,GAAW,GAChD,MAAMM,EAAaS,mBAAmBC,8BAC3C,EAAAhB,aAEA,CACF;CAAC,EAEL,GAACE,EAAA,KAAAG,GAAAH,EAAA,KAAAI,GAAAJ,EAAA,KAAAK,KAAAA,IAAAL,EAAA,IAtBMN,EAA+DW,CAsBrE;AAAC;AAUJ,SAAeU,EAAAC,GAAA;CAAA,IAAAhB,IAAAC,EAAA,CAAA,GAUb,EAAAC,aAAAe,MACElB,EAAkC,GACpC,EAAAG,aAAAgB,MAAyC9B,EAAqB,GAACiB;CAAA,AAAAL,EAAA,OAAAiB,KAAAjB,EAAA,OAAAkB,KAQjDb,IAAA,OAAAE,MAAA;EAAO,IAAA,EAAAV,sBAAAC,WAAAqB,MAAAZ;EACjB,IAAI,EAAEV,KAAAsB,IACJ,MAAUX,MACR,2FACF;EAEF,IAAAY,IAAgB,MAAMH,EAAmB;GAAApB;GAAAC,WAE5BqB;EACb,CAAC,GACDrB,IAAkBsB,EAAOtB;EACzB,IAAA;GACE,IAAAuB,IAA8B,MAAMH,EAAgBpB,CAAS;GAEf,OAD9CY,QAAOC,IAAK,oBAAoBU,CAAqB,GAG9C;IAAAD;IAAAE,SAFSD,EAAqBC;GAKrC;EAAC,SAAAC,GAAA;GAED,MAAUf,MAAM,2BAA2B,EAAAiB,OAASD,EAAM,CAAC;EAAC;CAC7D,GACFxB,EAAA,KAAAiB,GAAAjB,EAAA,KAAAkB,GAAAlB,EAAA,KAAAK,KAAAA,IAAAL,EAAA;CAAA,IAAAO;CACF,OADEP,EAAA,OAAAgB,KAAAhB,EAAA,OAAAK,KAzBDE,IAAA;EAAA,GACGS;EAAOV,YACED;CAwBd,GAACL,EAAA,KAAAgB,GAAAhB,EAAA,KAAAK,GAAAL,EAAA,KAAAO,KAAAA,IAAAP,EAAA,IA9BMN,EAILa,CA0BD;AAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useMergeGridWithRecordSet.js","names":["useSynapseContext","GridRecordSetExportRequest","GridRecordSetExportResponse","SynapseClientError","waitForAsyncResult","useMutation","UseMutationOptions","MergeGridWithRecordSetInput","gridSessionId","useMergeGridWithRecordSet","options","$","_c","synapseClient","t0","t1","gridExportRequest","sessionId","concreteType","asyncJobId","gridServicesClient","postRepoV1GridExportRecordsetAsyncStart","gridRecordSetExportRequest","asyncJobResponse","asynchronousJobServicesClient","getRepoV1AsynchronousJobJobId","jobId","token","responseBody","mutationFn"],"sources":["../../../src/components/DataGrid/useMergeGridWithRecordSet.ts"],"sourcesContent":["import { useSynapseContext } from '@/utils'\nimport {\n GridRecordSetExportRequest,\n GridRecordSetExportResponse,\n SynapseClientError,\n waitForAsyncResult,\n} from '@sage-bionetworks/synapse-client'\nimport { useMutation, UseMutationOptions } from '@tanstack/react-query'\n\nexport type MergeGridWithRecordSetInput = {\n gridSessionId: string\n}\n\n/**\n * Query mutation hook for exporting a grid session back into a RecordSet.\n */\nexport default function useMergeGridWithRecordSet(\n options?: Omit<\n UseMutationOptions<\n GridRecordSetExportResponse,\n SynapseClientError,\n MergeGridWithRecordSetInput\n >,\n 'mutationFn'\n >,\n) {\n const { synapseClient } = useSynapseContext()\n\n return useMutation<\n GridRecordSetExportResponse,\n SynapseClientError,\n MergeGridWithRecordSetInput\n >({\n ...options,\n mutationFn: async ({ gridSessionId }) => {\n const gridExportRequest: GridRecordSetExportRequest = {\n sessionId: gridSessionId,\n concreteType:\n 'org.sagebionetworks.repo.model.grid.GridRecordSetExportRequest',\n }\n\n // Start the async export job\n const asyncJobId =\n await synapseClient.gridServicesClient.postRepoV1GridExportRecordsetAsyncStart(\n { gridRecordSetExportRequest: gridExportRequest },\n )\n\n // Poll for the async job\n const asyncJobResponse = await waitForAsyncResult(() =>\n synapseClient.asynchronousJobServicesClient.getRepoV1AsynchronousJobJobId(\n {\n jobId: asyncJobId.token!,\n },\n ),\n )\n\n return asyncJobResponse.responseBody as GridRecordSetExportResponse\n },\n })\n}\n"],"mappings":";;;;;;AAgBA,SAAeS,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EAUb,EAAAC,qBAA0Bb,GAAmB,EAAAc;AAAA,CAAAH,EAAA,OAAAE,IA+B1CC,IAAAH,EAAA,MAvBWG,IAAA,OAAAC,MAAA;EAAO,IAAA,EAAAP,qBAAAO,GACjBC,IAAsD;GAAAC,WACzCT;GAAaU,cAEtB;GACH,EAGDC,IACE,MAAMN,EAAaO,mBAAmBC,wCACpC,EAAAC,4BAA8BN,GAChC,CAAC;AASF,UAEMO,MARwBnB,QAC7BS,EAAaW,8BAA8BC,8BACzC,EAAAC,OACSP,EAAUQ,OAErB,CACF,CAAC,EAEsBC;IACxBjB,EAAA,KAAAE,GAAAF,EAAA,KAAAG;CAAA,IAAAC;AACF,QADEJ,EAAA,OAAAD,KAAAC,EAAA,OAAAG,KAzBDC,IAAA;EAAA,GACGL;EAAOmB,YACEf;EAwBb,EAAAH,EAAA,KAAAD,GAAAC,EAAA,KAAAG,GAAAH,EAAA,KAAAI,KAAAA,IAAAJ,EAAA,IA9BMN,EAILU,EA0BA"}
1
+ {"version":3,"file":"useMergeGridWithRecordSet.js","names":["useSynapseContext","GridRecordSetExportRequest","GridRecordSetExportResponse","SynapseClientError","waitForAsyncResult","useMutation","UseMutationOptions","MergeGridWithRecordSetInput","gridSessionId","useMergeGridWithRecordSet","options","$","_c","synapseClient","t0","t1","gridExportRequest","sessionId","concreteType","asyncJobId","gridServicesClient","postRepoV1GridExportRecordsetAsyncStart","gridRecordSetExportRequest","asyncJobResponse","asynchronousJobServicesClient","getRepoV1AsynchronousJobJobId","jobId","token","responseBody","mutationFn"],"sources":["../../../src/components/DataGrid/useMergeGridWithRecordSet.ts"],"sourcesContent":["import { useSynapseContext } from '@/utils'\nimport {\n GridRecordSetExportRequest,\n GridRecordSetExportResponse,\n SynapseClientError,\n waitForAsyncResult,\n} from '@sage-bionetworks/synapse-client'\nimport { useMutation, UseMutationOptions } from '@tanstack/react-query'\n\nexport type MergeGridWithRecordSetInput = {\n gridSessionId: string\n}\n\n/**\n * Query mutation hook for exporting a grid session back into a RecordSet.\n */\nexport default function useMergeGridWithRecordSet(\n options?: Omit<\n UseMutationOptions<\n GridRecordSetExportResponse,\n SynapseClientError,\n MergeGridWithRecordSetInput\n >,\n 'mutationFn'\n >,\n) {\n const { synapseClient } = useSynapseContext()\n\n return useMutation<\n GridRecordSetExportResponse,\n SynapseClientError,\n MergeGridWithRecordSetInput\n >({\n ...options,\n mutationFn: async ({ gridSessionId }) => {\n const gridExportRequest: GridRecordSetExportRequest = {\n sessionId: gridSessionId,\n concreteType:\n 'org.sagebionetworks.repo.model.grid.GridRecordSetExportRequest',\n }\n\n // Start the async export job\n const asyncJobId =\n await synapseClient.gridServicesClient.postRepoV1GridExportRecordsetAsyncStart(\n { gridRecordSetExportRequest: gridExportRequest },\n )\n\n // Poll for the async job\n const asyncJobResponse = await waitForAsyncResult(() =>\n synapseClient.asynchronousJobServicesClient.getRepoV1AsynchronousJobJobId(\n {\n jobId: asyncJobId.token!,\n },\n ),\n )\n\n return asyncJobResponse.responseBody as GridRecordSetExportResponse\n },\n })\n}\n"],"mappings":";;;;;;AAgBA,SAAeS,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAUb,EAAAC,qBAA0Bb,EAAkB,GAACc;CAAA,AAAAH,EAAA,OAAAE,IA+B1CC,IAAAH,EAAA,MAvBWG,IAAA,OAAAC,MAAA;EAAO,IAAA,EAAAP,qBAAAO,GACjBC,IAAsD;GAAAC,WACzCT;GAAaU,cAEtB;EACJ,GAGAC,IACE,MAAMN,EAAaO,mBAAmBC,wCACpC,EAAAC,4BAA8BN,EAAkB,CAClD;EASD,QAEMO,MARwBnB,QAC7BS,EAAaW,8BAA8BC,8BACzC,EAAAC,OACSP,EAAUQ,MACnB,CACF,CACF,GAEuBC;CAA4C,GACpEjB,EAAA,KAAAE,GAAAF,EAAA,KAAAG;CAAA,IAAAC;CACF,OADEJ,EAAA,OAAAD,KAAAC,EAAA,OAAAG,KAzBDC,IAAA;EAAA,GACGL;EAAOmB,YACEf;CAwBd,GAACH,EAAA,KAAAD,GAAAC,EAAA,KAAAG,GAAAH,EAAA,KAAAI,KAAAA,IAAAJ,EAAA,IA9BMN,EAILU,CA0BD;AAAC"}