synapse-react-client 4.0.9 → 4.0.11

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 (613) hide show
  1. package/dist/SWC.index.d.ts +1 -0
  2. package/dist/SWC.index.d.ts.map +1 -1
  3. package/dist/SWC.index.js +2 -1
  4. package/dist/SWC.index.js.map +1 -1
  5. package/dist/aridhia-queries/aridhiaTokenExchange.js.map +1 -1
  6. package/dist/aridhia-queries/useGetAridhiaRequests.js.map +1 -1
  7. package/dist/assets/icons/CloudWarning.d.ts +5 -0
  8. package/dist/assets/icons/CloudWarning.d.ts.map +1 -0
  9. package/dist/assets/icons/CloudWarning.js +47 -0
  10. package/dist/assets/icons/CloudWarning.js.map +1 -0
  11. package/dist/assets/icons/TasksIcon.d.ts.map +1 -1
  12. package/dist/assets/icons/TasksIcon.js +6 -10
  13. package/dist/assets/icons/TasksIcon.js.map +1 -1
  14. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.d.ts.map +1 -1
  15. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js +69 -63
  16. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js.map +1 -1
  17. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
  18. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  19. package/dist/components/AccessRequirementList/AccessRequirementListUtils.js.map +1 -1
  20. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
  21. package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js.map +1 -1
  22. package/dist/components/AccessRequirementRelatedProjectsList/AccessRequirementRelatedProjectsList.js.map +1 -1
  23. package/dist/components/AccessTokenPage/AccessTokenCard/AccessTokenCard.js.map +1 -1
  24. package/dist/components/AcknowledgementsPage/StudyAcknowledgements.js.map +1 -1
  25. package/dist/components/AclEditor/PermissionLevelMenu.js.map +1 -1
  26. package/dist/components/AclEditor/ResourceAccessAndUserGroupHeader.js.map +1 -1
  27. package/dist/components/AclEditor/useSortResourceAccessList.js.map +1 -1
  28. package/dist/components/AclEditor/useUpdateAcl.js.map +1 -1
  29. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  30. package/dist/components/Authentication/AuthenticationMethodSelection.d.ts.map +1 -1
  31. package/dist/components/Authentication/AuthenticationMethodSelection.js +38 -37
  32. package/dist/components/Authentication/AuthenticationMethodSelection.js.map +1 -1
  33. package/dist/components/Authentication/Constants.d.ts +1 -0
  34. package/dist/components/Authentication/Constants.d.ts.map +1 -1
  35. package/dist/components/Authentication/Constants.js +2 -2
  36. package/dist/components/Authentication/Constants.js.map +1 -1
  37. package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
  38. package/dist/components/Authentication/RecoveryCodeForm.js.map +1 -1
  39. package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
  40. package/dist/components/Authentication/RegenerateBackupCodesWarning.js.map +1 -1
  41. package/dist/components/Authentication/Reset2FAWarning.js.map +1 -1
  42. package/dist/components/Authentication/StandaloneLoginForm.js +1 -1
  43. package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
  44. package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
  45. package/dist/components/Authentication/TwoFactorEnrollmentForm.js +2 -1
  46. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  47. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js.map +1 -1
  48. package/dist/components/CardContainer/CardContainer.js.map +1 -1
  49. package/dist/components/CardDeck/CardDeck.Mobile.js.map +1 -1
  50. package/dist/components/CardDeck/TableQueryCardDeck.js.map +1 -1
  51. package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
  52. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js.map +1 -1
  53. package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
  54. package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js.map +1 -1
  55. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
  56. package/dist/components/ChallengeSubmission/EvaluationQueueList.js.map +1 -1
  57. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.d.ts.map +1 -1
  58. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js +143 -140
  59. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
  60. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js.map +1 -1
  61. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
  62. package/dist/components/ChangePassword/ChangePassword.js.map +1 -1
  63. package/dist/components/ChangePassword/ChangePasswordWithToken.js.map +1 -1
  64. package/dist/components/ChangePassword/useChangePasswordFormState.js +1 -1
  65. package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
  66. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  67. package/dist/components/ColumnFilter/ColumnFilter.js.map +1 -1
  68. package/dist/components/ComponentCollapse.js.map +1 -1
  69. package/dist/components/CookiesNotification/CookiesNotification.js.map +1 -1
  70. package/dist/components/CreateProjectModal/CreateProjectModal.js.map +1 -1
  71. package/dist/components/CreateTableViewWizard/CreateTableViewWizardUtils.js.map +1 -1
  72. package/dist/components/DataGrid/DataGrid.d.ts +0 -1
  73. package/dist/components/DataGrid/DataGrid.d.ts.map +1 -1
  74. package/dist/components/DataGrid/DataGrid.js +72 -72
  75. package/dist/components/DataGrid/DataGrid.js.map +1 -1
  76. package/dist/components/DataGrid/DataGridWebSocket.d.ts +4 -0
  77. package/dist/components/DataGrid/DataGridWebSocket.d.ts.map +1 -1
  78. package/dist/components/DataGrid/DataGridWebSocket.js +9 -8
  79. package/dist/components/DataGrid/DataGridWebSocket.js.map +1 -1
  80. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  81. package/dist/components/DataGrid/SynapseGrid.js +326 -268
  82. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  83. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts +2 -0
  84. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts.map +1 -1
  85. package/dist/components/DataGrid/columns/AutocompleteColumn.js +124 -67
  86. package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
  87. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.d.ts +2 -1
  88. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.d.ts.map +1 -1
  89. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js +126 -122
  90. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js.map +1 -1
  91. package/dist/components/DataGrid/columns/useGridAutocompleteState.d.ts +58 -0
  92. package/dist/components/DataGrid/columns/useGridAutocompleteState.d.ts.map +1 -0
  93. package/dist/components/DataGrid/columns/useGridAutocompleteState.js +52 -0
  94. package/dist/components/DataGrid/columns/useGridAutocompleteState.js.map +1 -0
  95. package/dist/components/DataGrid/components/ValidationAlert.d.ts +5 -2
  96. package/dist/components/DataGrid/components/ValidationAlert.d.ts.map +1 -1
  97. package/dist/components/DataGrid/components/ValidationAlert.js +429 -24
  98. package/dist/components/DataGrid/components/ValidationAlert.js.map +1 -1
  99. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js.map +1 -1
  100. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.js.map +1 -1
  101. package/dist/components/DataGrid/hooks/useGridUndoRedo.js.map +1 -1
  102. package/dist/components/DataGrid/hooks/useStack.js.map +1 -1
  103. package/dist/components/DataGrid/useCRDTModelView.js.map +1 -1
  104. package/dist/components/DataGrid/useDataGridWebsocket.d.ts +7 -0
  105. package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
  106. package/dist/components/DataGrid/useDataGridWebsocket.js +16 -2
  107. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  108. package/dist/components/DataGrid/useInitializeGridConnection.js.map +1 -1
  109. package/dist/components/DataGrid/useMergeGridWithRecordSet.js.map +1 -1
  110. package/dist/components/DataGrid/useMergeGridWithSource.js.map +1 -1
  111. package/dist/components/DataGrid/useMergeGridWithTable.js.map +1 -1
  112. package/dist/components/DataGrid/utils/DataGridUtils.js.map +1 -1
  113. package/dist/components/DataGrid/utils/applyModelChange.d.ts +1 -1
  114. package/dist/components/DataGrid/utils/applyModelChange.d.ts.map +1 -1
  115. package/dist/components/DataGrid/utils/applyModelChange.js +27 -24
  116. package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
  117. package/dist/components/DataGrid/utils/columnFactory.d.ts +8 -0
  118. package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
  119. package/dist/components/DataGrid/utils/columnFactory.js +47 -44
  120. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  121. package/dist/components/DataGrid/utils/computeReplicaSelectionModel.js.map +1 -1
  122. package/dist/components/DataGrid/utils/extractColumnValidationMessages.js.map +1 -1
  123. package/dist/components/DataGrid/utils/getCellClassName.d.ts.map +1 -1
  124. package/dist/components/DataGrid/utils/getCellClassName.js +8 -8
  125. package/dist/components/DataGrid/utils/getCellClassName.js.map +1 -1
  126. package/dist/components/DataGrid/utils/getEmptyValue.d.ts +2 -0
  127. package/dist/components/DataGrid/utils/getEmptyValue.d.ts.map +1 -0
  128. package/dist/components/DataGrid/utils/getEmptyValue.js +8 -0
  129. package/dist/components/DataGrid/utils/getEmptyValue.js.map +1 -0
  130. package/dist/components/DataGrid/utils/json-rx/JsonRx.js.map +1 -1
  131. package/dist/components/DataGrid/utils/modelColsToGrid.d.ts.map +1 -1
  132. package/dist/components/DataGrid/utils/modelColsToGrid.js +2 -1
  133. package/dist/components/DataGrid/utils/modelColsToGrid.js.map +1 -1
  134. package/dist/components/DataGrid/utils/modelRowsToGrid.js.map +1 -1
  135. package/dist/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType.js.map +1 -1
  136. package/dist/components/DataGrid/utils/schemaAwarePasteValue.d.ts +32 -0
  137. package/dist/components/DataGrid/utils/schemaAwarePasteValue.d.ts.map +1 -0
  138. package/dist/components/DataGrid/utils/schemaAwarePasteValue.js +22 -0
  139. package/dist/components/DataGrid/utils/schemaAwarePasteValue.js.map +1 -0
  140. package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
  141. package/dist/components/DateTimePicker/DateTimePicker.js.map +1 -1
  142. package/dist/components/DirectDownload/DirectDownload.js.map +1 -1
  143. package/dist/components/DirectDownloadButton.js.map +1 -1
  144. package/dist/components/DownloadCart/CreatePackageV2.js.map +1 -1
  145. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.css +1 -0
  146. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.d.ts.map +1 -1
  147. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +199 -132
  148. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  149. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.js +22 -0
  150. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.js.map +1 -0
  151. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.scss +170 -0
  152. package/dist/components/DownloadCart/DownloadListActionsRequired.js.map +1 -1
  153. package/dist/components/DownloadCart/DownloadListTable.js.map +1 -1
  154. package/dist/components/DownloadCart/fileNameUtils.js.map +1 -1
  155. package/dist/components/DraggableDialog/DraggableDialog.js.map +1 -1
  156. package/dist/components/DynamicForm/DynamicFormModal.js.map +1 -1
  157. package/dist/components/Ecosystem/TableQueryEcosystem.js.map +1 -1
  158. package/dist/components/EntityAclEditor/EntityAclEditor.d.ts.map +1 -1
  159. package/dist/components/EntityAclEditor/EntityAclEditor.js +103 -103
  160. package/dist/components/EntityAclEditor/EntityAclEditor.js.map +1 -1
  161. package/dist/components/EntityAclEditor/useNotifyNewACLUsers.js.map +1 -1
  162. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  163. package/dist/components/EntityCitation/EntityCitation.js.map +1 -1
  164. package/dist/components/EntityDownloadButton/EntityDownloadButton.d.ts.map +1 -1
  165. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +1 -0
  166. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  167. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.d.ts.map +1 -1
  168. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js +36 -30
  169. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
  170. package/dist/components/EntityFinder/EntityFinder.js.map +1 -1
  171. package/dist/components/EntityFinder/VersionSelectionType.js.map +1 -1
  172. package/dist/components/EntityFinder/details/configurations/EntityChildrenDetails.js.map +1 -1
  173. package/dist/components/EntityFinder/details/configurations/FavoritesDetails.js.map +1 -1
  174. package/dist/components/EntityFinder/details/configurations/ProjectListDetails.js.map +1 -1
  175. package/dist/components/EntityFinder/details/view/DetailsView.js.map +1 -1
  176. package/dist/components/EntityFinder/tree/EntityTree.js.map +1 -1
  177. package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
  178. package/dist/components/EntityFinder/useEntitySelection.js.map +1 -1
  179. package/dist/components/EntityForm/EntityForm.js.map +1 -1
  180. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  181. package/dist/components/EntityHeaderTable/Filter.js.map +1 -1
  182. package/dist/components/EntityHeaderTable/useEntityHeaderTableState.js.map +1 -1
  183. package/dist/components/EntitySubjectsSelector/EntitySubjectsSelector.js.map +1 -1
  184. package/dist/components/EntityTreeTable/components/IdColumnHeader.js.map +1 -1
  185. package/dist/components/EntityTreeTable/hooks/useEntityTreeState.js.map +1 -1
  186. package/dist/components/EntityTreeTable/hooks/useTableColumns.js.map +1 -1
  187. package/dist/components/EntityTreeTable/hooks/useTableData.js.map +1 -1
  188. package/dist/components/EntityTreeTable/hooks/useTreeOperationsWithDirectFetch.js.map +1 -1
  189. package/dist/components/EntityUpload/EntityUpload.js.map +1 -1
  190. package/dist/components/EntityViewScopeEditor/EntityViewMaskEditor.d.ts.map +1 -1
  191. package/dist/components/EntityViewScopeEditor/EntityViewMaskEditor.js +15 -14
  192. package/dist/components/EntityViewScopeEditor/EntityViewMaskEditor.js.map +1 -1
  193. package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
  194. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
  195. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  196. package/dist/components/FeaturedDataTabs/QueryPerFacetPlotsCard.js.map +1 -1
  197. package/dist/components/FeaturedDataTabs/SingleQueryFacetPlotsCards.js.map +1 -1
  198. package/dist/components/FeaturedResearch/FeaturedResearch.js.map +1 -1
  199. package/dist/components/FeaturedToolsList/FeaturedToolsList.js.map +1 -1
  200. package/dist/components/FilePreview/FileHandleContentRenderer.js.map +1 -1
  201. package/dist/components/FilePreview/HtmlPreview/HtmlPreview.js.map +1 -1
  202. package/dist/components/FilePreview/PreviewRendererType.js.map +1 -1
  203. package/dist/components/Forum/DiscussionReply.d.ts +1 -0
  204. package/dist/components/Forum/DiscussionReply.d.ts.map +1 -1
  205. package/dist/components/Forum/DiscussionReply.js +19 -19
  206. package/dist/components/Forum/DiscussionReply.js.map +1 -1
  207. package/dist/components/Forum/DiscussionSearchResult.js.map +1 -1
  208. package/dist/components/Forum/DiscussionThread.d.ts +1 -0
  209. package/dist/components/Forum/DiscussionThread.d.ts.map +1 -1
  210. package/dist/components/Forum/DiscussionThread.js +73 -72
  211. package/dist/components/Forum/DiscussionThread.js.map +1 -1
  212. package/dist/components/Forum/ForumTable.js.map +1 -1
  213. package/dist/components/Forum/ForumThreadEditor.js.map +1 -1
  214. package/dist/components/FullTextSearch/FullTextSearchUtils.js.map +1 -1
  215. package/dist/components/GenericCard/BioregistryRules.d.ts.map +1 -1
  216. package/dist/components/GenericCard/BioregistryRules.js +7 -3
  217. package/dist/components/GenericCard/BioregistryRules.js.map +1 -1
  218. package/dist/components/GenericCard/GenericCard.d.ts.map +1 -1
  219. package/dist/components/GenericCard/GenericCard.js +12 -7
  220. package/dist/components/GenericCard/GenericCard.js.map +1 -1
  221. package/dist/components/GenericCard/Linkify.js.map +1 -1
  222. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  223. package/dist/components/GenericCard/TableRowGenericCard.js +105 -105
  224. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  225. package/dist/components/Goals/Goals.Mobile.js.map +1 -1
  226. package/dist/components/Goals/Goals.js.map +1 -1
  227. package/dist/components/GoalsV2/GoalsV2.Mobile.js.map +1 -1
  228. package/dist/components/GoalsV2/GoalsV2.js.map +1 -1
  229. package/dist/components/GoalsV3/GoalsV3.Mobile.js.map +1 -1
  230. package/dist/components/GoalsV3/GoalsV3.js.map +1 -1
  231. package/dist/components/GoogleMap/SynapseUserMarker.js.map +1 -1
  232. package/dist/components/HasAccess/AccessIcon.js.map +1 -1
  233. package/dist/components/HasAccess/useHasAccess.js.map +1 -1
  234. package/dist/components/HeaderCard/HeaderCardV2.js.map +1 -1
  235. package/dist/components/HeaderCard.d.ts +6 -1
  236. package/dist/components/HeaderCard.d.ts.map +1 -1
  237. package/dist/components/HeaderCard.js +107 -76
  238. package/dist/components/HeaderCard.js.map +1 -1
  239. package/dist/components/HexGrid/HexGrid.js.map +1 -1
  240. package/dist/components/IconList.js.map +1 -1
  241. package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
  242. package/dist/components/IconSvg/IconSvg.js +2 -1
  243. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  244. package/dist/components/ImageCardGridWithLinks/ImageCardGridWithLinks.js.map +1 -1
  245. package/dist/components/ImageFromSynapseTable.js.map +1 -1
  246. package/dist/components/JSONArrayEditor/useParseCsv.js.map +1 -1
  247. package/dist/components/JsonSchemaForm/templates/ArrayFieldDescriptionTemplate.js.map +1 -1
  248. package/dist/components/JsonSchemaForm/templates/ArrayFieldItemTemplate.js.map +1 -1
  249. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js.map +1 -1
  250. package/dist/components/JsonSchemaForm/templates/FieldTemplate.js.map +1 -1
  251. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  252. package/dist/components/Markdown/MarkdownGithub.js.map +1 -1
  253. package/dist/components/Markdown/MarkdownSynapse.js.map +1 -1
  254. package/dist/components/Markdown/MarkdownUtils.js.map +1 -1
  255. package/dist/components/Markdown/SynapseWikiContext.js.map +1 -1
  256. package/dist/components/Markdown/UserMentionModal.js.map +1 -1
  257. package/dist/components/Markdown/widget/MarkdownProvenanceGraph.js.map +1 -1
  258. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  259. package/dist/components/ModalDownload/ModalDownload.js.map +1 -1
  260. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.d.ts.map +1 -1
  261. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js +45 -39
  262. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js.map +1 -1
  263. package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
  264. package/dist/components/PageProgress/PageProgress.js.map +1 -1
  265. package/dist/components/Plot/DotPlot.js.map +1 -1
  266. package/dist/components/Plot/Plot.js.map +1 -1
  267. package/dist/components/Plot/SynapsePlot.js.map +1 -1
  268. package/dist/components/Plot/ThemesPlot.js.map +1 -1
  269. package/dist/components/Plot/UpsetPlot.js.map +1 -1
  270. package/dist/components/PortalAclEditor/PortalAclEditor.d.ts.map +1 -1
  271. package/dist/components/PortalAclEditor/PortalAclEditor.js +43 -41
  272. package/dist/components/PortalAclEditor/PortalAclEditor.js.map +1 -1
  273. package/dist/components/PortalFeaturedPartners/PortalFeaturedPartners.js.map +1 -1
  274. package/dist/components/PortalList/CreatePortalModal.js.map +1 -1
  275. package/dist/components/ProgrammaticInstructionsModal/ProgrammaticInstructionsModal.js.map +1 -1
  276. package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js.map +1 -1
  277. package/dist/components/Programs/Programs.Mobile.js.map +1 -1
  278. package/dist/components/Programs/Programs.js.map +1 -1
  279. package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js.map +1 -1
  280. package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
  281. package/dist/components/ProvenanceGraph/ProvenanceGraphUtils.js.map +1 -1
  282. package/dist/components/ProvenanceGraph/ProvenanceUtils.js.map +1 -1
  283. package/dist/components/QueryCount/QueryCount.js.map +1 -1
  284. package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
  285. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
  286. package/dist/components/QueryWrapper/QueryWrapper.js.map +1 -1
  287. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js.map +1 -1
  288. package/dist/components/QueryWrapper/TableRowSelectionState.js.map +1 -1
  289. package/dist/components/QueryWrapper/generateEncodedPathAndQueryForSelectedFacetURL.js.map +1 -1
  290. package/dist/components/QueryWrapper/useGetQueryMetadata.js.map +1 -1
  291. package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
  292. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  293. package/dist/components/QueryWrapperPlotNav/UseRowSet.js.map +1 -1
  294. package/dist/components/RecentPublicationsGrid/RecentPublicationsGrid.js.map +1 -1
  295. package/dist/components/ReleaseCard/ReleaseCardUtils.js.map +1 -1
  296. package/dist/components/ResizableContainer/hooks/useResizable.js.map +1 -1
  297. package/dist/components/Resources/Resources.Mobile.js.map +1 -1
  298. package/dist/components/Resources/Resources.js.map +1 -1
  299. package/dist/components/RowDataTable/RowDataTableWithQuery.js.map +1 -1
  300. package/dist/components/SageResourcesPopover/SageResourcesPopover.js.map +1 -1
  301. package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.js.map +1 -1
  302. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  303. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
  304. package/dist/components/SmartLink/SmartButton.js.map +1 -1
  305. package/dist/components/SmartLink/SmartLink.js.map +1 -1
  306. package/dist/components/SourceAppImage.js.map +1 -1
  307. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js.map +1 -1
  308. package/dist/components/StatisticsPlot.js.map +1 -1
  309. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  310. package/dist/components/SubsectionRowRenderer/SubsectionRowRenderer.js.map +1 -1
  311. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
  312. package/dist/components/SynapseChat/GridAgentChat.js.map +1 -1
  313. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  314. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  315. package/dist/components/SynapseChat/extractMessageFromTraceEvent.js.map +1 -1
  316. package/dist/components/SynapseForm/StepsSideNav.js.map +1 -1
  317. package/dist/components/SynapseForm/SummaryTable.js.map +1 -1
  318. package/dist/components/SynapseForm/SynapseForm.js +4 -2
  319. package/dist/components/SynapseForm/SynapseForm.js.map +1 -1
  320. package/dist/components/SynapseForm/SynapseFormWrapper.js.map +1 -1
  321. package/dist/components/SynapseHomepageV2/SynapseByTheNumbersItem.js.map +1 -1
  322. package/dist/components/SynapseHomepageV2/SynapseFeatureItem.js.map +1 -1
  323. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js.map +1 -1
  324. package/dist/components/SynapseHomepageV2/SynapseHomepageSearch.js.map +1 -1
  325. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
  326. package/dist/components/SynapseHomepageV2/SynapsePlans.js.map +1 -1
  327. package/dist/components/SynapseHomepageV2/SynapseTrendingProjects.js.map +1 -1
  328. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts +8 -7
  329. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts.map +1 -1
  330. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +173 -164
  331. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  332. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  333. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanel.js.map +1 -1
  334. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js.map +1 -1
  335. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
  336. package/dist/components/SynapseTable/EntityIDColumnCopyIcon.js.map +1 -1
  337. package/dist/components/SynapseTable/NoContentPlaceholderType.js.map +1 -1
  338. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  339. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js.map +1 -1
  340. package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
  341. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  342. package/dist/components/SynapseTable/table-top/ColumnSelection.js.map +1 -1
  343. package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
  344. package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
  345. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  346. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/DefaultValueField.js.map +1 -1
  347. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
  348. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts +1 -1
  349. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
  350. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  351. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  352. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.js.map +1 -1
  353. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.js.map +1 -1
  354. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js.map +1 -1
  355. package/dist/components/TanStackTable/ColumnHeader.d.ts +1 -0
  356. package/dist/components/TanStackTable/ColumnHeader.d.ts.map +1 -1
  357. package/dist/components/TanStackTable/ColumnHeader.js +8 -8
  358. package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
  359. package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js.map +1 -1
  360. package/dist/components/TanStackTable/TableBody.js.map +1 -1
  361. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
  362. package/dist/components/TextField/TextField.js.map +1 -1
  363. package/dist/components/TimelinePlot/TimelinePhase.js.map +1 -1
  364. package/dist/components/TimelinePlot/TimelinePlot.js.map +1 -1
  365. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js.map +1 -1
  366. package/dist/components/UserCard/Avatar.js.map +1 -1
  367. package/dist/components/UserCardList/UserCardList.js.map +1 -1
  368. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Mobile.js.map +1 -1
  369. package/dist/components/UserCardList/UserCardListRotate.js.map +1 -1
  370. package/dist/components/UserOrTeamBadge/useUserOrTeam.js.map +1 -1
  371. package/dist/components/UserProfileLinks/UserProjects.js.map +1 -1
  372. package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -1
  373. package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
  374. package/dist/components/WikiMarkdownEditor/WikiMarkdownEditor.js.map +1 -1
  375. package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js.map +1 -1
  376. package/dist/components/dataaccess/AccessApprovalsTable.js.map +1 -1
  377. package/dist/components/dataaccess/AccessRequestSubmissionTable.js.map +1 -1
  378. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.d.ts.map +1 -1
  379. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js +157 -148
  380. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js.map +1 -1
  381. package/dist/components/dataaccess/UseAccessRequirementTable.js.map +1 -1
  382. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.js.map +1 -1
  383. package/dist/components/doi/CreateOrUpdateDoiModal.d.ts.map +1 -1
  384. package/dist/components/doi/CreateOrUpdateDoiModal.js +20 -19
  385. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  386. package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
  387. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  388. package/dist/components/entity/page/title_bar/useDataCiteUsage.js.map +1 -1
  389. package/dist/components/entity/page/title_bar/useGetMentions.js.map +1 -1
  390. package/dist/components/error/ErrorPage.js.map +1 -1
  391. package/dist/components/favorites/FavoritesPage.js.map +1 -1
  392. package/dist/components/file/upload/BasicFileHandleUpload.js.map +1 -1
  393. package/dist/components/layout/SWCHeader.d.ts +9 -0
  394. package/dist/components/layout/SWCHeader.d.ts.map +1 -0
  395. package/dist/components/layout/SWCHeader.js +19 -0
  396. package/dist/components/layout/SWCHeader.js.map +1 -0
  397. package/dist/components/layout/SWCPageLayout.d.ts +9 -0
  398. package/dist/components/layout/SWCPageLayout.d.ts.map +1 -0
  399. package/dist/components/layout/SWCPageLayout.js +14 -0
  400. package/dist/components/layout/SWCPageLayout.js.map +1 -0
  401. package/dist/components/menu/ComplexMenu.js.map +1 -1
  402. package/dist/components/row_renderers/utils/ChipContainer.js.map +1 -1
  403. package/dist/components/styled/StyledPopover.js.map +1 -1
  404. package/dist/components/table/CsvPreview/CsvPreview.js +2 -1
  405. package/dist/components/table/CsvPreview/CsvPreview.js.map +1 -1
  406. package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
  407. package/dist/components/trash/TrashCanList.js.map +1 -1
  408. package/dist/components/widgets/FileHandleLink.js.map +1 -1
  409. package/dist/components/widgets/RangeSlider/RangeSlider.js.map +1 -1
  410. package/dist/components/widgets/SynapseVideo.js.map +1 -1
  411. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  412. package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
  413. package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js.map +1 -1
  414. package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
  415. package/dist/components/widgets/query-filter/CombinedRangeFacetFilter.js.map +1 -1
  416. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
  417. package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
  418. package/dist/components/widgets/query-filter/RangeFacetFilter.js.map +1 -1
  419. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js.map +1 -1
  420. package/dist/features/curator/GridPage/components/GridPageTitle.d.ts.map +1 -1
  421. package/dist/features/curator/GridPage/components/GridPageTitle.js +23 -30
  422. package/dist/features/curator/GridPage/components/GridPageTitle.js.map +1 -1
  423. package/dist/features/curator/dashboard/CuratorDashboard.d.ts +2 -0
  424. package/dist/features/curator/dashboard/CuratorDashboard.d.ts.map +1 -0
  425. package/dist/features/curator/dashboard/CuratorDashboard.js +45 -0
  426. package/dist/features/curator/dashboard/CuratorDashboard.js.map +1 -0
  427. package/dist/features/curator/dashboard/components/CurationTaskCard.css +1 -0
  428. package/dist/features/curator/dashboard/components/CurationTaskCard.d.ts +9 -0
  429. package/dist/features/curator/dashboard/components/CurationTaskCard.d.ts.map +1 -0
  430. package/dist/features/curator/dashboard/components/CurationTaskCard.js +106 -0
  431. package/dist/features/curator/dashboard/components/CurationTaskCard.js.map +1 -0
  432. package/dist/features/curator/dashboard/components/CurationTaskCard.module.js +12 -0
  433. package/dist/features/curator/dashboard/components/CurationTaskCard.module.js.map +1 -0
  434. package/dist/features/curator/dashboard/components/CurationTaskCard.module.scss +52 -0
  435. package/dist/features/curator/dashboard/components/NextStepButton.css +1 -0
  436. package/dist/features/curator/dashboard/components/NextStepButton.d.ts +14 -0
  437. package/dist/features/curator/dashboard/components/NextStepButton.d.ts.map +1 -0
  438. package/dist/features/curator/dashboard/components/NextStepButton.js +35 -0
  439. package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -0
  440. package/dist/features/curator/dashboard/components/NextStepButton.module.js +11 -0
  441. package/dist/features/curator/dashboard/components/NextStepButton.module.js.map +1 -0
  442. package/dist/features/curator/dashboard/components/NextStepButton.module.scss +57 -0
  443. package/dist/features/curator/dashboard/components/UserOrTeamChip.css +1 -1
  444. package/dist/features/curator/dashboard/components/UserOrTeamChip.module.js +1 -1
  445. package/dist/features/curator/dashboard/components/UserOrTeamChip.module.js.map +1 -1
  446. package/dist/features/curator/dashboard/components/UserOrTeamChip.module.scss +5 -5
  447. package/dist/features/curator/dashboard/components/shared.css +1 -0
  448. package/dist/features/curator/dashboard/components/shared.module.js +5 -0
  449. package/dist/features/curator/dashboard/components/shared.module.js.map +1 -0
  450. package/dist/features/curator/dashboard/components/shared.module.scss +8 -0
  451. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts +0 -2
  452. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts.map +1 -1
  453. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +16 -34
  454. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  455. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.d.ts.map +1 -1
  456. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js +1 -1
  457. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
  458. package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.js.map +1 -1
  459. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js.map +1 -1
  460. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.js.map +1 -1
  461. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +1 -1
  462. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js.map +1 -1
  463. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.d.ts +10 -0
  464. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.d.ts.map +1 -0
  465. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js +37 -0
  466. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js.map +1 -0
  467. package/dist/features/entity/metadata-task/utils/constants.d.ts +5 -0
  468. package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -0
  469. package/dist/features/entity/metadata-task/utils/constants.js +6 -0
  470. package/dist/features/entity/metadata-task/utils/constants.js.map +1 -0
  471. package/dist/mocks/challenge/mockChallenge.js.map +1 -1
  472. package/dist/mocks/entity/mockDataset.js.map +1 -1
  473. package/dist/mocks/entity/mockDatasetCollection.js.map +1 -1
  474. package/dist/mocks/entity/mockFileEntity.js.map +1 -1
  475. package/dist/mocks/entity/mockFileView.js.map +1 -1
  476. package/dist/mocks/entity/mockGeneratedEntityData.js.map +1 -1
  477. package/dist/mocks/entity/mockProject.js.map +1 -1
  478. package/dist/mocks/entity/mockProjectView.js.map +1 -1
  479. package/dist/mocks/entity/mockRootEntity.js.map +1 -1
  480. package/dist/mocks/entity/mockTableEntity.js.map +1 -1
  481. package/dist/mocks/mockWiki.js.map +1 -1
  482. package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
  483. package/dist/mocks/msw/handlers/challengeHandlers.js.map +1 -1
  484. package/dist/mocks/msw/handlers/changePasswordHandlers.js.map +1 -1
  485. package/dist/mocks/msw/handlers/discussionHandlers.js.map +1 -1
  486. package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
  487. package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
  488. package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
  489. package/dist/mocks/msw/handlers/personalAccessTokenHandlers.js.map +1 -1
  490. package/dist/mocks/msw/handlers/subscriptionHandlers.js.map +1 -1
  491. package/dist/mocks/msw/handlers/teamHandlers.js.map +1 -1
  492. package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
  493. package/dist/mocks/msw/handlers/wikiHandlers.js.map +1 -1
  494. package/dist/mocks/provenance/mockActivity.js.map +1 -1
  495. package/dist/mocks/query/mockReleaseCardsTableQueryResultBundle.js.map +1 -1
  496. package/dist/ror-client/index.js.map +1 -1
  497. package/dist/style/components/_cards.scss +4 -0
  498. package/dist/style/components/_data-grid-extra.css +1 -1
  499. package/dist/style/components/_data-grid-extra.scss +2 -0
  500. package/dist/style/main.css +1 -1
  501. package/dist/synapse-client/HttpClient.js.map +1 -1
  502. package/dist/synapse-client/SynapseClient.js.map +1 -1
  503. package/dist/synapse-queries/KeyFactory.d.ts +1 -0
  504. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  505. package/dist/synapse-queries/KeyFactory.js +3 -0
  506. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  507. package/dist/synapse-queries/QueryMatching.test-utils.js.map +1 -1
  508. package/dist/synapse-queries/auth/useTwoFactorEnrollment.js.map +1 -1
  509. package/dist/synapse-queries/curation/task/useCurationTask.d.ts +1 -1
  510. package/dist/synapse-queries/curation/task/useCurationTask.d.ts.map +1 -1
  511. package/dist/synapse-queries/curation/task/useCurationTask.js +1 -1
  512. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  513. package/dist/synapse-queries/dataaccess/useRestrictionInformation.js.map +1 -1
  514. package/dist/synapse-queries/doi/useDOI.js.map +1 -1
  515. package/dist/synapse-queries/download/useDownloadList.js.map +1 -1
  516. package/dist/synapse-queries/entity/useEntity.js.map +1 -1
  517. package/dist/synapse-queries/entity/useEntityBundle.js.map +1 -1
  518. package/dist/synapse-queries/entity/useExportTableQueryToAnalysisPlatform.js.map +1 -1
  519. package/dist/synapse-queries/entity/useExportToTerra.js.map +1 -1
  520. package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
  521. package/dist/synapse-queries/entity/useSchema.js.map +1 -1
  522. package/dist/synapse-queries/file/UploadToS3.js.map +1 -1
  523. package/dist/synapse-queries/file/useDirectUploadToS3.js.map +1 -1
  524. package/dist/synapse-queries/file/useFiles.js.map +1 -1
  525. package/dist/synapse-queries/forum/useReply.js.map +1 -1
  526. package/dist/synapse-queries/forum/useThread.d.ts +1 -0
  527. package/dist/synapse-queries/forum/useThread.d.ts.map +1 -1
  528. package/dist/synapse-queries/forum/useThread.js +19 -12
  529. package/dist/synapse-queries/forum/useThread.js.map +1 -1
  530. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.d.ts +2 -0
  531. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.d.ts.map +1 -1
  532. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
  533. package/dist/synapse-queries/grid/useExportGrid.js.map +1 -1
  534. package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
  535. package/dist/synapse-queries/grid/useImportCsvIntoGrid.js.map +1 -1
  536. package/dist/synapse-queries/subscription/useSubscription.js.map +1 -1
  537. package/dist/synapse-queries/table/useGetCsvPreview.js.map +1 -1
  538. package/dist/synapse-queries/table/useTableUpdateTransaction.js.map +1 -1
  539. package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
  540. package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
  541. package/dist/synapse-queries/user/useUserBundle.js.map +1 -1
  542. package/dist/synapse-queries/user/useUserGroupHeader.js.map +1 -1
  543. package/dist/testutils/ReactQueryMockUtils.js.map +1 -1
  544. package/dist/theme/ThemeProvider.js.map +1 -1
  545. package/dist/tsconfig.build.tsbuildinfo +1 -1
  546. package/dist/utils/APIConstants.d.ts +1 -0
  547. package/dist/utils/APIConstants.d.ts.map +1 -1
  548. package/dist/utils/APIConstants.js +2 -2
  549. package/dist/utils/APIConstants.js.map +1 -1
  550. package/dist/utils/AppUtils/session/ApplicationSessionManager.d.ts.map +1 -1
  551. package/dist/utils/AppUtils/session/ApplicationSessionManager.js +7 -4
  552. package/dist/utils/AppUtils/session/ApplicationSessionManager.js.map +1 -1
  553. package/dist/utils/AppUtils/session/SynapseSessionManager.js.map +1 -1
  554. package/dist/utils/AppUtils/session/useSessionManager.js.map +1 -1
  555. package/dist/utils/PermissionLevelToAccessType.js.map +1 -1
  556. package/dist/utils/challenge/evaluation/EvaluationUtils.js.map +1 -1
  557. package/dist/utils/context/SynapseContext.js.map +1 -1
  558. package/dist/utils/functions/AccessControlListUtils.d.ts +4 -0
  559. package/dist/utils/functions/AccessControlListUtils.d.ts.map +1 -1
  560. package/dist/utils/functions/AccessControlListUtils.js +12 -1
  561. package/dist/utils/functions/AccessControlListUtils.js.map +1 -1
  562. package/dist/utils/functions/EntityTypeUtils.d.ts.map +1 -1
  563. package/dist/utils/functions/EntityTypeUtils.js +15 -4
  564. package/dist/utils/functions/EntityTypeUtils.js.map +1 -1
  565. package/dist/utils/functions/GridApiUtils.js.map +1 -1
  566. package/dist/utils/functions/QueryFilterUtils.js.map +1 -1
  567. package/dist/utils/functions/RealmUtils.d.ts +4 -0
  568. package/dist/utils/functions/RealmUtils.d.ts.map +1 -1
  569. package/dist/utils/functions/RealmUtils.js +9 -3
  570. package/dist/utils/functions/RealmUtils.js.map +1 -1
  571. package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
  572. package/dist/utils/functions/SanitizeHtmlUtils.test-utils.js.map +1 -1
  573. package/dist/utils/functions/SqlFunctions.js.map +1 -1
  574. package/dist/utils/functions/StringUtils.js.map +1 -1
  575. package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
  576. package/dist/utils/functions/getDataFromFromStorage.js.map +1 -1
  577. package/dist/utils/functions/getEndpoint.js.map +1 -1
  578. package/dist/utils/functions/getUserData.js.map +1 -1
  579. package/dist/utils/functions/queryUtils.js.map +1 -1
  580. package/dist/utils/functions/testDownloadSpeed.js.map +1 -1
  581. package/dist/utils/hooks/useConfirmItems.js.map +1 -1
  582. package/dist/utils/hooks/useCookiePreferences.js.map +1 -1
  583. package/dist/utils/hooks/useCreateShortUrl.js.map +1 -1
  584. package/dist/utils/hooks/useDetectSSOCode.js.map +1 -1
  585. package/dist/utils/hooks/useDirectDownloadHandler.js.map +1 -1
  586. package/dist/utils/hooks/useGetGoalData.js.map +1 -1
  587. package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
  588. package/dist/utils/hooks/useImageUrlUtils.js.map +1 -1
  589. package/dist/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.js.map +1 -1
  590. package/dist/utils/hooks/useImmutableTableQuery/useTableQueryReducer.js.map +1 -1
  591. package/dist/utils/hooks/useIsBot.js.map +1 -1
  592. package/dist/utils/hooks/useListState.js.map +1 -1
  593. package/dist/utils/hooks/useLogin.d.ts.map +1 -1
  594. package/dist/utils/hooks/useLogin.js +53 -52
  595. package/dist/utils/hooks/useLogin.js.map +1 -1
  596. package/dist/utils/hooks/useMutuallyExclusiveState.js.map +1 -1
  597. package/dist/utils/hooks/useOverlay.js.map +1 -1
  598. package/dist/utils/hooks/usePreFetchResource.js.map +1 -1
  599. package/dist/utils/hooks/useQuerySearchParam.js.map +1 -1
  600. package/dist/utils/hooks/useScrollFadeTransition.js.map +1 -1
  601. package/dist/utils/hooks/useSet.js.map +1 -1
  602. package/dist/utils/hooks/useSourceAppConfigs.js.map +1 -1
  603. package/dist/utils/hooks/useTableImageUrl.js.map +1 -1
  604. package/dist/utils/hooks/useUploadFileEntity/useCreatePathsAndGetParentId.js.map +1 -1
  605. package/dist/utils/hooks/useUploadFileEntity/useLinkFileEntityToURL.js.map +1 -1
  606. package/dist/utils/hooks/useUploadFileEntity/usePrepareFileEntityUpload.js.map +1 -1
  607. package/dist/utils/hooks/useUploadFileEntity/useTrackFileUploads.js.map +1 -1
  608. package/dist/utils/hooks/useUploadFileEntity/useUploadFileEntities.js.map +1 -1
  609. package/dist/utils/hooks/useUploadFileEntity/useUploadFiles.js.map +1 -1
  610. package/dist/utils/hooks/useUploadFileEntity/willUploadsExceedStorageLimit.js.map +1 -1
  611. package/dist/utils/html/TargetEnum.js.map +1 -1
  612. package/dist/utils/jsonschema/SchemaAnnotationUtils.js.map +1 -1
  613. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"applyModelChange.js","names":["DataGridRow","GridModel","ReplicaSelectionModel","SchemaPropertiesMap","s","isEqual","ModelChange","type","rowIndex","rowData","count","updatedData","replicaId","selection","getDefaultValueForProperty","row","property","schemaPropertyInfo","value","Object","hasOwn","isRequired","undefined","applyModelChange","model","change","rowsArr","api","arr","columnNames","getSnapshot","map","name","con","ins","obj","data","vec","metadata","del","currentRowData","rows","entries","forEach","key","startsWith","colIndex","indexOf","rowVec","String","set","has","add"],"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'\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\nexport function getDefaultValueForProperty(\n row: DataGridRow,\n property: string,\n schemaPropertyInfo: SchemaPropertiesMap,\n) {\n let value\n if (Object.hasOwn(row, property)) {\n value = row[property]\n } else {\n // Inspect the schema. If the property is required, it should be `null`\n // Otherwise, the property is optional. It should be undefined to be valid against the JSON Schema\n if (schemaPropertyInfo[property]?.isRequired) {\n value = null\n } else {\n value = undefined\n }\n }\n return value\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 // Only write cells whose value actually changed to avoid stamping\n // the local replica's SID on unmodified cells.\n if (isEqual(currentRowData?.[colIndex], value)) 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(value)]])\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 }\n}\n"],"mappings":";;;AAsBA,SAAgBc,EACdC,GACAC,GACAC,GACA;CACA,IAAIC;AAYJ,QAXA,AAQIA,IARAC,OAAOC,OAAOL,GAAKC,EAAS,GACtBD,EAAIC,KAIRC,EAAmBD,IAAWK,aACxB,OAEAC,KAAAA,GAGLJ;;AAST,SAAgBK,EACdC,GACAC,GACAR,GACA;CACA,IAAMS,IAAUF,EAAMG,IAAIC,IAAI,CAAC,OAAO,CAAC,EACjC,EAAEC,mBAAgBL,EAAMG,IAAIG,aAAa;AAE/C,SAAQL,EAAOlB,MAAf;EACE,KAAK,UAAU;GAEb,IAAME,IAAUoB,EAAYE,KAAIC,MAC9B5B,EAAE6B,IACAnB,EAA2BW,EAAOhB,SAASuB,GAAMf,EACnD,CACF,CAAC;AAEDS,MAASQ,IAAIT,EAAOjB,UAAU,CAC5BJ,EAAE+B,IAAI;IAAEC,MAAMhC,EAAEiC,IAAI,GAAG5B,EAAQ;IAAE6B,UAAUlC,EAAE+B,IAAI,EAAE,CAAA;IAAG,CAAC,CACxD,CAAC;AACF;;EAGF,KAAK;AACHT,MAASa,IAAId,EAAOjB,UAAUiB,EAAOf,SAAS,EAAE;AAChD;EAEF,KAAK,UAAU;GACb,IAAM8B,IAAiBhB,EAAMG,IAAIG,aAAa,CAACW,KAAKhB,EAAOjB,WAAW4B;AACtEjB,UAAOuB,QAAQjB,EAAOd,YAAY,CAACgC,SAAS,CAACC,GAAK1B,OAAW;AAC3D,QAAI0B,EAAIC,WAAW,IAAI,CAAE;IACzB,IAAMC,IAAWjB,EAAYkB,QAAQH,EAAI;AACzC,QAAIE,MAAa,IAAI;AAGnB,SAAIzC,EAAQmC,IAAiBM,IAAW5B,EAAM,CAAE;AAEjCM,OAAMG,IAAIU,IAAI;MAC3B;MACAY,OAAOxB,EAAOjB,SAAS;MACvB;MACD,CAAC,EAEM0C,IAAI,CAAC,CAACJ,GAAU1C,EAAE6B,IAAIf,EAAM,CAAC,CAAC,CAAC;;KAEzC;AACF;;EAEF,KAAK;AAKHM,GAJKA,EAAMG,IAAIQ,KAAK,CAACgB,IAAI,YAAY,IAEnC3B,EAAMG,IAAIQ,KAAK,CAACiB,IAAI,CAAC,YAAY,EAAEhD,EAAE+B,IAAI,EAAE,CAAC,CAAC,EAE/CX,EAAMG,IACHQ,IAAI,CAAC,YAAY,CAAC,CAClBe,IAAI,GAAGzB,EAAOb,YAAYR,EAAE6B,IAAIR,EAAOZ,UAAS,EAAG,CAAC;AAEvD"}
