synapse-react-client 4.0.45 → 4.0.46

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 (319) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/aridhia-queries/AridhiaKeyFactory.d.ts +1 -0
  3. package/dist/aridhia-queries/AridhiaKeyFactory.d.ts.map +1 -1
  4. package/dist/aridhia-queries/AridhiaKeyFactory.js +3 -0
  5. package/dist/aridhia-queries/AridhiaKeyFactory.js.map +1 -1
  6. package/dist/aridhia-queries/aridhiaTokenExchange.js +6 -6
  7. package/dist/aridhia-queries/index.d.ts +1 -0
  8. package/dist/aridhia-queries/index.d.ts.map +1 -1
  9. package/dist/aridhia-queries/index.js +11 -10
  10. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.d.ts +19 -0
  11. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.d.ts.map +1 -0
  12. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.js +14 -0
  13. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.js.map +1 -0
  14. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.d.ts.map +1 -1
  15. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js +6 -4
  16. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
  17. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  18. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js +1 -1
  19. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js.map +1 -1
  20. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js +1 -1
  21. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
  22. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js +1 -1
  23. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js.map +1 -1
  24. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -1
  25. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +11 -8
  26. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -1
  27. package/dist/components/AccessTokenPage/AccessTokenPage.js +1 -1
  28. package/dist/components/AccessTokenPage/AccessTokenPage.js.map +1 -1
  29. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js +1 -1
  30. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
  31. package/dist/components/Aridhia/DarWizard/DarSectionForm.d.ts.map +1 -1
  32. package/dist/components/Aridhia/DarWizard/DarSectionForm.js +17 -13
  33. package/dist/components/Aridhia/DarWizard/DarSectionForm.js.map +1 -1
  34. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts +3 -3
  35. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts.map +1 -1
  36. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js +33 -34
  37. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js.map +1 -1
  38. package/dist/components/Aridhia/fairFormToRjsf.js +1 -1
  39. package/dist/components/Aridhia/fairFormToRjsf.js.map +1 -1
  40. package/dist/components/Authentication/LastLoginInfo.js +1 -1
  41. package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
  42. package/dist/components/CertificationQuiz/CertificationQuiz.js +1 -1
  43. package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
  44. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js +1 -1
  45. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js.map +1 -1
  46. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js +1 -1
  47. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
  48. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js +6 -6
  49. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
  50. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.d.ts.map +1 -1
  51. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js +4 -4
  52. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js.map +1 -1
  53. package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js +4 -4
  54. package/dist/components/CitationPopover/CitationPopoverContent.js +4 -4
  55. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  56. package/dist/components/ComponentCollapse.d.ts.map +1 -1
  57. package/dist/components/ComponentCollapse.js +2 -1
  58. package/dist/components/ComponentCollapse.js.map +1 -1
  59. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  60. package/dist/components/DataGrid/SynapseGrid.js +231 -219
  61. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  62. package/dist/components/DataGrid/SyncGridWithSourceButton.d.ts.map +1 -1
  63. package/dist/components/DataGrid/SyncGridWithSourceButton.js +5 -4
  64. package/dist/components/DataGrid/SyncGridWithSourceButton.js.map +1 -1
  65. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.d.ts.map +1 -1
  66. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js +7 -5
  67. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js.map +1 -1
  68. package/dist/components/DataGrid/components/ExportCsvFromGridButton.js +4 -4
  69. package/dist/components/DataGrid/components/ExportCsvFromGridButton.js.map +1 -1
  70. package/dist/components/DataGrid/components/ReorderColumnsButton.js +4 -4
  71. package/dist/components/DataGrid/components/ReorderColumnsButton.js.map +1 -1
  72. package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
  73. package/dist/components/DataGrid/components/ReorderColumnsDialog.js +12 -8
  74. package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
  75. package/dist/components/DataGrid/components/UploadCsvToGridButton.js +1 -1
  76. package/dist/components/DataGrid/components/UploadCsvToGridButton.js.map +1 -1
  77. package/dist/components/DataGrid/hooks/useGridUndoRedo.js +5 -5
  78. package/dist/components/DataGrid/utils/applyModelChange.d.ts.map +1 -1
  79. package/dist/components/DataGrid/utils/applyModelChange.js +14 -14
  80. package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
  81. package/dist/components/DataGrid/utils/columnFactory.js +1 -1
  82. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  83. package/dist/components/DataGrid/utils/splitPatch.d.ts.map +1 -1
  84. package/dist/components/DataGrid/utils/splitPatch.js +22 -13
  85. package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
  86. package/dist/components/DownloadCart/DownloadCartPage.js +1 -1
  87. package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
  88. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.d.ts.map +1 -1
  89. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +2 -1
  90. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  91. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.js.map +1 -1
  92. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.scss +1 -3
  93. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.d.ts.map +1 -1
  94. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +16 -10
  95. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  96. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +1 -1
  97. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  98. package/dist/components/EntityFinder/EntityFinder.js +4 -4
  99. package/dist/components/EntityFinder/EntityIdTextField.js +1 -1
  100. package/dist/components/EntityFinder/EntityIdTextField.js.map +1 -1
  101. package/dist/components/EntityFinder/tree/VirtualizedTree.d.ts.map +1 -1
  102. package/dist/components/EntityFinder/tree/VirtualizedTree.js +5 -4
  103. package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
  104. package/dist/components/EntityHeaderTable/EntityHeaderTable.js +1 -1
  105. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  106. package/dist/components/EntityTreeTable/components/EntityNameCell.d.ts.map +1 -1
  107. package/dist/components/EntityTreeTable/components/EntityNameCell.js +2 -1
  108. package/dist/components/EntityTreeTable/components/EntityNameCell.js.map +1 -1
  109. package/dist/components/EntityUpload/FileUploadProgress.d.ts.map +1 -1
  110. package/dist/components/EntityUpload/FileUploadProgress.js +11 -7
  111. package/dist/components/EntityUpload/FileUploadProgress.js.map +1 -1
  112. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.d.ts.map +1 -1
  113. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js +4 -3
  114. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js.map +1 -1
  115. package/dist/components/ExperimentalMode/ExperimentalMode.js +1 -1
  116. package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
  117. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js +1 -1
  118. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
  119. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts.map +1 -1
  120. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js +2 -1
  121. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js.map +1 -1
  122. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts.map +1 -1
  123. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js +2 -1
  124. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js.map +1 -1
  125. package/dist/components/FormTemplateEditor/FieldLibrary.d.ts.map +1 -1
  126. package/dist/components/FormTemplateEditor/FieldLibrary.js +2 -1
  127. package/dist/components/FormTemplateEditor/FieldLibrary.js.map +1 -1
  128. package/dist/components/FormTemplateEditor/FieldLibraryRow.js +4 -4
  129. package/dist/components/FormTemplateEditor/FieldLibraryRow.js.map +1 -1
  130. package/dist/components/FormTemplateEditor/FormStructurePanel.js +1 -1
  131. package/dist/components/FormTemplateEditor/FormStructurePanel.js.map +1 -1
  132. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js +1 -1
  133. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js.map +1 -1
  134. package/dist/components/FormTemplateEditor/StepCard.d.ts.map +1 -1
  135. package/dist/components/FormTemplateEditor/StepCard.js +15 -10
  136. package/dist/components/FormTemplateEditor/StepCard.js.map +1 -1
  137. package/dist/components/FormTemplateEditor/StepFieldRow.d.ts.map +1 -1
  138. package/dist/components/FormTemplateEditor/StepFieldRow.js +11 -6
  139. package/dist/components/FormTemplateEditor/StepFieldRow.js.map +1 -1
  140. package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts.map +1 -1
  141. package/dist/components/FormTemplateEditor/TemplateFileHandleField.js +2 -1
  142. package/dist/components/FormTemplateEditor/TemplateFileHandleField.js.map +1 -1
  143. package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js +45 -45
  144. package/dist/components/GenericCard/PortalDOI/PortalDOI.js +5 -5
  145. package/dist/components/GenericCard/PortalDOI/PortalDOI.js.map +1 -1
  146. package/dist/components/GenericCard/TableRowGenericCard.js +1 -1
  147. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  148. package/dist/components/HelpPopover/HelpPopover.js +1 -1
  149. package/dist/components/HelpPopover/HelpPopover.js.map +1 -1
  150. package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
  151. package/dist/components/IconSvg/IconSvg.js +154 -47
  152. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  153. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.d.ts.map +1 -1
  154. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js +19 -16
  155. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js.map +1 -1
  156. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.d.ts.map +1 -1
  157. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js +2 -1
  158. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  159. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.d.ts +9 -0
  160. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.d.ts.map +1 -0
  161. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.js +21 -0
  162. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.js.map +1 -0
  163. package/dist/components/Markdown/MarkdownCollapse.d.ts.map +1 -1
  164. package/dist/components/Markdown/MarkdownCollapse.js +3 -1
  165. package/dist/components/Markdown/MarkdownCollapse.js.map +1 -1
  166. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js +1 -1
  167. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  168. package/dist/components/OAuthClientManagement/OAuthManagement.js +14 -13
  169. package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
  170. package/dist/components/PortalList/PortalCard.d.ts.map +1 -1
  171. package/dist/components/PortalList/PortalCard.js +6 -5
  172. package/dist/components/PortalList/PortalCard.js.map +1 -1
  173. package/dist/components/PortalList/PortalList.js +4 -4
  174. package/dist/components/PortalList/PortalList.js.map +1 -1
  175. package/dist/components/ProjectVisibilityChip/ProjectVisibilityChip.js +6 -6
  176. package/dist/components/QueryBuilder/FilterConditionRow.js +4 -4
  177. package/dist/components/QueryCountButton/QueryCountButton.js +5 -5
  178. package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
  179. package/dist/components/ReleaseCard/ReleaseCardLarge.js +5 -5
  180. package/dist/components/ReleaseCard/ReleaseCardLarge.js.map +1 -1
  181. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js +1 -1
  182. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  183. package/dist/components/ShareThisPage/ShareThisPage.js +4 -4
  184. package/dist/components/ShareThisPage/ShareThisPage.js.map +1 -1
  185. package/dist/components/SustainabilityScorecard/DialLayout.js +1 -1
  186. package/dist/components/SustainabilityScorecard/DialLayout.js.map +1 -1
  187. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js +1 -1
  188. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
  189. package/dist/components/SynapseChat/SynapseChat.js +1 -1
  190. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  191. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts.map +1 -1
  192. package/dist/components/SynapseChat/SynapseChatInteraction.js +2 -1
  193. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  194. package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.js +1 -1
  195. package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.js.map +1 -1
  196. package/dist/components/SynapseFooter/SynapseFooter.js +1 -1
  197. package/dist/components/SynapseFooter/SynapseFooter.js.map +1 -1
  198. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js +1 -1
  199. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js.map +1 -1
  200. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.d.ts.map +1 -1
  201. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js +2 -1
  202. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js.map +1 -1
  203. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js +4 -4
  204. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
  205. package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js +1 -1
  206. package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js.map +1 -1
  207. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts.map +1 -1
  208. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +4 -1
  209. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  210. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js +1 -1
  211. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  212. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js +1 -1
  213. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
  214. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.d.ts.map +1 -1
  215. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js +12 -9
  216. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js.map +1 -1
  217. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +4 -4
  218. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  219. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +140 -140
  220. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  221. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +1 -1
  222. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  223. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js +1 -1
  224. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
  225. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
  226. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  227. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +9 -9
  228. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  229. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.d.ts.map +1 -1
  230. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js +6 -4
  231. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js.map +1 -1
  232. package/dist/components/TanStackTable/ColumnHeader.js +1 -1
  233. package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
  234. package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js +1 -1
  235. package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js.map +1 -1
  236. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.d.ts.map +1 -1
  237. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js +4 -3
  238. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
  239. package/dist/components/Webhook/WebhookDashboard.js +1 -1
  240. package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
  241. package/dist/components/dataaccess/AccessRequirementDashboard.js +4 -4
  242. package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
  243. package/dist/components/dataaccess/AccessRequirementTable.js +1 -1
  244. package/dist/components/dataaccess/AccessRequirementTable.js.map +1 -1
  245. package/dist/components/dataaccess/EDucTemplateTable.d.ts.map +1 -1
  246. package/dist/components/dataaccess/EDucTemplateTable.js +13 -11
  247. package/dist/components/dataaccess/EDucTemplateTable.js.map +1 -1
  248. package/dist/components/dataaccess/FormTemplateTable.js +6 -6
  249. package/dist/components/dataaccess/FormTemplateTable.js.map +1 -1
  250. package/dist/components/dataaccess/ReviewerDashboard.js +17 -17
  251. package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
  252. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js +4 -4
  253. package/dist/components/doi/CreateOrUpdateDoiModal.js +1 -1
  254. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  255. package/dist/components/download_list/DownloadDetails.d.ts.map +1 -1
  256. package/dist/components/download_list/DownloadDetails.js +12 -10
  257. package/dist/components/download_list/DownloadDetails.js.map +1 -1
  258. package/dist/components/entity/metadata/AnnotationsTable.js +1 -1
  259. package/dist/components/entity/metadata/AnnotationsTable.js.map +1 -1
  260. package/dist/components/entity/page/CreatedByModifiedBy.js +1 -1
  261. package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
  262. package/dist/components/entity/page/action_menu/EntityActionMenu.d.ts.map +1 -1
  263. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  264. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js +1 -1
  265. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
  266. package/dist/components/error/ErrorChip.d.ts.map +1 -1
  267. package/dist/components/error/ErrorChip.js +2 -1
  268. package/dist/components/error/ErrorChip.js.map +1 -1
  269. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js +14 -14
  270. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js +4 -4
  271. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js.map +1 -1
  272. package/dist/components/widgets/facet-nav/FacetNavPanel.js +1 -1
  273. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  274. package/dist/features/curator/dashboard/components/NextStepButton.d.ts.map +1 -1
  275. package/dist/features/curator/dashboard/components/NextStepButton.js +7 -6
  276. package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -1
  277. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +8 -8
  278. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
  279. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +4 -4
  280. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  281. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +4 -4
  282. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
  283. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js +1 -1
  284. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
  285. package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js +4 -4
  286. package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js.map +1 -1
  287. package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.js +1 -1
  288. package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.js.map +1 -1
  289. package/dist/features/entity/metadata-task/create-task/TaskFormHeader.js +1 -1
  290. package/dist/features/entity/metadata-task/create-task/TaskFormHeader.js.map +1 -1
  291. package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js +10 -10
  292. package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js.map +1 -1
  293. package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js +1 -1
  294. package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js.map +1 -1
  295. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts +8 -0
  296. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts.map +1 -1
  297. package/dist/mocks/msw/handlers/aridhiaHandlers.js +52 -41
  298. package/dist/mocks/msw/handlers/aridhiaHandlers.js.map +1 -1
  299. package/dist/mocks/msw/handlers/entityHandlers.d.ts.map +1 -1
  300. package/dist/mocks/msw/handlers/entityHandlers.js +70 -67
  301. package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
  302. package/dist/mocks/msw/handlers/gridHandlers.js +2 -2
  303. package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
  304. package/dist/mocks/msw/server.d.ts.map +1 -1
  305. package/dist/mocks/msw/server.js +4 -2
  306. package/dist/mocks/msw/server.js.map +1 -1
  307. package/dist/synapse-queries/user/useGetUserChallenges.d.ts.map +1 -1
  308. package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
  309. package/dist/theme/DefaultTheme.d.ts.map +1 -1
  310. package/dist/theme/DefaultTheme.js +4 -1
  311. package/dist/theme/DefaultTheme.js.map +1 -1
  312. package/dist/tsconfig.build.tsbuildinfo +1 -1
  313. package/dist/utils/APIConstants.d.ts.map +1 -1
  314. package/dist/utils/APIConstants.js.map +1 -1
  315. package/dist/utils/AppUtils/AppUtils.js +1 -1
  316. package/dist/utils/AppUtils/AppUtils.js.map +1 -1
  317. package/dist/utils/functions/EntityTypeUtils.d.ts.map +1 -1
  318. package/dist/utils/functions/EntityTypeUtils.js.map +1 -1
  319. package/package.json +7 -6