1
+ {"version":3,"file":"applyModelChange.js","names":["DataGridRow","GridModel","ReplicaSelectionModel","SchemaPropertiesMap","s","isEqual","coerceModelCellValue","getEmptyValue","ModelChange","type","rowIndex","rowData","count","updatedData","replicaId","selection","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"],"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\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 }\n}\n"],"mappings":";;;;;AAwBA,SAAgBgB,EACdC,GACAC,GACAC,GACA;CACA,IAAMC,IAAOD,EAAmBD;AAKhC,QAJIG,OAAOC,OAAOL,GAAKC,EAAS,GACvBZ,EAAqBW,EAAIC,IAAWE,EAAK,GAG3Cb,EAAca,GAAMG,WAAW;;AASxC,SAAgBC,EACdC,GACAC,GACAP,GACA;CACA,IAAMQ,IAAUF,EAAMG,IAAIC,IAAI,CAAC,OAAO,CAAC,EACjC,EAAEC,mBAAgBL,EAAMG,IAAIG,aAAa;AAE/C,SAAQL,EAAOjB,MAAf;EACE,KAAK,UAAU;GAEb,IAAME,IAAUmB,EAAYE,KAAIC,MAC9B7B,EAAE8B,IACAlB,EAA2BU,EAAOf,SAASsB,GAAMd,EACnD,CACF,CAAC;AAEDQ,MAASQ,IAAIT,EAAOhB,UAAU,CAC5BN,EAAEgC,IAAI;IAAEC,MAAMjC,EAAEkC,IAAI,GAAG3B,EAAQ;IAAE4B,UAAUnC,EAAEgC,IAAI,EAAE,CAAA;IAAG,CAAC,CACxD,CAAC;AACF;;EAGF,KAAK;AACHT,MAASa,IAAId,EAAOhB,UAAUgB,EAAOd,SAAS,EAAE;AAChD;EAEF,KAAK,UAAU;GACb,IAAM6B,IAAiBhB,EAAMG,IAAIG,aAAa,CAACW,KAAKhB,EAAOhB,WAAW2B;AACtEhB,UAAOsB,QAAQjB,EAAOb,YAAY,CAAC+B,SAAS,CAACC,GAAKC,OAAW;AAC3D,QAAID,EAAIE,WAAW,IAAI,CAAE;IACzB,IAAMC,IAAWlB,EAAYmB,QAAQJ,EAAI;AACzC,QAAIG,MAAa,IAAI;KAKnB,IAAME,IAAe5C,EACnBwC,GACA3B,EAAmB0B,GACpB;AAGD,SAAIxC,EAAQoC,IAAiBO,IAAWE,EAAa,CAAE;AAExCzB,OAAMG,IAAIU,IAAI;MAC3B;MACAc,OAAO1B,EAAOhB,SAAS;MACvB;MACD,CAEDyC,EAAQE,IAAI,CAAC,CAACL,GAAU5C,EAAE8B,IAAIgB,EAAa,CAAC,CAAC,CAAC;;KAEhD;AACF;;EAEF,KAAK;AAKHzB,GAJKA,EAAMG,IAAIQ,KAAK,CAACkB,IAAI,YAAY,IAEnC7B,EAAMG,IAAIQ,KAAK,CAACmB,IAAI,CAAC,YAAY,EAAEnD,EAAEgC,IAAI,EAAE,CAAC,CAAC,EAE/CX,EAAMG,IACHQ,IAAI,CAAC,YAAY,CAAC,CAClBiB,IAAI,GAAG3B,EAAOZ,YAAYV,EAAE8B,IAAIR,EAAOX,UAAS,EAAG,CAAC;AAEvD"}
@@ -1,5 +1,6 @@
1
1
  import { EnumeratedValue } from '@/utils/jsonschema/getEnumeratedValues';