@@ -1 +1 @@
1
- {"version":3,"file":"ReorderColumnsDialog.js","names":["ConfirmationDialog","computeDefaultColumnOrder","getNamedColumnIndices","moveItem","collectTopLevelProperties","DeleteOutline","North","RestartAlt","RestoreFromTrash","South","Box","Button","IconButton","List","ListItem","ListItemText","Stack","Typography","JSONSchema7","isEqual","useMemo","useState","ReorderColumnsDialogProps","open","columnNames","columnOrder","jsonSchema","upsertKey","canRemoveColumns","onSave","newColumnOrder","onCancel","ReorderColumnsDialog","props","$","_c","t0","undefined","previouslyRemovedColumnIndices","t1","t2","map","_temp","filter","index_0","includes","index","workingOrder","setWorkingOrder","removedColumnIndices","setRemovedColumnIndices","t3","defaultOrder","activeColumnCount","length","t4","isAtDefault","t5","schemaProperties","t6","columnName","Object","hasOwn","isSchemaColumn","t7","mb","t8","Symbol","for","display","justifyContent","t9","t10","t11","t12","t13","colIndex","displayIndex","columnName_0","isRemoved","opacity","indices","index_1","indices_0","order","order_0","t14","t15","children","t16","index_2","t17","_"],"sources":["../../../../src/components/DataGrid/components/ReorderColumnsDialog.tsx"],"sourcesContent":["import { ConfirmationDialog } from '@/components/ConfirmationDialog'\nimport { computeDefaultColumnOrder } from '@/components/DataGrid/utils/computeDefaultColumnOrder'\nimport { getNamedColumnIndices } from '@/components/DataGrid/utils/getNamedColumnIndices'\nimport { moveItem } from '@/utils/functions/ArrayUtils'\nimport { collectTopLevelProperties } from '@/utils/jsonschema/collectTopLevelProperties'\nimport {\n DeleteOutline,\n North,\n RestartAlt,\n RestoreFromTrash,\n South,\n} from '@mui/icons-material'\nimport {\n Box,\n Button,\n IconButton,\n List,\n ListItem,\n ListItemText,\n Stack,\n Typography,\n} from '@mui/material'\nimport { JSONSchema7 } from 'json-schema'\nimport isEqual from 'lodash-es/isEqual'\nimport { useMemo, useState } from 'react'\n\nexport type ReorderColumnsDialogProps = {\n open: boolean\n columnNames: string[]\n columnOrder: number[]\n jsonSchema: JSONSchema7 | undefined\n upsertKey?: string[]\n /** Recordset-sourced grids only -- views do not support hiding/removing columns from display. */\n canRemoveColumns?: boolean\n onSave: (newColumnOrder: number[]) => void\n onCancel: () => void\n}\n\nexport default function ReorderColumnsDialog(props: ReorderColumnsDialogProps) {\n const {\n open,\n columnNames,\n columnOrder,\n jsonSchema,\n upsertKey,\n canRemoveColumns = false,\n onSave,\n onCancel,\n } = props\n\n // Columns previously removed (and saved) are absent from columnOrder entirely, but their\n // identity index still exists in columnNames -- surface them so they can be restored. Indices\n // without a name are skipped: there is nothing to label them with in the list.\n const previouslyRemovedColumnIndices = canRemoveColumns\n ? getNamedColumnIndices(\n columnNames,\n columnNames.map((_, index) => index),\n ).filter(index => !columnOrder.includes(index))\n : []\n\n const [workingOrder, setWorkingOrder] = useState<number[]>([\n ...columnOrder,\n ...previouslyRemovedColumnIndices,\n ])\n const [removedColumnIndices, setRemovedColumnIndices] = useState<number[]>(\n previouslyRemovedColumnIndices,\n )\n\n const defaultOrder = useMemo(\n () => computeDefaultColumnOrder(columnNames, jsonSchema, upsertKey),\n [columnNames, jsonSchema, upsertKey],\n )\n\n const activeColumnCount = workingOrder.length - removedColumnIndices.length\n const isAtDefault =\n isEqual(workingOrder, defaultOrder) && removedColumnIndices.length === 0\n\n // Only columns that aren't part of the JSON schema can be removed -- schema-defined\n // columns are required for validation/upsert and shouldn't be hidden from the grid.\n // Properties inherited through $ref/allOf/etc. count, matching how the backend resolves\n // a RecordSet's schema columns.\n const schemaProperties = useMemo(\n () => collectTopLevelProperties(jsonSchema),\n [jsonSchema],\n )\n const isSchemaColumn = (columnName: string) =>\n Object.hasOwn(schemaProperties, columnName)\n\n return (\n <ConfirmationDialog\n open={open}\n title=\"Reorder Columns\"\n content={\n <Box>\n {canRemoveColumns && (\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ mb: 1 }}>\n Only columns that are not part of the schema can be removed.\n </Typography>\n )}\n <Box sx={{ display: 'flex', justifyContent: 'flex-end', mb: 1 }}>\n <Button\n variant=\"text\"\n startIcon={<RestartAlt />}\n onClick={() => {\n setWorkingOrder(defaultOrder)\n setRemovedColumnIndices([])\n }}\n disabled={isAtDefault}\n >\n Reset to Default Order\n </Button>\n </Box>\n <List disablePadding>\n {workingOrder.map((colIndex, displayIndex) => {\n const columnName = columnNames[colIndex]\n const isRemoved = removedColumnIndices.includes(colIndex)\n return (\n <ListItem\n key={colIndex}\n divider\n sx={isRemoved ? { opacity: 0.5 } : undefined}\n secondaryAction={\n <Stack direction=\"row\" spacing={0.5}>\n {canRemoveColumns &&\n (isRemoved ? (\n <IconButton\n aria-label={`Restore ${columnName}`}\n size=\"small\"\n onClick={() =>\n setRemovedColumnIndices(indices =>\n indices.filter(index => index !== colIndex),\n )\n }\n >\n <RestoreFromTrash fontSize=\"small\" />\n </IconButton>\n ) : (\n !isSchemaColumn(columnName) && (\n <IconButton\n aria-label={`Remove ${columnName}`}\n size=\"small\"\n disabled={activeColumnCount <= 1}\n onClick={() =>\n setRemovedColumnIndices(indices => [\n ...indices,\n colIndex,\n ])\n }\n >\n <DeleteOutline fontSize=\"small\" />\n </IconButton>\n )\n ))}\n <IconButton\n aria-label={`Move ${columnName} up`}\n size=\"small\"\n disabled={isRemoved || displayIndex === 0}\n onClick={() =>\n setWorkingOrder(order =>\n moveItem(order, displayIndex, -1),\n )\n }\n >\n <North fontSize=\"small\" />\n </IconButton>\n <IconButton\n aria-label={`Move ${columnName} down`}\n size=\"small\"\n disabled={\n isRemoved || displayIndex === workingOrder.length - 1\n }\n onClick={() =>\n setWorkingOrder(order =>\n moveItem(order, displayIndex, 1),\n )\n }\n >\n <South fontSize=\"small\" />\n </IconButton>\n </Stack>\n }\n >\n <ListItemText primary={columnName} />\n </ListItem>\n )\n })}\n </List>\n </Box>\n }\n confirmButtonProps={{ children: 'Save' }}\n onConfirm={() =>\n onSave(\n workingOrder.filter(index => !removedColumnIndices.includes(index)),\n )\n }\n onCancel={onCancel}\n />\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ReorderColumnsDialog.js","names":["ConfirmationDialog","computeDefaultColumnOrder","getNamedColumnIndices","moveItem","collectTopLevelProperties","DeleteOutline","North","RestartAlt","RestoreFromTrash","South","Box","Button","IconButton","List","ListItem","ListItemText","Stack","Typography","JSONSchema7","isEqual","useMemo","useState","ReorderColumnsDialogProps","open","columnNames","columnOrder","jsonSchema","upsertKey","canRemoveColumns","onSave","newColumnOrder","onCancel","ReorderColumnsDialog","props","$","_c","t0","undefined","previouslyRemovedColumnIndices","t1","t2","map","_temp","filter","index_0","includes","index","workingOrder","setWorkingOrder","removedColumnIndices","setRemovedColumnIndices","t3","defaultOrder","activeColumnCount","length","t4","isAtDefault","t5","schemaProperties","t6","columnName","Object","hasOwn","isSchemaColumn","t7","mb","t8","Symbol","for","display","justifyContent","t9","t10","t11","t12","t13","colIndex","displayIndex","columnName_0","isRemoved","opacity","indices","index_1","indices_0","order","order_0","t14","t15","children","t16","index_2","t17","_"],"sources":["../../../../src/components/DataGrid/components/ReorderColumnsDialog.tsx"],"sourcesContent":["import { ConfirmationDialog } from '@/components/ConfirmationDialog'\nimport { computeDefaultColumnOrder } from '@/components/DataGrid/utils/computeDefaultColumnOrder'\nimport { getNamedColumnIndices } from '@/components/DataGrid/utils/getNamedColumnIndices'\nimport { moveItem } from '@/utils/functions/ArrayUtils'\nimport { collectTopLevelProperties } from '@/utils/jsonschema/collectTopLevelProperties'\nimport DeleteOutline from '@mui/icons-material/DeleteOutline'\nimport North from '@mui/icons-material/North'\nimport RestartAlt from '@mui/icons-material/RestartAlt'\nimport RestoreFromTrash from '@mui/icons-material/RestoreFromTrash'\nimport South from '@mui/icons-material/South'\nimport {\n Box,\n Button,\n IconButton,\n List,\n ListItem,\n ListItemText,\n Stack,\n Typography,\n} from '@mui/material'\nimport { JSONSchema7 } from 'json-schema'\nimport isEqual from 'lodash-es/isEqual'\nimport { useMemo, useState } from 'react'\n\nexport type ReorderColumnsDialogProps = {\n open: boolean\n columnNames: string[]\n columnOrder: number[]\n jsonSchema: JSONSchema7 | undefined\n upsertKey?: string[]\n /** Recordset-sourced grids only -- views do not support hiding/removing columns from display. */\n canRemoveColumns?: boolean\n onSave: (newColumnOrder: number[]) => void\n onCancel: () => void\n}\n\nexport default function ReorderColumnsDialog(props: ReorderColumnsDialogProps) {\n const {\n open,\n columnNames,\n columnOrder,\n jsonSchema,\n upsertKey,\n canRemoveColumns = false,\n onSave,\n onCancel,\n } = props\n\n // Columns previously removed (and saved) are absent from columnOrder entirely, but their\n // identity index still exists in columnNames -- surface them so they can be restored. Indices\n // without a name are skipped: there is nothing to label them with in the list.\n const previouslyRemovedColumnIndices = canRemoveColumns\n ? getNamedColumnIndices(\n columnNames,\n columnNames.map((_, index) => index),\n ).filter(index => !columnOrder.includes(index))\n : []\n\n const [workingOrder, setWorkingOrder] = useState<number[]>([\n ...columnOrder,\n ...previouslyRemovedColumnIndices,\n ])\n const [removedColumnIndices, setRemovedColumnIndices] = useState<number[]>(\n previouslyRemovedColumnIndices,\n )\n\n const defaultOrder = useMemo(\n () => computeDefaultColumnOrder(columnNames, jsonSchema, upsertKey),\n [columnNames, jsonSchema, upsertKey],\n )\n\n const activeColumnCount = workingOrder.length - removedColumnIndices.length\n const isAtDefault =\n isEqual(workingOrder, defaultOrder) && removedColumnIndices.length === 0\n\n // Only columns that aren't part of the JSON schema can be removed -- schema-defined\n // columns are required for validation/upsert and shouldn't be hidden from the grid.\n // Properties inherited through $ref/allOf/etc. count, matching how the backend resolves\n // a RecordSet's schema columns.\n const schemaProperties = useMemo(\n () => collectTopLevelProperties(jsonSchema),\n [jsonSchema],\n )\n const isSchemaColumn = (columnName: string) =>\n Object.hasOwn(schemaProperties, columnName)\n\n return (\n <ConfirmationDialog\n open={open}\n title=\"Reorder Columns\"\n content={\n <Box>\n {canRemoveColumns && (\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ mb: 1 }}>\n Only columns that are not part of the schema can be removed.\n </Typography>\n )}\n <Box sx={{ display: 'flex', justifyContent: 'flex-end', mb: 1 }}>\n <Button\n variant=\"text\"\n startIcon={<RestartAlt />}\n onClick={() => {\n setWorkingOrder(defaultOrder)\n setRemovedColumnIndices([])\n }}\n disabled={isAtDefault}\n >\n Reset to Default Order\n </Button>\n </Box>\n <List disablePadding>\n {workingOrder.map((colIndex, displayIndex) => {\n const columnName = columnNames[colIndex]\n const isRemoved = removedColumnIndices.includes(colIndex)\n return (\n <ListItem\n key={colIndex}\n divider\n sx={isRemoved ? { opacity: 0.5 } : undefined}\n secondaryAction={\n <Stack direction=\"row\" spacing={0.5}>\n {canRemoveColumns &&\n (isRemoved ? (\n <IconButton\n aria-label={`Restore ${columnName}`}\n size=\"small\"\n onClick={() =>\n setRemovedColumnIndices(indices =>\n indices.filter(index => index !== colIndex),\n )\n }\n >\n <RestoreFromTrash fontSize=\"small\" />\n </IconButton>\n ) : (\n !isSchemaColumn(columnName) && (\n <IconButton\n aria-label={`Remove ${columnName}`}\n size=\"small\"\n disabled={activeColumnCount <= 1}\n onClick={() =>\n setRemovedColumnIndices(indices => [\n ...indices,\n colIndex,\n ])\n }\n >\n <DeleteOutline fontSize=\"small\" />\n </IconButton>\n )\n ))}\n <IconButton\n aria-label={`Move ${columnName} up`}\n size=\"small\"\n disabled={isRemoved || displayIndex === 0}\n onClick={() =>\n setWorkingOrder(order =>\n moveItem(order, displayIndex, -1),\n )\n }\n >\n <North fontSize=\"small\" />\n </IconButton>\n <IconButton\n aria-label={`Move ${columnName} down`}\n size=\"small\"\n disabled={\n isRemoved || displayIndex === workingOrder.length - 1\n }\n onClick={() =>\n setWorkingOrder(order =>\n moveItem(order, displayIndex, 1),\n )\n }\n >\n <South fontSize=\"small\" />\n </IconButton>\n </Stack>\n }\n >\n <ListItemText primary={columnName} />\n </ListItem>\n )\n })}\n </List>\n </Box>\n }\n confirmButtonProps={{ children: 'Save' }}\n onConfirm={() =>\n onSave(\n workingOrder.filter(index => !removedColumnIndices.includes(index)),\n )\n }\n onCancel={onCancel}\n />\n )\n}\n"],"mappings":"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"}
@@ -6,7 +6,7 @@ import { useState as r } from "react";
6
6
  import { Fragment as i, jsx as a, jsxs as o } from "react/jsx-runtime";
7
7
  import { instanceOfRecordSet as s } from "@sage-bionetworks/synapse-client";
8
8
  import c from "@mui/material/Skeleton";
9
- import { UploadTwoTone as l } from "@mui/icons-material";
9
+ import l from "@mui/icons-material/UploadTwoTone";
10
10
  import { c as u } from "react/compiler-runtime";
11
11
  //#region src/components/DataGrid/components/UploadCsvToGridButton.tsx
12
12
  function d(d) {
@@ -1 +1 @@
1
- {"version":3,"file":"UploadCsvToGridButton.js","names":["GridMenuButton","UploadCsvToGridDialog","useGetEntity","UploadTwoTone","Skeleton","instanceOfRecordSet","useState","UploadCsvToGridButtonProps","sourceEntityId","gridSessionId","UploadCsvToGridButton","props","$","_c","showDialog","setShowDialog","data","entity","isLoading","isLoadingEntity","t0","Symbol","for","t1","t2","t3"],"sources":["../../../../src/components/DataGrid/components/UploadCsvToGridButton.tsx"],"sourcesContent":["import GridMenuButton from '@/components/DataGrid/components/GridMenuButton/GridMenuButton'\nimport UploadCsvToGridDialog from '@/components/DataGrid/components/UploadCsvToGridDialog'\nimport { useGetEntity } from '@/synapse-queries/index'\nimport { UploadTwoTone } from '@mui/icons-material'\nimport Skeleton from '@mui/material/Skeleton'\nimport { instanceOfRecordSet } from '@sage-bionetworks/synapse-client'\nimport { useState } from 'react'\n\nexport type UploadCsvToGridButtonProps = {\n sourceEntityId: string\n gridSessionId: string\n}\n\nexport default function UploadCsvToGridButton(\n props: UploadCsvToGridButtonProps,\n) {\n const { sourceEntityId, gridSessionId } = props\n\n const [showDialog, setShowDialog] = useState(false)\n\n const { data: entity, isLoading: isLoadingEntity } =\n useGetEntity(sourceEntityId)\n\n if (isLoadingEntity) {\n return <Skeleton variant=\"rectangular\" width={100} />\n }\n if (entity && !instanceOfRecordSet(entity)) {\n // Currently, grid upload is only supported for record sets\n return null\n }\n\n return (\n <>\n {showDialog && (\n // Explicitly unmount the dialog when it is closed so that its state is reset\n // This prevents a user from getting stuck in an error state/uploading the wrong CSV\n <UploadCsvToGridDialog\n gridSessionId={gridSessionId}\n open={showDialog}\n onClose={() => setShowDialog(false)}\n onComplete={() => setShowDialog(false)}\n />\n )}\n <GridMenuButton\n onClick={() => {\n setShowDialog(true)\n }}\n variant=\"outlined\"\n startIcon={<UploadTwoTone />}\n >\n Upload\n </GridMenuButton>\n </>\n )\n}\n"],"mappings":";;;;;;;;;;;AAaA,SAAeU,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAGb,EAAAL,mBAAAC,qBAA0CE,GAE1C,CAAAG,GAAAC,KAAoCT,EAAS,EAAK,GAElD,EAAAU,MAAAC,GAAAC,WAAAC,MACEjB,EAAaM,CAAc;CAE7B,IAAIW,GAAe;EAAA,IAAAC;EACoC,OADpCR,EAAA,OAAAS,OAAAC,IAAA,2BAAA,KACVF,IAAA,kBAAC,GAAD;GAAkB,SAAA;GAAqB,OAAA;EAAG,CAAA,GAAIR,EAAA,KAAAQ,KAAAA,IAAAR,EAAA,IAA9CQ;CAA8C;CAEvD,IAAIH,KAAA,CAAWZ,EAAoBY,CAAM,GAAC,OAEjC;CACR,IAAAG;CAAA,AAAAR,EAAA,OAAAH,KAAAG,EAAA,OAAAE,KAIIM,IAAAN,KAGC,kBAAC,GAAD;EACiBL;EACTK,MAAAA;EACG,eAAMC,EAAc,EAAK;EACtB,kBAAMA,EAAc,EAAK;CAAC,CAAA,GAEzCH,EAAA,KAAAH,GAAAG,EAAA,KAAAE,GAAAF,EAAA,KAAAQ,KAAAA,IAAAR,EAAA;CAAA,IAAAW;CAAA,AAAAX,EAAA,OAAAS,OAAAC,IAAA,2BAAA,KAEUC,UAAA;EACPR,EAAc,EAAI;CAAC,GACpBH,EAAA,KAAAW,KAAAA,IAAAX,EAAA;CAAA,IAAAY;CAAA,AAAAZ,EAAA,OAAAS,OAAAC,IAAA,2BAAA,KAHHE,IAAA,kBAAC,GAAD;EACW,SAAAD;EAGD,SAAA;EACG,WAAA,kBAAC,GAAD,CAAc,CAAA;YAC1B;CANc,CAAA,GAQEX,EAAA,KAAAY,KAAAA,IAAAZ,EAAA;CAAA,IAAAa;CAChB,OADgBb,EAAA,OAAAQ,IAChBK,IAAAb,EAAA,MApBHa,IAAA,kBAAA,GAAA,EAAA,UAAA,CACGL,GAUDI,CAQiB,EAAA,CAAA,GAChBZ,EAAA,KAAAQ,GAAAR,EAAA,KAAAa,IApBHA;AAoBG"}
1
+ {"version":3,"file":"UploadCsvToGridButton.js","names":["GridMenuButton","UploadCsvToGridDialog","useGetEntity","UploadTwoTone","Skeleton","instanceOfRecordSet","useState","UploadCsvToGridButtonProps","sourceEntityId","gridSessionId","UploadCsvToGridButton","props","$","_c","showDialog","setShowDialog","data","entity","isLoading","isLoadingEntity","t0","Symbol","for","t1","t2","t3"],"sources":["../../../../src/components/DataGrid/components/UploadCsvToGridButton.tsx"],"sourcesContent":["import GridMenuButton from '@/components/DataGrid/components/GridMenuButton/GridMenuButton'\nimport UploadCsvToGridDialog from '@/components/DataGrid/components/UploadCsvToGridDialog'\nimport { useGetEntity } from '@/synapse-queries/index'\nimport UploadTwoTone from '@mui/icons-material/UploadTwoTone'\nimport Skeleton from '@mui/material/Skeleton'\nimport { instanceOfRecordSet } from '@sage-bionetworks/synapse-client'\nimport { useState } from 'react'\n\nexport type UploadCsvToGridButtonProps = {\n sourceEntityId: string\n gridSessionId: string\n}\n\nexport default function UploadCsvToGridButton(\n props: UploadCsvToGridButtonProps,\n) {\n const { sourceEntityId, gridSessionId } = props\n\n const [showDialog, setShowDialog] = useState(false)\n\n const { data: entity, isLoading: isLoadingEntity } =\n useGetEntity(sourceEntityId)\n\n if (isLoadingEntity) {\n return <Skeleton variant=\"rectangular\" width={100} />\n }\n if (entity && !instanceOfRecordSet(entity)) {\n // Currently, grid upload is only supported for record sets\n return null\n }\n\n return (\n <>\n {showDialog && (\n // Explicitly unmount the dialog when it is closed so that its state is reset\n // This prevents a user from getting stuck in an error state/uploading the wrong CSV\n <UploadCsvToGridDialog\n gridSessionId={gridSessionId}\n open={showDialog}\n onClose={() => setShowDialog(false)}\n onComplete={() => setShowDialog(false)}\n />\n )}\n <GridMenuButton\n onClick={() => {\n setShowDialog(true)\n }}\n variant=\"outlined\"\n startIcon={<UploadTwoTone />}\n >\n Upload\n </GridMenuButton>\n </>\n )\n}\n"],"mappings":";;;;;;;;;;;AAaA,SAAeU,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAGb,EAAAL,mBAAAC,qBAA0CE,GAE1C,CAAAG,GAAAC,KAAoCT,EAAS,EAAK,GAElD,EAAAU,MAAAC,GAAAC,WAAAC,MACEjB,EAAaM,CAAc;CAE7B,IAAIW,GAAe;EAAA,IAAAC;EACoC,OADpCR,EAAA,OAAAS,OAAAC,IAAA,2BAAA,KACVF,IAAA,kBAAC,GAAD;GAAkB,SAAA;GAAqB,OAAA;EAAG,CAAA,GAAIR,EAAA,KAAAQ,KAAAA,IAAAR,EAAA,IAA9CQ;CAA8C;CAEvD,IAAIH,KAAA,CAAWZ,EAAoBY,CAAM,GAAC,OAEjC;CACR,IAAAG;CAAA,AAAAR,EAAA,OAAAH,KAAAG,EAAA,OAAAE,KAIIM,IAAAN,KAGC,kBAAC,GAAD;EACiBL;EACTK,MAAAA;EACG,eAAMC,EAAc,EAAK;EACtB,kBAAMA,EAAc,EAAK;CAAC,CAAA,GAEzCH,EAAA,KAAAH,GAAAG,EAAA,KAAAE,GAAAF,EAAA,KAAAQ,KAAAA,IAAAR,EAAA;CAAA,IAAAW;CAAA,AAAAX,EAAA,OAAAS,OAAAC,IAAA,2BAAA,KAEUC,UAAA;EACPR,EAAc,EAAI;CAAC,GACpBH,EAAA,KAAAW,KAAAA,IAAAX,EAAA;CAAA,IAAAY;CAAA,AAAAZ,EAAA,OAAAS,OAAAC,IAAA,2BAAA,KAHHE,IAAA,kBAAC,GAAD;EACW,SAAAD;EAGD,SAAA;EACG,WAAA,kBAAC,GAAD,CAAc,CAAA;YAC1B;CANc,CAAA,GAQEX,EAAA,KAAAY,KAAAA,IAAAZ,EAAA;CAAA,IAAAa;CAChB,OADgBb,EAAA,OAAAQ,IAChBK,IAAAb,EAAA,MApBHa,IAAA,kBAAA,GAAA,EAAA,UAAA,CACGL,GAUDI,CAQiB,EAAA,CAAA,GAChBZ,EAAA,KAAAQ,GAAAR,EAAA,KAAAa,IApBHA;AAoBG"}
@@ -4,8 +4,8 @@ import { useStack as n } from "./useStack.js";
4
4
  import { useEffect as r, useState as i } from "react";
5
5
  import { Menu as a, MenuItem as o } from "@mui/material";
6
6
  import { Fragment as ee, jsx as s, jsxs as c } from "react/jsx-runtime";
7
- import { c as te } from "react/compiler-runtime";
8
- import ne from "@mui/icons-material/KeyboardArrowDown";
7
+ import te from "@mui/icons-material/KeyboardArrowDown";
8
+ import { c as ne } from "react/compiler-runtime";
9
9
  //#region src/components/DataGrid/hooks/useGridUndoRedo.tsx
10
10
  function re(e) {
11
11
  return {
@@ -15,7 +15,7 @@ function re(e) {
15
15
  }
16
16
  var ie = 100, ae = 100;
17
17
  function l(l) {
18
- let u = te(78), d;
18
+ let u = ne(78), d;
19
19
  u[0] === Symbol.for("react.memo_cache_sentinel") ? (d = [], u[0] = d) : d = u[0];
20
20
  let f = n(d, ie), p;
21
21
  u[1] === Symbol.for("react.memo_cache_sentinel") ? (p = [], u[1] = p) : p = u[1];
@@ -155,7 +155,7 @@ function l(l) {
155
155
  r.length === 1 ? I(r[0]) : r.length > 1 && I(re(r));
156
156
  }, u[32] = I, u[33] = z, u[34] = B) : B = u[34];
157
157
  let he = B, V = _ ? "undo-menu" : void 0, ge = !E, H;
158
- u[35] === Symbol.for("react.memo_cache_sentinel") ? (H = /* @__PURE__ */ s(ne, {}), u[35] = H) : H = u[35];
158
+ u[35] === Symbol.for("react.memo_cache_sentinel") ? (H = /* @__PURE__ */ s(te, {}), u[35] = H) : H = u[35];
159
159
  let _e = E && `(${E.totalActions})`, U;
160
160
  u[36] !== V || u[37] !== ge || u[38] !== _e ? (U = /* @__PURE__ */ c(e, {
161
161
  variant: "outlined",
@@ -189,7 +189,7 @@ function l(l) {
189
189
  let K;
190
190
  u[47] !== U || u[48] !== G ? (K = /* @__PURE__ */ c(ee, { children: [U, G] }), u[47] = U, u[48] = G, u[49] = K) : K = u[49];
191
191
  let q = K, ve = v ? "redo-menu" : void 0, ye = !O, J;
192
- u[50] === Symbol.for("react.memo_cache_sentinel") ? (J = /* @__PURE__ */ s(ne, {}), u[50] = J) : J = u[50];
192
+ u[50] === Symbol.for("react.memo_cache_sentinel") ? (J = /* @__PURE__ */ s(te, {}), u[50] = J) : J = u[50];
193
193
  let be = O && `(${O.totalActions})`, Y;
194
194
  u[51] !== ve || u[52] !== ye || u[53] !== be ? (Y = /* @__PURE__ */ c(e, {
195
195
  variant: "outlined",
@@ -1 +1 @@
1
- {"version":3,"file":"applyModelChange.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/utils/applyModelChange.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,SAAS,EACT,qBAAqB,EACtB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;AAM9E;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,WAAW,CAAA;CAAE,GAC9D;IACE,IAAI,EAAE,eAAe,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,qBAAqB,CAAA;CACjC,GACD;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,cAAc,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AAEzD,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,mBAAmB,WAQxC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,WAAW,EACnB,kBAAkB,EAAE,mBAAmB,QA6ExC"}
1
+ {"version":3,"file":"applyModelChange.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/utils/applyModelChange.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,SAAS,EACT,qBAAqB,EACtB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;AAM9E;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,WAAW,CAAA;CAAE,GAC9D;IACE,IAAI,EAAE,eAAe,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,qBAAqB,CAAA;CACjC,GACD;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,cAAc,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AAEzD,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,mBAAmB,WAQxC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,WAAW,EACnB,kBAAkB,EAAE,mBAAmB,QAgFxC"}
@@ -8,10 +8,10 @@ function i(n, r, i) {
8
8
  return Object.hasOwn(n, r) ? t(n[r], a) : e(a?.isRequired);
9
9
  }
10
10
  function a(e, a, o) {
11
- let s = e.api.arr(["rows"]), { columnNames: c } = e.api.getSnapshot();
11
+ let s = e.api.arr(["rows"]), c = e.api.vec(["columnNames"]);
12
12
  switch (a.type) {
13
13
  case "CREATE": {
14
- let e = c.map((e) => r.con(i(a.rowData, e, o)));
14
+ let e = c.view().map((e) => r.con(i(a.rowData, e, o)));
15
15
  s?.ins(a.rowIndex, [r.obj({
16
16
  data: r.vec(...e),
17
17
  metadata: r.obj({})
@@ -22,18 +22,18 @@ function a(e, a, o) {
22
22
  s?.del(a.rowIndex, a.count ?? 1);
23
23
  break;
24
24
  case "UPDATE": {
25
- let i = e.api.getSnapshot().rows[a.rowIndex]?.data;
26
- Object.entries(a.updatedData).forEach(([s, l]) => {
27
- if (s.startsWith("_")) return;
28
- let u = c.indexOf(s);
29
- if (u !== -1) {
30
- let c = t(l, o[s]);
31
- if (n(i?.[u], c)) return;
32
- e.api.vec([
33
- "rows",
34
- String(a.rowIndex),
35
- "data"
36
- ])?.set([[u, r.con(c)]]);
25
+ let i = c.view(), l = [
26
+ "rows",
27
+ String(a.rowIndex),
28
+ "data"
29
+ ], u = a.rowIndex < (s?.length() ?? 0) ? e.api.vec(l) : void 0, d = u?.view();
30
+ Object.entries(a.updatedData).forEach(([a, s]) => {
31
+ if (a.startsWith("_")) return;
32
+ let c = i.indexOf(a);
33
+ if (c !== -1) {
34
+ let i = t(s, o[a]);
35
+ if (n(d?.[c], i)) return;
36
+ (u ?? e.api.vec(l))?.set([[c, r.con(i)]]);
37
37
  }
38
38
  });
39
39
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"applyModelChange.js","names":["DataGridRow","GridModel","ReplicaSelectionModel","SchemaPropertiesMap","s","isEqual","coerceModelCellValue","getEmptyValue","ModelChange","type","rowIndex","rowData","count","updatedData","replicaId","selection","newColumnOrder","getDefaultValueForProperty","row","property","schemaPropertyInfo","info","Object","hasOwn","isRequired","applyModelChange","model","change","rowsArr","api","arr","columnNames","getSnapshot","map","name","con","ins","obj","data","vec","metadata","del","currentRowData","rows","entries","forEach","key","value","startsWith","colIndex","indexOf","coercedValue","rowVec","String","set","has","add","columnOrderArr","currentLength","length","index"],"sources":["../../../../src/components/DataGrid/utils/applyModelChange.ts"],"sourcesContent":["import {\n DataGridRow,\n GridModel,\n ReplicaSelectionModel,\n} from '@/components/DataGrid/DataGridTypes'\nimport { SchemaPropertiesMap } from '@/utils/jsonschema/getSchemaPropertyInfo'\nimport { s } from 'json-joy/lib/json-crdt-patch'\nimport isEqual from 'lodash-es/isEqual'\nimport { coerceModelCellValue } from './schemaAwarePasteValue'\nimport { getEmptyValue } from './getEmptyValue'\n\n/**\n * Represents a change operation on the GridModel.\n */\nexport type ModelChange =\n | { type: 'CREATE'; rowIndex: number; rowData: DataGridRow }\n | { type: 'DELETE'; rowIndex: number; count?: number }\n | { type: 'UPDATE'; rowIndex: number; updatedData: DataGridRow }\n | {\n type: 'SET_SELECTION'\n replicaId: string\n selection: ReplicaSelectionModel\n }\n | { type: 'REORDER_COLUMNS'; newColumnOrder: number[] }\n\nexport function getDefaultValueForProperty(\n row: DataGridRow,\n property: string,\n schemaPropertyInfo: SchemaPropertiesMap,\n) {\n const info = schemaPropertyInfo[property]\n if (Object.hasOwn(row, property)) {\n return coerceModelCellValue(row[property], info)\n }\n // Property absent from the row: derive the schema-correct blank directly.\n return getEmptyValue(info?.isRequired)\n}\n\n/**\n * Applies a single change operation (create, delete, or update) to the GridModel.\n *\n * @param model - The grid model to modify\n * @param change - The change to apply\n */\nexport function applyModelChange(\n model: GridModel,\n change: ModelChange,\n schemaPropertyInfo: SchemaPropertiesMap,\n) {\n const rowsArr = model.api.arr(['rows'])\n const { columnNames } = model.api.getSnapshot()\n\n switch (change.type) {\n case 'CREATE': {\n // Convert rowData object into a CRDT vector\n const rowData = columnNames.map(name =>\n s.con(\n getDefaultValueForProperty(change.rowData, name, schemaPropertyInfo),\n ),\n )\n // Insert a new row object at the specified index\n rowsArr?.ins(change.rowIndex, [\n s.obj({ data: s.vec(...rowData), metadata: s.obj({}) }),\n ])\n break\n }\n\n case 'DELETE':\n rowsArr?.del(change.rowIndex, change.count ?? 1)\n break\n\n case 'UPDATE': {\n const currentRowData = model.api.getSnapshot().rows[change.rowIndex]?.data\n Object.entries(change.updatedData).forEach(([key, value]) => {\n if (key.startsWith('_')) return // Skip internal properties like _rowId\n const colIndex = columnNames.indexOf(key)\n if (colIndex !== -1) {\n // Coerce empty values (null/undefined/\"\") to the schema-correct blank\n // so any path that reaches the model — paste, programmatic edits,\n // etc. — produces a value the validator can describe with its\n // standard \"<value> is not a valid …\" message format.\n const coercedValue = coerceModelCellValue(\n value,\n schemaPropertyInfo[key],\n )\n // Only write cells whose value actually changed to avoid stamping\n // the local replica's SID on unmodified cells.\n if (isEqual(currentRowData?.[colIndex], coercedValue)) return\n // Get the CRDT array of cell values for this row\n const rowVec = model.api.vec([\n 'rows',\n String(change.rowIndex),\n 'data',\n ])\n // Update the specific column with the new value\n rowVec?.set([[colIndex, s.con(coercedValue)]])\n }\n })\n break\n }\n case 'SET_SELECTION': {\n if (!model.api.obj().has('selection')) {\n // Create if not exists\n model.api.obj().add(['selection'], s.obj({}))\n }\n model.api\n .obj(['selection'])\n .set({ [change.replicaId]: s.con(change.selection) })\n\n break\n }\n case 'REORDER_COLUMNS': {\n const columnOrderArr = model.api.arr(['columnOrder'])\n const currentLength = columnOrderArr?.length() ?? 0\n if (currentLength > 0) {\n columnOrderArr?.del(0, currentLength)\n }\n columnOrderArr?.ins(\n 0,\n change.newColumnOrder.map(index => s.con(index)),\n )\n break\n }\n }\n}\n"],"mappings":";;;;;AAyBA,SAAgBiB,EACdC,GACAC,GACAC,GACA;CACA,IAAMC,IAAOD,EAAmBD;CAKhC,OAJIG,OAAOC,OAAOL,GAAKC,CAAQ,IACtBb,EAAqBY,EAAIC,IAAWE,CAAI,IAG1Cd,EAAcc,GAAMG,UAAU;AACvC;AAQA,SAAgBC,EACdC,GACAC,GACAP,GACA;CACA,IAAMQ,IAAUF,EAAMG,IAAIC,IAAI,CAAC,MAAM,CAAC,GAChC,EAAEC,mBAAgBL,EAAMG,IAAIG,YAAY;CAE9C,QAAQL,EAAOlB,MAAf;EACE,KAAK,UAAU;GAEb,IAAME,IAAUoB,EAAYE,KAAIC,MAC9B9B,EAAE+B,IACAlB,EAA2BU,EAAOhB,SAASuB,GAAMd,CAAkB,CACrE,CACF;GAEAQ,GAASQ,IAAIT,EAAOjB,UAAU,CAC5BN,EAAEiC,IAAI;IAAEC,MAAMlC,EAAEmC,IAAI,GAAG5B,CAAO;IAAG6B,UAAUpC,EAAEiC,IAAI,CAAC,CAAC;GAAE,CAAC,CAAC,CACxD;GACD;EACF;EAEA,KAAK;GACHT,GAASa,IAAId,EAAOjB,UAAUiB,EAAOf,SAAS,CAAC;GAC/C;EAEF,KAAK,UAAU;GACb,IAAM8B,IAAiBhB,EAAMG,IAAIG,YAAY,EAAEW,KAAKhB,EAAOjB,WAAW4B;GACtEhB,OAAOsB,QAAQjB,EAAOd,WAAW,EAAEgC,SAAS,CAACC,GAAKC,OAAW;IAC3D,IAAID,EAAIE,WAAW,GAAG,GAAG;IACzB,IAAMC,IAAWlB,EAAYmB,QAAQJ,CAAG;IACxC,IAAIG,MAAa,IAAI;KAKnB,IAAME,IAAe7C,EACnByC,GACA3B,EAAmB0B,EACrB;KAGA,IAAIzC,EAAQqC,IAAiBO,IAAWE,CAAY,GAAG;KAQvDC,EANqBvB,IAAIU,IAAI;MAC3B;MACAc,OAAO1B,EAAOjB,QAAQ;MACtB;KAAM,CAGR0C,GAAQE,IAAI,CAAC,CAACL,GAAU7C,EAAE+B,IAAIgB,CAAY,CAAC,CAAC,CAAC;IAC/C;GACF,CAAC;GACD;EACF;EACA,KAAK;GAKHzB,AAJKA,EAAMG,IAAIQ,IAAI,EAAEkB,IAAI,WAAW,KAElC7B,EAAMG,IAAIQ,IAAI,EAAEmB,IAAI,CAAC,WAAW,GAAGpD,EAAEiC,IAAI,CAAC,CAAC,CAAC,GAE9CX,EAAMG,IACHQ,IAAI,CAAC,WAAW,CAAC,EACjBiB,IAAI,GAAG3B,EAAOb,YAAYV,EAAE+B,IAAIR,EAAOZ,SAAS,EAAE,CAAC;GAEtD;EAEF,KAAK,mBAAmB;GACtB,IAAM0C,IAAiB/B,EAAMG,IAAIC,IAAI,CAAC,aAAa,CAAC,GAC9C4B,IAAgBD,GAAgBE,OAAO,KAAK;GAIlDF,AAHIC,IAAgB,KAClBD,GAAgBhB,IAAI,GAAGiB,CAAa,GAEtCD,GAAgBrB,IACd,GACAT,EAAOX,eAAeiB,KAAI2B,MAASxD,EAAE+B,IAAIyB,CAAK,CAAC,CACjD;GACA;EACF;CACF;AACF"}
1
+ {"version":3,"file":"applyModelChange.js","names":["DataGridRow","GridModel","ReplicaSelectionModel","SchemaPropertiesMap","s","isEqual","coerceModelCellValue","getEmptyValue","ModelChange","type","rowIndex","rowData","count","updatedData","replicaId","selection","newColumnOrder","getDefaultValueForProperty","row","property","schemaPropertyInfo","info","Object","hasOwn","isRequired","applyModelChange","model","change","rowsArr","api","arr","columnNamesVec","vec","view","map","name","con","ins","obj","data","metadata","del","columnNames","rowDataPath","String","rowExists","length","rowVec","undefined","currentRowData","entries","forEach","key","value","startsWith","colIndex","indexOf","coercedValue","targetRowVec","set","has","add","columnOrderArr","currentLength","index"],"sources":["../../../../src/components/DataGrid/utils/applyModelChange.ts"],"sourcesContent":["import {\n DataGridRow,\n GridModel,\n ReplicaSelectionModel,\n} from '@/components/DataGrid/DataGridTypes'\nimport { SchemaPropertiesMap } from '@/utils/jsonschema/getSchemaPropertyInfo'\nimport { s } from 'json-joy/lib/json-crdt-patch'\nimport isEqual from 'lodash-es/isEqual'\nimport { coerceModelCellValue } from './schemaAwarePasteValue'\nimport { getEmptyValue } from './getEmptyValue'\n\n/**\n * Represents a change operation on the GridModel.\n */\nexport type ModelChange =\n | { type: 'CREATE'; rowIndex: number; rowData: DataGridRow }\n | { type: 'DELETE'; rowIndex: number; count?: number }\n | { type: 'UPDATE'; rowIndex: number; updatedData: DataGridRow }\n | {\n type: 'SET_SELECTION'\n replicaId: string\n selection: ReplicaSelectionModel\n }\n | { type: 'REORDER_COLUMNS'; newColumnOrder: number[] }\n\nexport function getDefaultValueForProperty(\n row: DataGridRow,\n property: string,\n schemaPropertyInfo: SchemaPropertiesMap,\n) {\n const info = schemaPropertyInfo[property]\n if (Object.hasOwn(row, property)) {\n return coerceModelCellValue(row[property], info)\n }\n // Property absent from the row: derive the schema-correct blank directly.\n return getEmptyValue(info?.isRequired)\n}\n\n/**\n * Applies a single change operation (create, delete, or update) to the GridModel.\n *\n * @param model - The grid model to modify\n * @param change - The change to apply\n */\nexport function applyModelChange(\n model: GridModel,\n change: ModelChange,\n schemaPropertyInfo: SchemaPropertiesMap,\n) {\n const rowsArr = model.api.arr(['rows'])\n // Read only the column names. A full snapshot walks every row, which makes applying a\n // batch of N changes cost O(N * rows).\n const columnNamesVec = model.api.vec(['columnNames'])\n\n switch (change.type) {\n case 'CREATE': {\n // Convert rowData object into a CRDT vector\n const rowData = (columnNamesVec.view() as string[]).map(name =>\n s.con(\n getDefaultValueForProperty(change.rowData, name, schemaPropertyInfo),\n ),\n )\n // Insert a new row object at the specified index\n rowsArr?.ins(change.rowIndex, [\n s.obj({ data: s.vec(...rowData), metadata: s.obj({}) }),\n ])\n break\n }\n\n case 'DELETE':\n rowsArr?.del(change.rowIndex, change.count ?? 1)\n break\n\n case 'UPDATE': {\n const columnNames = columnNamesVec.view() as string[]\n const rowDataPath = ['rows', String(change.rowIndex), 'data']\n const rowExists = change.rowIndex < (rowsArr?.length() ?? 0)\n const rowVec = rowExists ? model.api.vec(rowDataPath) : undefined\n const currentRowData = rowVec?.view() as unknown[] | undefined\n Object.entries(change.updatedData).forEach(([key, value]) => {\n if (key.startsWith('_')) return // Skip internal properties like _rowId\n const colIndex = columnNames.indexOf(key)\n if (colIndex !== -1) {\n // Coerce empty values (null/undefined/\"\") to the schema-correct blank\n // so any path that reaches the model — paste, programmatic edits,\n // etc. — produces a value the validator can describe with its\n // standard \"<value> is not a valid …\" message format.\n const coercedValue = coerceModelCellValue(\n value,\n schemaPropertyInfo[key],\n )\n // Only write cells whose value actually changed to avoid stamping\n // the local replica's SID on unmodified cells.\n if (isEqual(currentRowData?.[colIndex], coercedValue)) return\n // An update to a row that does not exist must fail loudly rather than be dropped,\n // so resolve the path again here to surface the missing row.\n const targetRowVec = rowVec ?? model.api.vec(rowDataPath)\n // Update the specific column with the new value\n targetRowVec?.set([[colIndex, s.con(coercedValue)]])\n }\n })\n break\n }\n case 'SET_SELECTION': {\n if (!model.api.obj().has('selection')) {\n // Create if not exists\n model.api.obj().add(['selection'], s.obj({}))\n }\n model.api\n .obj(['selection'])\n .set({ [change.replicaId]: s.con(change.selection) })\n\n break\n }\n case 'REORDER_COLUMNS': {\n const columnOrderArr = model.api.arr(['columnOrder'])\n const currentLength = columnOrderArr?.length() ?? 0\n if (currentLength > 0) {\n columnOrderArr?.del(0, currentLength)\n }\n columnOrderArr?.ins(\n 0,\n change.newColumnOrder.map(index => s.con(index)),\n )\n break\n }\n }\n}\n"],"mappings":";;;;;AAyBA,SAAgBiB,EACdC,GACAC,GACAC,GACA;CACA,IAAMC,IAAOD,EAAmBD;CAKhC,OAJIG,OAAOC,OAAOL,GAAKC,CAAQ,IACtBb,EAAqBY,EAAIC,IAAWE,CAAI,IAG1Cd,EAAcc,GAAMG,UAAU;AACvC;AAQA,SAAgBC,EACdC,GACAC,GACAP,GACA;CACA,IAAMQ,IAAUF,EAAMG,IAAIC,IAAI,CAAC,MAAM,CAAC,GAGhCC,IAAiBL,EAAMG,IAAIG,IAAI,CAAC,aAAa,CAAC;CAEpD,QAAQL,EAAOlB,MAAf;EACE,KAAK,UAAU;GAEb,IAAME,IAAWoB,EAAeE,KAAK,EAAeC,KAAIC,MACtD/B,EAAEgC,IACAnB,EAA2BU,EAAOhB,SAASwB,GAAMf,CAAkB,CACrE,CACF;GAEAQ,GAASS,IAAIV,EAAOjB,UAAU,CAC5BN,EAAEkC,IAAI;IAAEC,MAAMnC,EAAE4B,IAAI,GAAGrB,CAAO;IAAG6B,UAAUpC,EAAEkC,IAAI,CAAC,CAAC;GAAE,CAAC,CAAC,CACxD;GACD;EACF;EAEA,KAAK;GACHV,GAASa,IAAId,EAAOjB,UAAUiB,EAAOf,SAAS,CAAC;GAC/C;EAEF,KAAK,UAAU;GACb,IAAM8B,IAAcX,EAAeE,KAAK,GAClCU,IAAc;IAAC;IAAQC,OAAOjB,EAAOjB,QAAQ;IAAG;GAAM,GAEtDqC,IADYpB,EAAOjB,YAAYkB,GAASkB,OAAO,KAAK,KAC/BpB,EAAMG,IAAIG,IAAIW,CAAW,IAAIK,KAAAA,GAClDC,IAAiBF,GAAQd,KAAK;GACpCX,OAAO4B,QAAQvB,EAAOd,WAAW,EAAEsC,SAAS,CAACC,GAAKC,OAAW;IAC3D,IAAID,EAAIE,WAAW,GAAG,GAAG;IACzB,IAAMC,IAAWb,EAAYc,QAAQJ,CAAG;IACxC,IAAIG,MAAa,IAAI;KAKnB,IAAME,IAAenD,EACnB+C,GACAjC,EAAmBgC,EACrB;KAGA,IAAI/C,EAAQ4C,IAAiBM,IAAWE,CAAY,GAAG;KAKvDC,CAFqBX,KAAUrB,EAAMG,IAAIG,IAAIW,CAAW,IAE1CgB,IAAI,CAAC,CAACJ,GAAUnD,EAAEgC,IAAIqB,CAAY,CAAC,CAAC,CAAC;IACrD;GACF,CAAC;GACD;EACF;EACA,KAAK;GAKH/B,AAJKA,EAAMG,IAAIS,IAAI,EAAEsB,IAAI,WAAW,KAElClC,EAAMG,IAAIS,IAAI,EAAEuB,IAAI,CAAC,WAAW,GAAGzD,EAAEkC,IAAI,CAAC,CAAC,CAAC,GAE9CZ,EAAMG,IACHS,IAAI,CAAC,WAAW,CAAC,EACjBqB,IAAI,GAAGhC,EAAOb,YAAYV,EAAEgC,IAAIT,EAAOZ,SAAS,EAAE,CAAC;GAEtD;EAEF,KAAK,mBAAmB;GACtB,IAAM+C,IAAiBpC,EAAMG,IAAIC,IAAI,CAAC,aAAa,CAAC,GAC9CiC,IAAgBD,GAAgBhB,OAAO,KAAK;GAIlDgB,AAHIC,IAAgB,KAClBD,GAAgBrB,IAAI,GAAGsB,CAAa,GAEtCD,GAAgBzB,IACd,GACAV,EAAOX,eAAekB,KAAI8B,MAAS5D,EAAEgC,IAAI4B,CAAK,CAAC,CACjD;GACA;EACF;CACF;AACF"}
@@ -8,7 +8,7 @@ import { ColumnHeaderWithTooltip as o } from "../components/ColumnHeaderWithTool
8
8
  import { wrapPasteValueWithSchemaCoercion as s } from "./schemaAwarePasteValue.js";
9
9
  import { Tooltip as c } from "@mui/material";
10
10
  import { Fragment as l, jsx as u, jsxs as d } from "react/jsx-runtime";
11
- import { SmartToyTwoTone as f } from "@mui/icons-material";
11
+ import f from "@mui/icons-material/SmartToyTwoTone";
12
12
  import { c as p } from "react/compiler-runtime";
13
13
  import { createTextColumn as m, keyColumn as h } from "@sage-bionetworks/react-datasheet-grid";
14
14
  //#region src/components/DataGrid/utils/columnFactory.tsx
@@ -1 +1 @@
1
- {"version":3,"file":"columnFactory.js","names":["dateTimeColumn","EnumeratedValue","FlatTypeInfo","SchemaPropertyInfo","CellComponent","CellProps","Column","createTextColumn","keyColumn","autocompleteColumn","autocompleteMultipleEnumColumn","numberColumn","calculateDefaultColumnWidth","HeaderOptions","ColumnHeaderWithTooltip","Tooltip","SmartToyTwoTone","DataGridRow","wrapPasteValueWithSchemaCoercion","getEmptyValue","withChangeIndicatorTooltip","OriginalComponent","T","C","colName","CellWithTooltip","props","$","_c","changeInfo","rowData","__cellChangeInfo","isAgent","category","t0","t1","tooltipText","position","top","right","width","height","zIndex","pointerEvents","t2","focus","fontSize","alignSelf","flexShrink","mr","color","backgroundColor","t3","displayName","ColumnConfig","columnName","description","disabled","typeInfo","enumeratedValues","isRequired","customWidth","showPinIcon","isPinned","onTogglePin","isUpsertKey","schemaPropertyInfo","createDeleteValue","Record","createParseUserInput","value","trimmedValue","trim","createBaseColumn","config","columnImpl","headerOptions","hasDescription","undefined","keyed","component","title","minWidth","basis","grow","shrink","deleteValue","pasteValue","stickyLeft","DATE_COLUMN_FORMATS","ReadonlySet","Set","COLUMN_FACTORIES","multipleEnum","choices","colType","type","limitTags","clearValue","boolean","number","enumerated","dateOrDateTime","format","text","continuousUpdates","deletedValue","parseUserInput","cellClassName","getColumnType","length","has","isArray","createColumn","columnType"],"sources":["../../../../src/components/DataGrid/utils/columnFactory.tsx"],"sourcesContent":["import { dateTimeColumn } from '@/components/DataGrid/columns/DateTimeColumn'\nimport { EnumeratedValue } from '@/utils/jsonschema/getEnumeratedValues'\nimport { FlatTypeInfo } from '@/utils/jsonschema/getType'\nimport { SchemaPropertyInfo } from '@/utils/jsonschema/getSchemaPropertyInfo'\nimport {\n CellComponent,\n CellProps,\n Column,\n createTextColumn,\n keyColumn,\n} from '@sage-bionetworks/react-datasheet-grid'\nimport { autocompleteColumn } from '../columns/AutocompleteColumn'\nimport { autocompleteMultipleEnumColumn } from '../columns/AutocompleteMultipleEnumColumn'\nimport { numberColumn } from '../columns/NumberColumn'\nimport {\n calculateDefaultColumnWidth,\n HeaderOptions,\n} from './calculateColumnWidth'\nimport { ColumnHeaderWithTooltip } from '../components/ColumnHeaderWithTooltip'\nimport { Tooltip } from '@mui/material'\nimport { SmartToyTwoTone } from '@mui/icons-material'\nimport type { DataGridRow } from '../DataGridTypes'\nimport { wrapPasteValueWithSchemaCoercion } from './schemaAwarePasteValue'\nimport { getEmptyValue } from './getEmptyValue'\n\n/**\n * Wraps a column cell component to overlay change-attribution indicators:\n * - Non-agent changes: invisible 7×7px tooltip trigger over the CSS triangle (top-right).\n * - Agent changes: robot icon (1em, vertically centered on the right) with no triangle.\n */\nfunction withChangeIndicatorTooltip<T, C>(\n OriginalComponent: CellComponent<T, C>,\n colName: string,\n): CellComponent<T, C> {\n function CellWithTooltip(props: CellProps<T, C>) {\n const changeInfo = (props.rowData as DataGridRow).__cellChangeInfo?.[\n colName\n ]\n const isAgent =\n changeInfo?.category === 'own-agent' ||\n changeInfo?.category === 'other-agent'\n return (\n <>\n <OriginalComponent {...props} />\n {changeInfo && !isAgent && (\n <Tooltip title={changeInfo.tooltipText} placement=\"top-end\">\n <div\n style={{\n position: 'absolute',\n top: 0,\n right: 0,\n width: 7,\n height: 7,\n zIndex: 21,\n pointerEvents: 'auto',\n }}\n />\n </Tooltip>\n )}\n {isAgent && !props.focus && (\n <Tooltip title={changeInfo.tooltipText} placement=\"left\">\n <SmartToyTwoTone\n sx={{\n fontSize: '1em',\n alignSelf: 'center',\n flexShrink: 0,\n mr: 0.5,\n zIndex: 21,\n pointerEvents: 'auto',\n color: 'grey.400',\n backgroundColor: 'transparent',\n }}\n />\n </Tooltip>\n )}\n </>\n )\n }\n CellWithTooltip.displayName = `CellWithTooltip(${colName})`\n return CellWithTooltip\n}\n\ntype ColumnConfig = {\n columnName: string\n description?: string\n disabled?: boolean\n typeInfo: FlatTypeInfo | null\n enumeratedValues: EnumeratedValue[] | string[] | null\n isRequired: boolean\n customWidth?: number\n showPinIcon?: boolean\n isPinned?: boolean\n onTogglePin?: () => void\n isUpsertKey?: boolean\n /**\n * Optional column-level schema info. When provided, paste behavior coerces\n * empty pasted cells to the schema-correct blank (undefined for optional\n * columns, null for required columns). Omit to preserve the column impl's\n * default paste behavior.\n */\n schemaPropertyInfo?: SchemaPropertyInfo\n}\n\nfunction createDeleteValue(columnName: string, isRequired?: boolean) {\n return ({ rowData }: { rowData: Record<string, unknown> }) => ({\n ...rowData,\n [columnName]: getEmptyValue(isRequired),\n })\n}\n\nfunction createParseUserInput(isRequired?: boolean) {\n return (value: string) => {\n const trimmedValue = value.trim()\n if (trimmedValue === '') {\n return getEmptyValue(isRequired)\n }\n return trimmedValue\n }\n}\n\nfunction createBaseColumn(config: ColumnConfig, columnImpl: any) {\n const headerOptions: HeaderOptions = {\n showPinIcon: config.showPinIcon,\n hasDescription: !!config.description,\n }\n\n const width =\n config.customWidth ??\n calculateDefaultColumnWidth(\n config.columnName,\n undefined, // propertyInfo is not available here, passed from higher level\n headerOptions,\n )\n\n const keyed = keyColumn(config.columnName, columnImpl)\n return {\n ...keyed,\n component: withChangeIndicatorTooltip(keyed.component!, config.columnName),\n title: (\n <ColumnHeaderWithTooltip\n name={config.columnName}\n description={config.description}\n isRequired={config.isRequired}\n isUpsertKey={config.isUpsertKey}\n showPinIcon={config.showPinIcon}\n isPinned={config.isPinned}\n onTogglePin={config.onTogglePin}\n />\n ),\n minWidth: width,\n basis: width,\n grow: 0,\n shrink: 0,\n disabled: config.disabled,\n deleteValue: createDeleteValue(config.columnName, config.isRequired),\n pasteValue: wrapPasteValueWithSchemaCoercion(\n keyed.pasteValue,\n config.columnName,\n config.schemaPropertyInfo,\n ),\n stickyLeft: config.isPinned,\n }\n}\n\n// JSON Schema formats handled by the date column: `date-time` collects a time of\n// day alongside the date, `date` a calendar date on its own.\nconst DATE_COLUMN_FORMATS: ReadonlySet<string> = new Set(['date', 'date-time'])\n\nconst COLUMN_FACTORIES = {\n multipleEnum: (config: ColumnConfig) => {\n return createBaseColumn(\n config,\n autocompleteMultipleEnumColumn({\n choices: config.enumeratedValues ?? [],\n colType: config.typeInfo?.type || null,\n limitTags: 3,\n clearValue: getEmptyValue(config.isRequired),\n }),\n )\n },\n\n boolean: (config: ColumnConfig) => {\n return createBaseColumn(\n config,\n autocompleteColumn({\n choices: [true, false],\n colType: 'boolean',\n clearValue: getEmptyValue(config.isRequired),\n }),\n )\n },\n\n number: (config: ColumnConfig) => {\n return createBaseColumn(\n config,\n numberColumn({\n colType: config.typeInfo?.type,\n isRequired: config.isRequired,\n }),\n )\n },\n\n enumerated: (config: ColumnConfig) => {\n return createBaseColumn(\n config,\n autocompleteColumn({\n choices: config.enumeratedValues ?? [],\n colType: config.typeInfo?.type || null,\n clearValue: getEmptyValue(config.isRequired),\n }),\n )\n },\n\n dateOrDateTime: (config: ColumnConfig) => {\n const columnImpl = dateTimeColumn({\n colType: config.typeInfo?.type || null,\n format: config.typeInfo?.format,\n })\n\n // Date-time needs special width calculation\n const headerOptions: HeaderOptions = {\n showPinIcon: config.showPinIcon,\n hasDescription: !!config.description,\n }\n\n const width =\n config.customWidth ??\n calculateDefaultColumnWidth(\n config.columnName,\n {\n type: config.typeInfo ?? undefined,\n isRequired: config.isRequired,\n enumeratedValues: null,\n },\n headerOptions,\n )\n\n return {\n ...createBaseColumn(config, columnImpl),\n minWidth: width,\n basis: width,\n }\n },\n\n text: (config: ColumnConfig) => {\n const columnImpl = createTextColumn({\n continuousUpdates: false,\n deletedValue: undefined,\n parseUserInput: createParseUserInput(config.isRequired),\n })\n\n return {\n ...createBaseColumn(config, columnImpl),\n cellClassName: 'MuiInputBase-input',\n }\n },\n}\n\nfunction getColumnType(\n typeInfo: FlatTypeInfo | null,\n enumeratedValues?: EnumeratedValue[] | string[] | null,\n): keyof typeof COLUMN_FACTORIES {\n if (!typeInfo) {\n return enumeratedValues && enumeratedValues.length > 0\n ? 'enumerated'\n : 'text'\n }\n\n if (typeInfo.format && DATE_COLUMN_FORMATS.has(typeInfo.format)) {\n return 'dateOrDateTime'\n }\n\n // Handle arrays - check if it's an array of enums\n if (typeInfo.isArray) {\n return 'multipleEnum'\n }\n\n if (typeInfo.type === 'boolean') {\n return 'boolean'\n }\n\n if (typeInfo.type === 'number' || typeInfo.type === 'integer') {\n return 'number'\n }\n\n if (enumeratedValues && enumeratedValues.length > 0) {\n return 'enumerated'\n }\n\n return 'text'\n}\n\nexport function createColumn(config: ColumnConfig): Column {\n const columnType = getColumnType(config.typeInfo, config.enumeratedValues)\n return COLUMN_FACTORIES[columnType](config)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"columnFactory.js","names":["dateTimeColumn","EnumeratedValue","FlatTypeInfo","SchemaPropertyInfo","CellComponent","CellProps","Column","createTextColumn","keyColumn","autocompleteColumn","autocompleteMultipleEnumColumn","numberColumn","calculateDefaultColumnWidth","HeaderOptions","ColumnHeaderWithTooltip","Tooltip","SmartToyTwoTone","DataGridRow","wrapPasteValueWithSchemaCoercion","getEmptyValue","withChangeIndicatorTooltip","OriginalComponent","T","C","colName","CellWithTooltip","props","$","_c","changeInfo","rowData","__cellChangeInfo","isAgent","category","t0","t1","tooltipText","position","top","right","width","height","zIndex","pointerEvents","t2","focus","fontSize","alignSelf","flexShrink","mr","color","backgroundColor","t3","displayName","ColumnConfig","columnName","description","disabled","typeInfo","enumeratedValues","isRequired","customWidth","showPinIcon","isPinned","onTogglePin","isUpsertKey","schemaPropertyInfo","createDeleteValue","Record","createParseUserInput","value","trimmedValue","trim","createBaseColumn","config","columnImpl","headerOptions","hasDescription","undefined","keyed","component","title","minWidth","basis","grow","shrink","deleteValue","pasteValue","stickyLeft","DATE_COLUMN_FORMATS","ReadonlySet","Set","COLUMN_FACTORIES","multipleEnum","choices","colType","type","limitTags","clearValue","boolean","number","enumerated","dateOrDateTime","format","text","continuousUpdates","deletedValue","parseUserInput","cellClassName","getColumnType","length","has","isArray","createColumn","columnType"],"sources":["../../../../src/components/DataGrid/utils/columnFactory.tsx"],"sourcesContent":["import { dateTimeColumn } from '@/components/DataGrid/columns/DateTimeColumn'\nimport { EnumeratedValue } from '@/utils/jsonschema/getEnumeratedValues'\nimport { FlatTypeInfo } from '@/utils/jsonschema/getType'\nimport { SchemaPropertyInfo } from '@/utils/jsonschema/getSchemaPropertyInfo'\nimport {\n CellComponent,\n CellProps,\n Column,\n createTextColumn,\n keyColumn,\n} from '@sage-bionetworks/react-datasheet-grid'\nimport { autocompleteColumn } from '../columns/AutocompleteColumn'\nimport { autocompleteMultipleEnumColumn } from '../columns/AutocompleteMultipleEnumColumn'\nimport { numberColumn } from '../columns/NumberColumn'\nimport {\n calculateDefaultColumnWidth,\n HeaderOptions,\n} from './calculateColumnWidth'\nimport { ColumnHeaderWithTooltip } from '../components/ColumnHeaderWithTooltip'\nimport { Tooltip } from '@mui/material'\nimport SmartToyTwoTone from '@mui/icons-material/SmartToyTwoTone'\nimport type { DataGridRow } from '../DataGridTypes'\nimport { wrapPasteValueWithSchemaCoercion } from './schemaAwarePasteValue'\nimport { getEmptyValue } from './getEmptyValue'\n\n/**\n * Wraps a column cell component to overlay change-attribution indicators:\n * - Non-agent changes: invisible 7×7px tooltip trigger over the CSS triangle (top-right).\n * - Agent changes: robot icon (1em, vertically centered on the right) with no triangle.\n */\nfunction withChangeIndicatorTooltip<T, C>(\n OriginalComponent: CellComponent<T, C>,\n colName: string,\n): CellComponent<T, C> {\n function CellWithTooltip(props: CellProps<T, C>) {\n const changeInfo = (props.rowData as DataGridRow).__cellChangeInfo?.[\n colName\n ]\n const isAgent =\n changeInfo?.category === 'own-agent' ||\n changeInfo?.category === 'other-agent'\n return (\n <>\n <OriginalComponent {...props} />\n {changeInfo && !isAgent && (\n <Tooltip title={changeInfo.tooltipText} placement=\"top-end\">\n <div\n style={{\n position: 'absolute',\n top: 0,\n right: 0,\n width: 7,\n height: 7,\n zIndex: 21,\n pointerEvents: 'auto',\n }}\n />\n </Tooltip>\n )}\n {isAgent && !props.focus && (\n <Tooltip title={changeInfo.tooltipText} placement=\"left\">\n <SmartToyTwoTone\n sx={{\n fontSize: '1em',\n alignSelf: 'center',\n flexShrink: 0,\n mr: 0.5,\n zIndex: 21,\n pointerEvents: 'auto',\n color: 'grey.400',\n backgroundColor: 'transparent',\n }}\n />\n </Tooltip>\n )}\n </>\n )\n }\n CellWithTooltip.displayName = `CellWithTooltip(${colName})`\n return CellWithTooltip\n}\n\ntype ColumnConfig = {\n columnName: string\n description?: string\n disabled?: boolean\n typeInfo: FlatTypeInfo | null\n enumeratedValues: EnumeratedValue[] | string[] | null\n isRequired: boolean\n customWidth?: number\n showPinIcon?: boolean\n isPinned?: boolean\n onTogglePin?: () => void\n isUpsertKey?: boolean\n /**\n * Optional column-level schema info. When provided, paste behavior coerces\n * empty pasted cells to the schema-correct blank (undefined for optional\n * columns, null for required columns). Omit to preserve the column impl's\n * default paste behavior.\n */\n schemaPropertyInfo?: SchemaPropertyInfo\n}\n\nfunction createDeleteValue(columnName: string, isRequired?: boolean) {\n return ({ rowData }: { rowData: Record<string, unknown> }) => ({\n ...rowData,\n [columnName]: getEmptyValue(isRequired),\n })\n}\n\nfunction createParseUserInput(isRequired?: boolean) {\n return (value: string) => {\n const trimmedValue = value.trim()\n if (trimmedValue === '') {\n return getEmptyValue(isRequired)\n }\n return trimmedValue\n }\n}\n\nfunction createBaseColumn(config: ColumnConfig, columnImpl: any) {\n const headerOptions: HeaderOptions = {\n showPinIcon: config.showPinIcon,\n hasDescription: !!config.description,\n }\n\n const width =\n config.customWidth ??\n calculateDefaultColumnWidth(\n config.columnName,\n undefined, // propertyInfo is not available here, passed from higher level\n headerOptions,\n )\n\n const keyed = keyColumn(config.columnName, columnImpl)\n return {\n ...keyed,\n component: withChangeIndicatorTooltip(keyed.component!, config.columnName),\n title: (\n <ColumnHeaderWithTooltip\n name={config.columnName}\n description={config.description}\n isRequired={config.isRequired}\n isUpsertKey={config.isUpsertKey}\n showPinIcon={config.showPinIcon}\n isPinned={config.isPinned}\n onTogglePin={config.onTogglePin}\n />\n ),\n minWidth: width,\n basis: width,\n grow: 0,\n shrink: 0,\n disabled: config.disabled,\n deleteValue: createDeleteValue(config.columnName, config.isRequired),\n pasteValue: wrapPasteValueWithSchemaCoercion(\n keyed.pasteValue,\n config.columnName,\n config.schemaPropertyInfo,\n ),\n stickyLeft: config.isPinned,\n }\n}\n\n// JSON Schema formats handled by the date column: `date-time` collects a time of\n// day alongside the date, `date` a calendar date on its own.\nconst DATE_COLUMN_FORMATS: ReadonlySet<string> = new Set(['date', 'date-time'])\n\nconst COLUMN_FACTORIES = {\n multipleEnum: (config: ColumnConfig) => {\n return createBaseColumn(\n config,\n autocompleteMultipleEnumColumn({\n choices: config.enumeratedValues ?? [],\n colType: config.typeInfo?.type || null,\n limitTags: 3,\n clearValue: getEmptyValue(config.isRequired),\n }),\n )\n },\n\n boolean: (config: ColumnConfig) => {\n return createBaseColumn(\n config,\n autocompleteColumn({\n choices: [true, false],\n colType: 'boolean',\n clearValue: getEmptyValue(config.isRequired),\n }),\n )\n },\n\n number: (config: ColumnConfig) => {\n return createBaseColumn(\n config,\n numberColumn({\n colType: config.typeInfo?.type,\n isRequired: config.isRequired,\n }),\n )\n },\n\n enumerated: (config: ColumnConfig) => {\n return createBaseColumn(\n config,\n autocompleteColumn({\n choices: config.enumeratedValues ?? [],\n colType: config.typeInfo?.type || null,\n clearValue: getEmptyValue(config.isRequired),\n }),\n )\n },\n\n dateOrDateTime: (config: ColumnConfig) => {\n const columnImpl = dateTimeColumn({\n colType: config.typeInfo?.type || null,\n format: config.typeInfo?.format,\n })\n\n // Date-time needs special width calculation\n const headerOptions: HeaderOptions = {\n showPinIcon: config.showPinIcon,\n hasDescription: !!config.description,\n }\n\n const width =\n config.customWidth ??\n calculateDefaultColumnWidth(\n config.columnName,\n {\n type: config.typeInfo ?? undefined,\n isRequired: config.isRequired,\n enumeratedValues: null,\n },\n headerOptions,\n )\n\n return {\n ...createBaseColumn(config, columnImpl),\n minWidth: width,\n basis: width,\n }\n },\n\n text: (config: ColumnConfig) => {\n const columnImpl = createTextColumn({\n continuousUpdates: false,\n deletedValue: undefined,\n parseUserInput: createParseUserInput(config.isRequired),\n })\n\n return {\n ...createBaseColumn(config, columnImpl),\n cellClassName: 'MuiInputBase-input',\n }\n },\n}\n\nfunction getColumnType(\n typeInfo: FlatTypeInfo | null,\n enumeratedValues?: EnumeratedValue[] | string[] | null,\n): keyof typeof COLUMN_FACTORIES {\n if (!typeInfo) {\n return enumeratedValues && enumeratedValues.length > 0\n ? 'enumerated'\n : 'text'\n }\n\n if (typeInfo.format && DATE_COLUMN_FORMATS.has(typeInfo.format)) {\n return 'dateOrDateTime'\n }\n\n // Handle arrays - check if it's an array of enums\n if (typeInfo.isArray) {\n return 'multipleEnum'\n }\n\n if (typeInfo.type === 'boolean') {\n return 'boolean'\n }\n\n if (typeInfo.type === 'number' || typeInfo.type === 'integer') {\n return 'number'\n }\n\n if (enumeratedValues && enumeratedValues.length > 0) {\n return 'enumerated'\n }\n\n return 'text'\n}\n\nexport function createColumn(config: ColumnConfig): Column {\n const columnType = getColumnType(config.typeInfo, config.enumeratedValues)\n return COLUMN_FACTORIES[columnType](config)\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"splitPatch.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/utils/splitPatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC9C,OAAO,EACL,iBAAiB,EAGlB,MAAM,4CAA4C,CAAA;AAMnD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAEpE;AAoBD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,iBAAiB,EAAE,MAAM,GACxB,iBAAiB,EAAE,CA2CrB"}
1
+ {"version":3,"file":"splitPatch.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/utils/splitPatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC9C,OAAO,EACL,iBAAiB,EAGlB,MAAM,4CAA4C,CAAA;AAenD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAEpE;AAoBD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,iBAAiB,EAAE,MAAM,GACxB,iBAAiB,EAAE,CAkDrB"}
@@ -1,25 +1,34 @@
1
1
  import { decode as e, encode as t } from "json-joy/lib/json-crdt-patch/codec/compact";
2
2
  //#region src/components/DataGrid/utils/splitPatch.ts
3
- function n(e) {
4
- return new TextEncoder().encode(JSON.stringify(e)).length;
3
+ var n = 2, r = 1, i = new TextEncoder();
4
+ function a(e) {
5
+ return i.encode(JSON.stringify(e)).length;
5
6
  }
6
- function r(t) {
7
+ function o(e) {
8
+ return a(e);
9
+ }
10
+ function s(t) {
7
11
  let n = e(t), r = n.getId(), i = n.span();
8
12
  return [[r?.sid, r.time + i]];
9
13
  }
10
- function i(e, i) {
14
+ function c(e, i) {
11
15
  if (!e.ops || e.ops.length === 0) return [];
12
- let a = t(e), o = n(a);
13
- if (o <= i) return [a];
14
- if (e.ops.length == 1) return console.warn(`Patch is too large (${o} B) but cannot be split further since it only contains one operation.`), [a];
15
- let s = a[0], c = [], l = [s];
16
- for (let e = 1; e < a.length; e += 1) {
17
- let t = l.length - 1;
18
- n([...l, a[e]]) > i && t > 0 && (c.push(l), l = [r(l)]), l.push(a[e]);
16
+ let c = t(e), l = o(c);
17
+ if (l <= i) return [c];
18
+ if (e.ops.length == 1) return console.warn(`Patch is too large (${l} B) but cannot be split further since it only contains one operation.`), [c];
19
+ let u = [], d = [c[0]], f = n + a(d[0]);
20
+ for (let e = 1; e < c.length; e += 1) {
21
+ let t = c[e], o = r + a(t), l = d.length - 1;
22
+ if (f + o > i && l > 0) {
23
+ u.push(d);
24
+ let e = s(d);
25
+ d = [e], f = n + a(e);
26
+ }
27
+ d.push(t), f += o;
19
28
  }
20
- return l.length > 1 && c.push(l), c;
29
+ return d.length > 1 && u.push(d), u;
21
30
  }
22
31
  //#endregion
23
- export { n as getPatchSizeInBytes, i as splitPatch };
32
+ export { o as getPatchSizeInBytes, c as splitPatch };
24
33
 
25
34
  //# sourceMappingURL=splitPatch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"splitPatch.js","names":["Patch","CompactCodecPatch","decode","encode","CompactCodecOperation","CompactCodecTimestamp","getPatchSizeInBytes","patch","TextEncoder","JSON","stringify","length","computeNextPatchHeader","lastPatch","decodedPatch","lastPatchHeader","getId","lastPatchSpan","span","sid","time","splitPatch","maxPatchSizeBytes","ops","binaryEncodedPatch","sizeOfFullPatch","console","warn","firstPatchHeader","splitPatches","currentSplitPatch","i","currentSplitPatchOpCount","sizeOfCurrentSplitPatchWithNextOp","push"],"sources":["../../../../src/components/DataGrid/utils/splitPatch.ts"],"sourcesContent":["import { Patch } from 'json-joy/lib/json-crdt'\nimport {\n CompactCodecPatch,\n decode,\n encode,\n} from 'json-joy/lib/json-crdt-patch/codec/compact'\nimport {\n CompactCodecOperation,\n CompactCodecTimestamp,\n} from 'json-joy/lib/json-crdt-patch/codec/compact/types'\n\n/**\n * Calculates the size in bytes of the UTF-8 string representation of a compact-encoded JSON CRDT Patch.\n * This is useful for determining the size of patch that will be sent in a WebSocket connection, which requires UTF-8\n * encoding.\n * @param patch the compact-encoded JSON CRDT Patch\n * @returns the size in bytes of the UTF-8 string representation of the patch\n */\nexport function getPatchSizeInBytes(patch: CompactCodecPatch): number {\n return new TextEncoder().encode(JSON.stringify(patch)).length\n}\n\n/**\n * Computes the header for the next JSON CRDT patch based on the last patch.\n * @param lastPatch - the previous JSON CRDT patch\n * @returns the header for the next patch, which includes the replica ID and the next timestamp\n */\nfunction computeNextPatchHeader(\n lastPatch: CompactCodecPatch,\n): [CompactCodecTimestamp] {\n // TODO: Compute the next patch header without decoding the entire patch\n // decoding it is inefficient, but easy because it lets us easily compute the span.\n const decodedPatch = decode(lastPatch)\n\n const lastPatchHeader = decodedPatch.getId()!\n const lastPatchSpan = decodedPatch.span()\n\n return [[lastPatchHeader?.sid, lastPatchHeader.time + lastPatchSpan]]\n}\n\n/**\n * Given a json-joy JSON CRDT Patch, splits it into multiple patches if its compact encoding\n * exceeds the specified maximum size in bytes.\n * @param patch\n * @param maxPatchSizeBytes\n * @returns An array of patches that are compact-encoded. Each patch is guaranteed to be within the specified size limit, or to only contain\n * a single operation if it cannot be split further.\n */\nexport function splitPatch(\n patch: Patch,\n maxPatchSizeBytes: number,\n): CompactCodecPatch[] {\n if (!patch.ops || patch.ops.length === 0) {\n return []\n }\n\n const binaryEncodedPatch = encode(patch)\n const sizeOfFullPatch = getPatchSizeInBytes(binaryEncodedPatch)\n\n // Check if this patch needs to be split\n if (sizeOfFullPatch <= maxPatchSizeBytes) {\n return [binaryEncodedPatch]\n }\n\n if (patch.ops.length == 1) {\n console.warn(\n `Patch is too large (${sizeOfFullPatch} B) but cannot be split further since it only contains one operation.`,\n )\n return [binaryEncodedPatch]\n }\n\n const firstPatchHeader = binaryEncodedPatch[0]\n const splitPatches: CompactCodecPatch[] = []\n let currentSplitPatch: CompactCodecPatch = [firstPatchHeader]\n for (let i = 1; i < binaryEncodedPatch.length; i += 1) {\n const currentSplitPatchOpCount = currentSplitPatch.length - 1 // Exclude header\n const sizeOfCurrentSplitPatchWithNextOp = getPatchSizeInBytes([\n ...currentSplitPatch,\n binaryEncodedPatch[i] as CompactCodecOperation,\n ])\n if (\n sizeOfCurrentSplitPatchWithNextOp > maxPatchSizeBytes &&\n currentSplitPatchOpCount > 0\n ) {\n splitPatches.push(currentSplitPatch)\n currentSplitPatch = [computeNextPatchHeader(currentSplitPatch)]\n }\n currentSplitPatch.push(binaryEncodedPatch[i] as CompactCodecOperation)\n }\n if (currentSplitPatch.length > 1) {\n splitPatches.push(currentSplitPatch)\n }\n\n return splitPatches\n}\n"],"mappings":";;AAkBA,SAAgBM,EAAoBC,GAAkC;CACpE,OAAO,IAAIC,YAAY,EAAEL,OAAOM,KAAKC,UAAUH,CAAK,CAAC,EAAEI;AACzD;AAOA,SAASC,EACPC,GACyB;CAGzB,IAAMC,IAAeZ,EAAOW,CAAS,GAE/BE,IAAkBD,EAAaE,MAAM,GACrCC,IAAgBH,EAAaI,KAAK;CAExC,OAAO,CAAC,CAACH,GAAiBI,KAAKJ,EAAgBK,OAAOH,CAAa,CAAC;AACtE;AAUA,SAAgBI,EACdd,GACAe,GACqB;CACrB,IAAI,CAACf,EAAMgB,OAAOhB,EAAMgB,IAAIZ,WAAW,GACrC,OAAO,CAAA;CAGT,IAAMa,IAAqBrB,EAAOI,CAAK,GACjCkB,IAAkBnB,EAAoBkB,CAAkB;CAG9D,IAAIC,KAAmBH,GACrB,OAAO,CAACE,CAAkB;CAG5B,IAAIjB,EAAMgB,IAAIZ,UAAU,GAItB,OAHAe,QAAQC,KACN,uBAAuBF,EAAe,sEACxC,GACO,CAACD,CAAkB;CAG5B,IAAMI,IAAmBJ,EAAmB,IACtCK,IAAoC,CAAA,GACtCC,IAAuC,CAACF,CAAgB;CAC5D,KAAK,IAAIG,IAAI,GAAGA,IAAIP,EAAmBb,QAAQoB,KAAK,GAAG;EACrD,IAAMC,IAA2BF,EAAkBnB,SAAS;EAY5DmB,AAX0CxB,EAAoB,CAC5D,GAAGwB,GACHN,EAAmBO,EAA2B,CAG9CE,IAAoCX,KACpCU,IAA2B,MAE3BH,EAAaK,KAAKJ,CAAiB,GACnCA,IAAoB,CAAClB,EAAuBkB,CAAiB,CAAC,IAEhEA,EAAkBI,KAAKV,EAAmBO,EAA2B;CACvE;CAKA,OAJID,EAAkBnB,SAAS,KAC7BkB,EAAaK,KAAKJ,CAAiB,GAG9BD;AACT"}
1
+ {"version":3,"file":"splitPatch.js","names":["Patch","CompactCodecPatch","decode","encode","CompactCodecOperation","CompactCodecTimestamp","JSON_ARRAY_BRACKETS_SIZE","JSON_ELEMENT_SEPARATOR_SIZE","textEncoder","TextEncoder","getJsonSizeInBytes","value","JSON","stringify","length","getPatchSizeInBytes","patch","computeNextPatchHeader","lastPatch","decodedPatch","lastPatchHeader","getId","lastPatchSpan","span","sid","time","splitPatch","maxPatchSizeBytes","ops","binaryEncodedPatch","sizeOfFullPatch","console","warn","splitPatches","currentSplitPatch","currentSplitPatchSize","i","operation","operationSize","currentSplitPatchOpCount","push","nextHeader"],"sources":["../../../../src/components/DataGrid/utils/splitPatch.ts"],"sourcesContent":["import { Patch } from 'json-joy/lib/json-crdt'\nimport {\n CompactCodecPatch,\n decode,\n encode,\n} from 'json-joy/lib/json-crdt-patch/codec/compact'\nimport {\n CompactCodecOperation,\n CompactCodecTimestamp,\n} from 'json-joy/lib/json-crdt-patch/codec/compact/types'\n\nconst JSON_ARRAY_BRACKETS_SIZE = 2\nconst JSON_ELEMENT_SEPARATOR_SIZE = 1\n\nconst textEncoder = new TextEncoder()\n\nfunction getJsonSizeInBytes(value: unknown): number {\n return textEncoder.encode(JSON.stringify(value)).length\n}\n\n/**\n * Calculates the size in bytes of the UTF-8 string representation of a compact-encoded JSON CRDT Patch.\n * This is useful for determining the size of patch that will be sent in a WebSocket connection, which requires UTF-8\n * encoding.\n * @param patch the compact-encoded JSON CRDT Patch\n * @returns the size in bytes of the UTF-8 string representation of the patch\n */\nexport function getPatchSizeInBytes(patch: CompactCodecPatch): number {\n return getJsonSizeInBytes(patch)\n}\n\n/**\n * Computes the header for the next JSON CRDT patch based on the last patch.\n * @param lastPatch - the previous JSON CRDT patch\n * @returns the header for the next patch, which includes the replica ID and the next timestamp\n */\nfunction computeNextPatchHeader(\n lastPatch: CompactCodecPatch,\n): [CompactCodecTimestamp] {\n // TODO: Compute the next patch header without decoding the entire patch\n // decoding it is inefficient, but easy because it lets us easily compute the span.\n const decodedPatch = decode(lastPatch)\n\n const lastPatchHeader = decodedPatch.getId()!\n const lastPatchSpan = decodedPatch.span()\n\n return [[lastPatchHeader?.sid, lastPatchHeader.time + lastPatchSpan]]\n}\n\n/**\n * Given a json-joy JSON CRDT Patch, splits it into multiple patches if its compact encoding\n * exceeds the specified maximum size in bytes.\n * @param patch\n * @param maxPatchSizeBytes\n * @returns An array of patches that are compact-encoded. Each patch is guaranteed to be within the specified size limit, or to only contain\n * a single operation if it cannot be split further.\n */\nexport function splitPatch(\n patch: Patch,\n maxPatchSizeBytes: number,\n): CompactCodecPatch[] {\n if (!patch.ops || patch.ops.length === 0) {\n return []\n }\n\n const binaryEncodedPatch = encode(patch)\n const sizeOfFullPatch = getPatchSizeInBytes(binaryEncodedPatch)\n\n // Check if this patch needs to be split\n if (sizeOfFullPatch <= maxPatchSizeBytes) {\n return [binaryEncodedPatch]\n }\n\n if (patch.ops.length == 1) {\n console.warn(\n `Patch is too large (${sizeOfFullPatch} B) but cannot be split further since it only contains one operation.`,\n )\n return [binaryEncodedPatch]\n }\n\n // A JSON array serializes as `[`, its elements joined by `,`, and `]`, so the size of the\n // split patch under construction is tracked by adding each element's size once. Re-serializing\n // the whole chunk for every operation costs O(ops * chunk size).\n const splitPatches: CompactCodecPatch[] = []\n let currentSplitPatch: CompactCodecPatch = [binaryEncodedPatch[0]]\n let currentSplitPatchSize =\n JSON_ARRAY_BRACKETS_SIZE + getJsonSizeInBytes(currentSplitPatch[0])\n for (let i = 1; i < binaryEncodedPatch.length; i += 1) {\n const operation = binaryEncodedPatch[i] as CompactCodecOperation\n const operationSize =\n JSON_ELEMENT_SEPARATOR_SIZE + getJsonSizeInBytes(operation)\n const currentSplitPatchOpCount = currentSplitPatch.length - 1 // Exclude header\n if (\n currentSplitPatchSize + operationSize > maxPatchSizeBytes &&\n currentSplitPatchOpCount > 0\n ) {\n splitPatches.push(currentSplitPatch)\n const nextHeader = computeNextPatchHeader(currentSplitPatch)\n currentSplitPatch = [nextHeader]\n currentSplitPatchSize =\n JSON_ARRAY_BRACKETS_SIZE + getJsonSizeInBytes(nextHeader)\n }\n currentSplitPatch.push(operation)\n currentSplitPatchSize += operationSize\n }\n if (currentSplitPatch.length > 1) {\n splitPatches.push(currentSplitPatch)\n }\n\n return splitPatches\n}\n"],"mappings":";;AAWA,IAAMM,IAA2B,GAC3BC,IAA8B,GAE9BC,IAAc,IAAIC,YAAY;AAEpC,SAASC,EAAmBC,GAAwB;CAClD,OAAOH,EAAYL,OAAOS,KAAKC,UAAUF,CAAK,CAAC,EAAEG;AACnD;AASA,SAAgBC,EAAoBC,GAAkC;CACpE,OAAON,EAAmBM,CAAK;AACjC;AAOA,SAASC,EACPC,GACyB;CAGzB,IAAMC,IAAejB,EAAOgB,CAAS,GAE/BE,IAAkBD,EAAaE,MAAM,GACrCC,IAAgBH,EAAaI,KAAK;CAExC,OAAO,CAAC,CAACH,GAAiBI,KAAKJ,EAAgBK,OAAOH,CAAa,CAAC;AACtE;AAUA,SAAgBI,EACdV,GACAW,GACqB;CACrB,IAAI,CAACX,EAAMY,OAAOZ,EAAMY,IAAId,WAAW,GACrC,OAAO,CAAA;CAGT,IAAMe,IAAqB1B,EAAOa,CAAK,GACjCc,IAAkBf,EAAoBc,CAAkB;CAG9D,IAAIC,KAAmBH,GACrB,OAAO,CAACE,CAAkB;CAG5B,IAAIb,EAAMY,IAAId,UAAU,GAItB,OAHAiB,QAAQC,KACN,uBAAuBF,EAAe,sEACxC,GACO,CAACD,CAAkB;CAM5B,IAAMI,IAAoC,CAAA,GACtCC,IAAuC,CAACL,EAAmB,EAAE,GAC7DM,IACF7B,IAA2BI,EAAmBwB,EAAkB,EAAE;CACpE,KAAK,IAAIE,IAAI,GAAGA,IAAIP,EAAmBf,QAAQsB,KAAK,GAAG;EACrD,IAAMC,IAAYR,EAAmBO,IAC/BE,IACJ/B,IAA8BG,EAAmB2B,CAAS,GACtDE,IAA2BL,EAAkBpB,SAAS;EAC5D,IACEqB,IAAwBG,IAAgBX,KACxCY,IAA2B,GAC3B;GACAN,EAAaO,KAAKN,CAAiB;GACnC,IAAMO,IAAaxB,EAAuBiB,CAAiB;GAE3DC,AADAD,IAAoB,CAACO,CAAU,GAC/BN,IACE7B,IAA2BI,EAAmB+B,CAAU;EAC5D;EAEAN,AADAD,EAAkBM,KAAKH,CAAS,GAChCF,KAAyBG;CAC3B;CAKA,OAJIJ,EAAkBpB,SAAS,KAC7BmB,EAAaO,KAAKN,CAAiB,GAG9BD;AACT"}
@@ -16,7 +16,7 @@ import m from "../ComponentCollapse.js";
16
16
  import { useEffect as h, useRef as g, useState as _ } from "react";
17
17
  import { Button as v, Tooltip as y, Typography as b } from "@mui/material";
18
18
  import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
19
- import { DeleteTwoTone as w } from "@mui/icons-material";
19
+ import w from "@mui/icons-material/DeleteTwoTone";
20
20
  //#region src/components/DownloadCart/DownloadCartPage.tsx
21
21
  var T = `${l}
22
22
  dl_list_file_entities = syn.get_download_list()`, E = "synapse get-download-list", D = [
@@ -1 +1 @@
1
- {"version":3,"file":"DownloadCartPage.js","names":[],"sources":["../../../src/components/DownloadCart/DownloadCartPage.tsx"],"sourcesContent":["import styles from './DownloadCartPage.module.scss'\nimport SynapseClient from '@/synapse-client'\nimport { useGetDownloadListStatistics } from '@/synapse-queries/download/useDownloadList'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { DeleteTwoTone } from '@mui/icons-material'\nimport { Button, Tooltip, Typography } from '@mui/material'\nimport {\n AvailableFilter,\n FilesStatisticsResponse,\n} from '@sage-bionetworks/synapse-types'\nimport { useEffect, useRef, useState } from 'react'\nimport { ErrorBanner } from '../error/ErrorBanner'\nimport FullWidthAlert from '../FullWidthAlert/FullWidthAlert'\nimport IconSvg from '../IconSvg/IconSvg'\nimport { ProgrammaticInstructionsModal } from '../ProgrammaticInstructionsModal/ProgrammaticInstructionsModal'\nimport AvailableForDownloadTable from './AvailableForDownloadTable'\nimport { CreatePackageV2 } from './CreatePackageV2'\nimport { PYTHON_CLIENT_IMPORT_AND_LOGIN } from './DirectProgrammaticDownload'\nimport { calculateFriendlyFileSize } from '@/utils/functions/calculateFriendlyFileSize'\nimport { DownloadIneligibleForPackagingFilesFromListButton } from './DownloadIneligibleForPackagingFilesFromListButton'\nimport { DownloadListActionsRequired } from './DownloadListActionsRequired'\nimport ComponentCollapse from '../ComponentCollapse'\n\nconst pythonDownloadCode = `${PYTHON_CLIENT_IMPORT_AND_LOGIN}\ndl_list_file_entities = syn.get_download_list()`\n\nconst cliDownloadCode = `synapse get-download-list`\n\nconst filterTabs: { label: string; filter: AvailableFilter }[] = [\n { label: 'All Files', filter: undefined },\n { label: 'Files included in ZIP', filter: 'eligibleForPackaging' },\n { label: 'Files not included in ZIP', filter: 'ineligibleForPackaging' },\n]\n\n/**\n * Show the Download Cart page.\n */\nexport function DownloadCartPage() {\n const { accessToken } = useSynapseContext()\n const [selectedTabIndex, setSelectedTabIndex] = useState<number>(0)\n const [selectedFilterTabIndex, setSelectedFilterTabIndex] =\n useState<number>(0)\n const selectedFilter = filterTabs[selectedFilterTabIndex].filter\n const [isShowingCreatePackageUI, setIsShowingCreatePackageUI] =\n useState<boolean>(false)\n const createPackageRef = useRef<HTMLDivElement>(null)\n // scroll to the CreatePackageV2 component when it is shown so that the user is aware of the next steps after clicking the button to create a package\n useEffect(() => {\n if (isShowingCreatePackageUI) {\n createPackageRef.current?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n })\n }\n }, [isShowingCreatePackageUI])\n const [isShowingModal, setIsShowingModal] = useState<boolean>(false)\n const [isShowingDownloadSuccessAlert, setIsShowingDownloadSuccessAlert] =\n useState(false)\n const [error, setError] = useState<Error>()\n const {\n data,\n isLoading,\n isError,\n error: newError,\n refetch,\n } = useGetDownloadListStatistics()\n useEffect(() => {\n if (isError && newError) {\n setError(newError)\n }\n }, [isError, newError])\n\n const getFilterCount = (\n data: FilesStatisticsResponse,\n filter: AvailableFilter,\n ) => {\n if (filter === undefined) return data.numberOfFilesAvailableForDownload\n if (filter === 'eligibleForPackaging')\n return data.numberOfFilesAvailableForDownloadAndEligibleForPackaging\n return (\n data.numberOfFilesAvailableForDownload -\n data.numberOfFilesAvailableForDownloadAndEligibleForPackaging\n )\n }\n // SWC-5874: When arriving at the download cart when there are no ARs, the user should start in the Download list\n useEffect(() => {\n if (data?.numberOfFilesRequiringAction == 0) {\n setSelectedTabIndex(1)\n }\n // also hide the Create Package UI if there are no files available for download\n if (data?.numberOfFilesAvailableForDownloadAndEligibleForPackaging === 0) {\n setIsShowingCreatePackageUI(false)\n }\n }, [data])\n\n if (error) {\n return <ErrorBanner error={error} />\n }\n const clearDownloadList = async () => {\n await SynapseClient.clearDownloadListV2(accessToken)\n refetch()\n }\n return (\n <div className={styles.DownloadCartPage}>\n <div>\n <div className={`${styles.pageHeader}`}>\n <div className=\"container\">\n <div className={styles.grid}>\n <h3 className=\"pageHeaderTitle\">Your Download List</h3>\n <Tooltip\n title=\"Immediately removes all items from your download list\"\n enterNextDelay={300}\n placement=\"right\"\n >\n <Button\n onClick={() => {\n clearDownloadList()\n }}\n variant=\"text\"\n color=\"primary\"\n startIcon={<DeleteTwoTone />}\n >\n Clear Your Download List\n </Button>\n </Tooltip>\n </div>\n </div>\n </div>\n </div>\n <div className={styles.tabsContainer}>\n <div className=\"container\">\n <ul className={styles.navTabs}>\n <li\n className={`${styles.navItem}${\n selectedTabIndex == 0 ? ` ${styles.active}` : ''\n }`}\n aria-selected={selectedTabIndex == 0}\n >\n <button onClick={() => setSelectedTabIndex(0)}>\n Access Actions Required\n {!isError && !isLoading && data && (\n <span className={styles.fileCount}>\n {data.totalNumberOfFiles -\n data.numberOfFilesAvailableForDownload}\n </span>\n )}\n </button>\n </li>\n <li\n className={`${styles.navItem}${\n selectedTabIndex == 1 ? ` ${styles.active}` : ''\n }`}\n aria-selected={selectedTabIndex == 1}\n >\n <button onClick={() => setSelectedTabIndex(1)}>\n Download List\n {!isError && !isLoading && data && (\n <span className={styles.fileCount}>\n {data.numberOfFilesAvailableForDownload}\n </span>\n )}\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div\n className={\n /*\n The DownloadListActionsRequired component stores actions in local state to track which actions are completed.\n\n Mount the actions required component and hide it with style to ensure actions stored in component state are persisted as the user switches tabs\n */\n !(selectedTabIndex == 0 && !isError && !isLoading && data)\n ? styles.hidden\n : undefined\n }\n >\n {data?.numberOfFilesRequiringAction &&\n data.numberOfFilesRequiringAction > 0 && (\n // Unmount instead of hiding the DownloadListActionsRequired component when there are 0 actions required\n // The DownloadListActionsRequired cannot discern between a fulfilled action and an action that is no longer required because the\n // file was removed from the download cart.\n // In the typical case where the download cart is cleared, unmounting the component ensures that the actions are cleared out.\n <div>\n <div className=\"container\">\n <DownloadListActionsRequired />\n </div>\n </div>\n )}\n {data?.numberOfFilesRequiringAction === 0 && (\n <div className={styles.placeholder}>\n <div>No actions are currently required.</div>\n </div>\n )}\n </div>\n\n {selectedTabIndex == 1 && !isError && !isLoading && data && (\n <div>\n {data.numberOfFilesAvailableForDownload > 0 && (\n <div className={`container ${styles.DownloadListTabContent}`}>\n <h3 className={`${styles.sectionTitle} pageHeaderTitle`}>\n Bulk Download Options\n {data.sumOfFileSizesAvailableForDownload != null && (\n <Tooltip\n placement=\"right\"\n title={\n <>\n Total file size\n <br />\n Does not include files hosted outside Synapse\n </>\n }\n slotProps={{ tooltip: { sx: { maxWidth: 400 } } }}\n >\n <span className={styles.totalFileSize}>\n {calculateFriendlyFileSize(\n data.sumOfFileSizesAvailableForDownload,\n )}{' '}\n total*\n </span>\n </Tooltip>\n )}\n </h3>\n <div>\n <div className={styles.subSectionOverview}>\n <div className={styles.subSection}>\n <div className={styles.subSectionHeader}>\n <div className={styles.headline}>\n <Typography variant={'headline3'}>\n <IconSvg icon=\"packagableFile\" /> Web Download (.ZIP)\n </Typography>\n </div>\n <div className={styles.subSectionActions}>\n {data.numberOfFilesAvailableForDownloadAndEligibleForPackaging >\n 0 && (\n <Button\n variant=\"contained\"\n onClick={() => {\n setIsShowingCreatePackageUI(true)\n }}\n startIcon={<IconSvg icon=\"download\" wrap={false} />}\n >\n Download Packages\n </Button>\n )}\n {data.numberOfFilesAvailableForDownloadAndEligibleForPackaging ==\n 0 && (\n <Tooltip\n title=\"You cannot create a .zip package because there are no eligible files.\"\n enterNextDelay={300}\n placement=\"top\"\n >\n <span>\n <Button\n variant=\"contained\"\n disabled\n startIcon={\n <IconSvg icon=\"download\" wrap={false} />\n }\n >\n Download Packages\n </Button>\n </span>\n </Tooltip>\n )}\n </div>\n </div>\n <ComponentCollapse\n component={\n <Typography variant={'body1'} component={'div'}>\n Only some files may be eligible for packaging as ZIP.\n Use the Individual Downloads tab, below, to download\n non-packageable files.&nbsp;\n <a\n href=\"https://help.synapse.org/docs/Downloading-Data-From-the-Synapse-UI.2004254837.html\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n More Information.\n </a>\n </Typography>\n }\n collapseBoxSx={{\n backgroundColor: 'transparent',\n p: 0,\n mt: '15px',\n }}\n componentContainerSx={{\n backgroundColor: 'transparent',\n p: 0,\n }}\n iconSx={{ width: '25px', height: '25px' }}\n >\n <Typography\n variant={'body1'}\n component={'div'}\n sx={{ marginBottom: '15px' }}\n >\n <ul>\n <li>Files are bundled into .ZIPs up to 1 GB each.</li>\n <li>\n Larger selections are split into multiple packages.\n </li>\n <li>\n Includes only files stored in Synapse native\n storage.\n </li>\n <li>\n Each package contains a CSV manifest with file\n annotations and metadata.\n </li>\n </ul>\n </Typography>\n </ComponentCollapse>\n </div>\n <div className={styles.subSection}>\n <div className={styles.subSectionHeader}>\n <div className={styles.headline}>\n <Typography variant={'headline3'}>\n <IconSvg icon=\"code\" /> Programmatic Download\n </Typography>\n </div>\n <div className={styles.subSectionActions}>\n <Button\n variant=\"contained\"\n onClick={() => {\n setIsShowingModal(true)\n }}\n startIcon={<IconSvg icon=\"download\" wrap={false} />}\n >\n Get R / Python / CLI Code\n </Button>\n </div>\n </div>\n <ComponentCollapse\n component={\n <Typography variant={'body1'} component={'div'}>\n Use our Python, R, or command line clients to download\n files quickly.&nbsp;\n <a\n href=\"https://help.synapse.org/docs/Downloading-Data-Programmatically.2003796248.html\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n More Information.\n </a>\n </Typography>\n }\n collapseBoxSx={{\n backgroundColor: 'transparent',\n p: 0,\n mt: '15px',\n }}\n componentContainerSx={{\n backgroundColor: 'transparent',\n p: 0,\n }}\n iconSx={{ width: '25px', height: '25px' }}\n >\n <Typography\n variant={'body1'}\n component={'div'}\n sx={{ marginBottom: '15px' }}\n >\n <ul>\n <li>Requires a client (R, Python, or CLI).</li>\n <li>\n No limits on individual file size or total download\n size.\n </li>\n <li>\n Includes files stored both on and off Synapse native\n storage.\n </li>\n <li>\n Downloads include a CSV manifest with file\n annotations and metadata.\n </li>\n </ul>\n </Typography>\n </ComponentCollapse>\n </div>\n {data.numberOfFilesAvailableForDownloadAndEligibleForPackaging <\n data.numberOfFilesAvailableForDownload && (\n <div className={styles.subSection}>\n <div className={styles.subSectionHeader}>\n <div className={styles.headline}>\n <Typography variant={'headline3'}>\n <IconSvg icon=\"multiFile\" /> Multi-file Download\n </Typography>\n </div>\n <div className={styles.subSectionActions}>\n <div className={styles.ineligibleDownloadContainer}>\n <DownloadIneligibleForPackagingFilesFromListButton />\n </div>\n </div>\n </div>\n <ComponentCollapse\n component={\n <Typography variant={'body1'} component={'div'}>\n Files which <strong>aren't</strong> included in a\n ZIP package may be downloaded as a multi-file\n download.&nbsp;\n </Typography>\n }\n collapseBoxSx={{\n backgroundColor: 'transparent',\n p: 0,\n mt: '15px',\n }}\n componentContainerSx={{\n backgroundColor: 'transparent',\n p: 0,\n }}\n iconSx={{ width: '25px', height: '25px' }}\n >\n <Typography\n variant={'body1'}\n component={'div'}\n sx={{ marginBottom: '15px' }}\n >\n Clicking “Start Multi-file Download” initiates a\n download of all files in your Download List that can’t\n be bundled into a ZIP—such as large files or external\n links—in one step. Files are saved one by one with\n clear progress updates, automatic handling of\n duplicate names, and retry support if something fails.\n You can cancel anytime.\n <br />\n <br />\n Note: in some browsers, files download individually to\n your default Downloads folder instead of a selected\n location.\n </Typography>\n </ComponentCollapse>\n </div>\n )}\n </div>\n </div>\n\n <div>\n {isShowingCreatePackageUI && (\n <div ref={createPackageRef}>\n <CreatePackageV2\n onPackageCreation={() => {\n setIsShowingDownloadSuccessAlert(true)\n }}\n />\n </div>\n )}\n <h3 className={`${styles.sectionTitle} pageHeaderTitle`}>\n Download Individual Files\n </h3>\n <div className={styles.tabsContainer}>\n <ul className={styles.navTabs}>\n <li className={styles.navLabel}>View:</li>\n {filterTabs.map((tab, index) => (\n <li\n key={tab.label}\n className={`${styles.navItem}${\n selectedFilterTabIndex === index\n ? ` ${styles.active}`\n : ''\n }`}\n aria-selected={selectedFilterTabIndex === index}\n >\n <button\n onClick={() => setSelectedFilterTabIndex(index)}\n >\n {tab.label}\n {!isError && !isLoading && data && (\n <span className={styles.fileCount}>\n {getFilterCount(data, tab.filter)}\n </span>\n )}\n </button>\n </li>\n ))}\n </ul>\n </div>\n\n <div className={styles.availableForDownloadTableContainer}>\n <AvailableForDownloadTable\n key={selectedFilter ?? 'all'}\n filter={selectedFilter}\n />\n </div>\n </div>\n </div>\n )}\n {data.numberOfFilesAvailableForDownload === 0 && (\n <div className={styles.placeholder}>\n <Typography variant=\"body1Italic\">\n Your Download List is currently empty.\n </Typography>\n </div>\n )}\n </div>\n )}\n <FullWidthAlert\n show={isShowingDownloadSuccessAlert}\n variant=\"success\"\n title=\"Package Created\"\n description=\"A package has been created with eligible files. The items contained in this .zip file have been removed from your list. If your package is over 1GB, you will need to create multiple packages.\"\n autoCloseAfterDelayInSeconds={10}\n onClose={() => {\n setIsShowingDownloadSuccessAlert(false)\n }}\n />\n {isShowingModal && (\n <ProgrammaticInstructionsModal\n show={true}\n onClose={() => setIsShowingModal(false)}\n title=\"Download Programmatically\"\n pythonCode={pythonDownloadCode}\n cliCode={cliDownloadCode}\n // rCode={rDownloadCode}\n />\n )}\n </div>\n )\n}\n\nexport default DownloadCartPage\n"],"mappings":"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"}
1
+ {"version":3,"file":"DownloadCartPage.js","names":[],"sources":["../../../src/components/DownloadCart/DownloadCartPage.tsx"],"sourcesContent":["import styles from './DownloadCartPage.module.scss'\nimport SynapseClient from '@/synapse-client'\nimport { useGetDownloadListStatistics } from '@/synapse-queries/download/useDownloadList'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport DeleteTwoTone from '@mui/icons-material/DeleteTwoTone'\nimport { Button, Tooltip, Typography } from '@mui/material'\nimport {\n AvailableFilter,\n FilesStatisticsResponse,\n} from '@sage-bionetworks/synapse-types'\nimport { useEffect, useRef, useState } from 'react'\nimport { ErrorBanner } from '../error/ErrorBanner'\nimport FullWidthAlert from '../FullWidthAlert/FullWidthAlert'\nimport IconSvg from '../IconSvg/IconSvg'\nimport { ProgrammaticInstructionsModal } from '../ProgrammaticInstructionsModal/ProgrammaticInstructionsModal'\nimport AvailableForDownloadTable from './AvailableForDownloadTable'\nimport { CreatePackageV2 } from './CreatePackageV2'\nimport { PYTHON_CLIENT_IMPORT_AND_LOGIN } from './DirectProgrammaticDownload'\nimport { calculateFriendlyFileSize } from '@/utils/functions/calculateFriendlyFileSize'\nimport { DownloadIneligibleForPackagingFilesFromListButton } from './DownloadIneligibleForPackagingFilesFromListButton'\nimport { DownloadListActionsRequired } from './DownloadListActionsRequired'\nimport ComponentCollapse from '../ComponentCollapse'\n\nconst pythonDownloadCode = `${PYTHON_CLIENT_IMPORT_AND_LOGIN}\ndl_list_file_entities = syn.get_download_list()`\n\nconst cliDownloadCode = `synapse get-download-list`\n\nconst filterTabs: { label: string; filter: AvailableFilter }[] = [\n { label: 'All Files', filter: undefined },\n { label: 'Files included in ZIP', filter: 'eligibleForPackaging' },\n { label: 'Files not included in ZIP', filter: 'ineligibleForPackaging' },\n]\n\n/**\n * Show the Download Cart page.\n */\nexport function DownloadCartPage() {\n const { accessToken } = useSynapseContext()\n const [selectedTabIndex, setSelectedTabIndex] = useState<number>(0)\n const [selectedFilterTabIndex, setSelectedFilterTabIndex] =\n useState<number>(0)\n const selectedFilter = filterTabs[selectedFilterTabIndex].filter\n const [isShowingCreatePackageUI, setIsShowingCreatePackageUI] =\n useState<boolean>(false)\n const createPackageRef = useRef<HTMLDivElement>(null)\n // scroll to the CreatePackageV2 component when it is shown so that the user is aware of the next steps after clicking the button to create a package\n useEffect(() => {\n if (isShowingCreatePackageUI) {\n createPackageRef.current?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n })\n }\n }, [isShowingCreatePackageUI])\n const [isShowingModal, setIsShowingModal] = useState<boolean>(false)\n const [isShowingDownloadSuccessAlert, setIsShowingDownloadSuccessAlert] =\n useState(false)\n const [error, setError] = useState<Error>()\n const {\n data,\n isLoading,\n isError,\n error: newError,\n refetch,\n } = useGetDownloadListStatistics()\n useEffect(() => {\n if (isError && newError) {\n setError(newError)\n }\n }, [isError, newError])\n\n const getFilterCount = (\n data: FilesStatisticsResponse,\n filter: AvailableFilter,\n ) => {\n if (filter === undefined) return data.numberOfFilesAvailableForDownload\n if (filter === 'eligibleForPackaging')\n return data.numberOfFilesAvailableForDownloadAndEligibleForPackaging\n return (\n data.numberOfFilesAvailableForDownload -\n data.numberOfFilesAvailableForDownloadAndEligibleForPackaging\n )\n }\n // SWC-5874: When arriving at the download cart when there are no ARs, the user should start in the Download list\n useEffect(() => {\n if (data?.numberOfFilesRequiringAction == 0) {\n setSelectedTabIndex(1)\n }\n // also hide the Create Package UI if there are no files available for download\n if (data?.numberOfFilesAvailableForDownloadAndEligibleForPackaging === 0) {\n setIsShowingCreatePackageUI(false)\n }\n }, [data])\n\n if (error) {\n return <ErrorBanner error={error} />\n }\n const clearDownloadList = async () => {\n await SynapseClient.clearDownloadListV2(accessToken)\n refetch()\n }\n return (\n <div className={styles.DownloadCartPage}>\n <div>\n <div className={`${styles.pageHeader}`}>\n <div className=\"container\">\n <div className={styles.grid}>\n <h3 className=\"pageHeaderTitle\">Your Download List</h3>\n <Tooltip\n title=\"Immediately removes all items from your download list\"\n enterNextDelay={300}\n placement=\"right\"\n >\n <Button\n onClick={() => {\n clearDownloadList()\n }}\n variant=\"text\"\n color=\"primary\"\n startIcon={<DeleteTwoTone />}\n >\n Clear Your Download List\n </Button>\n </Tooltip>\n </div>\n </div>\n </div>\n </div>\n <div className={styles.tabsContainer}>\n <div className=\"container\">\n <ul className={styles.navTabs}>\n <li\n className={`${styles.navItem}${\n selectedTabIndex == 0 ? ` ${styles.active}` : ''\n }`}\n aria-selected={selectedTabIndex == 0}\n >\n <button onClick={() => setSelectedTabIndex(0)}>\n Access Actions Required\n {!isError && !isLoading && data && (\n <span className={styles.fileCount}>\n {data.totalNumberOfFiles -\n data.numberOfFilesAvailableForDownload}\n </span>\n )}\n </button>\n </li>\n <li\n className={`${styles.navItem}${\n selectedTabIndex == 1 ? ` ${styles.active}` : ''\n }`}\n aria-selected={selectedTabIndex == 1}\n >\n <button onClick={() => setSelectedTabIndex(1)}>\n Download List\n {!isError && !isLoading && data && (\n <span className={styles.fileCount}>\n {data.numberOfFilesAvailableForDownload}\n </span>\n )}\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div\n className={\n /*\n The DownloadListActionsRequired component stores actions in local state to track which actions are completed.\n\n Mount the actions required component and hide it with style to ensure actions stored in component state are persisted as the user switches tabs\n */\n !(selectedTabIndex == 0 && !isError && !isLoading && data)\n ? styles.hidden\n : undefined\n }\n >\n {data?.numberOfFilesRequiringAction &&\n data.numberOfFilesRequiringAction > 0 && (\n // Unmount instead of hiding the DownloadListActionsRequired component when there are 0 actions required\n // The DownloadListActionsRequired cannot discern between a fulfilled action and an action that is no longer required because the\n // file was removed from the download cart.\n // In the typical case where the download cart is cleared, unmounting the component ensures that the actions are cleared out.\n <div>\n <div className=\"container\">\n <DownloadListActionsRequired />\n </div>\n </div>\n )}\n {data?.numberOfFilesRequiringAction === 0 && (\n <div className={styles.placeholder}>\n <div>No actions are currently required.</div>\n </div>\n )}\n </div>\n\n {selectedTabIndex == 1 && !isError && !isLoading && data && (\n <div>\n {data.numberOfFilesAvailableForDownload > 0 && (\n <div className={`container ${styles.DownloadListTabContent}`}>\n <h3 className={`${styles.sectionTitle} pageHeaderTitle`}>\n Bulk Download Options\n {data.sumOfFileSizesAvailableForDownload != null && (\n <Tooltip\n placement=\"right\"\n title={\n <>\n Total file size\n <br />\n Does not include files hosted outside Synapse\n </>\n }\n slotProps={{ tooltip: { sx: { maxWidth: 400 } } }}\n >\n <span className={styles.totalFileSize}>\n {calculateFriendlyFileSize(\n data.sumOfFileSizesAvailableForDownload,\n )}{' '}\n total*\n </span>\n </Tooltip>\n )}\n </h3>\n <div>\n <div className={styles.subSectionOverview}>\n <div className={styles.subSection}>\n <div className={styles.subSectionHeader}>\n <div className={styles.headline}>\n <Typography variant={'headline3'}>\n <IconSvg icon=\"packagableFile\" /> Web Download (.ZIP)\n </Typography>\n </div>\n <div className={styles.subSectionActions}>\n {data.numberOfFilesAvailableForDownloadAndEligibleForPackaging >\n 0 && (\n <Button\n variant=\"contained\"\n onClick={() => {\n setIsShowingCreatePackageUI(true)\n }}\n startIcon={<IconSvg icon=\"download\" wrap={false} />}\n >\n Download Packages\n </Button>\n )}\n {data.numberOfFilesAvailableForDownloadAndEligibleForPackaging ==\n 0 && (\n <Tooltip\n title=\"You cannot create a .zip package because there are no eligible files.\"\n enterNextDelay={300}\n placement=\"top\"\n >\n <span>\n <Button\n variant=\"contained\"\n disabled\n startIcon={\n <IconSvg icon=\"download\" wrap={false} />\n }\n >\n Download Packages\n </Button>\n </span>\n </Tooltip>\n )}\n </div>\n </div>\n <ComponentCollapse\n component={\n <Typography variant={'body1'} component={'div'}>\n Only some files may be eligible for packaging as ZIP.\n Use the Individual Downloads tab, below, to download\n non-packageable files.&nbsp;\n <a\n href=\"https://help.synapse.org/docs/Downloading-Data-From-the-Synapse-UI.2004254837.html\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n More Information.\n </a>\n </Typography>\n }\n collapseBoxSx={{\n backgroundColor: 'transparent',\n p: 0,\n mt: '15px',\n }}\n componentContainerSx={{\n backgroundColor: 'transparent',\n p: 0,\n }}\n iconSx={{ width: '25px', height: '25px' }}\n >\n <Typography\n variant={'body1'}\n component={'div'}\n sx={{ marginBottom: '15px' }}\n >\n <ul>\n <li>Files are bundled into .ZIPs up to 1 GB each.</li>\n <li>\n Larger selections are split into multiple packages.\n </li>\n <li>\n Includes only files stored in Synapse native\n storage.\n </li>\n <li>\n Each package contains a CSV manifest with file\n annotations and metadata.\n </li>\n </ul>\n </Typography>\n </ComponentCollapse>\n </div>\n <div className={styles.subSection}>\n <div className={styles.subSectionHeader}>\n <div className={styles.headline}>\n <Typography variant={'headline3'}>\n <IconSvg icon=\"code\" /> Programmatic Download\n </Typography>\n </div>\n <div className={styles.subSectionActions}>\n <Button\n variant=\"contained\"\n onClick={() => {\n setIsShowingModal(true)\n }}\n startIcon={<IconSvg icon=\"download\" wrap={false} />}\n >\n Get R / Python / CLI Code\n </Button>\n </div>\n </div>\n <ComponentCollapse\n component={\n <Typography variant={'body1'} component={'div'}>\n Use our Python, R, or command line clients to download\n files quickly.&nbsp;\n <a\n href=\"https://help.synapse.org/docs/Downloading-Data-Programmatically.2003796248.html\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n More Information.\n </a>\n </Typography>\n }\n collapseBoxSx={{\n backgroundColor: 'transparent',\n p: 0,\n mt: '15px',\n }}\n componentContainerSx={{\n backgroundColor: 'transparent',\n p: 0,\n }}\n iconSx={{ width: '25px', height: '25px' }}\n >\n <Typography\n variant={'body1'}\n component={'div'}\n sx={{ marginBottom: '15px' }}\n >\n <ul>\n <li>Requires a client (R, Python, or CLI).</li>\n <li>\n No limits on individual file size or total download\n size.\n </li>\n <li>\n Includes files stored both on and off Synapse native\n storage.\n </li>\n <li>\n Downloads include a CSV manifest with file\n annotations and metadata.\n </li>\n </ul>\n </Typography>\n </ComponentCollapse>\n </div>\n {data.numberOfFilesAvailableForDownloadAndEligibleForPackaging <\n data.numberOfFilesAvailableForDownload && (\n <div className={styles.subSection}>\n <div className={styles.subSectionHeader}>\n <div className={styles.headline}>\n <Typography variant={'headline3'}>\n <IconSvg icon=\"multiFile\" /> Multi-file Download\n </Typography>\n </div>\n <div className={styles.subSectionActions}>\n <div className={styles.ineligibleDownloadContainer}>\n <DownloadIneligibleForPackagingFilesFromListButton />\n </div>\n </div>\n </div>\n <ComponentCollapse\n component={\n <Typography variant={'body1'} component={'div'}>\n Files which <strong>aren't</strong> included in a\n ZIP package may be downloaded as a multi-file\n download.&nbsp;\n </Typography>\n }\n collapseBoxSx={{\n backgroundColor: 'transparent',\n p: 0,\n mt: '15px',\n }}\n componentContainerSx={{\n backgroundColor: 'transparent',\n p: 0,\n }}\n iconSx={{ width: '25px', height: '25px' }}\n >\n <Typography\n variant={'body1'}\n component={'div'}\n sx={{ marginBottom: '15px' }}\n >\n Clicking “Start Multi-file Download” initiates a\n download of all files in your Download List that can’t\n be bundled into a ZIP—such as large files or external\n links—in one step. Files are saved one by one with\n clear progress updates, automatic handling of\n duplicate names, and retry support if something fails.\n You can cancel anytime.\n <br />\n <br />\n Note: in some browsers, files download individually to\n your default Downloads folder instead of a selected\n location.\n </Typography>\n </ComponentCollapse>\n </div>\n )}\n </div>\n </div>\n\n <div>\n {isShowingCreatePackageUI && (\n <div ref={createPackageRef}>\n <CreatePackageV2\n onPackageCreation={() => {\n setIsShowingDownloadSuccessAlert(true)\n }}\n />\n </div>\n )}\n <h3 className={`${styles.sectionTitle} pageHeaderTitle`}>\n Download Individual Files\n </h3>\n <div className={styles.tabsContainer}>\n <ul className={styles.navTabs}>\n <li className={styles.navLabel}>View:</li>\n {filterTabs.map((tab, index) => (\n <li\n key={tab.label}\n className={`${styles.navItem}${\n selectedFilterTabIndex === index\n ? ` ${styles.active}`\n : ''\n }`}\n aria-selected={selectedFilterTabIndex === index}\n >\n <button\n onClick={() => setSelectedFilterTabIndex(index)}\n >\n {tab.label}\n {!isError && !isLoading && data && (\n <span className={styles.fileCount}>\n {getFilterCount(data, tab.filter)}\n </span>\n )}\n </button>\n </li>\n ))}\n </ul>\n </div>\n\n <div className={styles.availableForDownloadTableContainer}>\n <AvailableForDownloadTable\n key={selectedFilter ?? 'all'}\n filter={selectedFilter}\n />\n </div>\n </div>\n </div>\n )}\n {data.numberOfFilesAvailableForDownload === 0 && (\n <div className={styles.placeholder}>\n <Typography variant=\"body1Italic\">\n Your Download List is currently empty.\n </Typography>\n </div>\n )}\n </div>\n )}\n <FullWidthAlert\n show={isShowingDownloadSuccessAlert}\n variant=\"success\"\n title=\"Package Created\"\n description=\"A package has been created with eligible files. The items contained in this .zip file have been removed from your list. If your package is over 1GB, you will need to create multiple packages.\"\n autoCloseAfterDelayInSeconds={10}\n onClose={() => {\n setIsShowingDownloadSuccessAlert(false)\n }}\n />\n {isShowingModal && (\n <ProgrammaticInstructionsModal\n show={true}\n onClose={() => setIsShowingModal(false)}\n title=\"Download Programmatically\"\n pythonCode={pythonDownloadCode}\n cliCode={cliDownloadCode}\n // rCode={rDownloadCode}\n />\n )}\n </div>\n )\n}\n\nexport default DownloadCartPage\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAuBA,IAAM,IAAqB,GAAG,EAA+B;kDAGvD,IAAkB,6BAElB,IAA2D;CAC/D;EAAE,OAAO;EAAa,QAAQ,KAAA;CAAU;CACxC;EAAE,OAAO;EAAyB,QAAQ;CAAuB;CACjE;EAAE,OAAO;EAA6B,QAAQ;CAAyB;AACzE;AAKA,SAAgB,IAAmB;CACjC,IAAM,EAAE,mBAAgB,EAAkB,GACpC,CAAC,GAAkB,KAAuB,EAAiB,CAAC,GAC5D,CAAC,GAAwB,KAC7B,EAAiB,CAAC,GACd,IAAiB,EAAW,GAAwB,QACpD,CAAC,GAA0B,KAC/B,EAAkB,EAAK,GACnB,IAAmB,EAAuB,IAAI;CAEpD,QAAgB;EACd,AAAI,KACF,EAAiB,SAAS,eAAe;GACvC,UAAU;GACV,OAAO;EACT,CAAC;CAEL,GAAG,CAAC,CAAwB,CAAC;CAC7B,IAAM,CAAC,GAAgB,KAAqB,EAAkB,EAAK,GAC7D,CAAC,GAA+B,KACpC,EAAS,EAAK,GACV,CAAC,GAAO,KAAY,EAAgB,GACpC,EACJ,SACA,cACA,YACA,OAAO,GACP,eACE,EAA6B;CACjC,QAAgB;EACd,AAAI,KAAW,KACb,EAAS,CAAQ;CAErB,GAAG,CAAC,GAAS,CAAQ,CAAC;CAEtB,IAAM,KACJ,GACA,MAEI,MAAW,KAAA,IAAkB,EAAK,oCAClC,MAAW,yBACN,EAAK,2DAEZ,EAAK,oCACL,EAAK;CAcT,IAVA,QAAgB;EAKd,AAJI,GAAM,gCAAgC,KACxC,EAAoB,CAAC,GAGnB,GAAM,6DAA6D,KACrE,EAA4B,EAAK;CAErC,GAAG,CAAC,CAAI,CAAC,GAEL,GACF,OAAO,kBAAC,GAAD,EAAoB,SAAQ,CAAA;CAErC,IAAM,IAAoB,YAAY;EAEpC,AADA,MAAM,EAAc,oBAAoB,CAAW,GACnD,EAAQ;CACV;CACA,OACE,kBAAC,OAAD;EAAK,WAAW,EAAO;YAAvB;GACE,kBAAC,OAAD,EAAA,UACE,kBAAC,OAAD;IAAK,WAAW,GAAG,EAAO;cACxB,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,OAAD;MAAK,WAAW,EAAO;gBAAvB,CACE,kBAAC,MAAD;OAAI,WAAU;iBAAkB;MAAsB,CAAA,GACtD,kBAAC,GAAD;OACE,OAAM;OACN,gBAAgB;OAChB,WAAU;iBAEV,kBAAC,GAAD;QACE,eAAe;SACb,EAAkB;QACpB;QACA,SAAQ;QACR,OAAM;QACN,WAAW,kBAAC,GAAD,CAAgB,CAAA;kBAC5B;OAEO,CAAA;MACD,CAAA,CACN;;IACF,CAAA;GACF,CAAA,EACF,CAAA;GACL,kBAAC,OAAD;IAAK,WAAW,EAAO;cACrB,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,MAAD;MAAI,WAAW,EAAO;gBAAtB,CACE,kBAAC,MAAD;OACE,WAAW,GAAG,EAAO,UACnB,KAAoB,IAAI,IAAI,EAAO,WAAW;OAEhD,iBAAe,KAAoB;iBAEnC,kBAAC,UAAD;QAAQ,eAAe,EAAoB,CAAC;kBAA5C,CAA+C,2BAE5C,CAAC,KAAW,CAAC,KAAa,KACzB,kBAAC,QAAD;SAAM,WAAW,EAAO;mBACrB,EAAK,qBACJ,EAAK;QACH,CAAA,CAEF;;MACN,CAAA,GACJ,kBAAC,MAAD;OACE,WAAW,GAAG,EAAO,UACnB,KAAoB,IAAI,IAAI,EAAO,WAAW;OAEhD,iBAAe,KAAoB;iBAEnC,kBAAC,UAAD;QAAQ,eAAe,EAAoB,CAAC;kBAA5C,CAA+C,iBAE5C,CAAC,KAAW,CAAC,KAAa,KACzB,kBAAC,QAAD;SAAM,WAAW,EAAO;mBACrB,EAAK;QACF,CAAA,CAEF;;MACN,CAAA,CACF;;IACD,CAAA;GACF,CAAA;GAEL,kBAAC,OAAD;IACE,WAMI,KAAoB,KAAK,CAAC,KAAW,CAAC,KAAa,IAEjD,KAAA,IADA,EAAO;cARf,CAYG,GAAM,gCACL,EAAK,+BAA+B,KAKlC,kBAAC,OAAD,EAAA,UACE,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,GAAD,CAA8B,CAAA;IAC3B,CAAA,EACF,CAAA,GAER,GAAM,iCAAiC,KACtC,kBAAC,OAAD;KAAK,WAAW,EAAO;eACrB,kBAAC,OAAD,EAAA,UAAK,qCAAuC,CAAA;IACzC,CAAA,CAEJ;;GAEJ,KAAoB,KAAK,CAAC,KAAW,CAAC,KAAa,KAClD,kBAAC,OAAD,EAAA,UAAA,CACG,EAAK,oCAAoC,KACxC,kBAAC,OAAD;IAAK,WAAW,aAAa,EAAO;cAApC;KACE,kBAAC,MAAD;MAAI,WAAW,GAAG,EAAO,aAAa;gBAAtC,CAAyD,yBAEtD,EAAK,sCAAsC,QAC1C,kBAAC,GAAD;OACE,WAAU;OACV,OACE,kBAAA,GAAA,EAAA,UAAA;QAAE;QAEA,kBAAC,MAAD,CAAK,CAAA;QAAC;OAEN,EAAA,CAAA;OAEJ,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,IAAI,EAAE,EAAE;iBAEhD,kBAAC,QAAD;QAAM,WAAW,EAAO;kBAAxB;SACG,EACC,EAAK,kCACP;SAAG;SAAI;QAEH;;MACC,CAAA,CAET;;KACJ,kBAAC,OAAD,EAAA,UACE,kBAAC,OAAD;MAAK,WAAW,EAAO;gBAAvB;OACE,kBAAC,OAAD;QAAK,WAAW,EAAO;kBAAvB,CACE,kBAAC,OAAD;SAAK,WAAW,EAAO;mBAAvB,CACE,kBAAC,OAAD;UAAK,WAAW,EAAO;oBACrB,kBAAC,GAAD;WAAY,SAAS;qBAArB,CACE,kBAAC,GAAD,EAAS,MAAK,iBAAkB,CAAA,GAAC,sBACvB;;SACT,CAAA,GACL,kBAAC,OAAD;UAAK,WAAW,EAAO;oBAAvB,CACG,EAAK,2DACJ,KACA,kBAAC,GAAD;WACE,SAAQ;WACR,eAAe;YACb,EAA4B,EAAI;WAClC;WACA,WAAW,kBAAC,GAAD;YAAS,MAAK;YAAW,MAAM;WAAQ,CAAA;qBACnD;UAEO,CAAA,GAET,EAAK,4DACJ,KACA,kBAAC,GAAD;WACE,OAAM;WACN,gBAAgB;WAChB,WAAU;qBAEV,kBAAC,QAAD,EAAA,UACE,kBAAC,GAAD;YACE,SAAQ;YACR,UAAA;YACA,WACE,kBAAC,GAAD;aAAS,MAAK;aAAW,MAAM;YAAQ,CAAA;sBAE1C;WAEO,CAAA,EACJ,CAAA;UACC,CAAA,CAER;WACF;YACL,kBAAC,GAAD;SACE,WACE,kBAAC,GAAD;UAAY,SAAS;UAAS,WAAW;oBAAzC,CAAgD,yIAI9C,kBAAC,KAAD;WACE,MAAK;WACL,QAAO;WACP,KAAI;qBACL;UAEE,CAAA,CACO;;SAEd,eAAe;UACb,iBAAiB;UACjB,GAAG;UACH,IAAI;SACN;SACA,sBAAsB;UACpB,iBAAiB;UACjB,GAAG;SACL;SACA,QAAQ;UAAE,OAAO;UAAQ,QAAQ;SAAO;mBAExC,kBAAC,GAAD;UACE,SAAS;UACT,WAAW;UACX,IAAI,EAAE,cAAc,OAAO;oBAE3B,kBAAC,MAAD,EAAA,UAAA;WACE,kBAAC,MAAD,EAAA,UAAI,gDAAiD,CAAA;WACrD,kBAAC,MAAD,EAAA,UAAI,sDAEA,CAAA;WACJ,kBAAC,MAAD,EAAA,UAAI,wDAGA,CAAA;WACJ,kBAAC,MAAD,EAAA,UAAI,2EAGA,CAAA;UACF,EAAA,CAAA;SACM,CAAA;QACK,CAAA,CAChB;;OACL,kBAAC,OAAD;QAAK,WAAW,EAAO;kBAAvB,CACE,kBAAC,OAAD;SAAK,WAAW,EAAO;mBAAvB,CACE,kBAAC,OAAD;UAAK,WAAW,EAAO;oBACrB,kBAAC,GAAD;WAAY,SAAS;qBAArB,CACE,kBAAC,GAAD,EAAS,MAAK,OAAQ,CAAA,GAAC,wBACb;;SACT,CAAA,GACL,kBAAC,OAAD;UAAK,WAAW,EAAO;oBACrB,kBAAC,GAAD;WACE,SAAQ;WACR,eAAe;YACb,EAAkB,EAAI;WACxB;WACA,WAAW,kBAAC,GAAD;YAAS,MAAK;YAAW,MAAM;WAAQ,CAAA;qBACnD;UAEO,CAAA;SACL,CAAA,CACF;YACL,kBAAC,GAAD;SACE,WACE,kBAAC,GAAD;UAAY,SAAS;UAAS,WAAW;oBAAzC,CAAgD,6EAG9C,kBAAC,KAAD;WACE,MAAK;WACL,QAAO;WACP,KAAI;qBACL;UAEE,CAAA,CACO;;SAEd,eAAe;UACb,iBAAiB;UACjB,GAAG;UACH,IAAI;SACN;SACA,sBAAsB;UACpB,iBAAiB;UACjB,GAAG;SACL;SACA,QAAQ;UAAE,OAAO;UAAQ,QAAQ;SAAO;mBAExC,kBAAC,GAAD;UACE,SAAS;UACT,WAAW;UACX,IAAI,EAAE,cAAc,OAAO;oBAE3B,kBAAC,MAAD,EAAA,UAAA;WACE,kBAAC,MAAD,EAAA,UAAI,yCAA0C,CAAA;WAC9C,kBAAC,MAAD,EAAA,UAAI,4DAGA,CAAA;WACJ,kBAAC,MAAD,EAAA,UAAI,gEAGA,CAAA;WACJ,kBAAC,MAAD,EAAA,UAAI,uEAGA,CAAA;UACF,EAAA,CAAA;SACM,CAAA;QACK,CAAA,CAChB;;OACJ,EAAK,2DACJ,EAAK,qCACL,kBAAC,OAAD;QAAK,WAAW,EAAO;kBAAvB,CACE,kBAAC,OAAD;SAAK,WAAW,EAAO;mBAAvB,CACE,kBAAC,OAAD;UAAK,WAAW,EAAO;oBACrB,kBAAC,GAAD;WAAY,SAAS;qBAArB,CACE,kBAAC,GAAD,EAAS,MAAK,YAAa,CAAA,GAAC,sBAClB;;SACT,CAAA,GACL,kBAAC,OAAD;UAAK,WAAW,EAAO;oBACrB,kBAAC,OAAD;WAAK,WAAW,EAAO;qBACrB,kBAAC,GAAD,CAAoD,CAAA;UACjD,CAAA;SACF,CAAA,CACF;YACL,kBAAC,GAAD;SACE,WACE,kBAAC,GAAD;UAAY,SAAS;UAAS,WAAW;oBAAzC;WAAgD;WAClC,kBAAC,UAAD,EAAA,UAAQ,SAAc,CAAA;WAAC;UAGzB;;SAEd,eAAe;UACb,iBAAiB;UACjB,GAAG;UACH,IAAI;SACN;SACA,sBAAsB;UACpB,iBAAiB;UACjB,GAAG;SACL;SACA,QAAQ;UAAE,OAAO;UAAQ,QAAQ;SAAO;mBAExC,kBAAC,GAAD;UACE,SAAS;UACT,WAAW;UACX,IAAI,EAAE,cAAc,OAAO;oBAH7B;WAIC;WAQC,kBAAC,MAAD,CAAK,CAAA;WACL,kBAAC,MAAD,CAAK,CAAA;WAAC;UAII;;QACK,CAAA,CAChB;;MAEJ;QACF,CAAA;KAEL,kBAAC,OAAD,EAAA,UAAA;MACG,KACC,kBAAC,OAAD;OAAK,KAAK;iBACR,kBAAC,GAAD,EACE,yBAAyB;QACvB,EAAiC,EAAI;OACvC,EACD,CAAA;MACE,CAAA;MAEP,kBAAC,MAAD;OAAI,WAAW,GAAG,EAAO,aAAa;iBAAmB;MAErD,CAAA;MACJ,kBAAC,OAAD;OAAK,WAAW,EAAO;iBACrB,kBAAC,MAAD;QAAI,WAAW,EAAO;kBAAtB,CACE,kBAAC,MAAD;SAAI,WAAW,EAAO;mBAAU;QAAS,CAAA,GACxC,EAAW,KAAK,GAAK,MACpB,kBAAC,MAAD;SAEE,WAAW,GAAG,EAAO,UACnB,MAA2B,IACvB,IAAI,EAAO,WACX;SAEN,iBAAe,MAA2B;mBAE1C,kBAAC,UAAD;UACE,eAAe,EAA0B,CAAK;oBADhD,CAGG,EAAI,OACJ,CAAC,KAAW,CAAC,KAAa,KACzB,kBAAC,QAAD;WAAM,WAAW,EAAO;qBACrB,EAAe,GAAM,EAAI,MAAM;UAC5B,CAAA,CAEF;;QACN,GAlBG,EAAI,KAkBP,CACL,CACC;;MACD,CAAA;MAEL,kBAAC,OAAD;OAAK,WAAW,EAAO;iBACrB,kBAAC,GAAD,EAEE,QAAQ,EACT,GAFM,KAAkB,KAExB;MACE,CAAA;KACF,EAAA,CAAA;IACF;OAEN,EAAK,sCAAsC,KAC1C,kBAAC,OAAD;IAAK,WAAW,EAAO;cACrB,kBAAC,GAAD;KAAY,SAAQ;eAAc;IAEtB,CAAA;GACT,CAAA,CAEJ,EAAA,CAAA;GAEP,kBAAC,GAAD;IACE,MAAM;IACN,SAAQ;IACR,OAAM;IACN,aAAY;IACZ,8BAA8B;IAC9B,eAAe;KACb,EAAiC,EAAK;IACxC;GACD,CAAA;GACA,KACC,kBAAC,GAAD;IACE,MAAM;IACN,eAAe,EAAkB,EAAK;IACtC,OAAM;IACN,YAAY;IACZ,SAAS;GAEV,CAAA;EAEA;;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"DownloadIneligibleForPackagingFilesFromListButton.d.ts","sourceRoot":"","sources":["../../../src/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.tsx"],"names":[],"mappings":"AAoEA,MAAM,MAAM,sDAAsD,GAAG;IACnE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,CAAA;CAC5C,CAAA;AAED;;;;GAIG;AACH,wBAAgB,iDAAiD,CAC/D,KAAK,EAAE,sDAAsD,kDAu0B9D;AAED,eAAe,iDAAiD,CAAA"}
1
+ {"version":3,"file":"DownloadIneligibleForPackagingFilesFromListButton.d.ts","sourceRoot":"","sources":["../../../src/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.tsx"],"names":[],"mappings":"AAqEA,MAAM,MAAM,sDAAsD,GAAG;IACnE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,CAAA;CAC5C,CAAA;AAED;;;;GAIG;AACH,wBAAgB,iDAAiD,CAC/D,KAAK,EAAE,sDAAsD,kDAu0B9D;AAED,eAAe,iDAAiD,CAAA"}