2
2
  import { FlatTypeInfo } from '@/utils/jsonschema/getType';
3
+ import { SchemaPropertyInfo } from '@/utils/jsonschema/getSchemaPropertyInfo';
3
4
  import { Column } from '@sage-bionetworks/react-datasheet-grid';
4
5
  type ColumnConfig = {
5
6
  columnName: string;
@@ -12,6 +13,13 @@ type ColumnConfig = {
12
13
  showPinIcon?: boolean;
13
14
  isPinned?: boolean;
14
15
  onTogglePin?: () => void;
16
+ /**
17
+ * Optional column-level schema info. When provided, paste behavior coerces
18
+ * empty pasted cells to the schema-correct blank (undefined for optional
19
+ * columns, null for required columns). Omit to preserve the column impl's
20
+ * default paste behavior.
21
+ */
22
+ schemaPropertyInfo?: SchemaPropertyInfo;
15
23
  };
16
24
  export declare function createColumn(config: ColumnConfig): Column;
17
25
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"columnFactory.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/utils/columnFactory.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAGL,MAAM,EAIP,MAAM,wCAAwC,CAAA;AAqE/C,KAAK,YAAY,GAAG;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAA;IAC7B,gBAAgB,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAAA;IACrD,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;CACzB,CAAA;AAkLD,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAGzD"}
1
+ {"version":3,"file":"columnFactory.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/utils/columnFactory.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAA;AAC7E,OAAO,EAGL,MAAM,EAIP,MAAM,wCAAwC,CAAA;AAuE/C,KAAK,YAAY,GAAG;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAA;IAC7B,gBAAgB,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAAA;IACrD,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;CACxC,CAAA;AAuLD,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAGzD"}
@@ -3,21 +3,23 @@ import { autocompleteColumn as t } from "../columns/AutocompleteColumn.js";
3
3
  import { autocompleteMultipleEnumColumn as n } from "../columns/AutocompleteMultipleEnumColumn.js";
4
4
  import { calculateDefaultColumnWidth as r } from "./calculateColumnWidth.js";
5
5
  import { ColumnHeaderWithTooltip as i } from "../components/ColumnHeaderWithTooltip.js";
6
- import { Tooltip as a } from "@mui/material";
7
- import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
8
- import { SmartToyTwoTone as l } from "@mui/icons-material";
9
- import { c as u } from "react/compiler-runtime";
10
- import { createTextColumn as d, floatColumn as f, keyColumn as p } from "@sage-bionetworks/react-datasheet-grid";
6
+ import { getEmptyValue as a } from "./getEmptyValue.js";
7
+ import { wrapPasteValueWithSchemaCoercion as o } from "./schemaAwarePasteValue.js";
8
+ import { Tooltip as s } from "@mui/material";
9
+ import { Fragment as c, jsx as l, jsxs as u } from "react/jsx-runtime";
10
+ import { SmartToyTwoTone as d } from "@mui/icons-material";
11
+ import { c as f } from "react/compiler-runtime";
12
+ import { createTextColumn as p, floatColumn as m, keyColumn as h } from "@sage-bionetworks/react-datasheet-grid";
11
13
  //#region src/components/DataGrid/utils/columnFactory.tsx
12
- function m(e, t) {
14
+ function g(e, t) {
13
15
  function n(n) {
14
- let r = u(13), i = n.rowData.__cellChangeInfo?.[t], d = i?.category === "own-agent" || i?.category === "other-agent", f;
15
- r[0] === n ? f = r[1] : (f = /* @__PURE__ */ s(e, { ...n }), r[0] = n, r[1] = f);
16
+ let r = f(13), i = n.rowData.__cellChangeInfo?.[t], a = i?.category === "own-agent" || i?.category === "other-agent", o;
17
+ r[0] === n ? o = r[1] : (o = /* @__PURE__ */ l(e, { ...n }), r[0] = n, r[1] = o);
16
18
  let p;
17
- r[2] !== i || r[3] !== d ? (p = i && !d && /* @__PURE__ */ s(a, {
19
+ r[2] !== i || r[3] !== a ? (p = i && !a && /* @__PURE__ */ l(s, {
18
20
  title: i.tooltipText,
19
21
  placement: "top-end",
20
- children: /* @__PURE__ */ s("div", { style: {
22
+ children: /* @__PURE__ */ l("div", { style: {
21
23
  position: "absolute",
22
24
  top: 0,
23
25
  right: 0,
@@ -26,12 +28,12 @@ function m(e, t) {
26
28
  zIndex: 21,
27
29
  pointerEvents: "auto"
28
30
  } })
29
- }), r[2] = i, r[3] = d, r[4] = p) : p = r[4];
31
+ }), r[2] = i, r[3] = a, r[4] = p) : p = r[4];
30
32
  let m;
31
- r[5] !== i || r[6] !== d || r[7] !== n.focus ? (m = d && !n.focus && /* @__PURE__ */ s(a, {
33
+ r[5] !== i || r[6] !== a || r[7] !== n.focus ? (m = a && !n.focus && /* @__PURE__ */ l(s, {
32
34
  title: i.tooltipText,
33
35
  placement: "left",
34
- children: /* @__PURE__ */ s(l, { sx: {
36
+ children: /* @__PURE__ */ l(d, { sx: {
35
37
  fontSize: "1em",
36
38
  alignSelf: "center",
37
39
  flexShrink: 0,
@@ -41,73 +43,74 @@ function m(e, t) {
41
43
  color: "grey.400",
42
44
  backgroundColor: "transparent"
43
45
  } })
44
- }), r[5] = i, r[6] = d, r[7] = n.focus, r[8] = m) : m = r[8];
46
+ }), r[5] = i, r[6] = a, r[7] = n.focus, r[8] = m) : m = r[8];
45
47
  let h;
46
- return r[9] !== f || r[10] !== p || r[11] !== m ? (h = /* @__PURE__ */ c(o, { children: [
47
- f,
48
+ return r[9] !== o || r[10] !== p || r[11] !== m ? (h = /* @__PURE__ */ u(c, { children: [
49
+ o,
48
50
  p,
49
51
  m
50
- ] }), r[9] = f, r[10] = p, r[11] = m, r[12] = h) : h = r[12], h;
52
+ ] }), r[9] = o, r[10] = p, r[11] = m, r[12] = h) : h = r[12], h;
51
53
  }
52
54
  return n.displayName = `CellWithTooltip(${t})`, n;
53
55
  }
54
- function h(e) {
56
+ function _(e) {
55
57
  return e ? "header-cell-required" : "header-cell";
56
58
  }
57
- function g(e, t) {
59
+ function v(e, t) {
58
60
  return ({ rowData: n }) => ({
59
61
  ...n,
60
- [e]: t ? null : void 0
62
+ [e]: a(t)
61
63
  });
62
64
  }
63
- function _(e) {
65
+ function y(e) {
64
66
  return (t) => {
65
67
  let n = t.trim();
66
- return n === "" ? e ? null : void 0 : n;
68
+ return n === "" ? a(e) : n;
67
69
  };
68
70
  }
69
- function v(e, t) {
71
+ function b(e, t) {
70
72
  let n = {
71
73
  showPinIcon: e.showPinIcon,
72
74
  hasDescription: !!e.description
73
- }, a = e.customWidth ?? r(e.columnName, void 0, n), o = p(e.columnName, t);
75
+ }, a = e.customWidth ?? r(e.columnName, void 0, n), s = h(e.columnName, t);
74
76
  return {
75
- ...o,
76
- component: m(o.component, e.columnName),
77
- title: /* @__PURE__ */ s(i, {
77
+ ...s,
78
+ component: g(s.component, e.columnName),
79
+ title: /* @__PURE__ */ l(i, {
78
80
  name: e.columnName,
79
81
  description: e.description,
80
82
  showPinIcon: e.showPinIcon,
81
83
  isPinned: e.isPinned,
82
84
  onTogglePin: e.onTogglePin
83
85
  }),
84
- headerClassName: h(e.isRequired),
86
+ headerClassName: _(e.isRequired),
85
87
  minWidth: a,
86
88
  basis: a,
87
89
  grow: 0,
88
90
  shrink: 0,
89
91
  disabled: e.disabled,
90
- deleteValue: g(e.columnName, e.isRequired),
92
+ deleteValue: v(e.columnName, e.isRequired),
93
+ pasteValue: o(s.pasteValue, e.columnName, e.schemaPropertyInfo),
91
94
  stickyLeft: e.isPinned
92
95
  };
93
96
  }
94
- var y = {
95
- multipleEnum: (e) => v(e, n({
97
+ var x = {
98
+ multipleEnum: (e) => b(e, n({
96
99
  choices: e.enumeratedValues ?? [],
97
100
  colType: e.typeInfo?.type || null,
98
101
  limitTags: 3,
99
- clearValue: e.isRequired ? null : void 0
102
+ clearValue: a(e.isRequired)
100
103
  })),
101
- boolean: (e) => v(e, t({
104
+ boolean: (e) => b(e, t({
102
105
  choices: [!0, !1],
103
106
  colType: "boolean",
104
- clearValue: e.isRequired ? null : void 0
107
+ clearValue: a(e.isRequired)
105
108
  })),
106
- number: (e) => v(e, f),
107
- enumerated: (e) => v(e, t({
109
+ number: (e) => b(e, m),
110
+ enumerated: (e) => b(e, t({
108
111
  choices: e.enumeratedValues ?? [],
109
112
  colType: e.typeInfo?.type || null,
110
- clearValue: e.isRequired ? null : void 0
113
+ clearValue: a(e.isRequired)
111
114
  })),
112
115
  "date-time": (t) => {
113
116
  let n = e({ colType: t.typeInfo?.type || null }), i = {
@@ -119,27 +122,27 @@ var y = {
119
122
  enumeratedValues: null
120
123
  }, i);
121
124
  return {
122
- ...v(t, n),
125
+ ...b(t, n),
123
126
  minWidth: a,
124
127
  basis: a
125
128
  };
126
129
  },
127
130
  text: (e) => ({
128
- ...v(e, d({
131
+ ...b(e, p({
129
132
  continuousUpdates: !1,
130
133
  deletedValue: void 0,
131
- parseUserInput: _(e.isRequired)
134
+ parseUserInput: y(e.isRequired)
132
135
  })),
133
136
  cellClassName: "MuiInputBase-input"
134
137
  })
135
138
  };
136
- function b(e, t) {
139
+ function S(e, t) {
137
140
  return e ? e.format === "date-time" ? "date-time" : e.isArray ? "multipleEnum" : e.type === "boolean" ? "boolean" : e.type === "number" || e.type === "integer" ? "number" : t && t.length > 0 ? "enumerated" : "text" : t && t.length > 0 ? "enumerated" : "text";
138
141
  }
139
- function x(e) {
140
- return y[b(e.typeInfo, e.enumeratedValues)](e);
142
+ function C(e) {
143
+ return x[S(e.typeInfo, e.enumeratedValues)](e);
141
144
  }
142
145
  //#endregion
143
- export { x as createColumn };
146
+ export { C as createColumn };
144
147
 
145
148
  //# sourceMappingURL=columnFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"columnFactory.js","names":["dateTimeColumn","EnumeratedValue","FlatTypeInfo","CellComponent","CellProps","Column","createTextColumn","floatColumn","keyColumn","autocompleteColumn","autocompleteMultipleEnumColumn","calculateDefaultColumnWidth","HeaderOptions","ColumnHeaderWithTooltip","Tooltip","SmartToyTwoTone","DataGridRow","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","getHeaderClassName","createDeleteValue","Record","undefined","createParseUserInput","value","trimmedValue","trim","createBaseColumn","config","columnImpl","headerOptions","hasDescription","keyed","component","title","headerClassName","minWidth","basis","grow","shrink","deleteValue","stickyLeft","COLUMN_FACTORIES","multipleEnum","choices","colType","type","limitTags","clearValue","boolean","number","enumerated","date-time","text","continuousUpdates","deletedValue","parseUserInput","cellClassName","getColumnType","length","format","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 {\n CellComponent,\n CellProps,\n Column,\n createTextColumn,\n floatColumn,\n keyColumn,\n} from '@sage-bionetworks/react-datasheet-grid'\nimport { autocompleteColumn } from '../columns/AutocompleteColumn'\nimport { autocompleteMultipleEnumColumn } from '../columns/AutocompleteMultipleEnumColumn'\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'\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}\n\nfunction getHeaderClassName(isRequired: boolean): string {\n return isRequired ? 'header-cell-required' : 'header-cell'\n}\n\nfunction createDeleteValue(columnName: string, isRequired?: boolean) {\n return ({ rowData }: { rowData: Record<string, unknown> }) => ({\n ...rowData,\n [columnName]: isRequired ? null : undefined,\n })\n}\n\nfunction createParseUserInput(isRequired?: boolean) {\n return (value: string) => {\n const trimmedValue = value.trim()\n if (trimmedValue === '') {\n return isRequired ? null : undefined\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 showPinIcon={config.showPinIcon}\n isPinned={config.isPinned}\n onTogglePin={config.onTogglePin}\n />\n ),\n headerClassName: getHeaderClassName(config.isRequired),\n minWidth: width,\n basis: width,\n grow: 0,\n shrink: 0,\n disabled: config.disabled,\n deleteValue: createDeleteValue(config.columnName, config.isRequired),\n stickyLeft: config.isPinned,\n }\n}\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: config.isRequired ? null : undefined,\n }),\n )\n },\n\n boolean: (config: ColumnConfig) => {\n return createBaseColumn(\n config,\n autocompleteColumn({\n choices: [true, false],\n colType: 'boolean',\n clearValue: config.isRequired ? null : undefined,\n }),\n )\n },\n\n number: (config: ColumnConfig) => {\n return createBaseColumn(config, floatColumn)\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: config.isRequired ? null : undefined,\n }),\n )\n },\n\n 'date-time': (config: ColumnConfig) => {\n const columnImpl = dateTimeColumn({\n colType: config.typeInfo?.type || null,\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-time') {\n return 'date-time'\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","floatColumn","keyColumn","autocompleteColumn","autocompleteMultipleEnumColumn","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","schemaPropertyInfo","getHeaderClassName","createDeleteValue","Record","createParseUserInput","value","trimmedValue","trim","createBaseColumn","config","columnImpl","headerOptions","hasDescription","undefined","keyed","component","title","headerClassName","minWidth","basis","grow","shrink","deleteValue","pasteValue","stickyLeft","COLUMN_FACTORIES","multipleEnum","choices","colType","type","limitTags","clearValue","boolean","number","enumerated","date-time","text","continuousUpdates","deletedValue","parseUserInput","cellClassName","getColumnType","length","format","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 floatColumn,\n keyColumn,\n} from '@sage-bionetworks/react-datasheet-grid'\nimport { autocompleteColumn } from '../columns/AutocompleteColumn'\nimport { autocompleteMultipleEnumColumn } from '../columns/AutocompleteMultipleEnumColumn'\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 /**\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 getHeaderClassName(isRequired: boolean): string {\n return isRequired ? 'header-cell-required' : 'header-cell'\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 showPinIcon={config.showPinIcon}\n isPinned={config.isPinned}\n onTogglePin={config.onTogglePin}\n />\n ),\n headerClassName: getHeaderClassName(config.isRequired),\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\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(config, floatColumn)\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 'date-time': (config: ColumnConfig) => {\n const columnImpl = dateTimeColumn({\n colType: config.typeInfo?.type || null,\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-time') {\n return 'date-time'\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":"computeReplicaSelectionModel.js","names":["CrdtId","GridModel","ReplicaSelectionModel","ArrApi","SelectionWithId","computeReplicaSelectionModel","selection","model","replicaSelectionModel","modelSnapshot","api","getSnapshot","isSelectAll","rows","min","row","max","rowSelectAll","rowsArr","arr","rowSelection","getCrdtIdsForArrayRange","columnOrder","col","columnSelectAll","columnOrderArr","columnSelection","arrSnapshot","length","array","crdtIds","i","findChunkResult","node","findChunk","chunk","offset","push","rep","id","sid","seq","time","console","warn"],"sources":["../../../../src/components/DataGrid/utils/computeReplicaSelectionModel.ts"],"sourcesContent":["import {\n CrdtId,\n GridModel,\n ReplicaSelectionModel,\n} from '@/components/DataGrid/DataGridTypes'\nimport { ArrApi } from 'json-joy'\nimport { SelectionWithId } from '@sage-bionetworks/react-datasheet-grid'\n\n/**\n * Compute the ReplicaSelectionModel that should be attached to the grid model\n * @param selection the selection provided by react-datasheet-grid\n * @param model the current Data Grid CRDT Model\n */\nexport default function computeReplicaSelectionModel(\n selection: SelectionWithId,\n model: GridModel,\n): ReplicaSelectionModel {\n const replicaSelectionModel: ReplicaSelectionModel = {}\n const modelSnapshot = model.api.getSnapshot()\n if (isSelectAll(modelSnapshot.rows, selection.min.row, selection.max.row)) {\n replicaSelectionModel.rowSelectAll = true\n } else {\n // Get the arr element CrdtIds from the rows array\n const rowsArr = model.api.arr(['rows'])\n replicaSelectionModel.rowSelection = getCrdtIdsForArrayRange(\n rowsArr,\n selection.min.row,\n selection.max.row,\n )\n }\n\n if (\n isSelectAll(modelSnapshot.columnOrder, selection.min.col, selection.max.col)\n ) {\n replicaSelectionModel.columnSelectAll = true\n } else {\n // Get the arr element CrdtIds from the columnOrder array\n const columnOrderArr = model.api.arr(['columnOrder'])\n replicaSelectionModel.columnSelection = getCrdtIdsForArrayRange(\n columnOrderArr,\n selection.min.col,\n selection.max.col,\n )\n }\n\n return replicaSelectionModel\n}\n\nfunction isSelectAll(arrSnapshot: unknown[], min: number, max: number) {\n // If the min and max cover the entire array, it's a select all\n return min === 0 && max === arrSnapshot.length - 1\n}\n\nfunction getCrdtIdsForArrayRange(array: ArrApi, min: number, max: number) {\n const crdtIds: CrdtId[] = []\n for (let i = min; i <= max; i++) {\n const findChunkResult = array.node.findChunk(i)\n if (findChunkResult) {\n const [chunk, offset] = findChunkResult\n crdtIds.push({ rep: chunk.id.sid, seq: chunk.id.time + offset })\n } else {\n console.warn(\n `getCrdtIdsForArrayRange: No chunk found for array index ${i}. This may indicate an unexpected state.`,\n )\n }\n }\n return crdtIds\n}\n"],"mappings":";AAaA,SAAwBK,EACtBC,GACAC,GACuB;CACvB,IAAMC,IAA+C,EAAE,EACjDC,IAAgBF,EAAMG,IAAIC,aAAa;AA2B7C,QA1BIC,EAAYH,EAAcI,MAAMP,EAAUQ,IAAIC,KAAKT,EAAUU,IAAID,IAAI,GACvEP,EAAsBS,eAAe,KAIrCT,EAAsBY,eAAeC,EADrBd,EAAMG,IAAIS,IAAI,CAAC,OAAO,CAAC,EAGrCb,EAAUQ,IAAIC,KACdT,EAAUU,IAAID,IACf,EAIDH,EAAYH,EAAca,aAAahB,EAAUQ,IAAIS,KAAKjB,EAAUU,IAAIO,IAAI,GAE5Ef,EAAsBgB,kBAAkB,KAIxChB,EAAsBkB,kBAAkBL,EADjBd,EAAMG,IAAIS,IAAI,CAAC,cAAc,CAAC,EAGnDb,EAAUQ,IAAIS,KACdjB,EAAUU,IAAIO,IACf,EAGIf;;AAGT,SAASI,EAAYe,GAAwBb,GAAaE,GAAa;AAErE,QAAOF,MAAQ,KAAKE,MAAQW,EAAYC,SAAS;;AAGnD,SAASP,EAAwBQ,GAAef,GAAaE,GAAa;CACxE,IAAMc,IAAoB,EAAE;AAC5B,MAAK,IAAIC,IAAIjB,GAAKiB,KAAKf,GAAKe,KAAK;EAC/B,IAAMC,IAAkBH,EAAMI,KAAKC,UAAUH,EAAE;AAC/C,MAAIC,GAAiB;GACnB,IAAM,CAACG,GAAOC,KAAUJ;AACxBF,KAAQO,KAAK;IAAEC,KAAKH,EAAMI,GAAGC;IAAKC,KAAKN,EAAMI,GAAGG,OAAON;IAAQ,CAAC;QAEhEO,SAAQC,KACN,2DAA2Db,EAAC,0CAC7D;;AAGL,QAAOD"}
1
+ {"version":3,"file":"computeReplicaSelectionModel.js","names":["CrdtId","GridModel","ReplicaSelectionModel","ArrApi","SelectionWithId","computeReplicaSelectionModel","selection","model","replicaSelectionModel","modelSnapshot","api","getSnapshot","isSelectAll","rows","min","row","max","rowSelectAll","rowsArr","arr","rowSelection","getCrdtIdsForArrayRange","columnOrder","col","columnSelectAll","columnOrderArr","columnSelection","arrSnapshot","length","array","crdtIds","i","findChunkResult","node","findChunk","chunk","offset","push","rep","id","sid","seq","time","console","warn"],"sources":["../../../../src/components/DataGrid/utils/computeReplicaSelectionModel.ts"],"sourcesContent":["import {\n CrdtId,\n GridModel,\n ReplicaSelectionModel,\n} from '@/components/DataGrid/DataGridTypes'\nimport { ArrApi } from 'json-joy'\nimport { SelectionWithId } from '@sage-bionetworks/react-datasheet-grid'\n\n/**\n * Compute the ReplicaSelectionModel that should be attached to the grid model\n * @param selection the selection provided by react-datasheet-grid\n * @param model the current Data Grid CRDT Model\n */\nexport default function computeReplicaSelectionModel(\n selection: SelectionWithId,\n model: GridModel,\n): ReplicaSelectionModel {\n const replicaSelectionModel: ReplicaSelectionModel = {}\n const modelSnapshot = model.api.getSnapshot()\n if (isSelectAll(modelSnapshot.rows, selection.min.row, selection.max.row)) {\n replicaSelectionModel.rowSelectAll = true\n } else {\n // Get the arr element CrdtIds from the rows array\n const rowsArr = model.api.arr(['rows'])\n replicaSelectionModel.rowSelection = getCrdtIdsForArrayRange(\n rowsArr,\n selection.min.row,\n selection.max.row,\n )\n }\n\n if (\n isSelectAll(modelSnapshot.columnOrder, selection.min.col, selection.max.col)\n ) {\n replicaSelectionModel.columnSelectAll = true\n } else {\n // Get the arr element CrdtIds from the columnOrder array\n const columnOrderArr = model.api.arr(['columnOrder'])\n replicaSelectionModel.columnSelection = getCrdtIdsForArrayRange(\n columnOrderArr,\n selection.min.col,\n selection.max.col,\n )\n }\n\n return replicaSelectionModel\n}\n\nfunction isSelectAll(arrSnapshot: unknown[], min: number, max: number) {\n // If the min and max cover the entire array, it's a select all\n return min === 0 && max === arrSnapshot.length - 1\n}\n\nfunction getCrdtIdsForArrayRange(array: ArrApi, min: number, max: number) {\n const crdtIds: CrdtId[] = []\n for (let i = min; i <= max; i++) {\n const findChunkResult = array.node.findChunk(i)\n if (findChunkResult) {\n const [chunk, offset] = findChunkResult\n crdtIds.push({ rep: chunk.id.sid, seq: chunk.id.time + offset })\n } else {\n console.warn(\n `getCrdtIdsForArrayRange: No chunk found for array index ${i}. This may indicate an unexpected state.`,\n )\n }\n }\n return crdtIds\n}\n"],"mappings":";AAaA,SAAwBK,EACtBC,GACAC,GACuB;CACvB,IAAMC,IAA+C,EAAE,EACjDC,IAAgBF,EAAMG,IAAIC,aAAa;AA2B7C,QA1BIC,EAAYH,EAAcI,MAAMP,EAAUQ,IAAIC,KAAKT,EAAUU,IAAID,IAAI,GACvEP,EAAsBS,eAAe,KAIrCT,EAAsBY,eAAeC,EADrBd,EAAMG,IAAIS,IAAI,CAAC,OAAO,CAEpCD,EACAZ,EAAUQ,IAAIC,KACdT,EAAUU,IAAID,IACf,EAIDH,EAAYH,EAAca,aAAahB,EAAUQ,IAAIS,KAAKjB,EAAUU,IAAIO,IAAI,GAE5Ef,EAAsBgB,kBAAkB,KAIxChB,EAAsBkB,kBAAkBL,EADjBd,EAAMG,IAAIS,IAAI,CAAC,cAAc,CAElDM,EACAnB,EAAUQ,IAAIS,KACdjB,EAAUU,IAAIO,IACf,EAGIf;;AAGT,SAASI,EAAYe,GAAwBb,GAAaE,GAAa;AAErE,QAAOF,MAAQ,KAAKE,MAAQW,EAAYC,SAAS;;AAGnD,SAASP,EAAwBQ,GAAef,GAAaE,GAAa;CACxE,IAAMc,IAAoB,EAAE;AAC5B,MAAK,IAAIC,IAAIjB,GAAKiB,KAAKf,GAAKe,KAAK;EAC/B,IAAMC,IAAkBH,EAAMI,KAAKC,UAAUH,EAAE;AAC/C,MAAIC,GAAiB;GACnB,IAAM,CAACG,GAAOC,KAAUJ;AACxBF,KAAQO,KAAK;IAAEC,KAAKH,EAAMI,GAAGC;IAAKC,KAAKN,EAAMI,GAAGG,OAAON;IAAQ,CAAC;QAEhEO,SAAQC,KACN,2DAA2Db,EAAC,0CAC7D;;AAGL,QAAOD"}
@@ -1 +1 @@
1
- {"version":3,"file":"extractColumnValidationMessages.js","names":["extractColumnValidationMessages","messages","Map","columnMap","regex","raw","str","trimStart","match","columnName","trim","message","requiredKeyMatch","has","set","get","push"],"sources":["../../../../src/components/DataGrid/utils/extractColumnValidationMessages.ts"],"sourcesContent":["/**\n * Extracts column name and validation message from validation message strings.\n *\n * Example:\n * extractColumnValidationMessages([\"#/platform: null is not a valid enum value\"])\n * -> Map { \"platform\" => [\"null is not a valid enum value\"] }\n *\n * extractColumnValidationMessages([\"#/requiredNumberArrayColumn/0: some error\"])\n * -> Map { \"requiredNumberArrayColumn\" => [\"some error\"] }\n *\n * extractColumnValidationMessages([\"#: row-level error\"])\n * -> Map { \"_row\" => [\"row-level error\"] }\n *\n * extractColumnValidationMessages([\"#: required key [missingColumn] not found\"])\n * -> Map { \"missingColumn\" => [\"required key [missingColumn] not found\"] }\n */\nexport function extractColumnValidationMessages(\n messages: string[],\n): Map<string, string[]> {\n const columnMap = new Map<string, string[]>()\n // Validation message format: \"#/columnName: message\"\n // or for array items: \"#/columnName/0: message\"\n // or for object (row) level: \"#: message\"\n const regex = /^#(?:\\/([^/:]+)(?:\\/\\d+)?)?:\\s*(.*)$/\n\n for (const raw of messages) {\n if (typeof raw !== 'string') continue\n const str = raw.trimStart()\n const match = str.match(regex)\n if (match) {\n let columnName = match[1]?.trim() ?? '_row'\n const message = match[2].trim()\n if (columnName === '_row') {\n const requiredKeyMatch = message.match(\n /^required key \\[([^\\]]+)\\] not found$/i,\n )\n if (requiredKeyMatch) {\n columnName = requiredKeyMatch[1]\n }\n }\n\n if (!columnMap.has(columnName)) {\n columnMap.set(columnName, [])\n }\n columnMap.get(columnName)!.push(message)\n }\n }\n\n return columnMap\n}\n"],"mappings":";AAgBA,SAAgBA,EACdC,GACuB;CACvB,IAAME,oBAAY,IAAID,KAAuB,EAIvCE,IAAQ;AAEd,MAAK,IAAMC,KAAOJ,GAAU;AAC1B,MAAI,OAAOI,KAAQ,SAAU;EAE7B,IAAMG,IADMH,EAAIE,WAAW,CACTC,MAAMJ,EAAM;AAC9B,MAAII,GAAO;GACT,IAAIC,IAAaD,EAAM,IAAIE,MAAM,IAAI,QAC/BC,IAAUH,EAAM,GAAGE,MAAM;AAC/B,OAAID,MAAe,QAAQ;IACzB,IAAMG,IAAmBD,EAAQH,MAC/B,yCACD;AACD,IAAII,MACFH,IAAaG,EAAiB;;AAOlCT,GAHKA,EAAUU,IAAIJ,EAAW,IAC5BN,EAAUW,IAAIL,GAAY,EAAE,CAAC,EAE/BN,EAAUY,IAAIN,EAAW,CAAEO,KAAKL,EAAQ;;;AAI5C,QAAOR"}
1
+ {"version":3,"file":"extractColumnValidationMessages.js","names":["extractColumnValidationMessages","messages","Map","columnMap","regex","raw","str","trimStart","match","columnName","trim","message","requiredKeyMatch","has","set","get","push"],"sources":["../../../../src/components/DataGrid/utils/extractColumnValidationMessages.ts"],"sourcesContent":["/**\n * Extracts column name and validation message from validation message strings.\n *\n * Example:\n * extractColumnValidationMessages([\"#/platform: null is not a valid enum value\"])\n * -> Map { \"platform\" => [\"null is not a valid enum value\"] }\n *\n * extractColumnValidationMessages([\"#/requiredNumberArrayColumn/0: some error\"])\n * -> Map { \"requiredNumberArrayColumn\" => [\"some error\"] }\n *\n * extractColumnValidationMessages([\"#: row-level error\"])\n * -> Map { \"_row\" => [\"row-level error\"] }\n *\n * extractColumnValidationMessages([\"#: required key [missingColumn] not found\"])\n * -> Map { \"missingColumn\" => [\"required key [missingColumn] not found\"] }\n */\nexport function extractColumnValidationMessages(\n messages: string[],\n): Map<string, string[]> {\n const columnMap = new Map<string, string[]>()\n // Validation message format: \"#/columnName: message\"\n // or for array items: \"#/columnName/0: message\"\n // or for object (row) level: \"#: message\"\n const regex = /^#(?:\\/([^/:]+)(?:\\/\\d+)?)?:\\s*(.*)$/\n\n for (const raw of messages) {\n if (typeof raw !== 'string') continue\n const str = raw.trimStart()\n const match = str.match(regex)\n if (match) {\n let columnName = match[1]?.trim() ?? '_row'\n const message = match[2].trim()\n if (columnName === '_row') {\n const requiredKeyMatch = message.match(\n /^required key \\[([^\\]]+)\\] not found$/i,\n )\n if (requiredKeyMatch) {\n columnName = requiredKeyMatch[1]\n }\n }\n\n if (!columnMap.has(columnName)) {\n columnMap.set(columnName, [])\n }\n columnMap.get(columnName)!.push(message)\n }\n }\n\n return columnMap\n}\n"],"mappings":";AAgBA,SAAgBA,EACdC,GACuB;CACvB,IAAME,oBAAY,IAAID,KAAuB,EAIvCE,IAAQ;AAEd,MAAK,IAAMC,KAAOJ,GAAU;AAC1B,MAAI,OAAOI,KAAQ,SAAU;EAE7B,IAAMG,IADMH,EAAIE,WACFD,CAAIE,MAAMJ,EAAM;AAC9B,MAAII,GAAO;GACT,IAAIC,IAAaD,EAAM,IAAIE,MAAM,IAAI,QAC/BC,IAAUH,EAAM,GAAGE,MAAM;AAC/B,OAAID,MAAe,QAAQ;IACzB,IAAMG,IAAmBD,EAAQH,MAC/B,yCACD;AACD,IAAII,MACFH,IAAaG,EAAiB;;AAOlCT,GAHKA,EAAUU,IAAIJ,EAAW,IAC5BN,EAAUW,IAAIL,GAAY,EAAE,CAAC,EAE/BN,EAAUY,IAAIN,EAAW,CAAEO,KAAKL,EAAQ;;;AAI5C,QAAOR"}
@@ -1 +1 @@
1
- {"version":3,"file":"getCellClassName.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/utils/getCellClassName.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAEnE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,OAAO,EAAE,WAAW,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,aAAa,CAAC,EAAE,eAAe,GAAG,IAAI,CAAA;IACtC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,gBAAgB,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;CAC9C,GAAG,MAAM,GAAG,SAAS,CA+DrB"}
1
+ {"version":3,"file":"getCellClassName.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/utils/getCellClassName.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAEnE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,OAAO,EAAE,WAAW,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,aAAa,CAAC,EAAE,eAAe,GAAG,IAAI,CAAA;IACtC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,gBAAgB,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;CAC9C,GAAG,MAAM,GAAG,SAAS,CAyErB"}
@@ -1,19 +1,19 @@
1
1
  import e from "classnames";
2
2
  //#region src/components/DataGrid/utils/getCellClassName.ts
3
3
  function t(t) {
4
- let { rowData: n, rowIndex: r, columnId: i, selectedRowIndex: a, lastSelection: o, colValues: s, remoteSelections: c } = t, l = a === r, u = n.__cellValidationResults, d = u && i && u.has(i), f = [];
5
- l && f.push("cell-row-selected");
6
- let p = !1;
7
- o && i && s && (p = r >= o.min.row && r <= o.max.row && s.findIndex((e) => e.id === i) >= o.min.col && s.findIndex((e) => e.id === i) <= o.max.col, p && f.push("cell-selected")), d && f.push("cell-invalid");
8
- let m = i ? n.__cellChangeInfo?.[i] : void 0;
9
- if (m && f.push(`cell-changed--${m.category}`), c && i) for (let e of c) {
4
+ let { rowData: n, rowIndex: r, columnId: i, selectedRowIndex: a, lastSelection: o, colValues: s, remoteSelections: c } = t, l = a === r, u = n.__cellValidationResults, d = n.__validationStatus, f = u != null && i != null && u.has(i), p = [];
5
+ l && p.push("cell-row-selected");
6
+ let m = !1;
7
+ o && i && s && (m = r >= o.min.row && r <= o.max.row && s.findIndex((e) => e.id === i) >= o.min.col && s.findIndex((e) => e.id === i) <= o.max.col, m && p.push("cell-selected")), f && (d === "invalid" && p.push("cell-invalid"), d === "pending" && p.push("cell-unknown"));
8
+ let h = i ? n.__cellChangeInfo?.[i] : void 0;
9
+ if (h && p.push(`cell-changed--${h.category}`), c && i) for (let e of c) {
10
10
  let { minRow: t, maxRow: n, columnNames: a } = e.range;
11
11
  if (!(r < t || r > n) && !(a !== void 0 && !a.has(i))) {
12
- f.push("cell-remote-selected"), f.push(`cell-remote-selected--color-${e.colorIndex}`);
12
+ p.push("cell-remote-selected"), p.push(`cell-remote-selected--color-${e.colorIndex}`);
13
13
  break;
14
14
  }
15
15
  }
16
- return f.length ? e(f) : void 0;
16
+ return p.length ? e(p) : void 0;
17
17
  }
18
18
  //#endregion
19
19
  export { t as getCellClassName };
@@ -1 +1 @@
1
- {"version":3,"file":"getCellClassName.js","names":["classNames","DataGridRow","SelectionWithId","Column","RemoteSelection","getCellClassName","params","rowData","rowIndex","columnId","selectedRowIndex","lastSelection","colValues","remoteSelections","isSelected","cellValidationResults","__cellValidationResults","isInvalid","has","classList","push","isInSelection","min","row","max","findIndex","col","id","cellChangeInfo","__cellChangeInfo","undefined","category","remote","minRow","maxRow","columnNames","remoteColumnNames","range","colorIndex","length"],"sources":["../../../../src/components/DataGrid/utils/getCellClassName.ts"],"sourcesContent":["import classNames from 'classnames'\nimport { DataGridRow } from '../DataGridTypes'\nimport { SelectionWithId } from '@sage-bionetworks/react-datasheet-grid'\nimport { Column } from '@sage-bionetworks/react-datasheet-grid'\nimport type { RemoteSelection } from '../hooks/useRemoteSelections'\n\nexport function getCellClassName(params: {\n rowData: DataGridRow\n rowIndex: number\n columnId?: string\n selectedRowIndex: number | null\n lastSelection?: SelectionWithId | null\n colValues?: Column[]\n remoteSelections?: readonly RemoteSelection[]\n}): string | undefined {\n const {\n rowData,\n rowIndex,\n columnId,\n selectedRowIndex,\n lastSelection,\n colValues,\n remoteSelections,\n } = params\n\n const isSelected = selectedRowIndex === rowIndex\n const cellValidationResults = rowData.__cellValidationResults\n const isInvalid =\n cellValidationResults && columnId && cellValidationResults.has(columnId)\n\n const classList: string[] = []\n\n if (isSelected) {\n classList.push('cell-row-selected')\n }\n\n // Add selection styling based on lastSelection\n let isInSelection = false\n if (lastSelection && columnId && colValues) {\n isInSelection =\n rowIndex >= lastSelection.min.row &&\n rowIndex <= lastSelection.max.row &&\n colValues.findIndex(col => col.id === columnId) >=\n lastSelection.min.col &&\n colValues.findIndex(col => col.id === columnId) <= lastSelection.max.col\n\n if (isInSelection) {\n classList.push('cell-selected')\n }\n }\n\n if (isInvalid) {\n classList.push('cell-invalid')\n }\n\n // ── Cell change indicator ─────────────────────────────────────────────────\n const cellChangeInfo = columnId\n ? rowData.__cellChangeInfo?.[columnId]\n : undefined\n if (cellChangeInfo) {\n classList.push(`cell-changed--${cellChangeInfo.category}`)\n }\n\n // ── Remote selection tint ─────────────────────────────────────────────────\n if (remoteSelections && columnId) {\n for (const remote of remoteSelections) {\n const { minRow, maxRow, columnNames: remoteColumnNames } = remote.range\n if (rowIndex < minRow || rowIndex > maxRow) continue\n if (remoteColumnNames !== undefined && !remoteColumnNames.has(columnId))\n continue\n classList.push('cell-remote-selected')\n classList.push(`cell-remote-selected--color-${remote.colorIndex}`)\n break // apply the first matching remote selection only\n }\n }\n\n return classList.length ? classNames(classList) : undefined\n}\n"],"mappings":";;AAMA,SAAgBK,EAAiBC,GAQV;CACrB,IAAM,EACJC,YACAC,aACAC,aACAC,qBACAC,kBACAC,cACAC,wBACEP,GAEEQ,IAAaJ,MAAqBF,GAClCO,IAAwBR,EAAQS,yBAChCC,IACJF,KAAyBN,KAAYM,EAAsBG,IAAIT,EAAS,EAEpEU,IAAsB,EAAE;AAE9B,CAAIL,KACFK,EAAUC,KAAK,oBAAoB;CAIrC,IAAIC,IAAgB;AAcpB,CAbIV,KAAiBF,KAAYG,MAC/BS,IACEb,KAAYG,EAAcW,IAAIC,OAC9Bf,KAAYG,EAAca,IAAID,OAC9BX,EAAUa,WAAUC,MAAOA,EAAIC,OAAOlB,EAAS,IAC7CE,EAAcW,IAAII,OACpBd,EAAUa,WAAUC,MAAOA,EAAIC,OAAOlB,EAAS,IAAIE,EAAca,IAAIE,KAEnEL,KACFF,EAAUC,KAAK,gBAAgB,GAI/BH,KACFE,EAAUC,KAAK,eAAe;CAIhC,IAAMQ,IAAiBnB,IACnBF,EAAQsB,mBAAmBpB,KAC3BqB,KAAAA;AAMJ,KALIF,KACFT,EAAUC,KAAK,iBAAiBQ,EAAeG,WAAW,EAIxDlB,KAAoBJ,EACtB,MAAK,IAAMuB,KAAUnB,GAAkB;EACrC,IAAM,EAAEoB,WAAQC,WAAQC,aAAaC,MAAsBJ,EAAOK;AAC9D7B,YAAWyB,KAAUzB,IAAW0B,MAChCE,QAAsBN,KAAAA,KAAa,CAACM,EAAkBlB,IAAIT,EAAS,GAGvEU;GADAA,EAAUC,KAAK,uBAAuB,EACtCD,EAAUC,KAAK,+BAA+BY,EAAOM,aAAa;AAClE;;;AAIJ,QAAOnB,EAAUoB,SAASvC,EAAWmB,EAAU,GAAGW,KAAAA"}
1
+ {"version":3,"file":"getCellClassName.js","names":["classNames","DataGridRow","SelectionWithId","Column","RemoteSelection","getCellClassName","params","rowData","rowIndex","columnId","selectedRowIndex","lastSelection","colValues","remoteSelections","isSelected","cellValidationResults","__cellValidationResults","validationStatus","__validationStatus","hasCellError","has","classList","push","isInSelection","min","row","max","findIndex","col","id","cellChangeInfo","__cellChangeInfo","undefined","category","remote","minRow","maxRow","columnNames","remoteColumnNames","range","colorIndex","length"],"sources":["../../../../src/components/DataGrid/utils/getCellClassName.ts"],"sourcesContent":["import classNames from 'classnames'\nimport { DataGridRow } from '../DataGridTypes'\nimport { SelectionWithId } from '@sage-bionetworks/react-datasheet-grid'\nimport { Column } from '@sage-bionetworks/react-datasheet-grid'\nimport type { RemoteSelection } from '../hooks/useRemoteSelections'\n\nexport function getCellClassName(params: {\n rowData: DataGridRow\n rowIndex: number\n columnId?: string\n selectedRowIndex: number | null\n lastSelection?: SelectionWithId | null\n colValues?: Column[]\n remoteSelections?: readonly RemoteSelection[]\n}): string | undefined {\n const {\n rowData,\n rowIndex,\n columnId,\n selectedRowIndex,\n lastSelection,\n colValues,\n remoteSelections,\n } = params\n\n const isSelected = selectedRowIndex === rowIndex\n const cellValidationResults = rowData.__cellValidationResults\n const validationStatus = rowData.__validationStatus\n const hasCellError =\n cellValidationResults != null &&\n columnId != null &&\n cellValidationResults.has(columnId)\n\n const classList: string[] = []\n\n if (isSelected) {\n classList.push('cell-row-selected')\n }\n\n // Add selection styling based on lastSelection\n let isInSelection = false\n if (lastSelection && columnId && colValues) {\n isInSelection =\n rowIndex >= lastSelection.min.row &&\n rowIndex <= lastSelection.max.row &&\n colValues.findIndex(col => col.id === columnId) >=\n lastSelection.min.col &&\n colValues.findIndex(col => col.id === columnId) <= lastSelection.max.col\n\n if (isInSelection) {\n classList.push('cell-selected')\n }\n }\n\n if (hasCellError) {\n // Confirmed invalid — full red cell background\n if (validationStatus === 'invalid') {\n classList.push('cell-invalid')\n }\n // Pending revalidation — yellow cell background to signal the prior error is unconfirmed\n if (validationStatus === 'pending') {\n classList.push('cell-unknown')\n }\n }\n\n // ── Cell change indicator ─────────────────────────────────────────────────\n const cellChangeInfo = columnId\n ? rowData.__cellChangeInfo?.[columnId]\n : undefined\n if (cellChangeInfo) {\n classList.push(`cell-changed--${cellChangeInfo.category}`)\n }\n\n // ── Remote selection tint ─────────────────────────────────────────────────\n if (remoteSelections && columnId) {\n for (const remote of remoteSelections) {\n const { minRow, maxRow, columnNames: remoteColumnNames } = remote.range\n if (rowIndex < minRow || rowIndex > maxRow) continue\n if (remoteColumnNames !== undefined && !remoteColumnNames.has(columnId))\n continue\n classList.push('cell-remote-selected')\n classList.push(`cell-remote-selected--color-${remote.colorIndex}`)\n break // apply the first matching remote selection only\n }\n }\n\n return classList.length ? classNames(classList) : undefined\n}\n"],"mappings":";;AAMA,SAAgBK,EAAiBC,GAQV;CACrB,IAAM,EACJC,YACAC,aACAC,aACAC,qBACAC,kBACAC,cACAC,wBACEP,GAEEQ,IAAaJ,MAAqBF,GAClCO,IAAwBR,EAAQS,yBAChCC,IAAmBV,EAAQW,oBAC3BC,IACJJ,KAAyB,QACzBN,KAAY,QACZM,EAAsBK,IAAIX,EAAS,EAE/BY,IAAsB,EAAE;AAE9B,CAAIP,KACFO,EAAUC,KAAK,oBAAoB;CAIrC,IAAIC,IAAgB;AAcpB,CAbIZ,KAAiBF,KAAYG,MAC/BW,IACEf,KAAYG,EAAca,IAAIC,OAC9BjB,KAAYG,EAAce,IAAID,OAC9Bb,EAAUe,WAAUC,MAAOA,EAAIC,OAAOpB,EAAS,IAC7CE,EAAca,IAAII,OACpBhB,EAAUe,WAAUC,MAAOA,EAAIC,OAAOpB,EAAS,IAAIE,EAAce,IAAIE,KAEnEL,KACFF,EAAUC,KAAK,gBAAgB,GAI/BH,MAEEF,MAAqB,aACvBI,EAAUC,KAAK,eAAe,EAG5BL,MAAqB,aACvBI,EAAUC,KAAK,eAAe;CAKlC,IAAMQ,IAAiBrB,IACnBF,EAAQwB,mBAAmBtB,KAC3BuB,KAAAA;AAMJ,KALIF,KACFT,EAAUC,KAAK,iBAAiBQ,EAAeG,WAAW,EAIxDpB,KAAoBJ,EACtB,MAAK,IAAMyB,KAAUrB,GAAkB;EACrC,IAAM,EAAEsB,WAAQC,WAAQC,aAAaC,MAAsBJ,EAAOK;AAC9D/B,YAAW2B,KAAU3B,IAAW4B,MAChCE,QAAsBN,KAAAA,KAAa,CAACM,EAAkBlB,IAAIX,EAAS,GAGvEY;GADAA,EAAUC,KAAK,uBAAuB,EACtCD,EAAUC,KAAK,+BAA+BY,EAAOM,aAAa;AAClE;;;AAIJ,QAAOnB,EAAUoB,SAASzC,EAAWqB,EAAU,GAAGW,KAAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function getEmptyValue(isRequired?: boolean): null | undefined;
2
+ //# sourceMappingURL=getEmptyValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getEmptyValue.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/utils/getEmptyValue.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,oBAEjD"}
@@ -0,0 +1,8 @@
1
+ //#region src/components/DataGrid/utils/getEmptyValue.ts
2
+ function e(e) {
3
+ return e ? null : void 0;
4
+ }
5
+ //#endregion
6
+ export { e as getEmptyValue };
7
+
8
+ //# sourceMappingURL=getEmptyValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getEmptyValue.js","names":[],"sources":["../../../../src/components/DataGrid/utils/getEmptyValue.ts"],"sourcesContent":["export function getEmptyValue(isRequired?: boolean) {\n return isRequired ? null : undefined\n}\n"],"mappings":";AAAA,SAAgB,EAAc,GAAsB;AAClD,QAAO,IAAa,OAAO,KAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"JsonRx.js","names":["JsonRxMessage","JsonRxNotification","NOTIFICATION_TYPE_CODE","JsonRxRequest","REQUEST_TYPE_CODE","JsonRxResponse","RESPONSE_TYPE_CODE","JsonRxResponseComplete","RESPONSE_COMPLETE_TYPE_CODE","JsonRxRequestComplete","REQUEST_COMPLETE_TYPE_CODE","JsonRx","fromJson","json","Array","isArray","Error","typeCode","_","requestId","methodName","payload","message"],"sources":["../../../../../src/components/DataGrid/utils/json-rx/JsonRx.ts"],"sourcesContent":["import JsonRxMessage from '@/components/DataGrid/utils/json-rx/JsonRxMessage'\nimport JsonRxNotification, {\n NOTIFICATION_TYPE_CODE,\n} from '@/components/DataGrid/utils/json-rx/JsonRxNotification'\nimport JsonRxRequest, {\n REQUEST_TYPE_CODE,\n} from '@/components/DataGrid/utils/json-rx/JsonRxRequest'\nimport JsonRxResponse, {\n RESPONSE_TYPE_CODE,\n} from '@/components/DataGrid/utils/json-rx/JsonRxResponse'\nimport JsonRxResponseComplete, {\n RESPONSE_COMPLETE_TYPE_CODE,\n} from '@/components/DataGrid/utils/json-rx/JsonRxResponseComplete'\nimport JsonRxRequestComplete, {\n REQUEST_COMPLETE_TYPE_CODE,\n} from './JsonRxRequestComplete'\n\n/**\n * Static utility methods intended to implement the JSON-Rx communication protocol\n * Spec: https://jsonjoy.com/specs/json-rx\n */\nexport default class JsonRx {\n /**\n * Converts a JSON-encoded JSON-Rx message (which is always an array) into the appropriate JsonRxMessage subclass\n *\n * For more information, see the JSON-Rx specification: https://jsonjoy.com/specs/json-rx\n * @param json\n */\n static fromJson(json: unknown): JsonRxMessage {\n if (!Array.isArray(json)) {\n throw new Error('Invalid JSON-Rx message: not an array')\n }\n const typeCode = json[0]\n\n if (typeof typeCode !== 'number') {\n throw new Error(\n `Invalid JSON-Rx message: type code is not a number, received ${typeCode}`,\n )\n }\n\n switch (typeCode) {\n case REQUEST_TYPE_CODE: {\n // Request\n const [_, requestId, methodName, payload] = json\n return new JsonRxRequest(requestId, methodName, payload)\n }\n case REQUEST_COMPLETE_TYPE_CODE: {\n const [_, requestId, methodName, payload] = json\n const message = new JsonRxRequestComplete(\n requestId,\n methodName,\n payload,\n )\n return message\n }\n case RESPONSE_TYPE_CODE: {\n // Response\n const [_, requestId, payload] = json\n return new JsonRxResponse(requestId, payload)\n }\n case RESPONSE_COMPLETE_TYPE_CODE: {\n // ResponseComplete\n const [_, requestId, payload] = json\n return new JsonRxResponseComplete(requestId, payload)\n }\n case NOTIFICATION_TYPE_CODE: {\n // Notification\n const [_, methodName, payload] = json\n return new JsonRxNotification(methodName, payload)\n }\n default:\n throw new Error(\n `Invalid JSON-Rx message: unknown type code ${typeCode}`,\n )\n }\n }\n}\n"],"mappings":";;;;;;AAqBA,IAAqBW,IAArB,MAA4B;CAO1B,OAAOC,SAASC,GAA8B;AAC5C,MAAI,CAACC,MAAMC,QAAQF,EAAK,CACtB,OAAUG,MAAM,wCAAwC;EAE1D,IAAMC,IAAWJ,EAAK;AAEtB,MAAI,OAAOI,KAAa,SACtB,OAAUD,MACR,gEAAgEC,IACjE;AAGH,UAAQA,GAAR;GACE,KAAA,GAAwB;IAEtB,IAAM,CAACC,GAAGC,GAAWC,GAAYC,KAAWR;AAC5C,WAAO,IAAIV,EAAcgB,GAAWC,GAAYC,EAAQ;;GAE1D,KAAA,GAAiC;IAC/B,IAAM,CAACH,GAAGC,GAAWC,GAAYC,KAAWR;AAM5C,WALgB,IAAIJ,EAClBU,GACAC,GACAC,EACD;;GAGH,KAAA,GAAyB;IAEvB,IAAM,CAACH,GAAGC,GAAWE,KAAWR;AAChC,WAAO,IAAIR,EAAec,GAAWE,EAAQ;;GAE/C,KAAA,GAAkC;IAEhC,IAAM,CAACH,GAAGC,GAAWE,KAAWR;AAChC,WAAO,IAAIN,EAAuBY,GAAWE,EAAQ;;GAEvD,KAAA,GAA6B;IAE3B,IAAM,CAACH,GAAGE,GAAYC,KAAWR;AACjC,WAAO,IAAIZ,EAAmBmB,GAAYC,EAAQ;;GAEpD,QACE,OAAUL,MACR,8CAA8CC,IAC/C"}
1
+ {"version":3,"file":"JsonRx.js","names":["JsonRxMessage","JsonRxNotification","NOTIFICATION_TYPE_CODE","JsonRxRequest","REQUEST_TYPE_CODE","JsonRxResponse","RESPONSE_TYPE_CODE","JsonRxResponseComplete","RESPONSE_COMPLETE_TYPE_CODE","JsonRxRequestComplete","REQUEST_COMPLETE_TYPE_CODE","JsonRx","fromJson","json","Array","isArray","Error","typeCode","_","requestId","methodName","payload","message"],"sources":["../../../../../src/components/DataGrid/utils/json-rx/JsonRx.ts"],"sourcesContent":["import JsonRxMessage from '@/components/DataGrid/utils/json-rx/JsonRxMessage'\nimport JsonRxNotification, {\n NOTIFICATION_TYPE_CODE,\n} from '@/components/DataGrid/utils/json-rx/JsonRxNotification'\nimport JsonRxRequest, {\n REQUEST_TYPE_CODE,\n} from '@/components/DataGrid/utils/json-rx/JsonRxRequest'\nimport JsonRxResponse, {\n RESPONSE_TYPE_CODE,\n} from '@/components/DataGrid/utils/json-rx/JsonRxResponse'\nimport JsonRxResponseComplete, {\n RESPONSE_COMPLETE_TYPE_CODE,\n} from '@/components/DataGrid/utils/json-rx/JsonRxResponseComplete'\nimport JsonRxRequestComplete, {\n REQUEST_COMPLETE_TYPE_CODE,\n} from './JsonRxRequestComplete'\n\n/**\n * Static utility methods intended to implement the JSON-Rx communication protocol\n * Spec: https://jsonjoy.com/specs/json-rx\n */\nexport default class JsonRx {\n /**\n * Converts a JSON-encoded JSON-Rx message (which is always an array) into the appropriate JsonRxMessage subclass\n *\n * For more information, see the JSON-Rx specification: https://jsonjoy.com/specs/json-rx\n * @param json\n */\n static fromJson(json: unknown): JsonRxMessage {\n if (!Array.isArray(json)) {\n throw new Error('Invalid JSON-Rx message: not an array')\n }\n const typeCode = json[0]\n\n if (typeof typeCode !== 'number') {\n throw new Error(\n `Invalid JSON-Rx message: type code is not a number, received ${typeCode}`,\n )\n }\n\n switch (typeCode) {\n case REQUEST_TYPE_CODE: {\n // Request\n const [_, requestId, methodName, payload] = json\n return new JsonRxRequest(requestId, methodName, payload)\n }\n case REQUEST_COMPLETE_TYPE_CODE: {\n const [_, requestId, methodName, payload] = json\n const message = new JsonRxRequestComplete(\n requestId,\n methodName,\n payload,\n )\n return message\n }\n case RESPONSE_TYPE_CODE: {\n // Response\n const [_, requestId, payload] = json\n return new JsonRxResponse(requestId, payload)\n }\n case RESPONSE_COMPLETE_TYPE_CODE: {\n // ResponseComplete\n const [_, requestId, payload] = json\n return new JsonRxResponseComplete(requestId, payload)\n }\n case NOTIFICATION_TYPE_CODE: {\n // Notification\n const [_, methodName, payload] = json\n return new JsonRxNotification(methodName, payload)\n }\n default:\n throw new Error(\n `Invalid JSON-Rx message: unknown type code ${typeCode}`,\n )\n }\n }\n}\n"],"mappings":";;;;;;AAqBA,IAAqBW,IAArB,MAA4B;CAO1B,OAAOC,SAASC,GAA8B;AAC5C,MAAI,CAACC,MAAMC,QAAQF,EAAK,CACtB,OAAUG,MAAM,wCAAwC;EAE1D,IAAMC,IAAWJ,EAAK;AAEtB,MAAI,OAAOI,KAAa,SACtB,OAAUD,MACR,gEAAgEC,IACjE;AAGH,UAAQA,GAAR;GACE,KAAA,GAAwB;IAEtB,IAAM,CAACC,GAAGC,GAAWC,GAAYC,KAAWR;AAC5C,WAAO,IAAIV,EAAcgB,GAAWC,GAAYC,EAAQ;;GAE1D,KAAA,GAAiC;IAC/B,IAAM,CAACH,GAAGC,GAAWC,GAAYC,KAAWR;AAM5C,WAAOS,IALab,EAClBU,GACAC,GACAC,EAEKC;;GAET,KAAA,GAAyB;IAEvB,IAAM,CAACJ,GAAGC,GAAWE,KAAWR;AAChC,WAAO,IAAIR,EAAec,GAAWE,EAAQ;;GAE/C,KAAA,GAAkC;IAEhC,IAAM,CAACH,GAAGC,GAAWE,KAAWR;AAChC,WAAO,IAAIN,EAAuBY,GAAWE,EAAQ;;GAEvD,KAAA,GAA6B;IAE3B,IAAM,CAACH,GAAGE,GAAYC,KAAWR;AACjC,WAAO,IAAIZ,EAAmBmB,GAAYC,EAAQ;;GAEpD,QACE,OAAUL,MACR,8CAA8CC,IAC/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"modelColsToGrid.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/utils/modelColsToGrid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAA;AAE/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;AAE9E,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EAAE,EACrB,WAAW,EAAE,MAAM,EAAE,EACrB,oBAAoB,EAAE,mBAAmB,EACzC,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACzC,aAAa,GAAE,GAAG,CAAC,MAAM,CAAa,EACtC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAC1C,MAAM,EAAE,CAsBV"}
1
+ {"version":3,"file":"modelColsToGrid.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/utils/modelColsToGrid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAA;AAE/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;AAE9E,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EAAE,EACrB,WAAW,EAAE,MAAM,EAAE,EACrB,oBAAoB,EAAE,mBAAmB,EACzC,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACzC,aAAa,GAAE,GAAG,CAAC,MAAM,CAAa,EACtC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAC1C,MAAM,EAAE,CAuBV"}
@@ -13,7 +13,8 @@ function t(t, n, r, i = {}, a = /* @__PURE__ */ new Set(), o) {
13
13
  customWidth: i[c],
14
14
  showPinIcon: u,
15
15
  isPinned: d,
16
- onTogglePin: o ? () => o(s) : void 0
16
+ onTogglePin: o ? () => o(s) : void 0,
17
+ schemaPropertyInfo: l
17
18
  });
18
19
  });
19
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"modelColsToGrid.js","names":["Column","createColumn","SchemaPropertiesMap","modelColsToGrid","columnNames","columnOrder","schemaPropertiesInfo","columnWidths","Record","pinnedColumns","Set","onTogglePin","columnIndex","map","index","arrayIndex","columnName","propertyInfo","showPinIcon","undefined","isPinned","has","description","typeInfo","type","enumeratedValues","isRequired","disabled","readOnly","customWidth"],"sources":["../../../../src/components/DataGrid/utils/modelColsToGrid.ts"],"sourcesContent":["import { Column } from '@sage-bionetworks/react-datasheet-grid'\nimport { createColumn } from './columnFactory'\nimport { SchemaPropertiesMap } from '@/utils/jsonschema/getSchemaPropertyInfo'\n\nexport function modelColsToGrid(\n columnNames: string[],\n columnOrder: number[],\n schemaPropertiesInfo: SchemaPropertiesMap,\n columnWidths: Record<string, number> = {},\n pinnedColumns: Set<number> = new Set(),\n onTogglePin?: (columnIndex: number) => void,\n): Column[] {\n return columnOrder.map((index: number, arrayIndex: number) => {\n const columnName = columnNames[index]\n const propertyInfo = schemaPropertiesInfo[columnName]\n\n // Only show pin functionality for the first column and when toggle handler exists\n const showPinIcon = arrayIndex === 0 && onTogglePin !== undefined\n const isPinned = pinnedColumns.has(arrayIndex)\n\n return createColumn({\n columnName,\n description: propertyInfo?.description,\n typeInfo: propertyInfo?.type || null,\n enumeratedValues: propertyInfo?.enumeratedValues || [],\n isRequired: propertyInfo?.isRequired || false,\n disabled: propertyInfo?.type?.readOnly,\n customWidth: columnWidths[columnName],\n showPinIcon,\n isPinned,\n onTogglePin: onTogglePin ? () => onTogglePin(arrayIndex) : undefined,\n })\n })\n}\n"],"mappings":";;AAIA,SAAgBG,EACdC,GACAC,GACAC,GACAC,IAAuC,EAAE,EACzCE,oBAA6B,IAAIC,KAAK,EACtCC,GACU;AACV,QAAON,EAAYQ,KAAKC,GAAeC,MAAuB;EAC5D,IAAMC,IAAaZ,EAAYU,IACzBG,IAAeX,EAAqBU,IAGpCE,IAAcH,MAAe,KAAKJ,MAAgBQ,KAAAA,GAClDC,IAAWX,EAAcY,IAAIN,EAAW;AAE9C,SAAOd,EAAa;GAClBe;GACAM,aAAaL,GAAcK;GAC3BC,UAAUN,GAAcO,QAAQ;GAChCC,kBAAkBR,GAAcQ,oBAAoB,EAAE;GACtDC,YAAYT,GAAcS,cAAc;GACxCC,UAAUV,GAAcO,MAAMI;GAC9BC,aAAatB,EAAaS;GAC1BE;GACAE;GACAT,aAAaA,UAAoBA,EAAYI,EAAW,GAAGI,KAAAA;GAC5D,CAAC;GACF"}
1
+ {"version":3,"file":"modelColsToGrid.js","names":["Column","createColumn","SchemaPropertiesMap","modelColsToGrid","columnNames","columnOrder","schemaPropertiesInfo","columnWidths","Record","pinnedColumns","Set","onTogglePin","columnIndex","map","index","arrayIndex","columnName","propertyInfo","showPinIcon","undefined","isPinned","has","description","typeInfo","type","enumeratedValues","isRequired","disabled","readOnly","customWidth","schemaPropertyInfo"],"sources":["../../../../src/components/DataGrid/utils/modelColsToGrid.ts"],"sourcesContent":["import { Column } from '@sage-bionetworks/react-datasheet-grid'\nimport { createColumn } from './columnFactory'\nimport { SchemaPropertiesMap } from '@/utils/jsonschema/getSchemaPropertyInfo'\n\nexport function modelColsToGrid(\n columnNames: string[],\n columnOrder: number[],\n schemaPropertiesInfo: SchemaPropertiesMap,\n columnWidths: Record<string, number> = {},\n pinnedColumns: Set<number> = new Set(),\n onTogglePin?: (columnIndex: number) => void,\n): Column[] {\n return columnOrder.map((index: number, arrayIndex: number) => {\n const columnName = columnNames[index]\n const propertyInfo = schemaPropertiesInfo[columnName]\n\n // Only show pin functionality for the first column and when toggle handler exists\n const showPinIcon = arrayIndex === 0 && onTogglePin !== undefined\n const isPinned = pinnedColumns.has(arrayIndex)\n\n return createColumn({\n columnName,\n description: propertyInfo?.description,\n typeInfo: propertyInfo?.type || null,\n enumeratedValues: propertyInfo?.enumeratedValues || [],\n isRequired: propertyInfo?.isRequired || false,\n disabled: propertyInfo?.type?.readOnly,\n customWidth: columnWidths[columnName],\n showPinIcon,\n isPinned,\n onTogglePin: onTogglePin ? () => onTogglePin(arrayIndex) : undefined,\n schemaPropertyInfo: propertyInfo,\n })\n })\n}\n"],"mappings":";;AAIA,SAAgBG,EACdC,GACAC,GACAC,GACAC,IAAuC,EAAE,EACzCE,oBAA6B,IAAIC,KAAK,EACtCC,GACU;AACV,QAAON,EAAYQ,KAAKC,GAAeC,MAAuB;EAC5D,IAAMC,IAAaZ,EAAYU,IACzBG,IAAeX,EAAqBU,IAGpCE,IAAcH,MAAe,KAAKJ,MAAgBQ,KAAAA,GAClDC,IAAWX,EAAcY,IAAIN,EAAW;AAE9C,SAAOd,EAAa;GAClBe;GACAM,aAAaL,GAAcK;GAC3BC,UAAUN,GAAcO,QAAQ;GAChCC,kBAAkBR,GAAcQ,oBAAoB,EAAE;GACtDC,YAAYT,GAAcS,cAAc;GACxCC,UAAUV,GAAcO,MAAMI;GAC9BC,aAAatB,EAAaS;GAC1BE;GACAE;GACAT,aAAaA,UAAoBA,EAAYI,EAAW,GAAGI,KAAAA;GAC3DW,oBAAoBb;GACrB,CAAC;GACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"modelRowsToGrid.js","names":["DataGridRow","GridModel","GridModelSnapshot","isValidationUpToDateForRow","GRID_ROW_REACT_KEY_PROPERTY","logicalTimestampToString","extractColumnValidationMessages","modelRowsToGrid","model","modelSnapshot","columnNames","columnOrder","rows","gridRows","map","row","rowIndex","rowObj","forEach","index","columnName","data","api","obj","String","node","id","__validationResults","metadata","rowValidation","__validationStatus","isValid","allValidationMessages","__cellValidationResults"],"sources":["../../../../src/components/DataGrid/utils/modelRowsToGrid.ts"],"sourcesContent":["import {\n DataGridRow,\n GridModel,\n GridModelSnapshot,\n} from '@/components/DataGrid/DataGridTypes'\nimport { isValidationUpToDateForRow } from '@/components/DataGrid/utils/isValidationUpToDateForRow'\nimport { GRID_ROW_REACT_KEY_PROPERTY } from './DataGridUtils'\nimport logicalTimestampToString from '@/components/DataGrid/utils/logicalTimestampToString'\nimport { extractColumnValidationMessages } from './extractColumnValidationMessages'\n\n/**\n * Convert model rows to a format suitable for DataSheetGrid\n * @param model\n * @param modelSnapshot\n */\nexport default function modelRowsToGrid(\n model: GridModel | null,\n modelSnapshot: GridModelSnapshot,\n): DataGridRow[] {\n if (!model || !modelSnapshot) return []\n const { columnNames, columnOrder, rows } = modelSnapshot\n const gridRows = rows.map((row, rowIndex): DataGridRow => {\n const rowObj: DataGridRow = {}\n columnOrder.forEach((index: number) => {\n const columnName = columnNames[index]\n if (columnName) {\n rowObj[columnName] = row.data[index]\n }\n })\n\n // Embed the logical timestamp as a string for use as the React key (a stable value unique to each row)\n rowObj[GRID_ROW_REACT_KEY_PROPERTY] = logicalTimestampToString(\n model.api.obj(['rows', String(rowIndex)]).node.id,\n )\n\n rowObj.__validationResults = row.metadata?.rowValidation\n if (rowObj.__validationResults) {\n rowObj.__validationStatus = rowObj.__validationResults?.isValid\n ? 'valid'\n : 'invalid'\n }\n\n if (!isValidationUpToDateForRow(model, rowIndex)) {\n rowObj.__validationStatus = 'pending'\n }\n\n // Parse the validation messages into a Map of column name to messages\n if (rowObj.__validationResults?.allValidationMessages) {\n rowObj.__cellValidationResults = extractColumnValidationMessages(\n rowObj.__validationResults.allValidationMessages,\n )\n }\n\n return rowObj\n })\n return gridRows\n}\n"],"mappings":";;;;;AAeA,SAAwBO,EACtBC,GACAC,GACe;AACf,KAAI,CAACD,KAAS,CAACC,EAAe,QAAO,EAAE;CACvC,IAAM,EAAEC,gBAAaC,gBAAaC,YAASH;AAmC3C,QAlCiBG,EAAKE,KAAKC,GAAKC,MAA0B;EACxD,IAAMC,IAAsB,EAAE;AA+B9B,SA9BAN,EAAYO,SAASC,MAAkB;GACrC,IAAMC,IAAaV,EAAYS;AAC/B,GAAIC,MACFH,EAAOG,KAAcL,EAAIM,KAAKF;IAEhC,EAGFF,EAAOb,KAA+BC,EACpCG,EAAMc,IAAIC,IAAI,CAAC,QAAQC,OAAOR,EAAS,CAAC,CAAC,CAACS,KAAKC,GAChD,EAEDT,EAAOU,sBAAsBZ,EAAIa,UAAUC,eACvCZ,EAAOU,wBACTV,EAAOa,qBAAqBb,EAAOU,qBAAqBI,UACpD,UACA,YAGD5B,EAA2BK,GAAOQ,EAAS,KAC9CC,EAAOa,qBAAqB,YAI1Bb,EAAOU,qBAAqBK,0BAC9Bf,EAAOgB,0BAA0B3B,EAC/BW,EAAOU,oBAAoBK,sBAC5B,GAGIf;GACP"}
1
+ {"version":3,"file":"modelRowsToGrid.js","names":["DataGridRow","GridModel","GridModelSnapshot","isValidationUpToDateForRow","GRID_ROW_REACT_KEY_PROPERTY","logicalTimestampToString","extractColumnValidationMessages","modelRowsToGrid","model","modelSnapshot","columnNames","columnOrder","rows","gridRows","map","row","rowIndex","rowObj","forEach","index","columnName","data","api","obj","String","node","id","__validationResults","metadata","rowValidation","__validationStatus","isValid","allValidationMessages","__cellValidationResults"],"sources":["../../../../src/components/DataGrid/utils/modelRowsToGrid.ts"],"sourcesContent":["import {\n DataGridRow,\n GridModel,\n GridModelSnapshot,\n} from '@/components/DataGrid/DataGridTypes'\nimport { isValidationUpToDateForRow } from '@/components/DataGrid/utils/isValidationUpToDateForRow'\nimport { GRID_ROW_REACT_KEY_PROPERTY } from './DataGridUtils'\nimport logicalTimestampToString from '@/components/DataGrid/utils/logicalTimestampToString'\nimport { extractColumnValidationMessages } from './extractColumnValidationMessages'\n\n/**\n * Convert model rows to a format suitable for DataSheetGrid\n * @param model\n * @param modelSnapshot\n */\nexport default function modelRowsToGrid(\n model: GridModel | null,\n modelSnapshot: GridModelSnapshot,\n): DataGridRow[] {\n if (!model || !modelSnapshot) return []\n const { columnNames, columnOrder, rows } = modelSnapshot\n const gridRows = rows.map((row, rowIndex): DataGridRow => {\n const rowObj: DataGridRow = {}\n columnOrder.forEach((index: number) => {\n const columnName = columnNames[index]\n if (columnName) {\n rowObj[columnName] = row.data[index]\n }\n })\n\n // Embed the logical timestamp as a string for use as the React key (a stable value unique to each row)\n rowObj[GRID_ROW_REACT_KEY_PROPERTY] = logicalTimestampToString(\n model.api.obj(['rows', String(rowIndex)]).node.id,\n )\n\n rowObj.__validationResults = row.metadata?.rowValidation\n if (rowObj.__validationResults) {\n rowObj.__validationStatus = rowObj.__validationResults?.isValid\n ? 'valid'\n : 'invalid'\n }\n\n if (!isValidationUpToDateForRow(model, rowIndex)) {\n rowObj.__validationStatus = 'pending'\n }\n\n // Parse the validation messages into a Map of column name to messages\n if (rowObj.__validationResults?.allValidationMessages) {\n rowObj.__cellValidationResults = extractColumnValidationMessages(\n rowObj.__validationResults.allValidationMessages,\n )\n }\n\n return rowObj\n })\n return gridRows\n}\n"],"mappings":";;;;;AAeA,SAAwBO,EACtBC,GACAC,GACe;AACf,KAAI,CAACD,KAAS,CAACC,EAAe,QAAO,EAAE;CACvC,IAAM,EAAEC,gBAAaC,gBAAaC,YAASH;AAmC3C,QAlCiBG,EAAKE,KAAKC,GAAKC,MAA0B;EACxD,IAAMC,IAAsB,EAAE;AA+B9B,SA9BAN,EAAYO,SAASC,MAAkB;GACrC,IAAMC,IAAaV,EAAYS;AAC/B,GAAIC,MACFH,EAAOG,KAAcL,EAAIM,KAAKF;IAEhC,EAGFF,EAAOb,KAA+BC,EACpCG,EAAMc,IAAIC,IAAI,CAAC,QAAQC,OAAOR,EAAS,CAAC,CAAC,CAACS,KAAKC,GAChD,EAEDT,EAAOU,sBAAsBZ,EAAIa,UAAUC,eACvCZ,EAAOU,wBACTV,EAAOa,qBAAqBb,EAAOU,qBAAqBI,UACpD,UACA,YAGD5B,EAA2BK,GAAOQ,EAAS,KAC9CC,EAAOa,qBAAqB,YAI1Bb,EAAOU,qBAAqBK,0BAC9Bf,EAAOgB,0BAA0B3B,EAC/BW,EAAOU,oBAAoBK,sBAC5B,GAGIf;GAEFJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"parseFreeTextUsingJsonSchemaType.js","names":["JSONSchema7Type","parseFreeTextGivenJsonSchemaType","freeText","colType","String","trim","parsed","parseInt","Number","isNaN","toLowerCase","JSON","parse","e"],"sources":["../../../../src/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType.ts"],"sourcesContent":["import { JSONSchema7Type } from 'json-schema'\n\nexport default function parseFreeTextGivenJsonSchemaType(\n freeText: string,\n colType?: JSONSchema7Type,\n): unknown {\n if (!colType || colType === 'string') {\n return String(freeText)\n } else if (colType === 'number' || colType === 'integer') {\n if (freeText.trim() === '') {\n // empty string parse result is 0, so treat it as empty\n return freeText\n }\n let parsed: number\n if (colType === 'integer') {\n parsed = parseInt(freeText, 10)\n } else {\n parsed = Number(freeText)\n }\n if (!isNaN(parsed)) {\n return parsed\n } else {\n return freeText\n }\n } else if (colType === 'boolean') {\n if (freeText.toLowerCase() === 'true') {\n return true\n } else if (freeText.toLowerCase() === 'false') {\n return false\n } else {\n return freeText\n }\n } else if (colType === 'object' || colType === 'array') {\n try {\n const parsed = JSON.parse(freeText)\n return parsed\n } catch (e) {\n // If we can't parse it, just set it to the input value\n return freeText\n }\n } else if (colType === 'null') {\n if (freeText.toLowerCase() === 'null' || freeText.trim() === '') {\n return null\n } else {\n return freeText\n }\n } else {\n // Unknown type, just set it to the input value\n return freeText\n }\n}\n"],"mappings":";AAEA,SAAwBC,EACtBC,GACAC,GACS;AACT,KAAI,CAACA,KAAWA,MAAY,SAC1B,QAAOC,OAAOF,EAAS;KACdC,MAAY,YAAYA,MAAY,WAAW;AACxD,MAAID,EAASG,MAAM,KAAK,GAEtB,QAAOH;EAET,IAAII;AAOF,SANF,AAGEA,IAHEH,MAAY,YACLI,SAASL,GAAU,GAAG,GAEtBM,OAAON,EAAS,EAEtBO,MAAMH,EAAO,GAGTJ,IAFAI;YAIAH,MAAY,UAMnB,QALED,EAASQ,aAAa,KAAK,SACtB,KACER,EAASQ,aAAa,KAAK,UAC7B,KAEAR;UAEAC,MAAY,YAAYA,MAAY,QAC7C,KAAI;AAEF,SADeQ,KAAKC,MAAMV,EAAS;SAEzB;AAEV,SAAOA;;UAEAC,MAAY,OAInB,QAHED,EAASQ,aAAa,KAAK,UAAUR,EAASG,MAAM,KAAK,KACpD,OAEAH;KAIT,QAAOA"}
1
+ {"version":3,"file":"parseFreeTextUsingJsonSchemaType.js","names":["JSONSchema7Type","parseFreeTextGivenJsonSchemaType","freeText","colType","String","trim","parsed","parseInt","Number","isNaN","toLowerCase","JSON","parse","e"],"sources":["../../../../src/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType.ts"],"sourcesContent":["import { JSONSchema7Type } from 'json-schema'\n\nexport default function parseFreeTextGivenJsonSchemaType(\n freeText: string,\n colType?: JSONSchema7Type,\n): unknown {\n if (!colType || colType === 'string') {\n return String(freeText)\n } else if (colType === 'number' || colType === 'integer') {\n if (freeText.trim() === '') {\n // empty string parse result is 0, so treat it as empty\n return freeText\n }\n let parsed: number\n if (colType === 'integer') {\n parsed = parseInt(freeText, 10)\n } else {\n parsed = Number(freeText)\n }\n if (!isNaN(parsed)) {\n return parsed\n } else {\n return freeText\n }\n } else if (colType === 'boolean') {\n if (freeText.toLowerCase() === 'true') {\n return true\n } else if (freeText.toLowerCase() === 'false') {\n return false\n } else {\n return freeText\n }\n } else if (colType === 'object' || colType === 'array') {\n try {\n const parsed = JSON.parse(freeText)\n return parsed\n } catch (e) {\n // If we can't parse it, just set it to the input value\n return freeText\n }\n } else if (colType === 'null') {\n if (freeText.toLowerCase() === 'null' || freeText.trim() === '') {\n return null\n } else {\n return freeText\n }\n } else {\n // Unknown type, just set it to the input value\n return freeText\n }\n}\n"],"mappings":";AAEA,SAAwBC,EACtBC,GACAC,GACS;AACT,KAAI,CAACA,KAAWA,MAAY,SAC1B,QAAOC,OAAOF,EAAS;KACdC,MAAY,YAAYA,MAAY,WAAW;AACxD,MAAID,EAASG,MAAM,KAAK,GAEtB,QAAOH;EAET,IAAII;AAOF,SANF,AAGEA,IAHEH,MAAY,YACLI,SAASL,GAAU,GAAG,GAEtBM,OAAON,EAAS,EAEtBO,MAAMH,EAAO,GAGTJ,IAFAI;YAIAH,MAAY,UAMnB,QALED,EAASQ,aAAa,KAAK,SACtB,KACER,EAASQ,aAAa,KAAK,UAC7B,KAEAR;UAEAC,MAAY,YAAYA,MAAY,QAC7C,KAAI;AAEF,SADeQ,KAAKC,MAAMV,EACnBI;SACG;AAEV,SAAOJ;;UAEAC,MAAY,OAInB,QAHED,EAASQ,aAAa,KAAK,UAAUR,EAASG,MAAM,KAAK,KACpD,OAEAH;KAIT,QAAOA"}
@@ -0,0 +1,32 @@
1
+ import type { Column } from '@sage-bionetworks/react-datasheet-grid';
2
+ import type { SchemaPropertyInfo } from '@/utils/jsonschema/getSchemaPropertyInfo';
3
+ /**
4
+ * Coerce an empty cell value to the schema-correct blank before it reaches
5
+ * the model, regardless of how the edit originated (paste, free-typed commit,
6
+ * programmatic CREATE/UPDATE, etc.).
7
+ *
8
+ * - Optional columns -> undefined (property is absent and passes validation
9
+ * for any optional type).
10
+ * - Required columns -> null (validator surfaces a substantive error the
11
+ * user can act on).
12
+ *
13
+ * "Empty" means null, undefined, or a whitespace-only string. Spreadsheet
14
+ * clipboard formats (text/html in particular) can encode visually empty
15
+ * cells as runs of `\n` from stacked `<br>` tags, so the trim check covers
16
+ * those alongside literal "". Empty arrays are not coerced because some
17
+ * columns (e.g. multi-enum) emit [] from their own paste logic and that is
18
+ * the desired in-model representation.
19
+ *
20
+ * If schemaPropertyInfo is omitted, the original value is returned unchanged.
21
+ */
22
+ export declare function coerceModelCellValue(value: unknown, schemaPropertyInfo?: SchemaPropertyInfo): unknown;
23
+ type PasteValueFn<T, PasteValue> = NonNullable<Column<T, unknown, PasteValue>['pasteValue']>;
24
+ /**
25
+ * Wraps a keyed column's `pasteValue` so that an empty pasted cell is coerced
26
+ * to the schema-correct blank for the column. If `schemaPropertyInfo` is
27
+ * omitted (e.g. the grid is rendered without a JSON schema), the original
28
+ * paste behavior is preserved.
29
+ */
30
+ export declare function wrapPasteValueWithSchemaCoercion<T extends Record<string, unknown>, PasteValue>(originalPasteValue: PasteValueFn<T, PasteValue> | undefined, columnName: string, schemaPropertyInfo?: SchemaPropertyInfo): PasteValueFn<T, PasteValue> | undefined;
31
+ export {};
32
+ //# sourceMappingURL=schemaAwarePasteValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaAwarePasteValue.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/utils/schemaAwarePasteValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAA;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAA;AAGlF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,kBAAkB,CAAC,EAAE,kBAAkB,GACtC,OAAO,CAYT;AAED,KAAK,YAAY,CAAC,CAAC,EAAE,UAAU,IAAI,WAAW,CAC5C,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,YAAY,CAAC,CAC7C,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAC9C,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,UAAU,EAEV,kBAAkB,EAAE,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,SAAS,EAC3D,UAAU,EAAE,MAAM,EAClB,kBAAkB,CAAC,EAAE,kBAAkB,GACtC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,SAAS,CAazC"}