synapse-react-client 4.0.19 → 4.0.20

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 (1553) hide show
  1. package/dist/SWC.index.d.ts +1 -1
  2. package/dist/SWC.index.js +1 -1
  3. package/dist/SWC.index.js.map +1 -1
  4. package/dist/aridhia-queries/aridhiaTokenExchange.js.map +1 -1
  5. package/dist/aridhia-queries/useGetAridhiaRequests.js.map +1 -1
  6. package/dist/assets/DefaultColorfulPortalCardBackground.js.map +1 -1
  7. package/dist/assets/GoogleIcon.js.map +1 -1
  8. package/dist/assets/GoogleIcon24.js.map +1 -1
  9. package/dist/assets/homepage/BlinkingLiveIcon.d.ts +1 -1
  10. package/dist/assets/homepage/BlinkingLiveIcon.js.map +1 -1
  11. package/dist/assets/homepage/aacr.js.map +1 -1
  12. package/dist/assets/homepage/cri.js.map +1 -1
  13. package/dist/assets/homepage/ctf.js.map +1 -1
  14. package/dist/assets/homepage/egress.js.map +1 -1
  15. package/dist/assets/homepage/facebook.js.map +1 -1
  16. package/dist/assets/homepage/fisma.js.map +1 -1
  17. package/dist/assets/homepage/gff.js.map +1 -1
  18. package/dist/assets/homepage/github.js.map +1 -1
  19. package/dist/assets/homepage/gray.js.map +1 -1
  20. package/dist/assets/homepage/hipaa-compliant.js.map +1 -1
  21. package/dist/assets/homepage/instagram.js.map +1 -1
  22. package/dist/assets/homepage/linkedin.js.map +1 -1
  23. package/dist/assets/homepage/ml-commons.js.map +1 -1
  24. package/dist/assets/homepage/nih-aging.js.map +1 -1
  25. package/dist/assets/homepage/nih-heart.js.map +1 -1
  26. package/dist/assets/homepage/nih-nci.js.map +1 -1
  27. package/dist/assets/homepage/nih-nimh.js.map +1 -1
  28. package/dist/assets/homepage/ntap.js.map +1 -1
  29. package/dist/assets/homepage/plan-item.js.map +1 -1
  30. package/dist/assets/homepage/powered-by-synapse-feature.js.map +1 -1
  31. package/dist/assets/homepage/precision-governance-feature.js.map +1 -1
  32. package/dist/assets/homepage/python.js.map +1 -1
  33. package/dist/assets/homepage/r.js.map +1 -1
  34. package/dist/assets/homepage/research-credit-feature.js.map +1 -1
  35. package/dist/assets/homepage/seamless-integration-feature.js.map +1 -1
  36. package/dist/assets/homepage/sloan.js.map +1 -1
  37. package/dist/assets/homepage/twitter.js.map +1 -1
  38. package/dist/assets/homepage/users.js.map +1 -1
  39. package/dist/assets/homepage/youtube.js.map +1 -1
  40. package/dist/assets/icons/AccessDataAnywhere.js.map +1 -1
  41. package/dist/assets/icons/AccessPending.js.map +1 -1
  42. package/dist/assets/icons/AccessPendingCloud.js.map +1 -1
  43. package/dist/assets/icons/AddAd.js.map +1 -1
  44. package/dist/assets/icons/AddToList.js.map +1 -1
  45. package/dist/assets/icons/Alert.js.map +1 -1
  46. package/dist/assets/icons/Arrow.js.map +1 -1
  47. package/dist/assets/icons/AwardScroll.js.map +1 -1
  48. package/dist/assets/icons/Baseline.js.map +1 -1
  49. package/dist/assets/icons/Cavatica.js.map +1 -1
  50. package/dist/assets/icons/CertifiedUser.js.map +1 -1
  51. package/dist/assets/icons/Challenge.js.map +1 -1
  52. package/dist/assets/icons/Checkbox/Checked.js.map +1 -1
  53. package/dist/assets/icons/Checkbox/Checked2.js.map +1 -1
  54. package/dist/assets/icons/Checkbox/Indeterminate.js.map +1 -1
  55. package/dist/assets/icons/Checkbox/Indeterminate2.js.map +1 -1
  56. package/dist/assets/icons/Checkbox/Unchecked.js.map +1 -1
  57. package/dist/assets/icons/Checkbox/Unchecked2.js.map +1 -1
  58. package/dist/assets/icons/ClappingHands.js.map +1 -1
  59. package/dist/assets/icons/CloudWarning.js.map +1 -1
  60. package/dist/assets/icons/CommunicateFindings.js.map +1 -1
  61. package/dist/assets/icons/CreateVersion.js.map +1 -1
  62. package/dist/assets/icons/DNA_Two.js.map +1 -1
  63. package/dist/assets/icons/Data2.js.map +1 -1
  64. package/dist/assets/icons/DoubleQuotes.js.map +1 -1
  65. package/dist/assets/icons/EmailAddressAdornment.js.map +1 -1
  66. package/dist/assets/icons/FileWithShield.js.map +1 -1
  67. package/dist/assets/icons/FileWithShield2.js.map +1 -1
  68. package/dist/assets/icons/FrontHand.js.map +1 -1
  69. package/dist/assets/icons/HandWithMoney.js.map +1 -1
  70. package/dist/assets/icons/IconCopy.js.map +1 -1
  71. package/dist/assets/icons/IconMinus.js.map +1 -1
  72. package/dist/assets/icons/IconPlus.js.map +1 -1
  73. package/dist/assets/icons/Java.js.map +1 -1
  74. package/dist/assets/icons/MintDoi.js.map +1 -1
  75. package/dist/assets/icons/MultiFile.js.map +1 -1
  76. package/dist/assets/icons/MultiFile2.js.map +1 -1
  77. package/dist/assets/icons/NoData.js.map +1 -1
  78. package/dist/assets/icons/NoSearchResults.js.map +1 -1
  79. package/dist/assets/icons/ORCIDIcon.js.map +1 -1
  80. package/dist/assets/icons/OpenBook.js.map +1 -1
  81. package/dist/assets/icons/Podium.js.map +1 -1
  82. package/dist/assets/icons/Python.js.map +1 -1
  83. package/dist/assets/icons/QueryStructuredData.js.map +1 -1
  84. package/dist/assets/icons/RLogo.js.map +1 -1
  85. package/dist/assets/icons/RecordProvenance.js.map +1 -1
  86. package/dist/assets/icons/RosetteRibbon.js.map +1 -1
  87. package/dist/assets/icons/SageFullLogo.js.map +1 -1
  88. package/dist/assets/icons/SearchImage.js.map +1 -1
  89. package/dist/assets/icons/ShareYourResearch.js.map +1 -1
  90. package/dist/assets/icons/Sort.js.map +1 -1
  91. package/dist/assets/icons/StarTrophy.js.map +1 -1
  92. package/dist/assets/icons/SynapseFullLogo.js.map +1 -1
  93. package/dist/assets/icons/SynapseIconWhite.js.map +1 -1
  94. package/dist/assets/icons/SynapseLogoName.js.map +1 -1
  95. package/dist/assets/icons/TasksIcon.js.map +1 -1
  96. package/dist/assets/icons/Terminal.js.map +1 -1
  97. package/dist/assets/icons/ThreeStars.js.map +1 -1
  98. package/dist/assets/icons/UnpackagableFile.js.map +1 -1
  99. package/dist/assets/icons/UnpackagableFile2.js.map +1 -1
  100. package/dist/assets/icons/ValidatedProfile.js.map +1 -1
  101. package/dist/assets/icons/account-certified.js.map +1 -1
  102. package/dist/assets/icons/account-enabled-mfa.js.map +1 -1
  103. package/dist/assets/icons/account-validated.js.map +1 -1
  104. package/dist/assets/icons/bioChemicalPhysical.js.map +1 -1
  105. package/dist/assets/icons/chart2.js.map +1 -1
  106. package/dist/assets/icons/columns.js.map +1 -1
  107. package/dist/assets/icons/columnsDarkTheme.js.map +1 -1
  108. package/dist/assets/icons/computationalTool.js.map +1 -1
  109. package/dist/assets/icons/dataReuse.js.map +1 -1
  110. package/dist/assets/icons/emailAddressAdornment2.js.map +1 -1
  111. package/dist/assets/icons/emailWithNotification.js.map +1 -1
  112. package/dist/assets/icons/error_page/maintenance.js.map +1 -1
  113. package/dist/assets/icons/error_page/no-access.js.map +1 -1
  114. package/dist/assets/icons/error_page/unavailable.js.map +1 -1
  115. package/dist/assets/icons/file.js.map +1 -1
  116. package/dist/assets/icons/inSilicoModel.js.map +1 -1
  117. package/dist/assets/icons/institution.js.map +1 -1
  118. package/dist/assets/icons/json-form-tool-no-submissions.js.map +1 -1
  119. package/dist/assets/icons/modelSystem.js.map +1 -1
  120. package/dist/assets/icons/mouse.js.map +1 -1
  121. package/dist/assets/icons/organizations.js.map +1 -1
  122. package/dist/assets/icons/person.js.map +1 -1
  123. package/dist/assets/icons/spatialProfiling.js.map +1 -1
  124. package/dist/assets/icons/standardDataModel.js.map +1 -1
  125. package/dist/assets/icons/study-active.js.map +1 -1
  126. package/dist/assets/icons/study-complete.js.map +1 -1
  127. package/dist/assets/icons/subscribe_plus.js.map +1 -1
  128. package/dist/assets/icons/synapse-logo.js.map +1 -1
  129. package/dist/assets/icons/terms/CheckIcon.js.map +1 -1
  130. package/dist/assets/icons/translational.js.map +1 -1
  131. package/dist/assets/icons/tree_horizontal.js.map +1 -1
  132. package/dist/assets/illustrations/acknowledgement_statements_illustration.js.map +1 -1
  133. package/dist/assets/illustrations/challenges_illustration.js.map +1 -1
  134. package/dist/assets/illustrations/cohort_builder_illustration.js.map +1 -1
  135. package/dist/assets/illustrations/data_access_management_illustration.js.map +1 -1
  136. package/dist/assets/illustrations/datasets_illustration.js.map +1 -1
  137. package/dist/assets/illustrations/diagonalLinePattern.js.map +1 -1
  138. package/dist/assets/illustrations/discussions_illustration.js.map +1 -1
  139. package/dist/assets/illustrations/docker_illustration.js.map +1 -1
  140. package/dist/assets/illustrations/donation_illustration.js.map +1 -1
  141. package/dist/assets/illustrations/favorites_illustration.js.map +1 -1
  142. package/dist/assets/illustrations/files_illustration.js.map +1 -1
  143. package/dist/assets/illustrations/following_illustration.js.map +1 -1
  144. package/dist/assets/illustrations/index.js.map +1 -1
  145. package/dist/assets/illustrations/left_dot_blob_dark_illustration.js.map +1 -1
  146. package/dist/assets/illustrations/left_dot_blob_illustration.js.map +1 -1
  147. package/dist/assets/illustrations/projects_illustration.js.map +1 -1
  148. package/dist/assets/illustrations/right_dot_blob_dark_illustration.js.map +1 -1
  149. package/dist/assets/illustrations/right_dot_blob_illustration.js.map +1 -1
  150. package/dist/assets/illustrations/tables_illustration.js.map +1 -1
  151. package/dist/assets/illustrations/teams_illustration.js.map +1 -1
  152. package/dist/assets/illustrations/trash_can_illustration.js.map +1 -1
  153. package/dist/assets/illustrations/underconstruction_illustration.js.map +1 -1
  154. package/dist/assets/illustrations/wikis_illustration.js.map +1 -1
  155. package/dist/assets/logos/other/ad-workbench-logo.js.map +1 -1
  156. package/dist/assets/logos/other/cavatica-logo.js.map +1 -1
  157. package/dist/assets/logos/other/pluto-logo.js.map +1 -1
  158. package/dist/assets/logos/other/terra-logo.js.map +1 -1
  159. package/dist/assets/mui_components/AccessManagement.js.map +1 -1
  160. package/dist/assets/mui_components/AccountCertified.js.map +1 -1
  161. package/dist/assets/mui_components/AccountRegistered.js.map +1 -1
  162. package/dist/assets/mui_components/AccountValidated.js.map +1 -1
  163. package/dist/assets/mui_components/ActionKey.js.map +1 -1
  164. package/dist/assets/mui_components/BioChemicalPhysical.js.map +1 -1
  165. package/dist/assets/mui_components/Chromatin.js.map +1 -1
  166. package/dist/assets/mui_components/Clinical.js.map +1 -1
  167. package/dist/assets/mui_components/ComputationalTool.js.map +1 -1
  168. package/dist/assets/mui_components/Data.js.map +1 -1
  169. package/dist/assets/mui_components/DataLocked.js.map +1 -1
  170. package/dist/assets/mui_components/DataReuse.js.map +1 -1
  171. package/dist/assets/mui_components/Dataset.js.map +1 -1
  172. package/dist/assets/mui_components/DatasetCollection.js.map +1 -1
  173. package/dist/assets/mui_components/Docker.js.map +1 -1
  174. package/dist/assets/mui_components/GeneExpression.js.map +1 -1
  175. package/dist/assets/mui_components/GeneVariants.js.map +1 -1
  176. package/dist/assets/mui_components/HelpChatBubble.js.map +1 -1
  177. package/dist/assets/mui_components/Imaging.js.map +1 -1
  178. package/dist/assets/mui_components/InSilicoModel.js.map +1 -1
  179. package/dist/assets/mui_components/Kinomics.js.map +1 -1
  180. package/dist/assets/mui_components/LineGraph.js.map +1 -1
  181. package/dist/assets/mui_components/ModelSystem.js.map +1 -1
  182. package/dist/assets/mui_components/Other.js.map +1 -1
  183. package/dist/assets/mui_components/PackagableFile.js.map +1 -1
  184. package/dist/assets/mui_components/PackagableFile2.js.map +1 -1
  185. package/dist/assets/mui_components/Proteomics.js.map +1 -1
  186. package/dist/assets/mui_components/Rat.js.map +1 -1
  187. package/dist/assets/mui_components/SpatialProfiling.js.map +1 -1
  188. package/dist/assets/sustainability/darkDialPosition1.js.map +1 -1
  189. package/dist/assets/sustainability/darkDialPosition2.js.map +1 -1
  190. package/dist/assets/sustainability/darkDialPosition3.js.map +1 -1
  191. package/dist/assets/sustainability/darkDialPosition4.js.map +1 -1
  192. package/dist/assets/sustainability/dialPosition1.js.map +1 -1
  193. package/dist/assets/sustainability/dialPosition2.js.map +1 -1
  194. package/dist/assets/sustainability/dialPosition3.js.map +1 -1
  195. package/dist/assets/sustainability/dialPosition4.js.map +1 -1
  196. package/dist/assets/themed_icons/Active.js.map +1 -1
  197. package/dist/assets/themed_icons/Chart.js.map +1 -1
  198. package/dist/assets/themed_icons/Close.js.map +1 -1
  199. package/dist/assets/themed_icons/Collapse.js.map +1 -1
  200. package/dist/assets/themed_icons/Columns.js.map +1 -1
  201. package/dist/assets/themed_icons/ColumnsDark.js.map +1 -1
  202. package/dist/assets/themed_icons/Database.js.map +1 -1
  203. package/dist/assets/themed_icons/Download.js.map +1 -1
  204. package/dist/assets/themed_icons/Expand.js.map +1 -1
  205. package/dist/assets/themed_icons/Explore.js.map +1 -1
  206. package/dist/assets/themed_icons/ExternalLink.js.map +1 -1
  207. package/dist/assets/themed_icons/Filter.js.map +1 -1
  208. package/dist/assets/themed_icons/Program.js.map +1 -1
  209. package/dist/assets/themed_icons/Project.js.map +1 -1
  210. package/dist/assets/themed_icons/Publication.js.map +1 -1
  211. package/dist/assets/themed_icons/Search.js.map +1 -1
  212. package/dist/assets/themed_icons/Settings.js.map +1 -1
  213. package/dist/assets/themed_icons/SortDown.js.map +1 -1
  214. package/dist/assets/themed_icons/SortUp.js.map +1 -1
  215. package/dist/assets/themed_icons/SqlEditorIcon.js.map +1 -1
  216. package/dist/assets/themed_icons/Study.js.map +1 -1
  217. package/dist/assets/themed_icons/ToolClinical.js.map +1 -1
  218. package/dist/assets/themed_icons/ToolComputational.js.map +1 -1
  219. package/dist/assets/themed_icons/ToolExperimental.js.map +1 -1
  220. package/dist/assets/themed_icons/VerticalDots.js.map +1 -1
  221. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js.map +1 -1
  222. package/dist/components/AccessRequirement/EntityActionsRequired.js.map +1 -1
  223. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.js.map +1 -1
  224. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js.map +1 -1
  225. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js +10 -11
  226. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
  227. package/dist/components/AccessRequirementList/AccessRequirementList.js +73 -76
  228. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  229. package/dist/components/AccessRequirementList/AccessRequirementListItem.js.map +1 -1
  230. package/dist/components/AccessRequirementList/AccessRequirementListUtils.js.map +1 -1
  231. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/CancelRequestDataAccess.js.map +1 -1
  232. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
  233. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js.map +1 -1
  234. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DocumentTemplate.js.map +1 -1
  235. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js.map +1 -1
  236. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItem.js.map +1 -1
  237. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.js.map +1 -1
  238. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestDataAccessSuccess.js.map +1 -1
  239. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
  240. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.js.map +1 -1
  241. package/dist/components/AccessRequirementList/RequirementItem/AuthenticatedRequirement.js.map +1 -1
  242. package/dist/components/AccessRequirementList/RequirementItem/CertificationRequirement.js.map +1 -1
  243. package/dist/components/AccessRequirementList/RequirementItem/LockAccessRequirementItem.js.map +1 -1
  244. package/dist/components/AccessRequirementList/RequirementItem/RequirementItem.js.map +1 -1
  245. package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js.map +1 -1
  246. package/dist/components/AccessRequirementList/RequirementItem/TwoFactorAuthEnabledRequirement.js.map +1 -1
  247. package/dist/components/AccessRequirementList/RequirementItem/UnmanagedACTAccessRequirementItem.js.map +1 -1
  248. package/dist/components/AccessRequirementList/RequirementItem/ValidationRequirement.js.map +1 -1
  249. package/dist/components/AccessRequirementRelatedProjectsList/AccessRequirementRelatedProjectsList.js.map +1 -1
  250. package/dist/components/AccessTokenPage/AccessTokenCard/AccessTokenCard.js.map +1 -1
  251. package/dist/components/AccessTokenPage/AccessTokenPage.js.map +1 -1
  252. package/dist/components/AccessTokenPage/CreateAccessTokenModal.js.map +1 -1
  253. package/dist/components/AccountLevelBadge/AccountLevelBadge.js.map +1 -1
  254. package/dist/components/AccountLevelBadges/AccountLevelBadges.js.map +1 -1
  255. package/dist/components/AccountLevelBadges/useRevokeCertificationUI.js.map +1 -1
  256. package/dist/components/AcknowledgementsPage/AcknowledgementsDialog.js.map +1 -1
  257. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
  258. package/dist/components/AcknowledgementsPage/StudyAcknowledgement.js.map +1 -1
  259. package/dist/components/AcknowledgementsPage/StudyAcknowledgements.js.map +1 -1
  260. package/dist/components/AclEditor/AclEditor.js.map +1 -1
  261. package/dist/components/AclEditor/AclEditor.test-utils.js.map +1 -1
  262. package/dist/components/AclEditor/AclEditorSkeleton.js.map +1 -1
  263. package/dist/components/AclEditor/PermissionLevelMenu.js.map +1 -1
  264. package/dist/components/AclEditor/ReadOnlyPermissionLevel.js.map +1 -1
  265. package/dist/components/AclEditor/ResourceAccessAndUserGroupHeader.js +2 -4
  266. package/dist/components/AclEditor/ResourceAccessAndUserGroupHeader.js.map +1 -1
  267. package/dist/components/AclEditor/ResourceAccessItem.js.map +1 -1
  268. package/dist/components/AclEditor/useSortResourceAccessList.js.map +1 -1
  269. package/dist/components/AclEditor/useUpdateAcl.js.map +1 -1
  270. package/dist/components/AdaptiveTwoColumnLayout/AdaptiveTwoColumnLayout.js.map +1 -1
  271. package/dist/components/AddToDownloadListV2.js.map +1 -1
  272. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  273. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js.map +1 -1
  274. package/dist/components/Authentication/AuthenticationMethodSelection.js.map +1 -1
  275. package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
  276. package/dist/components/Authentication/LoginFlowBackButton.js.map +1 -1
  277. package/dist/components/Authentication/LoginForm.js.map +1 -1
  278. package/dist/components/Authentication/LoginMethod.js.map +1 -1
  279. package/dist/components/Authentication/LoginMethodButton.js.map +1 -1
  280. package/dist/components/Authentication/Logout.js.map +1 -1
  281. package/dist/components/Authentication/OneTimePasswordForm.js.map +1 -1
  282. package/dist/components/Authentication/PasswordField.js.map +1 -1
  283. package/dist/components/Authentication/RecoveryCodeForm.js.map +1 -1
  284. package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
  285. package/dist/components/Authentication/RegenerateBackupCodesWarning.js.map +1 -1
  286. package/dist/components/Authentication/Reset2FAWarning.js.map +1 -1
  287. package/dist/components/Authentication/StandaloneLoginForm.js.map +1 -1
  288. package/dist/components/Authentication/TOTPForm.js.map +1 -1
  289. package/dist/components/Authentication/TwoFactorAuthSettingsPanel.js.map +1 -1
  290. package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
  291. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  292. package/dist/components/Authentication/TwoFactorSecretDialog.js.map +1 -1
  293. package/dist/components/Authentication/UsernamePasswordForm.js.map +1 -1
  294. package/dist/components/BasePortalCard/BasePortalCard.js.map +1 -1
  295. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js.map +1 -1
  296. package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  297. package/dist/components/CTASectionWrapper/CTASectionWrapper.js.map +1 -1
  298. package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js.map +1 -1
  299. package/dist/components/CardContainer/CardContainer.js.map +1 -1
  300. package/dist/components/CardContainerLogic/CardContainerLogic.js.map +1 -1
  301. package/dist/components/CardDeck/CardDeck.Desktop.js.map +1 -1
  302. package/dist/components/CardDeck/CardDeck.Mobile.js.map +1 -1
  303. package/dist/components/CardDeck/CardDeck.js.map +1 -1
  304. package/dist/components/CardDeck/TableQueryCardDeck.js.map +1 -1
  305. package/dist/components/CardGridWithLinks/CardGridWithLinks.js.map +1 -1
  306. package/dist/components/CertificationQuiz/CertificationAnswer.js.map +1 -1
  307. package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
  308. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js.map +1 -1
  309. package/dist/components/ChallengeDetailPage/ChallengeDetailPage.js.map +1 -1
  310. package/dist/components/ChallengeRegisterButton/ChallengeRegisterButton.js.map +1 -1
  311. package/dist/components/ChallengeRequirementsModal/ChallengeRequirementsModal.js.map +1 -1
  312. package/dist/components/ChallengeSubmission/AddExternalRepo.js.map +1 -1
  313. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js.map +1 -1
  314. package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
  315. package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js +62 -64
  316. package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js.map +1 -1
  317. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
  318. package/dist/components/ChallengeSubmission/EvaluationQueueList.js.map +1 -1
  319. package/dist/components/ChallengeSubmission/SubmissionCommitList.js.map +1 -1
  320. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
  321. package/dist/components/ChallengeTeamWizard/ChallengeTeamSearch.js.map +1 -1
  322. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js.map +1 -1
  323. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js +96 -102
  324. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js.map +1 -1
  325. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
  326. package/dist/components/ChallengeTeamWizard/MembershipRequestForm.js.map +1 -1
  327. package/dist/components/ChallengeTeamWizard/OpenMembershipInvitation.js.map +1 -1
  328. package/dist/components/ChallengeTeamWizard/RegistrationSuccessful.js.map +1 -1
  329. package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js.map +1 -1
  330. package/dist/components/ChallengeTeamWizard/useCreateAndRegisterChallengeTeam.js.map +1 -1
  331. package/dist/components/ChangePassword/ChangePassword.js.map +1 -1
  332. package/dist/components/ChangePassword/ChangePasswordWithToken.js.map +1 -1
  333. package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
  334. package/dist/components/CitationPopover/CitationPopover.js.map +1 -1
  335. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  336. package/dist/components/CitationPopover/CitationPopoverUtils.js.map +1 -1
  337. package/dist/components/CitationPopover/useCitation.js.map +1 -1
  338. package/dist/components/ColorGradient/ColorGradient.js.map +1 -1
  339. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.js.map +1 -1
  340. package/dist/components/ColumnFilter/ColumnFilter.js.map +1 -1
  341. package/dist/components/ComponentCollapse.js.map +1 -1
  342. package/dist/components/ConfirmationDialog/ConfirmationDialog.js.map +1 -1
  343. package/dist/components/CookiesNotification/CookiePreferencesDialog.js.map +1 -1
  344. package/dist/components/CookiesNotification/CookiesNotification.d.ts.map +1 -1
  345. package/dist/components/CookiesNotification/CookiesNotification.js +9 -9
  346. package/dist/components/CookiesNotification/CookiesNotification.js.map +1 -1
  347. package/dist/components/CopyToClipboardIcon.js.map +1 -1
  348. package/dist/components/CopyToClipboardInput/CopyToClipboardInput.js.map +1 -1
  349. package/dist/components/CopyToClipboardString/CopyToClipboardString.js.map +1 -1
  350. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js.map +1 -1
  351. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizardUtils.js.map +1 -1
  352. package/dist/components/CreateProjectModal/CreateProjectModal.js.map +1 -1
  353. package/dist/components/CreateProjectModal/ProjectVisibilityRadioGroup.js.map +1 -1
  354. package/dist/components/CreateTableViewWizard/CreateTableViewWizard.js.map +1 -1
  355. package/dist/components/CreateTableViewWizard/CreateTableViewWizardUtils.js.map +1 -1
  356. package/dist/components/CreateTableViewWizard/TableNameForm.js.map +1 -1
  357. package/dist/components/CreateTableViewWizard/TableTypeSelection.js.map +1 -1
  358. package/dist/components/CreateTableViewWizard/ViewTypeSelection.js.map +1 -1
  359. package/dist/components/CrispChat/CrispChat.js.map +1 -1
  360. package/dist/components/DataExplorer/DataExplorer.js +28 -31
  361. package/dist/components/DataExplorer/DataExplorer.js.map +1 -1
  362. package/dist/components/DataGrid/DataGrid.js +72 -72
  363. package/dist/components/DataGrid/DataGrid.js.map +1 -1
  364. package/dist/components/DataGrid/DataGridTypes.js.map +1 -1
  365. package/dist/components/DataGrid/DataGridWebSocket.d.ts +2 -0
  366. package/dist/components/DataGrid/DataGridWebSocket.d.ts.map +1 -1
  367. package/dist/components/DataGrid/DataGridWebSocket.js +9 -10
  368. package/dist/components/DataGrid/DataGridWebSocket.js.map +1 -1
  369. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js.map +1 -1
  370. package/dist/components/DataGrid/StartGridSession.js.map +1 -1
  371. package/dist/components/DataGrid/SynapseGrid.d.ts +3 -1
  372. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  373. package/dist/components/DataGrid/SynapseGrid.js +219 -211
  374. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  375. package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
  376. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js.map +1 -1
  377. package/dist/components/DataGrid/columns/DateTimeColumn.js.map +1 -1
  378. package/dist/components/DataGrid/columns/GridAutocompleteChip.js.map +1 -1
  379. package/dist/components/DataGrid/columns/useGridAutocompleteState.js.map +1 -1
  380. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js.map +1 -1
  381. package/dist/components/DataGrid/components/ExportCsvFromGridButton.js.map +1 -1
  382. package/dist/components/DataGrid/components/GridMenuButton/GridMenuButton.js.map +1 -1
  383. package/dist/components/DataGrid/components/GridSessionSelectionField.js.map +1 -1
  384. package/dist/components/DataGrid/components/UploadCsvToGridButton.js.map +1 -1
  385. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js.map +1 -1
  386. package/dist/components/DataGrid/components/ValidationAlert.js.map +1 -1
  387. package/dist/components/DataGrid/components/contextMenu.js.map +1 -1
  388. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js +2 -0
  389. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js.map +1 -1
  390. package/dist/components/DataGrid/hooks/useExportDataGridToCsv.js.map +1 -1
  391. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.js.map +1 -1
  392. package/dist/components/DataGrid/hooks/useGridReplicaUsers.js.map +1 -1
  393. package/dist/components/DataGrid/hooks/useGridUndoRedo.js.map +1 -1
  394. package/dist/components/DataGrid/hooks/useRemoteSelections.js.map +1 -1
  395. package/dist/components/DataGrid/hooks/useStack.js.map +1 -1
  396. package/dist/components/DataGrid/useCRDTModelView.js.map +1 -1
  397. package/dist/components/DataGrid/useDataGridWebsocket.d.ts +2 -0
  398. package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
  399. package/dist/components/DataGrid/useDataGridWebsocket.js +12 -2
  400. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  401. package/dist/components/DataGrid/useInitializeGridConnection.js.map +1 -1
  402. package/dist/components/DataGrid/useMergeGridWithRecordSet.js.map +1 -1
  403. package/dist/components/DataGrid/useMergeGridWithSource.js.map +1 -1
  404. package/dist/components/DataGrid/useMergeGridWithTable.js.map +1 -1
  405. package/dist/components/DataGrid/utils/DataGridUtils.js.map +1 -1
  406. package/dist/components/DataGrid/utils/MessageCounter.js.map +1 -1
  407. package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
  408. package/dist/components/DataGrid/utils/calculateColumnWidth.js.map +1 -1
  409. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  410. package/dist/components/DataGrid/utils/computeReplicaSelectionModel.js.map +1 -1
  411. package/dist/components/DataGrid/utils/convertActionToModelChange.js.map +1 -1
  412. package/dist/components/DataGrid/utils/createTestModel.js.map +1 -1
  413. package/dist/components/DataGrid/utils/enrichRowsWithChangeInfo.js.map +1 -1
  414. package/dist/components/DataGrid/utils/extractColumnValidationMessages.js.map +1 -1
  415. package/dist/components/DataGrid/utils/getCellAuthorSid.js.map +1 -1
  416. package/dist/components/DataGrid/utils/getCellClassName.js.map +1 -1
  417. package/dist/components/DataGrid/utils/getChangeTooltipText.js.map +1 -1
  418. package/dist/components/DataGrid/utils/getEmptyValue.js.map +1 -1
  419. package/dist/components/DataGrid/utils/getReplicaCategory.js.map +1 -1
  420. package/dist/components/DataGrid/utils/isValidationUpToDateForRow.js.map +1 -1
  421. package/dist/components/DataGrid/utils/json-rx/JsonRx.js.map +1 -1
  422. package/dist/components/DataGrid/utils/json-rx/JsonRxMessage.js.map +1 -1
  423. package/dist/components/DataGrid/utils/json-rx/JsonRxNotification.js.map +1 -1
  424. package/dist/components/DataGrid/utils/json-rx/JsonRxRequest.js.map +1 -1
  425. package/dist/components/DataGrid/utils/json-rx/JsonRxRequestComplete.js.map +1 -1
  426. package/dist/components/DataGrid/utils/json-rx/JsonRxResponse.js.map +1 -1
  427. package/dist/components/DataGrid/utils/json-rx/JsonRxResponseComplete.js.map +1 -1
  428. package/dist/components/DataGrid/utils/logicalTimestampToString.js.map +1 -1
  429. package/dist/components/DataGrid/utils/mapOperationsToModelChanges.js.map +1 -1
  430. package/dist/components/DataGrid/utils/modelColsToGrid.js.map +1 -1
  431. package/dist/components/DataGrid/utils/modelRowsToGrid.js.map +1 -1
  432. package/dist/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType.js.map +1 -1
  433. package/dist/components/DataGrid/utils/replicaSelectionToGridSelection.js.map +1 -1
  434. package/dist/components/DataGrid/utils/schemaAwarePasteValue.js.map +1 -1
  435. package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
  436. package/dist/components/DatasetJsonLdScript.js.map +1 -1
  437. package/dist/components/DateTimePicker/DateTimePicker.js.map +1 -1
  438. package/dist/components/Dialog/ConfirmCloseWithoutSavingDialog.js.map +1 -1
  439. package/dist/components/DialogBase.js.map +1 -1
  440. package/dist/components/DirectDownload/DirectDownload.js.map +1 -1
  441. package/dist/components/DirectDownload/FileEntityDirectDownload.js.map +1 -1
  442. package/dist/components/DirectDownloadButton.js.map +1 -1
  443. package/dist/components/DownloadCart/ActionRequiredCard/ActionRequiredCard.js.map +1 -1
  444. package/dist/components/DownloadCart/ActionRequiredListItem.js.map +1 -1
  445. package/dist/components/DownloadCart/AvailableForDownloadTable.js.map +1 -1
  446. package/dist/components/DownloadCart/CreatePackageV2.js.map +1 -1
  447. package/dist/components/DownloadCart/DirectProgrammaticDownload.js.map +1 -1
  448. package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
  449. package/dist/components/DownloadCart/DownloadDetails.js.map +1 -1
  450. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  451. package/dist/components/DownloadCart/DownloadListActionsRequired.js.map +1 -1
  452. package/dist/components/DownloadCart/DownloadListStats.js.map +1 -1
  453. package/dist/components/DownloadCart/DownloadListTable.js.map +1 -1
  454. package/dist/components/DownloadCart/EnableTwoFaRequirementCard.js.map +1 -1
  455. package/dist/components/DownloadCart/MeetAccessRequirementCard.js.map +1 -1
  456. package/dist/components/DownloadCart/RequestDownloadCard.js.map +1 -1
  457. package/dist/components/DownloadCart/ShowDownloadV2.js.map +1 -1
  458. package/dist/components/DownloadCart/TableQueryActionsRequired.js.map +1 -1
  459. package/dist/components/DownloadCart/fileNameUtils.js.map +1 -1
  460. package/dist/components/DraggableDialog/DraggableDialog.js.map +1 -1
  461. package/dist/components/DropdownSelect/DropdownSelect.js.map +1 -1
  462. package/dist/components/DynamicForm/DynamicForm.js.map +1 -1
  463. package/dist/components/DynamicForm/DynamicFormModal.js.map +1 -1
  464. package/dist/components/Ecosystem/EcosystemCard.js.map +1 -1
  465. package/dist/components/Ecosystem/EcosystemLayout.js.map +1 -1
  466. package/dist/components/Ecosystem/EcosystemSkeleton.js.map +1 -1
  467. package/dist/components/Ecosystem/TableQueryEcosystem.js.map +1 -1
  468. package/dist/components/EntityAclEditor/CreateOrDeleteLocalSharingSettingsButton.js.map +1 -1
  469. package/dist/components/EntityAclEditor/EntityAclEditor.js.map +1 -1
  470. package/dist/components/EntityAclEditor/EntityAclEditorModal.js.map +1 -1
  471. package/dist/components/EntityAclEditor/InheritanceMessage.js.map +1 -1
  472. package/dist/components/EntityAclEditor/OpenData.js.map +1 -1
  473. package/dist/components/EntityAclEditor/useNotifyNewACLUsers.js.map +1 -1
  474. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +68 -70
  475. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  476. package/dist/components/EntityCitation/EntityCitation.js.map +1 -1
  477. package/dist/components/EntityCitation/EntityCitationUtils.js.map +1 -1
  478. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +32 -35
  479. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  480. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
  481. package/dist/components/EntityFinder/Breadcrumbs.js.map +1 -1
  482. package/dist/components/EntityFinder/EntityFinder.js +134 -136
  483. package/dist/components/EntityFinder/EntityFinder.js.map +1 -1
  484. package/dist/components/EntityFinder/EntityFinderModal.js.map +1 -1
  485. package/dist/components/EntityFinder/EntityIdTextField.js.map +1 -1
  486. package/dist/components/EntityFinder/VersionSelectionType.js.map +1 -1
  487. package/dist/components/EntityFinder/details/EntityDetailsList.js +20 -20
  488. package/dist/components/EntityFinder/details/EntityDetailsList.js.map +1 -1
  489. package/dist/components/EntityFinder/details/configurations/EntityChildrenDetails.js.map +1 -1
  490. package/dist/components/EntityFinder/details/configurations/FavoritesDetails.js.map +1 -1
  491. package/dist/components/EntityFinder/details/configurations/ProjectListDetails.js.map +1 -1
  492. package/dist/components/EntityFinder/details/configurations/ReferenceDetails.js.map +1 -1
  493. package/dist/components/EntityFinder/details/configurations/SearchDetails.js.map +1 -1
  494. package/dist/components/EntityFinder/details/view/DetailsView.js +67 -67
  495. package/dist/components/EntityFinder/details/view/DetailsView.js.map +1 -1
  496. package/dist/components/EntityFinder/details/view/VersionColumnHeader.js +1 -1
  497. package/dist/components/EntityFinder/details/view/VersionColumnHeader.js.map +1 -1
  498. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js.map +1 -1
  499. package/dist/components/EntityFinder/details/view/table/CreatedOnCell.js.map +1 -1
  500. package/dist/components/EntityFinder/details/view/table/DateCell.js.map +1 -1
  501. package/dist/components/EntityFinder/details/view/table/EntityBadgeIconsCell.js.map +1 -1
  502. package/dist/components/EntityFinder/details/view/table/EntityFinderCheckboxCell.js.map +1 -1
  503. package/dist/components/EntityFinder/details/view/table/EntityFinderVersionCell.js.map +1 -1
  504. package/dist/components/EntityFinder/details/view/table/EntityNameCell.js.map +1 -1
  505. package/dist/components/EntityFinder/details/view/table/EntityTypeCell.js.map +1 -1
  506. package/dist/components/EntityFinder/details/view/table/FileEntityDirectDownloadCell.js.map +1 -1
  507. package/dist/components/EntityFinder/details/view/table/FileEntityMD5Cell.js.map +1 -1
  508. package/dist/components/EntityFinder/details/view/table/FileEntitySizeCell.js.map +1 -1
  509. package/dist/components/EntityFinder/details/view/table/ModifiedByCell.js.map +1 -1
  510. package/dist/components/EntityFinder/details/view/table/ModifiedOnCell.js.map +1 -1
  511. package/dist/components/EntityFinder/details/view/table/ParentProjectCell.js.map +1 -1
  512. package/dist/components/EntityFinder/details/view/table/UserBadgeCell.js.map +1 -1
  513. package/dist/components/EntityFinder/tree/EntityTree.js +80 -80
  514. package/dist/components/EntityFinder/tree/EntityTree.js.map +1 -1
  515. package/dist/components/EntityFinder/tree/VirtualizedTree.js +31 -31
  516. package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
  517. package/dist/components/EntityFinder/useEntitySelection.js.map +1 -1
  518. package/dist/components/EntityForm/EntityForm.js.map +1 -1
  519. package/dist/components/EntityHeaderTable/DebouncedInput.js.map +1 -1
  520. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  521. package/dist/components/EntityHeaderTable/EntityHeaderTableCellRenderers.js.map +1 -1
  522. package/dist/components/EntityHeaderTable/Filter.js.map +1 -1
  523. package/dist/components/EntityHeaderTable/useEntityHeaderTableState.js.map +1 -1
  524. package/dist/components/EntityIcon.js.map +1 -1
  525. package/dist/components/EntityLink.js.map +1 -1
  526. package/dist/components/EntitySubjectsSelector/EntitySubjectsSelector.js.map +1 -1
  527. package/dist/components/EntityTreeTable/EntityTreeTable.js.map +1 -1
  528. package/dist/components/EntityTreeTable/components/AutoLoadMore.js.map +1 -1
  529. package/dist/components/EntityTreeTable/components/ColumnHeaders.js.map +1 -1
  530. package/dist/components/EntityTreeTable/components/EntityBadgeIconsCell.js.map +1 -1
  531. package/dist/components/EntityTreeTable/components/EntityNameCell.js.map +1 -1
  532. package/dist/components/EntityTreeTable/components/EntityTreeTableContext.js.map +1 -1
  533. package/dist/components/EntityTreeTable/components/EntityTreeTableRow.js.map +1 -1
  534. package/dist/components/EntityTreeTable/components/EntityTreeTableView.js.map +1 -1
  535. package/dist/components/EntityTreeTable/components/IdCell.js.map +1 -1
  536. package/dist/components/EntityTreeTable/components/IdColumnHeader.js.map +1 -1
  537. package/dist/components/EntityTreeTable/hooks/useEntityTreeState.js.map +1 -1
  538. package/dist/components/EntityTreeTable/hooks/useTableColumns.js.map +1 -1
  539. package/dist/components/EntityTreeTable/hooks/useTableData.js.map +1 -1
  540. package/dist/components/EntityTreeTable/hooks/useTreeOperationsWithDirectFetch.js.map +1 -1
  541. package/dist/components/EntityUpload/EntityUpload.js.map +1 -1
  542. package/dist/components/EntityUpload/EntityUploadModal.js +29 -31
  543. package/dist/components/EntityUpload/EntityUploadModal.js.map +1 -1
  544. package/dist/components/EntityUpload/EntityUploadPromptDialog.js.map +1 -1
  545. package/dist/components/EntityUpload/ExternalObjectStoreCredentialsForm.js.map +1 -1
  546. package/dist/components/EntityUpload/FileUploadProgress.js.map +1 -1
  547. package/dist/components/EntityUpload/LinkToURL.js.map +1 -1
  548. package/dist/components/EntityUpload/ProjectStorageLimitAlert.js.map +1 -1
  549. package/dist/components/EntityViewScopeEditor/EntityViewMaskEditor.js.map +1 -1
  550. package/dist/components/EntityViewScopeEditor/EntityViewScopeEditor.js.map +1 -1
  551. package/dist/components/EntityViewScopeEditor/EntityViewScopeEditorModal.js.map +1 -1
  552. package/dist/components/Evaluation/CreatedOnByUserDiv.js.map +1 -1
  553. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.js.map +1 -1
  554. package/dist/components/Evaluation/EvaluationCard.js.map +1 -1
  555. package/dist/components/Evaluation/EvaluationEditor.js.map +1 -1
  556. package/dist/components/Evaluation/EvaluationEditorPage.js.map +1 -1
  557. package/dist/components/Evaluation/EvaluationRoundEditor.js.map +1 -1
  558. package/dist/components/Evaluation/EvaluationRoundEditorDropdown.js.map +1 -1
  559. package/dist/components/Evaluation/EvaluationRoundEditorList.js.map +1 -1
  560. package/dist/components/Evaluation/input_models/models.js.map +1 -1
  561. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptions.js.map +1 -1
  562. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js.map +1 -1
  563. package/dist/components/EvaluationFinder/EvaluationFinder.js.map +1 -1
  564. package/dist/components/ExperimentalMode/ExperimentalMode.d.ts.map +1 -1
  565. package/dist/components/ExperimentalMode/ExperimentalMode.js +24 -30
  566. package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
  567. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
  568. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  569. package/dist/components/FeaturedDataTabs/FacetPlotsCardGrid.js.map +1 -1
  570. package/dist/components/FeaturedDataTabs/FeaturedDataPlots.js.map +1 -1
  571. package/dist/components/FeaturedDataTabs/FeaturedDataTabs.js.map +1 -1
  572. package/dist/components/FeaturedDataTabs/QueryPerFacetPlotsCard.js.map +1 -1
  573. package/dist/components/FeaturedDataTabs/SingleQueryFacetPlotsCards.js.map +1 -1
  574. package/dist/components/FeaturedResearch/FeaturedResearch.js +16 -18
  575. package/dist/components/FeaturedResearch/FeaturedResearch.js.map +1 -1
  576. package/dist/components/FeaturedToolsList/FeaturedToolCard.js.map +1 -1
  577. package/dist/components/FeaturedToolsList/FeaturedToolsList.js.map +1 -1
  578. package/dist/components/FilePreview/EntityPreview.js.map +1 -1
  579. package/dist/components/FilePreview/FileEntityPreview.js.map +1 -1
  580. package/dist/components/FilePreview/FileHandleContentRenderer.js.map +1 -1
  581. package/dist/components/FilePreview/HtmlPreview/HtmlPreview.js.map +1 -1
  582. package/dist/components/FilePreview/PdfPreview.js.map +1 -1
  583. package/dist/components/FilePreview/PreviewRendererType.js.map +1 -1
  584. package/dist/components/FilePreview/PreviewUtils.js.map +1 -1
  585. package/dist/components/FileUpload/FileUpload.js.map +1 -1
  586. package/dist/components/Forum/DiscussionReply.js.map +1 -1
  587. package/dist/components/Forum/DiscussionSearchResult.js.map +1 -1
  588. package/dist/components/Forum/DiscussionThread.js.map +1 -1
  589. package/dist/components/Forum/ForumPage.js.map +1 -1
  590. package/dist/components/Forum/ForumTable.js.map +1 -1
  591. package/dist/components/Forum/ForumThreadEditor.js.map +1 -1
  592. package/dist/components/Forum/SubscribersModal.js.map +1 -1
  593. package/dist/components/ForumSearch/ForumSearch.js.map +1 -1
  594. package/dist/components/FullTextSearch/FullTextSearch.js.map +1 -1
  595. package/dist/components/FullTextSearch/FullTextSearchUtils.js.map +1 -1
  596. package/dist/components/FullWidthAlert/FullWidthAlert.js.map +1 -1
  597. package/dist/components/GenericCard/BioregistryRules.js.map +1 -1
  598. package/dist/components/GenericCard/CardUtils.js.map +1 -1
  599. package/dist/components/GenericCard/CollapsibleDescription.js.map +1 -1
  600. package/dist/components/GenericCard/CroissantButton/CroissantButton.js.map +1 -1
  601. package/dist/components/GenericCard/GenericCard.js.map +1 -1
  602. package/dist/components/GenericCard/GenericCardActionButton.js.map +1 -1
  603. package/dist/components/GenericCard/GenericCardIcon.js.map +1 -1
  604. package/dist/components/GenericCard/GenericCardTitle.js.map +1 -1
  605. package/dist/components/GenericCard/LabelMaybeWithIcon.js.map +1 -1
  606. package/dist/components/GenericCard/Linkify.js.map +1 -1
  607. package/dist/components/GenericCard/PortalDOI/PortalDOI.js.map +1 -1
  608. package/dist/components/GenericCard/PortalDOI/PortalDOIUtils.js.map +1 -1
  609. package/dist/components/GenericCard/SynapseCardLabel.js +1 -1
  610. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  611. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  612. package/dist/components/GenericCard/useResolvedSynapseEntity.js.map +1 -1
  613. package/dist/components/Goals/Goals.Desktop.js.map +1 -1
  614. package/dist/components/Goals/Goals.Mobile.js.map +1 -1
  615. package/dist/components/Goals/Goals.js +25 -27
  616. package/dist/components/Goals/Goals.js.map +1 -1
  617. package/dist/components/GoalsV2/GoalsV2.Desktop.js.map +1 -1
  618. package/dist/components/GoalsV2/GoalsV2.Mobile.js.map +1 -1
  619. package/dist/components/GoalsV2/GoalsV2.js +14 -16
  620. package/dist/components/GoalsV2/GoalsV2.js.map +1 -1
  621. package/dist/components/GoalsV3/GoalsV3.Desktop.js.map +1 -1
  622. package/dist/components/GoalsV3/GoalsV3.Mobile.js.map +1 -1
  623. package/dist/components/GoalsV3/GoalsV3.js +14 -16
  624. package/dist/components/GoalsV3/GoalsV3.js.map +1 -1
  625. package/dist/components/GoogleAnalytics/GoogleAnalytics.js.map +1 -1
  626. package/dist/components/GoogleMap/GoogleMap.js.map +1 -1
  627. package/dist/components/GoogleMap/SynapseUserMarker.js.map +1 -1
  628. package/dist/components/HasAccess/AccessIcon.js +10 -10
  629. package/dist/components/HasAccess/AccessIcon.js.map +1 -1
  630. package/dist/components/HasAccess/HasAccessV2.js.map +1 -1
  631. package/dist/components/HasAccess/useHasAccess.js.map +1 -1
  632. package/dist/components/HeaderCard/HeaderCardV2.js.map +1 -1
  633. package/dist/components/HeaderCard.js.map +1 -1
  634. package/dist/components/HelpPopover/HelpPopover.js.map +1 -1
  635. package/dist/components/HexGrid/HexGrid.js.map +1 -1
  636. package/dist/components/IDUReport/IDUReport.js.map +1 -1
  637. package/dist/components/IDUReport/IDUReportSubmissionInfo.js.map +1 -1
  638. package/dist/components/Icon/Icon.js.map +1 -1
  639. package/dist/components/IconList.js.map +1 -1
  640. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  641. package/dist/components/IconSvgButton.js.map +1 -1
  642. package/dist/components/ImageCardGridWithLinks/ImageCardGridWithLinks.js +7 -9
  643. package/dist/components/ImageCardGridWithLinks/ImageCardGridWithLinks.js.map +1 -1
  644. package/dist/components/ImageFromSynapseTable.js.map +1 -1
  645. package/dist/components/InteractiveCopyIdsIcon.js.map +1 -1
  646. package/dist/components/JSONArrayEditor/JSONArrayEditor.js.map +1 -1
  647. package/dist/components/JSONArrayEditor/JSONArrayEditorModal.js.map +1 -1
  648. package/dist/components/JSONArrayEditor/useParseCsv.js.map +1 -1
  649. package/dist/components/JsonLdScript.js.map +1 -1
  650. package/dist/components/JsonSchemaForm/JsonSchemaForm.js.map +1 -1
  651. package/dist/components/JsonSchemaForm/templates/ArrayFieldDescriptionTemplate.js.map +1 -1
  652. package/dist/components/JsonSchemaForm/templates/ArrayFieldItemButtonTemplate.js.map +1 -1
  653. package/dist/components/JsonSchemaForm/templates/ArrayFieldItemTemplate.js.map +1 -1
  654. package/dist/components/JsonSchemaForm/templates/ArrayFieldTemplate.js.map +1 -1
  655. package/dist/components/JsonSchemaForm/templates/ArrayFieldTitleTemplate.js.map +1 -1
  656. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js.map +1 -1
  657. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js.map +1 -1
  658. package/dist/components/JsonSchemaForm/templates/DescriptionFieldTemplate.js.map +1 -1
  659. package/dist/components/JsonSchemaForm/templates/ErrorListTemplate.js.map +1 -1
  660. package/dist/components/JsonSchemaForm/templates/FieldDescriptionTable.js.map +1 -1
  661. package/dist/components/JsonSchemaForm/templates/FieldErrorTemplate.js.map +1 -1
  662. package/dist/components/JsonSchemaForm/templates/FieldTemplate.js.map +1 -1
  663. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  664. package/dist/components/JsonSchemaForm/widgets/BooleanWidget.js.map +1 -1
  665. package/dist/components/JsonSchemaForm/widgets/DateTimeWidget.js.map +1 -1
  666. package/dist/components/JsonSchemaForm/widgets/SelectWidget.js.map +1 -1
  667. package/dist/components/LoadingScreen/LoadingScreen.js.map +1 -1
  668. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.js.map +1 -1
  669. package/dist/components/Markdown/GovernanceMarkdownGithub.js.map +1 -1
  670. package/dist/components/Markdown/MarkdownCollapse.js.map +1 -1
  671. package/dist/components/Markdown/MarkdownEditor.js.map +1 -1
  672. package/dist/components/Markdown/MarkdownGithub.js.map +1 -1
  673. package/dist/components/Markdown/MarkdownPopover.js.map +1 -1
  674. package/dist/components/Markdown/MarkdownSynapse.d.ts.map +1 -1
  675. package/dist/components/Markdown/MarkdownSynapse.js +75 -106
  676. package/dist/components/Markdown/MarkdownSynapse.js.map +1 -1
  677. package/dist/components/Markdown/MarkdownUtils.d.ts +14 -4
  678. package/dist/components/Markdown/MarkdownUtils.d.ts.map +1 -1
  679. package/dist/components/Markdown/MarkdownUtils.js +38 -37
  680. package/dist/components/Markdown/MarkdownUtils.js.map +1 -1
  681. package/dist/components/Markdown/MarkdownWidget.js.map +1 -1
  682. package/dist/components/Markdown/SynapseWikiContext.js.map +1 -1
  683. package/dist/components/Markdown/UserMentionModal.js.map +1 -1
  684. package/dist/components/Markdown/widget/Bookmarks.js.map +1 -1
  685. package/dist/components/Markdown/widget/MarkdownButton.js.map +1 -1
  686. package/dist/components/Markdown/widget/MarkdownEntityPreview.js.map +1 -1
  687. package/dist/components/Markdown/widget/MarkdownIDUReport.js.map +1 -1
  688. package/dist/components/Markdown/widget/MarkdownProvenanceGraph.js.map +1 -1
  689. package/dist/components/Markdown/widget/MarkdownSynapseImage.js.map +1 -1
  690. package/dist/components/Markdown/widget/MarkdownSynapsePlot.js.map +1 -1
  691. package/dist/components/Markdown/widget/MarkdownSynapseTable.js.map +1 -1
  692. package/dist/components/Markdown/widget/MarkdownTableOfContents.js.map +1 -1
  693. package/dist/components/Markdown/widget/MarkdownUserOrTeamBadge.js.map +1 -1
  694. package/dist/components/Markdown/widget/MarkdownVideo.js.map +1 -1
  695. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  696. package/dist/components/ModalDownload/ModalDownload.FormSchema.js.map +1 -1
  697. package/dist/components/ModalDownload/ModalDownload.js.map +1 -1
  698. package/dist/components/MuiContainer.js.map +1 -1
  699. package/dist/components/OAuthClientAclEditor/OAuthAclEditorModal.js.map +1 -1
  700. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js.map +1 -1
  701. package/dist/components/OAuthClientManagement/CreateOAuthClient.js.map +1 -1
  702. package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
  703. package/dist/components/OrientationBanner/OrientationBanner.js.map +1 -1
  704. package/dist/components/PageProgress/PageProgress.js.map +1 -1
  705. package/dist/components/Plot/BarPlot.js.map +1 -1
  706. package/dist/components/Plot/DotPlot.js.map +1 -1
  707. package/dist/components/Plot/Plot.d.ts +12 -1
  708. package/dist/components/Plot/Plot.d.ts.map +1 -1
  709. package/dist/components/Plot/Plot.js +5 -1
  710. package/dist/components/Plot/Plot.js.map +1 -1
  711. package/dist/components/Plot/PlotPanelHeader.js.map +1 -1
  712. package/dist/components/Plot/SynapsePlot.js.map +1 -1
  713. package/dist/components/Plot/SynapseSankeyPlot.d.ts +12 -0
  714. package/dist/components/Plot/SynapseSankeyPlot.d.ts.map +1 -0
  715. package/dist/components/Plot/SynapseSankeyPlot.js +54 -0
  716. package/dist/components/Plot/SynapseSankeyPlot.js.map +1 -0
  717. package/dist/components/Plot/ThemesPlot.js.map +1 -1
  718. package/dist/components/Plot/UpsetPlot.js.map +1 -1
  719. package/dist/components/Plot/index.d.ts +3 -1
  720. package/dist/components/Plot/index.d.ts.map +1 -1
  721. package/dist/components/Plot/index.js +2 -1
  722. package/dist/components/Plot/safe-react-plotly-factory.js.map +1 -1
  723. package/dist/components/PortalAclEditor/PortalAclEditor.js.map +1 -1
  724. package/dist/components/PortalAclEditor/PortalAclEditorModal.js.map +1 -1
  725. package/dist/components/PortalFeatureHighlights/PortalFeatureHighlights.js.map +1 -1
  726. package/dist/components/PortalFeaturedPartners/PortalFeaturedPartners.js +4 -6
  727. package/dist/components/PortalFeaturedPartners/PortalFeaturedPartners.js.map +1 -1
  728. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.js.map +1 -1
  729. package/dist/components/PortalList/CreatePortalModal.js.map +1 -1
  730. package/dist/components/PortalList/PortalCard.js.map +1 -1
  731. package/dist/components/PortalList/PortalList.js.map +1 -1
  732. package/dist/components/PortalSectionHeader/PortalSectionHeader.js.map +1 -1
  733. package/dist/components/ProgrammaticInstructionsModal/ProgrammaticInstructionsModal.js +69 -69
  734. package/dist/components/ProgrammaticInstructionsModal/ProgrammaticInstructionsModal.js.map +1 -1
  735. package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js.map +1 -1
  736. package/dist/components/Programs/Programs.Desktop.js.map +1 -1
  737. package/dist/components/Programs/Programs.Mobile.js.map +1 -1
  738. package/dist/components/Programs/Programs.js.map +1 -1
  739. package/dist/components/ProjectStorage/ProjectDataAvailability.js.map +1 -1
  740. package/dist/components/ProvenanceGraph/ActivityNodeLabel.js.map +1 -1
  741. package/dist/components/ProvenanceGraph/EntityNodeLabel.js.map +1 -1
  742. package/dist/components/ProvenanceGraph/EntityPlaceholderNodeLabel.js.map +1 -1
  743. package/dist/components/ProvenanceGraph/ExpandGraphNodeLabel.js.map +1 -1
  744. package/dist/components/ProvenanceGraph/ExternalGraphNodeLabel.js.map +1 -1
  745. package/dist/components/ProvenanceGraph/ProvenanceEntityIcon.js.map +1 -1
  746. package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js.map +1 -1
  747. package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
  748. package/dist/components/ProvenanceGraph/ProvenanceGraphUtils.js.map +1 -1
  749. package/dist/components/ProvenanceGraph/ProvenanceUtils.js +13 -13
  750. package/dist/components/ProvenanceGraph/ProvenanceUtils.js.map +1 -1
  751. package/dist/components/ProvenanceGraph/UndefinedNodeLabel.js.map +1 -1
  752. package/dist/components/QueryContext/QueryContext.js.map +1 -1
  753. package/dist/components/QueryCount/QueryCount.js.map +1 -1
  754. package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
  755. package/dist/components/QuerySortSelector.js.map +1 -1
  756. package/dist/components/QueryVisualizationWrapper/NoContentPlaceholder.js.map +1 -1
  757. package/dist/components/QueryVisualizationWrapper/QueryVisualizationContext.js.map +1 -1
  758. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
  759. package/dist/components/QueryWrapper/QueryWrapper.js +27 -27
  760. package/dist/components/QueryWrapper/QueryWrapper.js.map +1 -1
  761. package/dist/components/QueryWrapper/QueryWrapperLoadingScreen.js.map +1 -1
  762. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js.map +1 -1
  763. package/dist/components/QueryWrapper/TableRowSelectionState.js.map +1 -1
  764. package/dist/components/QueryWrapper/ViewMoreQueryResultsButton.js.map +1 -1
  765. package/dist/components/QueryWrapper/generateEncodedPathAndQueryForSelectedFacetURL.js.map +1 -1
  766. package/dist/components/QueryWrapper/useComputeRowSelectionPrimaryKey.js.map +1 -1
  767. package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js.map +1 -1
  768. package/dist/components/QueryWrapper/useGetQueryMetadata.js.map +1 -1
  769. package/dist/components/QueryWrapper/useHasFacetedSelectColumn.js.map +1 -1
  770. package/dist/components/QueryWrapper/useOnQueryDataChange.js.map +1 -1
  771. package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
  772. package/dist/components/QueryWrapperPlotNav/LastUpdatedOn.js.map +1 -1
  773. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  774. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js.map +1 -1
  775. package/dist/components/QueryWrapperPlotNav/RowSetView.js.map +1 -1
  776. package/dist/components/QueryWrapperPlotNav/UseRowSet.js.map +1 -1
  777. package/dist/components/RORInstitutionField/RORInstitutionField.js.map +1 -1
  778. package/dist/components/RecentPublicationsGrid/RecentPublicationsGrid.js +6 -8
  779. package/dist/components/RecentPublicationsGrid/RecentPublicationsGrid.js.map +1 -1
  780. package/dist/components/RegisterPageLogoutPrompt/RegisterPageLogoutPrompt.js.map +1 -1
  781. package/dist/components/ReleaseCard/ReleaseCard.js.map +1 -1
  782. package/dist/components/ReleaseCard/ReleaseCardLarge.js.map +1 -1
  783. package/dist/components/ReleaseCard/ReleaseCardMedium.js.map +1 -1
  784. package/dist/components/ReleaseCard/ReleaseCardUtils.js.map +1 -1
  785. package/dist/components/RenderIfInView/RenderIfInView.js.map +1 -1
  786. package/dist/components/ResizableContainer/ResizableContainer.js.map +1 -1
  787. package/dist/components/ResizableContainer/hooks/useResizable.js.map +1 -1
  788. package/dist/components/Resources/Resources.Desktop.js.map +1 -1
  789. package/dist/components/Resources/Resources.Mobile.js.map +1 -1
  790. package/dist/components/Resources/Resources.js +8 -11
  791. package/dist/components/Resources/Resources.js.map +1 -1
  792. package/dist/components/RowDataTable/RowDataTable.js.map +1 -1
  793. package/dist/components/RowDataTable/RowDataTableWithQuery.js.map +1 -1
  794. package/dist/components/RssFeedCards/RssFeedCards.js.map +1 -1
  795. package/dist/components/SageResourcesPopover/SageResourcesPopover.js.map +1 -1
  796. package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.js.map +1 -1
  797. package/dist/components/SchemaDrivenAnnotationEditor/SchemaDrivenAnnotationEditor.js.map +1 -1
  798. package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.js.map +1 -1
  799. package/dist/components/SchemaDrivenAnnotationEditor/field/SynapseAnnotationsRJSFObjectField.js.map +1 -1
  800. package/dist/components/SchemaDrivenAnnotationEditor/template/AdditionalPropertyContext.js.map +1 -1
  801. package/dist/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.js.map +1 -1
  802. package/dist/components/SchemaDrivenAnnotationEditor/template/SynapseAnnotationsWrapIfAdditionalTemplate.js.map +1 -1
  803. package/dist/components/SchemaDrivenAnnotationEditor/widget/TextWidget.js.map +1 -1
  804. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
  805. package/dist/components/SearchQueryWrapper/SearchQueryWrapper.js.map +1 -1
  806. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.js.map +1 -1
  807. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  808. package/dist/components/SetBasicAccessRequirementFields/AccessRequirementTextInstructions.js.map +1 -1
  809. package/dist/components/SetBasicAccessRequirementFields/AccessRequirementWikiInstructions.js.map +1 -1
  810. package/dist/components/SetBasicAccessRequirementFields/AccessorRequirements.js.map +1 -1
  811. package/dist/components/SetBasicAccessRequirementFields/GovernanceUtils.js.map +1 -1
  812. package/dist/components/SetBasicAccessRequirementFields/SetBasicAccessRequirementFields.js.map +1 -1
  813. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
  814. package/dist/components/ShareThisPage/ShareThisPage.js.map +1 -1
  815. package/dist/components/ShowMore/ShowMore.js.map +1 -1
  816. package/dist/components/SignInButton.js.map +1 -1
  817. package/dist/components/SignInRequiredModal/SignInRequiredModal.js.map +1 -1
  818. package/dist/components/Skeleton/SkeletonButton.js.map +1 -1
  819. package/dist/components/Skeleton/SkeletonInlineBlock.js.map +1 -1
  820. package/dist/components/Skeleton/SkeletonParagraph.js.map +1 -1
  821. package/dist/components/Skeleton/SkeletonTable.js.map +1 -1
  822. package/dist/components/SmartLink/SmartButton.js.map +1 -1
  823. package/dist/components/SmartLink/SmartLink.js.map +1 -1
  824. package/dist/components/SmartLink/useSmartLink.js.map +1 -1
  825. package/dist/components/SourceAppImage.js.map +1 -1
  826. package/dist/components/SpinnerButton/SpinnerButton.js.map +1 -1
  827. package/dist/components/SqlDefinedTableEditor/SqlDefinedTableEditor.js.map +1 -1
  828. package/dist/components/SqlDefinedTableEditor/SqlDefinedTableEditorModal.js.map +1 -1
  829. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js.map +1 -1
  830. package/dist/components/StatisticsPlot.js.map +1 -1
  831. package/dist/components/StepperDialog/StepperDialog.js.map +1 -1
  832. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  833. package/dist/components/SubmissionViewScopeEditor/SubmissionViewScopeEditor.js.map +1 -1
  834. package/dist/components/SubmissionViewScopeEditor/SubmissionViewScopeEditorModal.js.map +1 -1
  835. package/dist/components/SubscriptionPage/ForumTopic.js.map +1 -1
  836. package/dist/components/SubscriptionPage/SubscriptionItem.js.map +1 -1
  837. package/dist/components/SubscriptionPage/SubscriptionPage.js.map +1 -1
  838. package/dist/components/SubscriptionPage/ThreadTopic.js.map +1 -1
  839. package/dist/components/SubscriptionPage/Topic.js.map +1 -1
  840. package/dist/components/SubsectionRowRenderer/SubsectionRowRenderer.js.map +1 -1
  841. package/dist/components/SustainabilityScorecard/Dial.js.map +1 -1
  842. package/dist/components/SustainabilityScorecard/DialLayout.js.map +1 -1
  843. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
  844. package/dist/components/SustainabilityScorecard/SustainabilityScorecardSummary.js.map +1 -1
  845. package/dist/components/SustainabilityScorecard/SustainabilityScorecardUtils.js.map +1 -1
  846. package/dist/components/SynapseChat/AccessLevelMenu.js.map +1 -1
  847. package/dist/components/SynapseChat/GridAgentChat.js.map +1 -1
  848. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  849. package/dist/components/SynapseChat/SynapseChatDialog.js.map +1 -1
  850. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  851. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  852. package/dist/components/SynapseChat/SynapsePortalChatDialog.js.map +1 -1
  853. package/dist/components/SynapseChat/extractMessageFromTraceEvent.js.map +1 -1
  854. package/dist/components/SynapseChat/useChatState.js.map +1 -1
  855. package/dist/components/SynapseFooter/SynapseFooter.js.map +1 -1
  856. package/dist/components/SynapseFooter/SynapseLinksColumn.js.map +1 -1
  857. package/dist/components/SynapseForm/DataDebug.js.map +1 -1
  858. package/dist/components/SynapseForm/Header.js.map +1 -1
  859. package/dist/components/SynapseForm/NavButtons.js.map +1 -1
  860. package/dist/components/SynapseForm/StepsSideNav.js.map +1 -1
  861. package/dist/components/SynapseForm/SummaryTable.js.map +1 -1
  862. package/dist/components/SynapseForm/SynapseForm.js.map +1 -1
  863. package/dist/components/SynapseForm/SynapseFormCheckboxWidget.js.map +1 -1
  864. package/dist/components/SynapseForm/SynapseFormCheckboxesWidget.js.map +1 -1
  865. package/dist/components/SynapseForm/SynapseFormRadioWidget.js.map +1 -1
  866. package/dist/components/SynapseForm/SynapseFormSubmissionGrid.js.map +1 -1
  867. package/dist/components/SynapseForm/SynapseFormUtils.js.map +1 -1
  868. package/dist/components/SynapseForm/SynapseFormWrapper.js.map +1 -1
  869. package/dist/components/SynapseForm/WarningDialog.js.map +1 -1
  870. package/dist/components/SynapseForm/types.js.map +1 -1
  871. package/dist/components/SynapseForm/useGetFormPropsFromSearchParams.js.map +1 -1
  872. package/dist/components/SynapseHomepageV2/FloatingBlobsBackground.js.map +1 -1
  873. package/dist/components/SynapseHomepageV2/HomepageStyles.js.map +1 -1
  874. package/dist/components/SynapseHomepageV2/SynapseByTheNumbers.js.map +1 -1
  875. package/dist/components/SynapseHomepageV2/SynapseByTheNumbersItem.js.map +1 -1
  876. package/dist/components/SynapseHomepageV2/SynapseFeatureItem.js.map +1 -1
  877. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js.map +1 -1
  878. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasets.js.map +1 -1
  879. package/dist/components/SynapseHomepageV2/SynapseFeatures.js.map +1 -1
  880. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js +18 -21
  881. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js.map +1 -1
  882. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js.map +1 -1
  883. package/dist/components/SynapseHomepageV2/SynapseHomepageSearch.js.map +1 -1
  884. package/dist/components/SynapseHomepageV2/SynapseHomepageV2.js.map +1 -1
  885. package/dist/components/SynapseHomepageV2/SynapseHotdrops.js.map +1 -1
  886. package/dist/components/SynapseHomepageV2/SynapseHotdropsItem.js.map +1 -1
  887. package/dist/components/SynapseHomepageV2/SynapseInAction.js.map +1 -1
  888. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
  889. package/dist/components/SynapseHomepageV2/SynapsePartners.js.map +1 -1
  890. package/dist/components/SynapseHomepageV2/SynapsePlan.js.map +1 -1
  891. package/dist/components/SynapseHomepageV2/SynapsePlanContent.js.map +1 -1
  892. package/dist/components/SynapseHomepageV2/SynapsePlans.js.map +1 -1
  893. package/dist/components/SynapseHomepageV2/SynapsePlansPage.js.map +1 -1
  894. package/dist/components/SynapseHomepageV2/SynapseSearchChips.js.map +1 -1
  895. package/dist/components/SynapseHomepageV2/SynapseTrendingProjects.js.map +1 -1
  896. package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js.map +1 -1
  897. package/dist/components/SynapseHomepageV2/WordPressNews.js.map +1 -1
  898. package/dist/components/SynapseHomepageV2/WordPressNewsItem.js.map +1 -1
  899. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +78 -78
  900. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  901. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  902. package/dist/components/SynapseSearchPageResults/HasAccessChip.js.map +1 -1
  903. package/dist/components/SynapseSearchPageResults/HighlightedTypography.js.map +1 -1
  904. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanel.js.map +1 -1
  905. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js.map +1 -1
  906. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.js.map +1 -1
  907. package/dist/components/SynapseSearchPageResults/SynapseSearchPage.js.map +1 -1
  908. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
  909. package/dist/components/SynapseSearchPageResults/SynapseSearchPageRouter.js.map +1 -1
  910. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js.map +1 -1
  911. package/dist/components/SynapseSearchPageResults/chipStyles.js.map +1 -1
  912. package/dist/components/SynapseTable/CustomControls/CustomControlButton.js.map +1 -1
  913. package/dist/components/SynapseTable/CustomControls/CustomControlPanel.js.map +1 -1
  914. package/dist/components/SynapseTable/CustomControls/CustomControls.js.map +1 -1
  915. package/dist/components/SynapseTable/EntityIDColumnCopyIcon.js.map +1 -1
  916. package/dist/components/SynapseTable/ExpandCollapseButton.js.map +1 -1
  917. package/dist/components/SynapseTable/ExpandableTableDataCell.js.map +1 -1
  918. package/dist/components/SynapseTable/NoContentAvailable.js.map +1 -1
  919. package/dist/components/SynapseTable/NoContentPlaceholderType.js.map +1 -1
  920. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +4 -4
  921. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  922. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js.map +1 -1
  923. package/dist/components/SynapseTable/SearchResultsNotFound.js.map +1 -1
  924. package/dist/components/SynapseTable/SearchV2.js.map +1 -1
  925. package/dist/components/SynapseTable/SqlEditor.js.map +1 -1
  926. package/dist/components/SynapseTable/SynapseTable.js.map +1 -1
  927. package/dist/components/SynapseTable/SynapseTableCell/EntityIdList.js.map +1 -1
  928. package/dist/components/SynapseTable/SynapseTableCell/EvaluationIdRenderer.js.map +1 -1
  929. package/dist/components/SynapseTable/SynapseTableCell/JSON/ComplexJSONRenderer.js.map +1 -1
  930. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONArrayRenderer.js.map +1 -1
  931. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONObjectRenderer.js.map +1 -1
  932. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONPrimitiveRenderer.js.map +1 -1
  933. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONRendererUtils.js.map +1 -1
  934. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONTableCellRenderer.js.map +1 -1
  935. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js.map +1 -1
  936. package/dist/components/SynapseTable/SynapseTableCell/UserIdList.js.map +1 -1
  937. package/dist/components/SynapseTable/SynapseTableConstants.js.map +1 -1
  938. package/dist/components/SynapseTable/SynapseTableContext.js.map +1 -1
  939. package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
  940. package/dist/components/SynapseTable/SynapseTableUtils.js.map +1 -1
  941. package/dist/components/SynapseTable/TableIsEmpty.js.map +1 -1
  942. package/dist/components/SynapseTable/TablePagination.js.map +1 -1
  943. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
  944. package/dist/components/SynapseTable/TopLevelControls/TopLevelControlsUtils.js.map +1 -1
  945. package/dist/components/SynapseTable/datasets/DatasetEditorCheckboxCell.js.map +1 -1
  946. package/dist/components/SynapseTable/datasets/DatasetEditorUtils.js.map +1 -1
  947. package/dist/components/SynapseTable/datasets/DatasetEditorVersionCell.js.map +1 -1
  948. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +131 -133
  949. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  950. package/dist/components/SynapseTable/datasets/EntityFetchErrorCell.js.map +1 -1
  951. package/dist/components/SynapseTable/export/ADDiscoveryPortalInstructions.js.map +1 -1
  952. package/dist/components/SynapseTable/export/ExportToAnalysisPlatformDialog.js +48 -51
  953. package/dist/components/SynapseTable/export/ExportToAnalysisPlatformDialog.js.map +1 -1
  954. package/dist/components/SynapseTable/export/ExternalAnalysisPlatformInstructions.js.map +1 -1
  955. package/dist/components/SynapseTable/export/ExternalAnalysisPlatformsConstants.js.map +1 -1
  956. package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js.map +1 -1
  957. package/dist/components/SynapseTable/export/ExternalPlatformDisclaimer.js.map +1 -1
  958. package/dist/components/SynapseTable/table-top/ColumnSelection.js.map +1 -1
  959. package/dist/components/SynapseTable/table-top/DownloadLoginModal.js.map +1 -1
  960. package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
  961. package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
  962. package/dist/components/SynapseTable/useTableSort.js.map +1 -1
  963. package/dist/components/SystemUseNotification/SystemUseNotification.js.map +1 -1
  964. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +4 -4
  965. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  966. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/DefaultValueField.js.map +1 -1
  967. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/FieldWithRecommendedMinimum.js.map +1 -1
  968. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/MultiValueField.js.map +1 -1
  969. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
  970. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditor.js.map +1 -1
  971. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorTestUtils.js.map +1 -1
  972. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  973. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +9 -9
  974. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  975. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js.map +1 -1
  976. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.js.map +1 -1
  977. package/dist/components/TableColumnSchemaEditor/Validators/BooleanSchema.js.map +1 -1
  978. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.js.map +1 -1
  979. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js.map +1 -1
  980. package/dist/components/TableColumnSchemaEditor/Validators/DefaultValueValidator.js.map +1 -1
  981. package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.js.map +1 -1
  982. package/dist/components/TableColumnSchemaEditor/Validators/EntityIdSchema.js.map +1 -1
  983. package/dist/components/TableColumnSchemaEditor/Validators/EnumValuesValidator.js.map +1 -1
  984. package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.js.map +1 -1
  985. package/dist/components/TableColumnSchemaEditor/Validators/OptionalStringSchema.js.map +1 -1
  986. package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.js.map +1 -1
  987. package/dist/components/TableFeedCards/TableFeedCards.js.map +1 -1
  988. package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
  989. package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js.map +1 -1
  990. package/dist/components/TanStackTable/StyledTanStackTable.js.map +1 -1
  991. package/dist/components/TanStackTable/StyledVirtualTanStackTable.js.map +1 -1
  992. package/dist/components/TanStackTable/TableBody.js.map +1 -1
  993. package/dist/components/TanStackTable/TableCellRenderer.js.map +1 -1
  994. package/dist/components/TanStackTable/TanStackTableUtils.js.map +1 -1
  995. package/dist/components/TeamBadge.js.map +1 -1
  996. package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js.map +1 -1
  997. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
  998. package/dist/components/TemplateComponent.js.map +1 -1
  999. package/dist/components/TemporaryBanner/TemporaryBanner.js.map +1 -1
  1000. package/dist/components/TermsAndConditions/TermsAndConditions.js.map +1 -1
  1001. package/dist/components/TermsAndConditions/TermsAndConditionsItem.js.map +1 -1
  1002. package/dist/components/TextField/TextField.js.map +1 -1
  1003. package/dist/components/TextField/TextFieldWithWordLimit.js.map +1 -1
  1004. package/dist/components/TextToComponentCollapse.js.map +1 -1
  1005. package/dist/components/ThemeGallery/ThemeGallery.js.map +1 -1
  1006. package/dist/components/TimelinePlot/TimelineLegendItem.js.map +1 -1
  1007. package/dist/components/TimelinePlot/TimelinePhase.js.map +1 -1
  1008. package/dist/components/TimelinePlot/TimelinePlot.js.map +1 -1
  1009. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js.map +1 -1
  1010. package/dist/components/TimelinePlot/phasesQueryResponseData.js.map +1 -1
  1011. package/dist/components/ToastMessage/ToastMessage.js.map +1 -1
  1012. package/dist/components/TotalQueryResults.js.map +1 -1
  1013. package/dist/components/UserCard/Avatar.js.map +1 -1
  1014. package/dist/components/UserCard/UserBadge.js.map +1 -1
  1015. package/dist/components/UserCard/UserCard.js.map +1 -1
  1016. package/dist/components/UserCard/UserCardContextMenu.js.map +1 -1
  1017. package/dist/components/UserCard/UserCardLarge.js.map +1 -1
  1018. package/dist/components/UserCard/UserCardMedium.js.map +1 -1
  1019. package/dist/components/UserCardList/UserCardList.js.map +1 -1
  1020. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Desktop.js.map +1 -1
  1021. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Mobile.js.map +1 -1
  1022. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.js.map +1 -1
  1023. package/dist/components/UserCardList/UserCardListRotate.js.map +1 -1
  1024. package/dist/components/UserOrTeamBadge/UserOrTeamBadge.js.map +1 -1
  1025. package/dist/components/UserOrTeamBadge/useUserOrTeam.js.map +1 -1
  1026. package/dist/components/UserProfileLinks/UserChallenges.js.map +1 -1
  1027. package/dist/components/UserProfileLinks/UserProfileLinks.js.map +1 -1
  1028. package/dist/components/UserProfileLinks/UserProjects.js.map +1 -1
  1029. package/dist/components/UserProfileLinks/UserTeams.js.map +1 -1
  1030. package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -1
  1031. package/dist/components/Webhook/CreateWebhookModal.js.map +1 -1
  1032. package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
  1033. package/dist/components/Webhook/WebhookVerificationDialog.js.map +1 -1
  1034. package/dist/components/WikiMarkdownEditor/WikiMarkdownEditor.js.map +1 -1
  1035. package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js.map +1 -1
  1036. package/dist/components/WizardChoiceButton/WizardChoiceButton.js.map +1 -1
  1037. package/dist/components/WizardChoiceButton/WizardChoiceButtonDescription.js.map +1 -1
  1038. package/dist/components/WizardChoiceButton/WizardChoiceButtonGroup.js.map +1 -1
  1039. package/dist/components/WordPress/WordPressLatestPostChip.js.map +1 -1
  1040. package/dist/components/WordPress/useWordPressCategories.js.map +1 -1
  1041. package/dist/components/WordPress/useWordPressPosts.js.map +1 -1
  1042. package/dist/components/dataaccess/AccessApprovalsTable.js.map +1 -1
  1043. package/dist/components/dataaccess/AccessHistoryDashboard.js.map +1 -1
  1044. package/dist/components/dataaccess/AccessRequestSubmissionTable.js.map +1 -1
  1045. package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
  1046. package/dist/components/dataaccess/AccessRequirementSearchBox/AccessRequirementSearchBox.js.map +1 -1
  1047. package/dist/components/dataaccess/AccessRequirementTable.js.map +1 -1
  1048. package/dist/components/dataaccess/AccessSubmissionDashboard.js.map +1 -1
  1049. package/dist/components/dataaccess/RejectDataAccessRequestModal.js.map +1 -1
  1050. package/dist/components/dataaccess/RejectProfileValidationRequestModal.js.map +1 -1
  1051. package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
  1052. package/dist/components/dataaccess/SubmissionPage/ApproveSubmissionConfirmationModal.js.map +1 -1
  1053. package/dist/components/dataaccess/SubmissionPage/CancelDataAccessRequestConfirmationModal.js.map +1 -1
  1054. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js.map +1 -1
  1055. package/dist/components/dataaccess/UseAccessRequirementTable.js.map +1 -1
  1056. package/dist/components/dataaccess/UserAccessRequestHistory/SubmissionSortStateTranslator.js.map +1 -1
  1057. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js.map +1 -1
  1058. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js.map +1 -1
  1059. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.js.map +1 -1
  1060. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  1061. package/dist/components/doi/DoiFormSchemas.js.map +1 -1
  1062. package/dist/components/doi/PrivateEntityDoiWarning.js.map +1 -1
  1063. package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js.map +1 -1
  1064. package/dist/components/download_list/DownloadConfirmationUI.js +30 -32
  1065. package/dist/components/download_list/DownloadConfirmationUI.js.map +1 -1
  1066. package/dist/components/download_list/DownloadConfirmationUtils.js.map +1 -1
  1067. package/dist/components/download_list/DownloadDetails.js.map +1 -1
  1068. package/dist/components/download_list/index.js.map +1 -1
  1069. package/dist/components/entity/metadata/AnnotationsTable.js.map +1 -1
  1070. package/dist/components/entity/metadata/EntityAnnotationKey.js.map +1 -1
  1071. package/dist/components/entity/metadata/EntityModal.js.map +1 -1
  1072. package/dist/components/entity/metadata/MetadataTable.js.map +1 -1
  1073. package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
  1074. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  1075. package/dist/components/entity/page/breadcrumbs/EntityPageBreadcrumbs.js.map +1 -1
  1076. package/dist/components/entity/page/title_bar/CitationsDialog.js.map +1 -1
  1077. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js.map +1 -1
  1078. package/dist/components/entity/page/title_bar/EntityTitleBarVersionInfo.js.map +1 -1
  1079. package/dist/components/entity/page/title_bar/TitleBarProperties.js.map +1 -1
  1080. package/dist/components/entity/page/title_bar/useDataCiteUsage.js.map +1 -1
  1081. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
  1082. package/dist/components/entity/page/title_bar/useGetMentions.js.map +1 -1
  1083. package/dist/components/error/ErrorBanner.js.map +1 -1
  1084. package/dist/components/error/ErrorChip.js.map +1 -1
  1085. package/dist/components/error/ErrorPage.js +24 -24
  1086. package/dist/components/error/ErrorPage.js.map +1 -1
  1087. package/dist/components/error/RouteErrorBoundary.js.map +1 -1
  1088. package/dist/components/error/SendMessageToEntityOwnerDialog.js.map +1 -1
  1089. package/dist/components/error/SynapseObjectDOIInfo.js.map +1 -1
  1090. package/dist/components/favorites/FavoriteButton.js.map +1 -1
  1091. package/dist/components/favorites/FavoritesPage.js.map +1 -1
  1092. package/dist/components/file/upload/BasicFileHandleUpload.js.map +1 -1
  1093. package/dist/components/file/upload/MultiFileUploadProgress.js.map +1 -1
  1094. package/dist/components/file/upload/UploadFilePanel.js.map +1 -1
  1095. package/dist/components/form/RadioGroupWithOtherString.js.map +1 -1
  1096. package/dist/components/home_page/ExpandableContent.js.map +1 -1
  1097. package/dist/components/index.js +48 -47
  1098. package/dist/components/layout/InfiniteTableLayout.js.map +1 -1
  1099. package/dist/components/layout/SWCHeader.js.map +1 -1
  1100. package/dist/components/layout/SWCPageLayout.js.map +1 -1
  1101. package/dist/components/menu/ComplexMenu.js.map +1 -1
  1102. package/dist/components/menu/DropdownMenu.js.map +1 -1
  1103. package/dist/components/row_renderers/Dataset.js.map +1 -1
  1104. package/dist/components/row_renderers/Funder.js.map +1 -1
  1105. package/dist/components/row_renderers/ObservationCard.js.map +1 -1
  1106. package/dist/components/row_renderers/utils/CardFooter.js.map +1 -1
  1107. package/dist/components/row_renderers/utils/ChipContainer.js.map +1 -1
  1108. package/dist/components/styled/HoverPopover.js.map +1 -1
  1109. package/dist/components/styled/InlineBadge.js.map +1 -1
  1110. package/dist/components/styled/InputSizedButton.js.map +1 -1
  1111. package/dist/components/styled/LargeButton.js.map +1 -1
  1112. package/dist/components/styled/LeftRightPanel.js.map +1 -1
  1113. package/dist/components/styled/LightTooltip.js.map +1 -1
  1114. package/dist/components/styled/StyledFormControl.js.map +1 -1
  1115. package/dist/components/styled/StyledPopover.js.map +1 -1
  1116. package/dist/components/styled/StyledTableContainer.js.map +1 -1
  1117. package/dist/components/styled/WideButton.js.map +1 -1
  1118. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js +39 -42
  1119. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js.map +1 -1
  1120. package/dist/components/table/CsvPreview/CsvPreview.js.map +1 -1
  1121. package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
  1122. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js.map +1 -1
  1123. package/dist/components/table/CsvPreview/CsvUploadPreviewContent.js.map +1 -1
  1124. package/dist/components/table/CsvPreview/UpdateTableWithCsvDialog.js.map +1 -1
  1125. package/dist/components/table/CsvPreview/useCreateTableFromCsv.js.map +1 -1
  1126. package/dist/components/table/CsvPreview/useCsvUploadPreview.js +11 -11
  1127. package/dist/components/table/CsvPreview/useCsvUploadPreview.js.map +1 -1
  1128. package/dist/components/table/CsvPreview/useUploadCsvToExistingTable.js.map +1 -1
  1129. package/dist/components/table/CsvTableDescriptorForm/CsvTableDescriptorForm.js.map +1 -1
  1130. package/dist/components/trash/TrashCanList.js.map +1 -1
  1131. package/dist/components/utils/Blocker.js.map +1 -1
  1132. package/dist/components/utils/ConditionalWrapper.js.map +1 -1
  1133. package/dist/components/utils/VisibilityObserver.js.map +1 -1
  1134. package/dist/components/widgets/ElementWithTooltip.js.map +1 -1
  1135. package/dist/components/widgets/EntityColumnImage.js.map +1 -1
  1136. package/dist/components/widgets/FileHandleLink.js.map +1 -1
  1137. package/dist/components/widgets/ImageFileHandle.js.map +1 -1
  1138. package/dist/components/widgets/LoginAwareButton.js.map +1 -1
  1139. package/dist/components/widgets/Range.js.map +1 -1
  1140. package/dist/components/widgets/RangeSlider/RangeSlider.js.map +1 -1
  1141. package/dist/components/widgets/SynapseImage.js.map +1 -1
  1142. package/dist/components/widgets/SynapseVideo.js.map +1 -1
  1143. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  1144. package/dist/components/widgets/facet-nav/FacetPlotLegendList.js.map +1 -1
  1145. package/dist/components/widgets/facet-nav/FacetPlotLegendTable.js.map +1 -1
  1146. package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.js.map +1 -1
  1147. package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
  1148. package/dist/components/widgets/facet-nav/PlotsContainerSkeleton.js.map +1 -1
  1149. package/dist/components/widgets/facet-nav/SelectionCriteriaPill.js.map +1 -1
  1150. package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js.map +1 -1
  1151. package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
  1152. package/dist/components/widgets/query-filter/CombinedRangeFacetFilter.js.map +1 -1
  1153. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
  1154. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterDropdown.js.map +1 -1
  1155. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js.map +1 -1
  1156. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterSkeleton.js.map +1 -1
  1157. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js.map +1 -1
  1158. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.js.map +1 -1
  1159. package/dist/components/widgets/query-filter/FacetChip.js.map +1 -1
  1160. package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
  1161. package/dist/components/widgets/query-filter/FacetFilterHeader.js.map +1 -1
  1162. package/dist/components/widgets/query-filter/FacetFilterSkeleton.js.map +1 -1
  1163. package/dist/components/widgets/query-filter/FacetFilterUtils.js.map +1 -1
  1164. package/dist/components/widgets/query-filter/JsonColumnFacetFilters.js.map +1 -1
  1165. package/dist/components/widgets/query-filter/RangeFacetFilter.js +3 -3
  1166. package/dist/components/widgets/query-filter/RangeFacetFilter.js.map +1 -1
  1167. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js +41 -41
  1168. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js.map +1 -1
  1169. package/dist/features/curator/GridPage/GridPage.js.map +1 -1
  1170. package/dist/features/curator/GridPage/components/GridPageRouter.js.map +1 -1
  1171. package/dist/features/curator/GridPage/components/GridPageTitle.js.map +1 -1
  1172. package/dist/features/curator/GridPage/components/UpdateGridPageSearchParamsForm.js.map +1 -1
  1173. package/dist/features/curator/dashboard/CuratorDashboard.js.map +1 -1
  1174. package/dist/features/curator/dashboard/components/CurationTaskCard.js.map +1 -1
  1175. package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -1
  1176. package/dist/features/curator/dashboard/components/UserOrTeamChip.js.map +1 -1
  1177. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts +5 -0
  1178. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts.map +1 -1
  1179. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +227 -181
  1180. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
  1181. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts.map +1 -1
  1182. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +3 -0
  1183. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  1184. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
  1185. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
  1186. package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.js.map +1 -1
  1187. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js.map +1 -1
  1188. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.js.map +1 -1
  1189. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.d.ts.map +1 -1
  1190. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +1 -1
  1191. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js.map +1 -1
  1192. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js.map +1 -1
  1193. package/dist/features/entity/metadata-task/utils/constants.d.ts +5 -0
  1194. package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -1
  1195. package/dist/features/entity/metadata-task/utils/constants.js +2 -2
  1196. package/dist/features/entity/metadata-task/utils/constants.js.map +1 -1
  1197. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.js.map +1 -1
  1198. package/dist/features/entity/metadata-task/utils/getGridSourceIdForTask.js.map +1 -1
  1199. package/dist/features/entity/metadata-task/utils/getLatestGridSessionForSource.js.map +1 -1
  1200. package/dist/features/entity/metadata-task/utils/taskHasAssignee.js.map +1 -1
  1201. package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js.map +1 -1
  1202. package/dist/index.js +54 -53
  1203. package/dist/index.js.map +1 -1
  1204. package/dist/mocks/MockAccessApprovals.js.map +1 -1
  1205. package/dist/mocks/MockSynapseContext.js.map +1 -1
  1206. package/dist/mocks/accessRequirement/mockAccessRequirementAcls.js.map +1 -1
  1207. package/dist/mocks/accessRequirement/mockAccessRequirements.js.map +1 -1
  1208. package/dist/mocks/applicationSessionContext/MockApplicationSessionContext.js.map +1 -1
  1209. package/dist/mocks/challenge/mockChallenge.js.map +1 -1
  1210. package/dist/mocks/chat/mockChat.js.map +1 -1
  1211. package/dist/mocks/curation/mockCurationTask.js.map +1 -1
  1212. package/dist/mocks/dataaccess/MockDataAccessRequest.js.map +1 -1
  1213. package/dist/mocks/dataaccess/MockResearchProject.js.map +1 -1
  1214. package/dist/mocks/dataaccess/MockSubmission.js.map +1 -1
  1215. package/dist/mocks/dataaccess/mockAccessRequest.js.map +1 -1
  1216. package/dist/mocks/discussion/mock_discussion.js.map +1 -1
  1217. package/dist/mocks/doi/MockDoi.js.map +1 -1
  1218. package/dist/mocks/entity/index.js.map +1 -1
  1219. package/dist/mocks/entity/mockDataset.js.map +1 -1
  1220. package/dist/mocks/entity/mockDatasetCollection.js.map +1 -1
  1221. package/dist/mocks/entity/mockEntity.js.map +1 -1
  1222. package/dist/mocks/entity/mockEvaluationQueue.js.map +1 -1
  1223. package/dist/mocks/entity/mockFileEntity.js.map +1 -1
  1224. package/dist/mocks/entity/mockFileEntityACLVariants.js.map +1 -1
  1225. package/dist/mocks/entity/mockFileView.js.map +1 -1
  1226. package/dist/mocks/entity/mockGeneratedEntityData.js.map +1 -1
  1227. package/dist/mocks/entity/mockProject.js.map +1 -1
  1228. package/dist/mocks/entity/mockProjectView.js.map +1 -1
  1229. package/dist/mocks/entity/mockReleaseCardsTable.js.map +1 -1
  1230. package/dist/mocks/entity/mockRootEntity.js.map +1 -1
  1231. package/dist/mocks/entity/mockTableEntity.js.map +1 -1
  1232. package/dist/mocks/faker/fakerUtils.js.map +1 -1
  1233. package/dist/mocks/faker/generateDiscussion.js.map +1 -1
  1234. package/dist/mocks/faker/generateEvaluation.js.map +1 -1
  1235. package/dist/mocks/faker/generateFakeEntity.js.map +1 -1
  1236. package/dist/mocks/faker/generateSubscription.js.map +1 -1
  1237. package/dist/mocks/mockAnnotationColumns.js.map +1 -1
  1238. package/dist/mocks/mockCertificationQuiz.js.map +1 -1
  1239. package/dist/mocks/mockDataCatalogQuery.js.map +1 -1
  1240. package/dist/mocks/mockFileViewQuery.js.map +1 -1
  1241. package/dist/mocks/mockOAuthClientAcls.js.map +1 -1
  1242. package/dist/mocks/mockQueryResponseData.js.map +1 -1
  1243. package/dist/mocks/mockQueryResponseDataWithManyEnumFacets.js.map +1 -1
  1244. package/dist/mocks/mockSchema.js.map +1 -1
  1245. package/dist/mocks/mockSearchQueryData.js.map +1 -1
  1246. package/dist/mocks/mockShortIo.js.map +1 -1
  1247. package/dist/mocks/mockSourceAppConfigQuery.js.map +1 -1
  1248. package/dist/mocks/mockSubscription.js.map +1 -1
  1249. package/dist/mocks/mockWiki.js.map +1 -1
  1250. package/dist/mocks/mockWikiPageKey.js.map +1 -1
  1251. package/dist/mocks/mock_drug_tool_data.js.map +1 -1
  1252. package/dist/mocks/mock_file_handle.js.map +1 -1
  1253. package/dist/mocks/mock_file_statistics.js.map +1 -1
  1254. package/dist/mocks/mock_has_access_data.js.map +1 -1
  1255. package/dist/mocks/mock_upload_destination.js.map +1 -1
  1256. package/dist/mocks/msw/handlers/accessRequirementAclHandlers.js.map +1 -1
  1257. package/dist/mocks/msw/handlers/accessRequirementHandlers.js.map +1 -1
  1258. package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
  1259. package/dist/mocks/msw/handlers/authHandlers.js.map +1 -1
  1260. package/dist/mocks/msw/handlers/challengeHandlers.js.map +1 -1
  1261. package/dist/mocks/msw/handlers/changePasswordHandlers.js.map +1 -1
  1262. package/dist/mocks/msw/handlers/chatHandlers.js.map +1 -1
  1263. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js.map +1 -1
  1264. package/dist/mocks/msw/handlers/dataciteHandlers.js.map +1 -1
  1265. package/dist/mocks/msw/handlers/discussionHandlers.js.map +1 -1
  1266. package/dist/mocks/msw/handlers/doiHandlers.js.map +1 -1
  1267. package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
  1268. package/dist/mocks/msw/handlers/evaluationHandlers.js.map +1 -1
  1269. package/dist/mocks/msw/handlers/featureFlagHandlers.js.map +1 -1
  1270. package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
  1271. package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
  1272. package/dist/mocks/msw/handlers/messageHandlers.js.map +1 -1
  1273. package/dist/mocks/msw/handlers/oauthClientAclHandlers.js.map +1 -1
  1274. package/dist/mocks/msw/handlers/personalAccessTokenHandlers.js.map +1 -1
  1275. package/dist/mocks/msw/handlers/projectStorageHandlers.js.map +1 -1
  1276. package/dist/mocks/msw/handlers/realmHandlers.js.map +1 -1
  1277. package/dist/mocks/msw/handlers/researchProjectHandlers.js.map +1 -1
  1278. package/dist/mocks/msw/handlers/resetTwoFactorAuthHandlers.js.map +1 -1
  1279. package/dist/mocks/msw/handlers/schemaHandlers.js.map +1 -1
  1280. package/dist/mocks/msw/handlers/searchQueryHandlers.js.map +1 -1
  1281. package/dist/mocks/msw/handlers/shortIoHandlers.js.map +1 -1
  1282. package/dist/mocks/msw/handlers/subscriptionHandlers.js.map +1 -1
  1283. package/dist/mocks/msw/handlers/tableQueryHandlers.js.map +1 -1
  1284. package/dist/mocks/msw/handlers/tableQueryService.js.map +1 -1
  1285. package/dist/mocks/msw/handlers/teamHandlers.js.map +1 -1
  1286. package/dist/mocks/msw/handlers/termsOfServiceHandlers.js.map +1 -1
  1287. package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
  1288. package/dist/mocks/msw/handlers/webhookHandlers.js.map +1 -1
  1289. package/dist/mocks/msw/handlers/wikiHandlers.js.map +1 -1
  1290. package/dist/mocks/msw/handlers.js.map +1 -1
  1291. package/dist/mocks/msw/server.d.ts +1 -1
  1292. package/dist/mocks/msw/server.d.ts.map +1 -1
  1293. package/dist/mocks/msw/server.js.map +1 -1
  1294. package/dist/mocks/msw/util/BasicMockedCrudService.js.map +1 -1
  1295. package/dist/mocks/oauth/MockClient.js.map +1 -1
  1296. package/dist/mocks/personalAccessToken/mockPersonalAccessToken.js.map +1 -1
  1297. package/dist/mocks/projectStorage/mockProjectStorageLimits.js.map +1 -1
  1298. package/dist/mocks/provenance/mockActivity.js.map +1 -1
  1299. package/dist/mocks/query/defaultFileViewColumnModels.js.map +1 -1
  1300. package/dist/mocks/query/mockFeaturedDataTabsQueryData.js.map +1 -1
  1301. package/dist/mocks/query/mockHomepageQueryResultData.js.map +1 -1
  1302. package/dist/mocks/query/mockProjectViewQueryResults.js.map +1 -1
  1303. package/dist/mocks/query/mockRejectionReasonsTableQueryResultBundle.js.map +1 -1
  1304. package/dist/mocks/query/mockReleaseCardsTableQueryResultBundle.js.map +1 -1
  1305. package/dist/mocks/query/mockUserCardTableQueryResultBundle.js.map +1 -1
  1306. package/dist/mocks/query/mock_query_data.js.map +1 -1
  1307. package/dist/mocks/query/syn16787123.js.map +1 -1
  1308. package/dist/mocks/query/syn17328596.js.map +1 -1
  1309. package/dist/mocks/query/syn51735464.js.map +1 -1
  1310. package/dist/mocks/query/syn51735464GroupBySpecies.js.map +1 -1
  1311. package/dist/mocks/realm/mockRealmPrincipal.js.map +1 -1
  1312. package/dist/mocks/team/mockTeam.js.map +1 -1
  1313. package/dist/mocks/termsOfService/mockTermsOfService.js.map +1 -1
  1314. package/dist/mocks/user/mock_user_profile.js.map +1 -1
  1315. package/dist/mocks/usergroup/mockUserGroup.js.map +1 -1
  1316. package/dist/ror-client/index.js.map +1 -1
  1317. package/dist/stories/ColorPaletteInspector.js.map +1 -1
  1318. package/dist/stories/ToastDemo.js.map +1 -1
  1319. package/dist/stories/stubs/Alert/MuiAlert.js.map +1 -1
  1320. package/dist/stories/stubs/Button/MuiButton.js.map +1 -1
  1321. package/dist/stories/stubs/Dialog/MuiDialog.js.map +1 -1
  1322. package/dist/stories/stubs/TextField/MuiTextField.js.map +1 -1
  1323. package/dist/stories/stubs/Tooltip/MuiTooltip.js.map +1 -1
  1324. package/dist/synapse-client/HttpClient.js.map +1 -1
  1325. package/dist/synapse-client/SynapseClient.d.ts.map +1 -1
  1326. package/dist/synapse-client/SynapseClient.js +61 -69
  1327. package/dist/synapse-client/SynapseClient.js.map +1 -1
  1328. package/dist/synapse-client/SynapseClientUtils.js.map +1 -1
  1329. package/dist/synapse-queries/InfiniteQueryUtils.js.map +1 -1
  1330. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  1331. package/dist/synapse-queries/QueryFilterUtils.js.map +1 -1
  1332. package/dist/synapse-queries/QueryMatching.test-utils.js.map +1 -1
  1333. package/dist/synapse-queries/asynchronous/usePollAsynchronousJob.js.map +1 -1
  1334. package/dist/synapse-queries/auth/useChangePassword.js.map +1 -1
  1335. package/dist/synapse-queries/auth/useOIDC.js.map +1 -1
  1336. package/dist/synapse-queries/auth/useResetPassword.js.map +1 -1
  1337. package/dist/synapse-queries/auth/useTwoFactorEnrollment.js.map +1 -1
  1338. package/dist/synapse-queries/challenge/useChallenge.js.map +1 -1
  1339. package/dist/synapse-queries/chat/useChat.js.map +1 -1
  1340. package/dist/synapse-queries/croissant/useGetCroissantUrl.js.map +1 -1
  1341. package/dist/synapse-queries/curation/task/useCurationTask.d.ts +1 -0
  1342. package/dist/synapse-queries/curation/task/useCurationTask.d.ts.map +1 -1
  1343. package/dist/synapse-queries/curation/task/useCurationTask.js +12 -2
  1344. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  1345. package/dist/synapse-queries/dataaccess/useAccessApprovals.js.map +1 -1
  1346. package/dist/synapse-queries/dataaccess/useAccessRequirements.js.map +1 -1
  1347. package/dist/synapse-queries/dataaccess/useDataAccessSubmission.js.map +1 -1
  1348. package/dist/synapse-queries/dataaccess/useGetApprovedSubmissionInfo.js.map +1 -1
  1349. package/dist/synapse-queries/dataaccess/useRestrictionInformation.js.map +1 -1
  1350. package/dist/synapse-queries/docker/useGetDockerTag.js.map +1 -1
  1351. package/dist/synapse-queries/doi/useDOI.js.map +1 -1
  1352. package/dist/synapse-queries/download/useDownloadList.js.map +1 -1
  1353. package/dist/synapse-queries/entity/useActionsRequiredForTableQuery.js.map +1 -1
  1354. package/dist/synapse-queries/entity/useEntity.js.map +1 -1
  1355. package/dist/synapse-queries/entity/useEntityBoundSchema.js.map +1 -1
  1356. package/dist/synapse-queries/entity/useEntityBundle.js.map +1 -1
  1357. package/dist/synapse-queries/entity/useExportTableQueryToAnalysisPlatform.js.map +1 -1
  1358. package/dist/synapse-queries/entity/useExportToADWorkbench.js.map +1 -1
  1359. package/dist/synapse-queries/entity/useExportToCavatica.js.map +1 -1
  1360. package/dist/synapse-queries/entity/useExportToPluto.js.map +1 -1
  1361. package/dist/synapse-queries/entity/useExportToTerra.js.map +1 -1
  1362. package/dist/synapse-queries/entity/useGetEntityActionsRequired.js.map +1 -1
  1363. package/dist/synapse-queries/entity/useGetEntityChallenge.js.map +1 -1
  1364. package/dist/synapse-queries/entity/useGetEntityChildren.js.map +1 -1
  1365. package/dist/synapse-queries/entity/useGetEntityForum.js.map +1 -1
  1366. package/dist/synapse-queries/entity/useGetEntityHeaders.js.map +1 -1
  1367. package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
  1368. package/dist/synapse-queries/entity/useProjectStorage.js.map +1 -1
  1369. package/dist/synapse-queries/entity/useSchema.js.map +1 -1
  1370. package/dist/synapse-queries/evaluation/useEvaluation.js.map +1 -1
  1371. package/dist/synapse-queries/featureflags/useGetFeatureFlag.js.map +1 -1
  1372. package/dist/synapse-queries/file/UploadToS3.js.map +1 -1
  1373. package/dist/synapse-queries/file/useDirectUploadToS3.js.map +1 -1
  1374. package/dist/synapse-queries/file/useFileHandle.js.map +1 -1
  1375. package/dist/synapse-queries/file/useFiles.js.map +1 -1
  1376. package/dist/synapse-queries/file/useSynapseMultipartUpload.js.map +1 -1
  1377. package/dist/synapse-queries/file/useUploadDestination.js.map +1 -1
  1378. package/dist/synapse-queries/forum/useForum.js.map +1 -1
  1379. package/dist/synapse-queries/forum/useReply.js.map +1 -1
  1380. package/dist/synapse-queries/forum/useThread.js.map +1 -1
  1381. package/dist/synapse-queries/github/useGithub.js.map +1 -1
  1382. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
  1383. package/dist/synapse-queries/grid/useExportGrid.js.map +1 -1
  1384. package/dist/synapse-queries/grid/useGridPresignedUrl.js.map +1 -1
  1385. package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
  1386. package/dist/synapse-queries/grid/useImportCsvIntoGrid.js.map +1 -1
  1387. package/dist/synapse-queries/message/useMessage.js.map +1 -1
  1388. package/dist/synapse-queries/oauth/useOAuthClient.js.map +1 -1
  1389. package/dist/synapse-queries/portal/useListPortals.js.map +1 -1
  1390. package/dist/synapse-queries/portal/usePortal.js.map +1 -1
  1391. package/dist/synapse-queries/provenance/useGetActivityForEntity.js.map +1 -1
  1392. package/dist/synapse-queries/realm/useRealmPrincipals.js.map +1 -1
  1393. package/dist/synapse-queries/ror/index.js.map +1 -1
  1394. package/dist/synapse-queries/search/useSearch.js.map +1 -1
  1395. package/dist/synapse-queries/search/useSuggestion.js.map +1 -1
  1396. package/dist/synapse-queries/subscription/useSubscription.js.map +1 -1
  1397. package/dist/synapse-queries/table/useColumnModel.js.map +1 -1
  1398. package/dist/synapse-queries/table/useDefiningSql.js.map +1 -1
  1399. package/dist/synapse-queries/table/useDownloadTable.js.map +1 -1
  1400. package/dist/synapse-queries/table/useGetCsvPreview.js.map +1 -1
  1401. package/dist/synapse-queries/table/useTableUpdateTransaction.js.map +1 -1
  1402. package/dist/synapse-queries/team/useTeam.js.map +1 -1
  1403. package/dist/synapse-queries/team/useTeamList.js.map +1 -1
  1404. package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
  1405. package/dist/synapse-queries/termsOfService/useTermsOfService.js.map +1 -1
  1406. package/dist/synapse-queries/trash/useTrashCan.js.map +1 -1
  1407. package/dist/synapse-queries/user/useCertificationQuiz.js.map +1 -1
  1408. package/dist/synapse-queries/user/useFavorites.js.map +1 -1
  1409. package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
  1410. package/dist/synapse-queries/user/useGetUserProjects.js.map +1 -1
  1411. package/dist/synapse-queries/user/useGetUserTeams.js.map +1 -1
  1412. package/dist/synapse-queries/user/usePersonalAccessToken.js.map +1 -1
  1413. package/dist/synapse-queries/user/useProjects.js.map +1 -1
  1414. package/dist/synapse-queries/user/useRevokeCertification.js.map +1 -1
  1415. package/dist/synapse-queries/user/useUserBundle.js.map +1 -1
  1416. package/dist/synapse-queries/user/useUserGroupHeader.js.map +1 -1
  1417. package/dist/synapse-queries/verificationSubmission/useVerificationSubmission.js.map +1 -1
  1418. package/dist/synapse-queries/webhook/useWebhook.js.map +1 -1
  1419. package/dist/synapse-queries/wiki/useWiki.js.map +1 -1
  1420. package/dist/testutils/ComponentToBePassedPropsCustomMatcher.js.map +1 -1
  1421. package/dist/testutils/IsEditingStoreTestUtils.js +17 -0
  1422. package/dist/testutils/IsEditingStoreTestUtils.js.map +1 -0
  1423. package/dist/testutils/LocationTracker.js.map +1 -1
  1424. package/dist/testutils/MarkdownSynapseUtils.js.map +1 -1
  1425. package/dist/testutils/ReactQueryMockUtils.js.map +1 -1
  1426. package/dist/testutils/TestingLibraryUtils.js +18 -16
  1427. package/dist/testutils/TestingLibraryUtils.js.map +1 -1
  1428. package/dist/testutils/muiDatePickerMock.js.map +1 -1
  1429. package/dist/testutils/vitest.setup.js.map +1 -1
  1430. package/dist/theme/DefaultTheme.js.map +1 -1
  1431. package/dist/theme/ThemeProvider.js.map +1 -1
  1432. package/dist/theme/mergeTheme.js.map +1 -1
  1433. package/dist/theme/palette/Palettes.js.map +1 -1
  1434. package/dist/theme/spreadSx.js.map +1 -1
  1435. package/dist/theme/typography/Link.js.map +1 -1
  1436. package/dist/theme/typography/Typography.js.map +1 -1
  1437. package/dist/tsconfig.build.tsbuildinfo +1 -1
  1438. package/dist/utils/APIConstants.js.map +1 -1
  1439. package/dist/utils/AppUtils/AppUtils.d.ts.map +1 -1
  1440. package/dist/utils/AppUtils/AppUtils.js +11 -11
  1441. package/dist/utils/AppUtils/AppUtils.js.map +1 -1
  1442. package/dist/utils/AppUtils/session/ApplicationSessionContext.js.map +1 -1
  1443. package/dist/utils/AppUtils/session/ApplicationSessionManager.js.map +1 -1
  1444. package/dist/utils/AppUtils/session/AuthenticationGuard.js.map +1 -1
  1445. package/dist/utils/AppUtils/session/SessionInitializedGuard.js.map +1 -1
  1446. package/dist/utils/AppUtils/session/SynapseSessionManager.js.map +1 -1
  1447. package/dist/utils/AppUtils/session/useSessionManager.js.map +1 -1
  1448. package/dist/utils/ContentTypeUtils.js.map +1 -1
  1449. package/dist/utils/OrientationBannerConstants.js.map +1 -1
  1450. package/dist/utils/PermissionLevelToAccessType.js.map +1 -1
  1451. package/dist/utils/SynapseConstants.js.map +1 -1
  1452. package/dist/utils/analytics/sendAnalyticsEvent.js.map +1 -1
  1453. package/dist/utils/analytics/sendSearchEvent.js.map +1 -1
  1454. package/dist/utils/analytics/useGoogleAnalytics.js.map +1 -1
  1455. package/dist/utils/appendFinalQueryParamKey.js.map +1 -1
  1456. package/dist/utils/challenge/evaluation/EvaluationUtils.js.map +1 -1
  1457. package/dist/utils/context/AridhiaContext.js.map +1 -1
  1458. package/dist/utils/context/DocumentMetadataContext.js.map +1 -1
  1459. package/dist/utils/context/FullContextProvider.js.map +1 -1
  1460. package/dist/utils/context/GlobalIsEditingContext.js.map +1 -1
  1461. package/dist/utils/context/SynapseContext.js.map +1 -1
  1462. package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
  1463. package/dist/utils/functions/AccessControlListUtils.js.map +1 -1
  1464. package/dist/utils/functions/ArrayUtils.js.map +1 -1
  1465. package/dist/utils/functions/DateFormatter.js.map +1 -1
  1466. package/dist/utils/functions/DateTimeUtils.js.map +1 -1
  1467. package/dist/utils/functions/EntityTypeUtils.js.map +1 -1
  1468. package/dist/utils/functions/FileHandleUtils.js.map +1 -1
  1469. package/dist/utils/functions/GridApiUtils.js.map +1 -1
  1470. package/dist/utils/functions/IsEqualTreatUndefinedAsMissing.js.map +1 -1
  1471. package/dist/utils/functions/IsExternalLink.js.map +1 -1
  1472. package/dist/utils/functions/ObjectUtils.js.map +1 -1
  1473. package/dist/utils/functions/QueryFilterUtils.js.map +1 -1
  1474. package/dist/utils/functions/RealmUtils.js.map +1 -1
  1475. package/dist/utils/functions/RegularExpressions.js.map +1 -1
  1476. package/dist/utils/functions/ResolveLinkEntity.js.map +1 -1
  1477. package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
  1478. package/dist/utils/functions/SanitizeHtmlUtils.test-utils.js.map +1 -1
  1479. package/dist/utils/functions/SqlFunctions.js.map +1 -1
  1480. package/dist/utils/functions/StringUtils.js.map +1 -1
  1481. package/dist/utils/functions/TableColumnSchemaUtils.js.map +1 -1
  1482. package/dist/utils/functions/calculateFriendlyFileSize.js.map +1 -1
  1483. package/dist/utils/functions/colorPalette.js.map +1 -1
  1484. package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
  1485. package/dist/utils/functions/dispatchDownloadListChangeEvent.js.map +1 -1
  1486. package/dist/utils/functions/generateCsrfToken.js.map +1 -1
  1487. package/dist/utils/functions/getDataFromFromStorage.js.map +1 -1
  1488. package/dist/utils/functions/getEndpoint.js +3 -3
  1489. package/dist/utils/functions/getEndpoint.js.map +1 -1
  1490. package/dist/utils/functions/getPrincipalDisplayName.js.map +1 -1
  1491. package/dist/utils/functions/getSynapseEntityUrl.js.map +1 -1
  1492. package/dist/utils/functions/getSynapseWebClientLink.js.map +1 -1
  1493. package/dist/utils/functions/getUserData.js.map +1 -1
  1494. package/dist/utils/functions/queryUtils.js.map +1 -1
  1495. package/dist/utils/functions/testDownloadSpeed.js.map +1 -1
  1496. package/dist/utils/functions/unCamelCase.js.map +1 -1
  1497. package/dist/utils/hooks/useConfirmItems.js.map +1 -1
  1498. package/dist/utils/hooks/useCookiePreferences.d.ts.map +1 -1
  1499. package/dist/utils/hooks/useCookiePreferences.js +24 -23
  1500. package/dist/utils/hooks/useCookiePreferences.js.map +1 -1
  1501. package/dist/utils/hooks/useCreateShortUrl.js.map +1 -1
  1502. package/dist/utils/hooks/useDebouncedEffect.js.map +1 -1
  1503. package/dist/utils/hooks/useDetectSSOCode.js.map +1 -1
  1504. package/dist/utils/hooks/useDirectDownloadHandler.js.map +1 -1
  1505. package/dist/utils/hooks/useGetEntityMetadata.js.map +1 -1
  1506. package/dist/utils/hooks/useGetGoalData.js +2 -4
  1507. package/dist/utils/hooks/useGetGoalData.js.map +1 -1
  1508. package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
  1509. package/dist/utils/hooks/useGetIsAllSelectedInfiniteList.js.map +1 -1
  1510. package/dist/utils/hooks/useImageUrlUtils.js.map +1 -1
  1511. package/dist/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.js.map +1 -1
  1512. package/dist/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.js.map +1 -1
  1513. package/dist/utils/hooks/useImmutableTableQuery/useTableQueryReducer.js.map +1 -1
  1514. package/dist/utils/hooks/useIsBot.js.map +1 -1
  1515. package/dist/utils/hooks/useJsonLdScriptElement.js.map +1 -1
  1516. package/dist/utils/hooks/useListState.js.map +1 -1
  1517. package/dist/utils/hooks/useLogin.js.map +1 -1
  1518. package/dist/utils/hooks/useMediaPrintOnly.js.map +1 -1
  1519. package/dist/utils/hooks/useMutuallyExclusiveState.js.map +1 -1
  1520. package/dist/utils/hooks/useNativeSearchParams.js.map +1 -1
  1521. package/dist/utils/hooks/useOneSageURL.js.map +1 -1
  1522. package/dist/utils/hooks/useOverlay.js.map +1 -1
  1523. package/dist/utils/hooks/usePreFetchResource.js.map +1 -1
  1524. package/dist/utils/hooks/useQuerySearchParam.js.map +1 -1
  1525. package/dist/utils/hooks/useScrollFadeTransition.js.map +1 -1
  1526. package/dist/utils/hooks/useSet.js.map +1 -1
  1527. package/dist/utils/hooks/useShowDesktop.js.map +1 -1
  1528. package/dist/utils/hooks/useSourceAppConfigs.js.map +1 -1
  1529. package/dist/utils/hooks/useTableImageUrl.js.map +1 -1
  1530. package/dist/utils/hooks/useTraceUpdate.js.map +1 -1
  1531. package/dist/utils/hooks/useTrackTransientListItems.js.map +1 -1
  1532. package/dist/utils/hooks/useUploadFileEntity/getActiveUploadCount.js.map +1 -1
  1533. package/dist/utils/hooks/useUploadFileEntity/getFileEntityIdWithSameName.js.map +1 -1
  1534. package/dist/utils/hooks/useUploadFileEntity/useCreateFolderPath.js.map +1 -1
  1535. package/dist/utils/hooks/useUploadFileEntity/useCreatePathsAndGetParentId.js.map +1 -1
  1536. package/dist/utils/hooks/useUploadFileEntity/useLinkFileEntityToURL.js.map +1 -1
  1537. package/dist/utils/hooks/useUploadFileEntity/usePrepareFileEntityUpload.js.map +1 -1
  1538. package/dist/utils/hooks/useUploadFileEntity/useTrackFileUploads.js.map +1 -1
  1539. package/dist/utils/hooks/useUploadFileEntity/useUploadFileEntities.js.map +1 -1
  1540. package/dist/utils/hooks/useUploadFileEntity/useUploadFiles.js.map +1 -1
  1541. package/dist/utils/hooks/useUploadFileEntity/willUploadsExceedStorageLimit.js.map +1 -1
  1542. package/dist/utils/html/TargetEnum.js.map +1 -1
  1543. package/dist/utils/jsonschema/SchemaAnnotationUtils.js.map +1 -1
  1544. package/dist/utils/jsonschema/getEnumeratedValues.js.map +1 -1
  1545. package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.js.map +1 -1
  1546. package/dist/utils/jsonschema/getRequiredAttributes.js.map +1 -1
  1547. package/dist/utils/jsonschema/getSchemaForProperty.js.map +1 -1
  1548. package/dist/utils/jsonschema/getSchemaPropertyInfo.js.map +1 -1
  1549. package/dist/utils/jsonschema/getType.js.map +1 -1
  1550. package/dist/utils/searchDefaults.js.map +1 -1
  1551. package/dist/utils/slots/SlotUtils.js.map +1 -1
  1552. package/dist/utils/types/IsType.js.map +1 -1
  1553. package/package.json +67 -66
@@ -1 +1 @@
1
- {"version":3,"file":"TableColumnSchemaEditorUtils.js","names":[],"sources":["../../../src/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.ts"],"sourcesContent":["import {\n convertToEntityType,\n isDataset,\n isDatasetCollection,\n isEntityView,\n isSubmissionView,\n} from '@/utils/functions/EntityTypeUtils'\nimport { ViewEntityType } from '@sage-bionetworks/synapse-client'\nimport {\n ColumnModel,\n ColumnType,\n ColumnTypeEnum,\n Entity,\n ENTITY_VIEW_TYPE_MASK_DATASET,\n ENTITY_VIEW_TYPE_MASK_FILE,\n FacetType,\n ViewScope,\n} from '@sage-bionetworks/synapse-types'\nimport { JSONSchema7Definition } from 'json-schema'\nimport { SetOptional } from 'type-fest'\nimport {\n ColumnModelFormData,\n JsonSubColumnModelFormData,\n} from './Validators/ColumnModelValidator'\n\n/**\n * These column types can only be used in Tables. They can not be used in views.\n * See SWC-6333 - for views, only allow column types that are mapped to annotation types.\n */\nconst unsupportedTypesForViews = [ColumnTypeEnum.JSON]\n\n/**\n * Get the allowed column types for a column model based on the table type.\n * @param isView - whether the base table is a view\n * @param isJsonSubColumnFacet - whether the proposed column is a JSON subcolumn facet\n */\nexport function getAllowedColumnTypes(\n isView: boolean,\n isJsonSubColumnFacet: boolean,\n): ColumnTypeEnum[] {\n return Object.values(ColumnTypeEnum)\n .filter(columnType =>\n isView ? !unsupportedTypesForViews.includes(columnType) : true,\n )\n .filter(columnType => {\n if (isJsonSubColumnFacet) {\n switch (columnType) {\n // JSON Subcolumns cannot be JSON or LIST types\n case ColumnTypeEnum.JSON:\n case ColumnTypeEnum.STRING_LIST:\n case ColumnTypeEnum.INTEGER_LIST:\n case ColumnTypeEnum.BOOLEAN_LIST:\n case ColumnTypeEnum.DATE_LIST:\n case ColumnTypeEnum.USERID_LIST:\n case ColumnTypeEnum.ENTITYID_LIST:\n return false\n default:\n return true\n }\n }\n return true\n })\n}\n\nexport function getFacetTypeFriendlyName(facetType: FacetType) {\n switch (facetType) {\n case 'enumeration':\n return 'Values'\n case 'range':\n return 'Range'\n default:\n return facetType\n }\n}\nexport function getColumnTypeFriendlyName(type: ColumnType | ColumnTypeEnum) {\n switch (type) {\n case ColumnTypeEnum.STRING:\n return 'String'\n case ColumnTypeEnum.DOUBLE:\n return 'Double'\n case ColumnTypeEnum.BOOLEAN:\n return 'Boolean'\n case ColumnTypeEnum.INTEGER:\n return 'Integer'\n case ColumnTypeEnum.DATE:\n return 'Date'\n case ColumnTypeEnum.FILEHANDLEID:\n return 'File'\n case ColumnTypeEnum.ENTITYID:\n return 'Entity'\n case ColumnTypeEnum.LINK:\n return 'Link'\n case ColumnTypeEnum.MEDIUMTEXT:\n return 'MediumText'\n case ColumnTypeEnum.LARGETEXT:\n return 'LargeText'\n case ColumnTypeEnum.USERID:\n return 'User'\n case ColumnTypeEnum.STRING_LIST:\n return 'String List'\n case ColumnTypeEnum.INTEGER_LIST:\n return 'Integer List'\n case ColumnTypeEnum.BOOLEAN_LIST:\n return 'Boolean List'\n case ColumnTypeEnum.DATE_LIST:\n return 'Date List'\n case ColumnTypeEnum.USERID_LIST:\n return 'User ID List'\n case ColumnTypeEnum.ENTITYID_LIST:\n return 'Entity ID List'\n case ColumnTypeEnum.EVALUATIONID:\n return 'Evaluation'\n case ColumnTypeEnum.SUBMISSIONID:\n return 'Submission'\n case ColumnTypeEnum.JSON:\n return 'JSON'\n default:\n return type\n }\n}\n\n/**\n * Can the given type have a size?\n *\n * @param type\n * @return\n */\nexport function canHaveSize(type: ColumnType | ColumnTypeEnum): boolean {\n switch (type) {\n case ColumnTypeEnum.STRING:\n case ColumnTypeEnum.STRING_LIST:\n case ColumnTypeEnum.LINK:\n return true\n default:\n // all others are false\n return false\n }\n}\n\nexport function canHaveMaxListLength(\n type: ColumnType | ColumnTypeEnum,\n): boolean {\n switch (type) {\n case ColumnTypeEnum.STRING_LIST:\n case ColumnTypeEnum.BOOLEAN_LIST:\n case ColumnTypeEnum.DATE_LIST:\n case ColumnTypeEnum.INTEGER_LIST:\n case ColumnTypeEnum.ENTITYID_LIST:\n return true\n default:\n // all others are false\n return false\n }\n}\n\n/**\n * Configure the facet selection based on the column type\n *\n * @param type a ColumnType for which to get the facet selection\n * @param isJsonSubColumnFacet is this a facet for a json subcolumn?\n * @return the allowed facetTypes, or null if faceting is not allowed\n */\nexport function configureFacetsForType(\n type: ColumnType | ColumnTypeEnum,\n isJsonSubColumnFacet: boolean,\n): (FacetType | undefined)[] | null {\n let allowedFacetTypes: (FacetType | undefined)[] | null\n switch (type) {\n case ColumnTypeEnum.INTEGER:\n case ColumnTypeEnum.INTEGER_LIST:\n allowedFacetTypes = ['enumeration', 'range']\n break\n case ColumnTypeEnum.STRING:\n case ColumnTypeEnum.BOOLEAN:\n case ColumnTypeEnum.USERID:\n case ColumnTypeEnum.ENTITYID:\n case ColumnTypeEnum.STRING_LIST:\n case ColumnTypeEnum.BOOLEAN_LIST:\n case ColumnTypeEnum.ENTITYID_LIST:\n case ColumnTypeEnum.USERID_LIST:\n case ColumnTypeEnum.EVALUATIONID:\n allowedFacetTypes = ['enumeration']\n break\n case ColumnTypeEnum.DOUBLE:\n case ColumnTypeEnum.DATE:\n case ColumnTypeEnum.DATE_LIST:\n allowedFacetTypes = ['range']\n break\n default:\n allowedFacetTypes = null\n }\n\n if (allowedFacetTypes && !isJsonSubColumnFacet) {\n // jsonSubColumn facets MUST have a facet definition, but regular column models do not need one\n // So allow `undefined` for regular columnModels.\n allowedFacetTypes = [undefined, ...allowedFacetTypes]\n }\n return allowedFacetTypes\n}\n\nexport function canHaveDefault(\n type: ColumnType | ColumnTypeEnum,\n isView: boolean,\n isJsonSubColumnFacet: boolean,\n) {\n // SWC-6333: default types are not allowed in views\n if (isView) {\n return false\n } else if (isJsonSubColumnFacet) {\n return false\n } else {\n switch (type) {\n case ColumnTypeEnum.ENTITYID:\n case ColumnTypeEnum.ENTITYID_LIST:\n case ColumnTypeEnum.FILEHANDLEID:\n case ColumnTypeEnum.USERID:\n case ColumnTypeEnum.USERID_LIST:\n case ColumnTypeEnum.MEDIUMTEXT:\n case ColumnTypeEnum.LARGETEXT:\n case ColumnTypeEnum.JSON:\n case ColumnTypeEnum.SUBMISSIONID:\n case ColumnTypeEnum.EVALUATIONID:\n return false\n default:\n return true\n }\n }\n}\n\nexport const DEFAULT_STRING_SIZE = 50\nexport const MAX_STRING_SIZE = 1000\nexport const MAX_LIST_LENGTH = 100\n\n/**\n * Get the default max size for a given type.\n *\n * @param type\n * @return\n */\nexport function getMaxSizeForType(type: ColumnType | ColumnTypeEnum): number {\n switch (type) {\n case ColumnTypeEnum.STRING:\n case ColumnTypeEnum.STRING_LIST:\n case ColumnTypeEnum.LINK:\n return MAX_STRING_SIZE\n default:\n throw new Error(`Type is not known to have a max size: ${type}`)\n }\n}\n\nexport function canHaveRestrictedValues(\n type: ColumnType | ColumnTypeEnum,\n isJsonSubColumnFacet: boolean,\n): boolean {\n if (isJsonSubColumnFacet) {\n return false\n }\n switch (type) {\n case ColumnTypeEnum.STRING:\n case ColumnTypeEnum.INTEGER:\n case ColumnTypeEnum.ENTITYID:\n return true\n default:\n // all other are false\n return false\n }\n}\n\nfunction transformEnumValues(\n enumValues: string[],\n columnType: ColumnType | ColumnTypeEnum,\n): (string | number)[] {\n // SWC-6622 - Special case: if these are INTEGER, convert to numbers before inserting data into form components\n // The editor validates that these are integers, so inserting the strings returned by the API causes an\n // unexpected validation error\n if (columnType === ColumnTypeEnum.INTEGER) {\n return enumValues.map(value => parseInt(value))\n }\n return enumValues\n}\n\n/**\n * Transform ColumnModels returned by Synapse into the form data for the TableColumnSchemaForm.\n * Default column models, if available, are used to determine which columns should not be editable in the form.\n * @param columnModels\n * @param defaultColumns\n */\nexport function transformColumnModelsToFormData(\n columnModels: SetOptional<ColumnModel, 'id'>[],\n defaultColumns: ColumnModel[] = [],\n): ColumnModelFormData[] {\n return columnModels.map((cm): ColumnModelFormData => {\n return {\n ...cm,\n columnType: cm.columnType as ColumnTypeEnum,\n maximumSize:\n cm.maximumSize == null ? undefined : cm.maximumSize.toString(),\n maximumListLength:\n cm.maximumListLength == null\n ? undefined\n : cm.maximumListLength.toString(),\n isSelected: false,\n // If the name matches a known default column model, then we consider it to be a default column model itself\n isOriginallyDefaultColumn: defaultColumns.some(\n dcm => dcm.name === cm.name,\n ),\n jsonSubColumns: cm.jsonSubColumns\n ? cm.jsonSubColumns.map(\n (jsc): JsonSubColumnModelFormData => ({\n ...jsc,\n columnType: jsc.columnType as ColumnTypeEnum,\n isSelected: false,\n }),\n )\n : undefined,\n // If this is defaultValue for a LIST column, the value is a serialized string\n defaultValue:\n cm.defaultValue && cm.columnType.endsWith('_LIST')\n ? JSON.parse(cm.defaultValue)\n : cm.defaultValue,\n enumValues:\n cm.enumValues != null\n ? transformEnumValues(cm.enumValues, cm.columnType)\n : undefined,\n }\n })\n}\n\nexport function getViewScopeForEntity(entity: Entity): ViewScope | undefined {\n if (isEntityView(entity)) {\n return {\n scope: entity.scopeIds,\n viewTypeMask: entity.viewTypeMask,\n viewEntityType: convertToEntityType(\n entity.concreteType,\n ) as ViewEntityType,\n }\n } else if (isDataset(entity) || isDatasetCollection(entity)) {\n const mask = isDataset(entity)\n ? ENTITY_VIEW_TYPE_MASK_FILE\n : ENTITY_VIEW_TYPE_MASK_DATASET\n return {\n scope: (entity.items ?? []).map(\n item => `${item.entityId}.${item.versionNumber}`,\n ),\n viewTypeMask: mask,\n viewEntityType: convertToEntityType(\n entity.concreteType,\n ) as ViewEntityType,\n }\n } else if (isSubmissionView(entity)) {\n return {\n scope: entity.scopeIds,\n viewTypeMask: undefined,\n viewEntityType: convertToEntityType(\n entity.concreteType,\n ) as ViewEntityType,\n }\n }\n return undefined\n}\n\nexport function getJsonSchemaItemDefinitionForColumnType(\n columnType: ColumnTypeEnum,\n): JSONSchema7Definition {\n switch (columnType) {\n case ColumnTypeEnum.STRING:\n case ColumnTypeEnum.STRING_LIST:\n return { type: 'string', minLength: 1 }\n case ColumnTypeEnum.DOUBLE:\n return { type: 'number' }\n case ColumnTypeEnum.BOOLEAN:\n case ColumnTypeEnum.BOOLEAN_LIST:\n return { type: 'boolean' }\n case ColumnTypeEnum.INTEGER:\n case ColumnTypeEnum.INTEGER_LIST:\n return { type: 'integer' }\n case ColumnTypeEnum.DATE:\n case ColumnTypeEnum.DATE_LIST:\n return { type: 'string', format: 'datetime' }\n case ColumnTypeEnum.FILEHANDLEID:\n case ColumnTypeEnum.ENTITYID:\n case ColumnTypeEnum.ENTITYID_LIST:\n case ColumnTypeEnum.LINK:\n case ColumnTypeEnum.MEDIUMTEXT:\n case ColumnTypeEnum.LARGETEXT:\n case ColumnTypeEnum.USERID:\n case ColumnTypeEnum.USERID_LIST:\n case ColumnTypeEnum.SUBMISSIONID:\n case ColumnTypeEnum.JSON:\n case ColumnTypeEnum.EVALUATIONID:\n default:\n return { type: 'string', minLength: 1 }\n }\n}\n\nconst columnModelMatchesFormData = (\n model: ColumnModel,\n target: ColumnModelFormData,\n): boolean => {\n return model.name === target.name && model.columnType === target.columnType\n}\n\nexport const findMatchingColumnModel = (\n columnModels: ColumnModel[],\n target: ColumnModelFormData,\n): ColumnModel | undefined => {\n let closestMatch: ColumnModel | undefined\n\n for (const model of columnModels) {\n if (columnModelMatchesFormData(model, target)) {\n closestMatch = model\n break\n }\n }\n\n return closestMatch\n}\n\nexport function getFormDataValueAsNumber(\n formDataValue: string | number | undefined,\n): number | null {\n const maxSize =\n formDataValue !== null ? parseFloat(String(formDataValue)) : null\n const isInteger = Number.isInteger(maxSize)\n return isInteger ? maxSize : null\n}\n\nexport const isFormDataValueSmallerThanRecommendedValue = (\n formDataValue: string | number | undefined,\n recommendedValue: number | undefined,\n): boolean => {\n const currentValue = getFormDataValueAsNumber(formDataValue)\n return recommendedValue != null && currentValue != null && currentValue > 0\n ? currentValue < recommendedValue\n : false\n}\n\nexport function doesColumnModelSatisfyAnnotationMinimums(\n columnModel: ColumnModelFormData,\n annotationColumnModel?: ColumnModel,\n): boolean {\n if (!annotationColumnModel) {\n return true\n }\n\n if (\n isFormDataValueSmallerThanRecommendedValue(\n columnModel.maximumSize,\n annotationColumnModel.maximumSize,\n ) ||\n isFormDataValueSmallerThanRecommendedValue(\n columnModel.maximumListLength,\n annotationColumnModel.maximumListLength,\n )\n ) {\n return false\n }\n\n return true\n}\n\nexport function getNumberOfColumnModelsWithValuesBelowMinimumRecommendedSizes(\n columnModels: ColumnModelFormData[],\n annotationColumnModels: ColumnModel[],\n): number {\n return columnModels.filter(cm => {\n const matchingAnnotationColumnModel = findMatchingColumnModel(\n annotationColumnModels,\n cm,\n )\n\n return !doesColumnModelSatisfyAnnotationMinimums(\n cm,\n matchingAnnotationColumnModel,\n )\n }).length\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableColumnSchemaEditorUtils.js","names":[],"sources":["../../../src/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.ts"],"sourcesContent":["import {\n convertToEntityType,\n isDataset,\n isDatasetCollection,\n isEntityView,\n isSubmissionView,\n} from '@/utils/functions/EntityTypeUtils'\nimport { ViewEntityType } from '@sage-bionetworks/synapse-client'\nimport {\n ColumnModel,\n ColumnType,\n ColumnTypeEnum,\n Entity,\n ENTITY_VIEW_TYPE_MASK_DATASET,\n ENTITY_VIEW_TYPE_MASK_FILE,\n FacetType,\n ViewScope,\n} from '@sage-bionetworks/synapse-types'\nimport { JSONSchema7Definition } from 'json-schema'\nimport { SetOptional } from 'type-fest'\nimport {\n ColumnModelFormData,\n JsonSubColumnModelFormData,\n} from './Validators/ColumnModelValidator'\n\n/**\n * These column types can only be used in Tables. They can not be used in views.\n * See SWC-6333 - for views, only allow column types that are mapped to annotation types.\n */\nconst unsupportedTypesForViews = [ColumnTypeEnum.JSON]\n\n/**\n * Get the allowed column types for a column model based on the table type.\n * @param isView - whether the base table is a view\n * @param isJsonSubColumnFacet - whether the proposed column is a JSON subcolumn facet\n */\nexport function getAllowedColumnTypes(\n isView: boolean,\n isJsonSubColumnFacet: boolean,\n): ColumnTypeEnum[] {\n return Object.values(ColumnTypeEnum)\n .filter(columnType =>\n isView ? !unsupportedTypesForViews.includes(columnType) : true,\n )\n .filter(columnType => {\n if (isJsonSubColumnFacet) {\n switch (columnType) {\n // JSON Subcolumns cannot be JSON or LIST types\n case ColumnTypeEnum.JSON:\n case ColumnTypeEnum.STRING_LIST:\n case ColumnTypeEnum.INTEGER_LIST:\n case ColumnTypeEnum.BOOLEAN_LIST:\n case ColumnTypeEnum.DATE_LIST:\n case ColumnTypeEnum.USERID_LIST:\n case ColumnTypeEnum.ENTITYID_LIST:\n return false\n default:\n return true\n }\n }\n return true\n })\n}\n\nexport function getFacetTypeFriendlyName(facetType: FacetType) {\n switch (facetType) {\n case 'enumeration':\n return 'Values'\n case 'range':\n return 'Range'\n default:\n return facetType\n }\n}\nexport function getColumnTypeFriendlyName(type: ColumnType | ColumnTypeEnum) {\n switch (type) {\n case ColumnTypeEnum.STRING:\n return 'String'\n case ColumnTypeEnum.DOUBLE:\n return 'Double'\n case ColumnTypeEnum.BOOLEAN:\n return 'Boolean'\n case ColumnTypeEnum.INTEGER:\n return 'Integer'\n case ColumnTypeEnum.DATE:\n return 'Date'\n case ColumnTypeEnum.FILEHANDLEID:\n return 'File'\n case ColumnTypeEnum.ENTITYID:\n return 'Entity'\n case ColumnTypeEnum.LINK:\n return 'Link'\n case ColumnTypeEnum.MEDIUMTEXT:\n return 'MediumText'\n case ColumnTypeEnum.LARGETEXT:\n return 'LargeText'\n case ColumnTypeEnum.USERID:\n return 'User'\n case ColumnTypeEnum.STRING_LIST:\n return 'String List'\n case ColumnTypeEnum.INTEGER_LIST:\n return 'Integer List'\n case ColumnTypeEnum.BOOLEAN_LIST:\n return 'Boolean List'\n case ColumnTypeEnum.DATE_LIST:\n return 'Date List'\n case ColumnTypeEnum.USERID_LIST:\n return 'User ID List'\n case ColumnTypeEnum.ENTITYID_LIST:\n return 'Entity ID List'\n case ColumnTypeEnum.EVALUATIONID:\n return 'Evaluation'\n case ColumnTypeEnum.SUBMISSIONID:\n return 'Submission'\n case ColumnTypeEnum.JSON:\n return 'JSON'\n default:\n return type\n }\n}\n\n/**\n * Can the given type have a size?\n *\n * @param type\n * @return\n */\nexport function canHaveSize(type: ColumnType | ColumnTypeEnum): boolean {\n switch (type) {\n case ColumnTypeEnum.STRING:\n case ColumnTypeEnum.STRING_LIST:\n case ColumnTypeEnum.LINK:\n return true\n default:\n // all others are false\n return false\n }\n}\n\nexport function canHaveMaxListLength(\n type: ColumnType | ColumnTypeEnum,\n): boolean {\n switch (type) {\n case ColumnTypeEnum.STRING_LIST:\n case ColumnTypeEnum.BOOLEAN_LIST:\n case ColumnTypeEnum.DATE_LIST:\n case ColumnTypeEnum.INTEGER_LIST:\n case ColumnTypeEnum.ENTITYID_LIST:\n return true\n default:\n // all others are false\n return false\n }\n}\n\n/**\n * Configure the facet selection based on the column type\n *\n * @param type a ColumnType for which to get the facet selection\n * @param isJsonSubColumnFacet is this a facet for a json subcolumn?\n * @return the allowed facetTypes, or null if faceting is not allowed\n */\nexport function configureFacetsForType(\n type: ColumnType | ColumnTypeEnum,\n isJsonSubColumnFacet: boolean,\n): (FacetType | undefined)[] | null {\n let allowedFacetTypes: (FacetType | undefined)[] | null\n switch (type) {\n case ColumnTypeEnum.INTEGER:\n case ColumnTypeEnum.INTEGER_LIST:\n allowedFacetTypes = ['enumeration', 'range']\n break\n case ColumnTypeEnum.STRING:\n case ColumnTypeEnum.BOOLEAN:\n case ColumnTypeEnum.USERID:\n case ColumnTypeEnum.ENTITYID:\n case ColumnTypeEnum.STRING_LIST:\n case ColumnTypeEnum.BOOLEAN_LIST:\n case ColumnTypeEnum.ENTITYID_LIST:\n case ColumnTypeEnum.USERID_LIST:\n case ColumnTypeEnum.EVALUATIONID:\n allowedFacetTypes = ['enumeration']\n break\n case ColumnTypeEnum.DOUBLE:\n case ColumnTypeEnum.DATE:\n case ColumnTypeEnum.DATE_LIST:\n allowedFacetTypes = ['range']\n break\n default:\n allowedFacetTypes = null\n }\n\n if (allowedFacetTypes && !isJsonSubColumnFacet) {\n // jsonSubColumn facets MUST have a facet definition, but regular column models do not need one\n // So allow `undefined` for regular columnModels.\n allowedFacetTypes = [undefined, ...allowedFacetTypes]\n }\n return allowedFacetTypes\n}\n\nexport function canHaveDefault(\n type: ColumnType | ColumnTypeEnum,\n isView: boolean,\n isJsonSubColumnFacet: boolean,\n) {\n // SWC-6333: default types are not allowed in views\n if (isView) {\n return false\n } else if (isJsonSubColumnFacet) {\n return false\n } else {\n switch (type) {\n case ColumnTypeEnum.ENTITYID:\n case ColumnTypeEnum.ENTITYID_LIST:\n case ColumnTypeEnum.FILEHANDLEID:\n case ColumnTypeEnum.USERID:\n case ColumnTypeEnum.USERID_LIST:\n case ColumnTypeEnum.MEDIUMTEXT:\n case ColumnTypeEnum.LARGETEXT:\n case ColumnTypeEnum.JSON:\n case ColumnTypeEnum.SUBMISSIONID:\n case ColumnTypeEnum.EVALUATIONID:\n return false\n default:\n return true\n }\n }\n}\n\nexport const DEFAULT_STRING_SIZE = 50\nexport const MAX_STRING_SIZE = 1000\nexport const MAX_LIST_LENGTH = 100\n\n/**\n * Get the default max size for a given type.\n *\n * @param type\n * @return\n */\nexport function getMaxSizeForType(type: ColumnType | ColumnTypeEnum): number {\n switch (type) {\n case ColumnTypeEnum.STRING:\n case ColumnTypeEnum.STRING_LIST:\n case ColumnTypeEnum.LINK:\n return MAX_STRING_SIZE\n default:\n throw new Error(`Type is not known to have a max size: ${type}`)\n }\n}\n\nexport function canHaveRestrictedValues(\n type: ColumnType | ColumnTypeEnum,\n isJsonSubColumnFacet: boolean,\n): boolean {\n if (isJsonSubColumnFacet) {\n return false\n }\n switch (type) {\n case ColumnTypeEnum.STRING:\n case ColumnTypeEnum.INTEGER:\n case ColumnTypeEnum.ENTITYID:\n return true\n default:\n // all other are false\n return false\n }\n}\n\nfunction transformEnumValues(\n enumValues: string[],\n columnType: ColumnType | ColumnTypeEnum,\n): (string | number)[] {\n // SWC-6622 - Special case: if these are INTEGER, convert to numbers before inserting data into form components\n // The editor validates that these are integers, so inserting the strings returned by the API causes an\n // unexpected validation error\n if (columnType === ColumnTypeEnum.INTEGER) {\n return enumValues.map(value => parseInt(value))\n }\n return enumValues\n}\n\n/**\n * Transform ColumnModels returned by Synapse into the form data for the TableColumnSchemaForm.\n * Default column models, if available, are used to determine which columns should not be editable in the form.\n * @param columnModels\n * @param defaultColumns\n */\nexport function transformColumnModelsToFormData(\n columnModels: SetOptional<ColumnModel, 'id'>[],\n defaultColumns: ColumnModel[] = [],\n): ColumnModelFormData[] {\n return columnModels.map((cm): ColumnModelFormData => {\n return {\n ...cm,\n columnType: cm.columnType as ColumnTypeEnum,\n maximumSize:\n cm.maximumSize == null ? undefined : cm.maximumSize.toString(),\n maximumListLength:\n cm.maximumListLength == null\n ? undefined\n : cm.maximumListLength.toString(),\n isSelected: false,\n // If the name matches a known default column model, then we consider it to be a default column model itself\n isOriginallyDefaultColumn: defaultColumns.some(\n dcm => dcm.name === cm.name,\n ),\n jsonSubColumns: cm.jsonSubColumns\n ? cm.jsonSubColumns.map(\n (jsc): JsonSubColumnModelFormData => ({\n ...jsc,\n columnType: jsc.columnType as ColumnTypeEnum,\n isSelected: false,\n }),\n )\n : undefined,\n // If this is defaultValue for a LIST column, the value is a serialized string\n defaultValue:\n cm.defaultValue && cm.columnType.endsWith('_LIST')\n ? JSON.parse(cm.defaultValue)\n : cm.defaultValue,\n enumValues:\n cm.enumValues != null\n ? transformEnumValues(cm.enumValues, cm.columnType)\n : undefined,\n }\n })\n}\n\nexport function getViewScopeForEntity(entity: Entity): ViewScope | undefined {\n if (isEntityView(entity)) {\n return {\n scope: entity.scopeIds,\n viewTypeMask: entity.viewTypeMask,\n viewEntityType: convertToEntityType(\n entity.concreteType,\n ) as ViewEntityType,\n }\n } else if (isDataset(entity) || isDatasetCollection(entity)) {\n const mask = isDataset(entity)\n ? ENTITY_VIEW_TYPE_MASK_FILE\n : ENTITY_VIEW_TYPE_MASK_DATASET\n return {\n scope: (entity.items ?? []).map(\n item => `${item.entityId}.${item.versionNumber}`,\n ),\n viewTypeMask: mask,\n viewEntityType: convertToEntityType(\n entity.concreteType,\n ) as ViewEntityType,\n }\n } else if (isSubmissionView(entity)) {\n return {\n scope: entity.scopeIds,\n viewTypeMask: undefined,\n viewEntityType: convertToEntityType(\n entity.concreteType,\n ) as ViewEntityType,\n }\n }\n return undefined\n}\n\nexport function getJsonSchemaItemDefinitionForColumnType(\n columnType: ColumnTypeEnum,\n): JSONSchema7Definition {\n switch (columnType) {\n case ColumnTypeEnum.STRING:\n case ColumnTypeEnum.STRING_LIST:\n return { type: 'string', minLength: 1 }\n case ColumnTypeEnum.DOUBLE:\n return { type: 'number' }\n case ColumnTypeEnum.BOOLEAN:\n case ColumnTypeEnum.BOOLEAN_LIST:\n return { type: 'boolean' }\n case ColumnTypeEnum.INTEGER:\n case ColumnTypeEnum.INTEGER_LIST:\n return { type: 'integer' }\n case ColumnTypeEnum.DATE:\n case ColumnTypeEnum.DATE_LIST:\n return { type: 'string', format: 'datetime' }\n case ColumnTypeEnum.FILEHANDLEID:\n case ColumnTypeEnum.ENTITYID:\n case ColumnTypeEnum.ENTITYID_LIST:\n case ColumnTypeEnum.LINK:\n case ColumnTypeEnum.MEDIUMTEXT:\n case ColumnTypeEnum.LARGETEXT:\n case ColumnTypeEnum.USERID:\n case ColumnTypeEnum.USERID_LIST:\n case ColumnTypeEnum.SUBMISSIONID:\n case ColumnTypeEnum.JSON:\n case ColumnTypeEnum.EVALUATIONID:\n default:\n return { type: 'string', minLength: 1 }\n }\n}\n\nconst columnModelMatchesFormData = (\n model: ColumnModel,\n target: ColumnModelFormData,\n): boolean => {\n return model.name === target.name && model.columnType === target.columnType\n}\n\nexport const findMatchingColumnModel = (\n columnModels: ColumnModel[],\n target: ColumnModelFormData,\n): ColumnModel | undefined => {\n let closestMatch: ColumnModel | undefined\n\n for (const model of columnModels) {\n if (columnModelMatchesFormData(model, target)) {\n closestMatch = model\n break\n }\n }\n\n return closestMatch\n}\n\nexport function getFormDataValueAsNumber(\n formDataValue: string | number | undefined,\n): number | null {\n const maxSize =\n formDataValue !== null ? parseFloat(String(formDataValue)) : null\n const isInteger = Number.isInteger(maxSize)\n return isInteger ? maxSize : null\n}\n\nexport const isFormDataValueSmallerThanRecommendedValue = (\n formDataValue: string | number | undefined,\n recommendedValue: number | undefined,\n): boolean => {\n const currentValue = getFormDataValueAsNumber(formDataValue)\n return recommendedValue != null && currentValue != null && currentValue > 0\n ? currentValue < recommendedValue\n : false\n}\n\nexport function doesColumnModelSatisfyAnnotationMinimums(\n columnModel: ColumnModelFormData,\n annotationColumnModel?: ColumnModel,\n): boolean {\n if (!annotationColumnModel) {\n return true\n }\n\n if (\n isFormDataValueSmallerThanRecommendedValue(\n columnModel.maximumSize,\n annotationColumnModel.maximumSize,\n ) ||\n isFormDataValueSmallerThanRecommendedValue(\n columnModel.maximumListLength,\n annotationColumnModel.maximumListLength,\n )\n ) {\n return false\n }\n\n return true\n}\n\nexport function getNumberOfColumnModelsWithValuesBelowMinimumRecommendedSizes(\n columnModels: ColumnModelFormData[],\n annotationColumnModels: ColumnModel[],\n): number {\n return columnModels.filter(cm => {\n const matchingAnnotationColumnModel = findMatchingColumnModel(\n annotationColumnModels,\n cm,\n )\n\n return !doesColumnModelSatisfyAnnotationMinimums(\n cm,\n matchingAnnotationColumnModel,\n )\n }).length\n}\n"],"mappings":"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"}
@@ -15,8 +15,8 @@ import { groupBy as b, isEqual as x, noop as S, omit as C, times as te } from "l
15
15
  import { Box as w, Button as T, styled as E } from "@mui/material";
16
16
  import { Fragment as D, jsx as O, jsxs as k } from "react/jsx-runtime";
17
17
  import { ColumnTypeEnum as A, VIEW_CONCRETE_TYPE_VALUES as ne } from "@sage-bionetworks/synapse-types";
18
- import { Provider as j, atom as re, useAtomValue as M, useSetAtom as N } from "jotai";
19
- import { AddCircleTwoTone as P } from "@mui/icons-material";
18
+ import { AddCircleTwoTone as j } from "@mui/icons-material";
19
+ import { Provider as M, atom as re, useAtomValue as N, useSetAtom as P } from "jotai";
20
20
  import F from "pluralize";
21
21
  import { selectAtom as I, useAtomCallback as L } from "jotai/utils";
22
22
  //#region src/components/TableColumnSchemaEditor/TableColumnSchemaForm.tsx
@@ -36,7 +36,7 @@ var R = "18px 18px 1.75fr 1.75fr 0.75fr 1fr 1.25fr 1.25fr 1fr 1.25fr", z = /* @_
36
36
  borderBottomLeftRadius: "5px"
37
37
  }) }), V = E(w, { label: "ColumnHeader" })({ fontWeight: 700 }), H = "Add All Annotations";
38
38
  function U(i, s) {
39
- let { initialData: d, entityType: h, viewScope: x, onSubmit: E = S, isSubmitting: D = !1, originalColumnModels: A } = i, j = M(v(() => re((e) => e(u).length), [])), I = N(u), [z, B] = y(null), H = L(g((e) => e(u), [])), U = t(h), W = ne.includes(U), G = W, K = W, { data: q, isLoading: J } = o(x?.viewEntityType, x?.viewTypeMask, {
39
+ let { initialData: d, entityType: h, viewScope: x, onSubmit: E = S, isSubmitting: D = !1, originalColumnModels: A } = i, M = N(v(() => re((e) => e(u).length), [])), I = P(u), [z, B] = y(null), H = L(g((e) => e(u), [])), U = t(h), W = ne.includes(U), G = W, K = W, { data: q, isLoading: J } = o(x?.viewEntityType, x?.viewTypeMask, {
40
40
  enabled: K,
41
41
  staleTime: Infinity
42
42
  }), Y = a({
@@ -117,7 +117,7 @@ function U(i, s) {
117
117
  backgroundColor: "grey.300",
118
118
  height: "2px"
119
119
  } }),
120
- te(j, (e) => /* @__PURE__ */ O(ie, {
120
+ te(M, (e) => /* @__PURE__ */ O(ie, {
121
121
  entityType: h,
122
122
  columnModelIndex: e,
123
123
  disabled: D,
@@ -138,13 +138,13 @@ function U(i, s) {
138
138
  onClick: () => {
139
139
  I({ type: "appendColumn" });
140
140
  },
141
- startIcon: /* @__PURE__ */ O(P, {}),
141
+ startIcon: /* @__PURE__ */ O(j, {}),
142
142
  disabled: D,
143
143
  children: "Add Column"
144
144
  }),
145
145
  K && /* @__PURE__ */ k(T, {
146
146
  variant: "outlined",
147
- startIcon: O(J ? r : P, {}),
147
+ startIcon: O(J ? r : j, {}),
148
148
  onClick: () => {
149
149
  ae();
150
150
  },
@@ -157,7 +157,7 @@ function U(i, s) {
157
157
  }),
158
158
  G && /* @__PURE__ */ O(T, {
159
159
  variant: "outlined",
160
- startIcon: O(Z ? r : P, {}),
160
+ startIcon: O(Z ? r : j, {}),
161
161
  disabled: Z || D,
162
162
  onClick: () => {
163
163
  oe();
@@ -176,7 +176,7 @@ function U(i, s) {
176
176
  });
177
177
  }
178
178
  function ie(e) {
179
- let { columnModelIndex: t, entityType: n, disabled: r, columnModelValidationErrors: a = null, annotationColumnModels: o, originalColumnModels: c } = e, l = N(u), f = M(v(() => I(u, (e) => e[t], x), [t])), p = c ? s(c, f) : void 0, m = o ? s(o, f) : void 0, h = v(() => a ? b(a.filter((e) => e.path[0] === t && e.path[1] == "jsonSubColumns"), (e) => e.path[2]) : {}, [t, a]);
179
+ let { columnModelIndex: t, entityType: n, disabled: r, columnModelValidationErrors: a = null, annotationColumnModels: o, originalColumnModels: c } = e, l = P(u), f = N(v(() => I(u, (e) => e[t], x), [t])), p = c ? s(c, f) : void 0, m = o ? s(o, f) : void 0, h = v(() => a ? b(a.filter((e) => e.path[0] === t && e.path[1] == "jsonSubColumns"), (e) => e.path[2]) : {}, [t, a]);
180
180
  if (!f) return /* @__PURE__ */ O(D, {});
181
181
  let g = f.isOriginallyDefaultColumn;
182
182
  return /* @__PURE__ */ k(D, { children: [
@@ -216,7 +216,7 @@ function ie(e) {
216
216
  ] });
217
217
  }
218
218
  var W = h(U), G = h(function(e, t) {
219
- return /* @__PURE__ */ O(j, { children: /* @__PURE__ */ O(W, {
219
+ return /* @__PURE__ */ O(M, { children: /* @__PURE__ */ O(W, {
220
220
  ...e,
221
221
  ref: t
222
222
  }) });
@@ -1 +1 @@
1
- {"version":3,"file":"TableColumnSchemaForm.js","names":[],"sources":["../../../src/components/TableColumnSchemaEditor/TableColumnSchemaForm.tsx"],"sourcesContent":["import AddToList from '@/assets/icons/AddToList'\nimport {\n useGetAnnotationColumnModels,\n useGetDefaultColumnModels,\n} from '@/synapse-queries/table/useColumnModel'\nimport {\n convertToConcreteEntityType,\n entityTypeToFriendlyName,\n} from '@/utils/functions/EntityTypeUtils'\nimport { AddCircleTwoTone } from '@mui/icons-material'\nimport { Box, Button, styled } from '@mui/material'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n ColumnModel,\n ColumnTypeEnum,\n VIEW_CONCRETE_TYPE_VALUES,\n ViewScope,\n} from '@sage-bionetworks/synapse-types'\nimport { atom, Provider, useAtomValue, useSetAtom } from 'jotai'\nimport { selectAtom, useAtomCallback } from 'jotai/utils'\nimport { groupBy, isEqual, noop, omit, times } from 'lodash-es'\nimport pluralize from 'pluralize'\nimport {\n ForwardedRef,\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useState,\n} from 'react'\nimport { SetOptional } from 'type-fest'\nimport { ZodError, ZodIssue } from 'zod'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport { displayToast } from '../ToastMessage'\nimport ColumnModelForm from './ColumnModelForm'\nimport ImportTableColumnsButton from './ImportTableColumnsButton'\nimport {\n findMatchingColumnModel,\n getAllowedColumnTypes,\n transformColumnModelsToFormData,\n} from './TableColumnSchemaEditorUtils'\nimport { TableColumnSchemaFormActions } from './TableColumnSchemaFormActions'\nimport { tableColumnSchemaFormDataAtom } from './TableColumnSchemaFormReducer'\nimport { validateColumnModelFormData } from './Validators/ColumnModelValidator'\n\nconst COLUMN_SCHEMA_FORM_GRID_TEMPLATE_COLUMNS =\n '18px 18px 1.75fr 1.75fr 0.75fr 1fr 1.25fr 1.25fr 1fr 1.25fr'\nconst GRID_CONTAINER_Y_MARGIN_PX = 6\nexport const HIERARCHY_VERTICAL_LINE_COMPONENT = (\n <Box\n sx={{\n width: '1px',\n height: `calc(100% + 2 * ${GRID_CONTAINER_Y_MARGIN_PX}px)`,\n backgroundColor: 'grey.400',\n marginLeft: '8px',\n }}\n />\n)\nexport const HIERARCHY_END_COMPONENT = (\n <Box\n sx={theme => ({\n width: '50%',\n height: '60%',\n borderLeft: `1px solid ${theme.palette.grey[400]}`,\n borderBottom: `1px solid ${theme.palette.grey[400]}`,\n marginLeft: '8px',\n marginBottom: 'auto',\n marginRight: '0',\n borderBottomLeftRadius: '5px',\n })}\n />\n)\n\nexport type SubmitHandle = {\n // Allow the parent component to trigger a submit of the form, so this may be embedded in an arbitrary modal.\n submit: () => void\n // Imperative handle to get the data out of the form for SWC compatibility\n getEditedColumnModels: () => SetOptional<ColumnModel, 'id'>[]\n // Used to check if all form data is valid. Returns the current validity state\n validate: () => boolean\n}\n\ntype TableColumnSchemaFormProps = {\n /* The type of the Table, which determines various schema restrictions and form functionality */\n entityType: EntityType\n /* If this is an entity view, the ViewScope can be used to determine the default column models and fetch annotation column models */\n viewScope?: ViewScope\n initialData?: SetOptional<ColumnModel, 'id'>[]\n onSubmit?: (newColumnModels: SetOptional<ColumnModel, 'id'>[]) => void\n isSubmitting?: boolean\n /** The original/current column models that are applied to the table, if they exist. */\n originalColumnModels?: ColumnModel[]\n}\n\nconst ColumnHeader = styled(Box, {\n label: 'ColumnHeader',\n})({\n fontWeight: 700,\n})\n\nexport const ADD_ALL_ANNOTATIONS_BUTTON_TEXT = 'Add All Annotations'\n\nfunction TableColumnSchemaFormInternal(\n props: TableColumnSchemaFormProps,\n ref: ForwardedRef<SubmitHandle>,\n) {\n const {\n initialData,\n entityType,\n viewScope,\n onSubmit = noop,\n isSubmitting = false,\n originalColumnModels,\n } = props\n\n const numColumnModels = useAtomValue(\n useMemo(() => atom(get => get(tableColumnSchemaFormDataAtom).length), []),\n )\n\n const dispatch = useSetAtom(tableColumnSchemaFormDataAtom)\n const [validationErrors, setValidationErrors] = useState<ZodError | null>(\n null,\n )\n\n // useAtomCallback will let us imperatively read the form data, instead of tracking it in state and triggering a full re-render of the form when any data changes\n const readFormData = useAtomCallback(\n useCallback(get => {\n return get(tableColumnSchemaFormDataAtom)\n }, []),\n )\n const concreteTableType = convertToConcreteEntityType(entityType)\n const isView = VIEW_CONCRETE_TYPE_VALUES.includes(\n concreteTableType as (typeof VIEW_CONCRETE_TYPE_VALUES)[number],\n )\n const hasAnnotationColumnModels = isView,\n hasDefaultColumnModels = isView\n\n const { data: defaultColumnModels, isLoading: isLoadingDefaultColumns } =\n useGetDefaultColumnModels(\n viewScope?.viewEntityType!,\n viewScope?.viewTypeMask,\n {\n enabled: hasDefaultColumnModels,\n staleTime: Infinity, // The default column models will never change\n },\n )\n\n const annotationColumnModelsQuery = useGetAnnotationColumnModels(\n {\n viewScope: viewScope!,\n includeDerivedAnnotations: true,\n concreteType:\n 'org.sagebionetworks.repo.model.table.ViewColumnModelRequest',\n },\n {\n enabled: hasAnnotationColumnModels,\n },\n )\n\n const {\n data: annotationColumnModels,\n isLoading: isLoadingAnnotationColumns,\n } = annotationColumnModelsQuery\n\n /**\n * Set the initialData in the form state atom on mount, if it exists and we have no data.\n */\n useEffect(() => {\n if (initialData && !isLoadingDefaultColumns) {\n dispatch({\n type: 'setValue',\n value: transformColumnModelsToFormData(\n initialData,\n defaultColumnModels ?? [],\n ),\n })\n }\n // Don't re-run if initial data changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isLoadingDefaultColumns])\n\n const validateInternal = useCallback(() => {\n const result = validateColumnModelFormData(readFormData())\n if (result.success) {\n setValidationErrors(null)\n } else {\n setValidationErrors(result.error)\n }\n return result\n }, [readFormData])\n\n useImperativeHandle(ref, () => {\n return {\n submit() {\n const result = validateInternal()\n if (result.success) {\n onSubmit(result.data)\n }\n },\n getEditedColumnModels() {\n const result = validateInternal()\n if (!result.success) {\n throw new Error('Column models were not valid')\n }\n return result.data\n },\n validate() {\n const result = validateInternal()\n return result.success\n },\n }\n }, [onSubmit, validateInternal])\n\n // Generic function to add a set of columns to the schema (e.g. default columns, annotation columns)\n const addColumnSet = useCallback(\n (newColumns: SetOptional<ColumnModel, 'id'>[]) => {\n const currentFormData = readFormData()\n let columnsToAdd = newColumns.filter(\n (cm: SetOptional<ColumnModel, 'id'>) => {\n // Don't add columns that cannot be added (for example, Views cannot have JSON columns)\n if (\n !getAllowedColumnTypes(isView, false).includes(\n cm.columnType as ColumnTypeEnum,\n )\n ) {\n return false\n }\n // Only add columns that are not already present\n // Use the name column to match because the ID may vary, e.g. if the facetType was changed\n return !currentFormData.find(fd => fd.name === cm.name)\n },\n )\n // Remove the ID column so TableColumnSchemaUtils.createTableUpdateTransactionRequest recognizes these as new columns\n // createTableUpdateTransactionRequest uses the existing column ID to track column updates in the table, so any new columns should have no ID\n // The user can also modify these columns before submitting them, so the ID may not be accurate when we end up submitting them\n columnsToAdd = columnsToAdd.map(cm => omit(cm, ['id']))\n if (columnsToAdd.length > 0) {\n dispatch({\n type: 'setValue',\n value: [\n ...currentFormData,\n ...transformColumnModelsToFormData(\n columnsToAdd,\n defaultColumnModels,\n ),\n ],\n })\n displayToast(\n `${columnsToAdd.length} ${pluralize(\n 'column',\n columnsToAdd.length,\n )} added to schema.`,\n 'success',\n )\n } else {\n displayToast(\n 'No columns added. All columns to add are present in the column schema.',\n 'info',\n )\n }\n },\n [defaultColumnModels, dispatch, isView, readFormData],\n )\n\n const addDefaultColumns = useCallback(() => {\n if (defaultColumnModels) {\n addColumnSet(defaultColumnModels)\n }\n }, [defaultColumnModels, addColumnSet])\n\n const addAnnotationColumns = useCallback(() => {\n if (annotationColumnModels) {\n addColumnSet(annotationColumnModels)\n }\n }, [annotationColumnModels, addColumnSet])\n\n // Put the errors into a map of columnModelIndex -> errors\n const errorsByColumnModel = useMemo(() => {\n if (validationErrors) {\n return groupBy(validationErrors.errors, e => e.path[0])\n }\n return {}\n }, [validationErrors])\n\n return (\n <Box\n component={'form'}\n sx={{\n py: 2.5,\n }}\n >\n <TableColumnSchemaFormActions\n disabled={isSubmitting}\n annotationColumnModelsQuery={annotationColumnModelsQuery}\n />\n <Box\n sx={{\n display: 'grid',\n gap: '8px',\n gridTemplateColumns: COLUMN_SCHEMA_FORM_GRID_TEMPLATE_COLUMNS,\n py: 2.5,\n }}\n >\n <ColumnHeader>{/* Checkbox */}</ColumnHeader>\n <ColumnHeader sx={{ gridColumn: '2 / span 2' }}>\n Column Name\n </ColumnHeader>\n <ColumnHeader>Column Type</ColumnHeader>\n <ColumnHeader>Size</ColumnHeader>\n <ColumnHeader>Max List Length</ColumnHeader>\n <ColumnHeader>Default Value</ColumnHeader>\n <ColumnHeader>Restrict Values</ColumnHeader>\n <ColumnHeader>Facet</ColumnHeader>\n <ColumnHeader>Sort Facet Values</ColumnHeader>\n <Box\n sx={{\n gridColumn: '1 / span 11',\n backgroundColor: 'grey.300',\n height: '2px',\n }}\n />\n {times(numColumnModels, index => {\n return (\n <TableColumnSchemaFormRow\n entityType={entityType}\n columnModelIndex={index}\n disabled={isSubmitting}\n key={index}\n columnModelValidationErrors={errorsByColumnModel[index]}\n annotationColumnModels={annotationColumnModels}\n originalColumnModels={originalColumnModels}\n />\n )\n })}\n </Box>\n <Box\n sx={{\n display: 'flex',\n gap: 1,\n }}\n >\n <Button\n variant={'outlined'}\n onClick={() => {\n dispatch({ type: 'appendColumn' })\n }}\n startIcon={<AddCircleTwoTone />}\n disabled={isSubmitting}\n >\n Add Column\n </Button>\n\n {hasDefaultColumnModels && (\n <Button\n variant={'outlined'}\n startIcon={\n isLoadingDefaultColumns ? (\n <SynapseSpinner />\n ) : (\n <AddCircleTwoTone />\n )\n }\n onClick={() => {\n addDefaultColumns()\n }}\n disabled={isLoadingDefaultColumns || isSubmitting}\n >\n Add Default {entityTypeToFriendlyName(entityType)} Columns\n </Button>\n )}\n\n {hasAnnotationColumnModels && (\n <Button\n variant={'outlined'}\n startIcon={\n isLoadingAnnotationColumns ? (\n <SynapseSpinner />\n ) : (\n <AddCircleTwoTone />\n )\n }\n disabled={isLoadingAnnotationColumns || isSubmitting}\n onClick={() => {\n addAnnotationColumns()\n }}\n >\n {ADD_ALL_ANNOTATIONS_BUTTON_TEXT}\n </Button>\n )}\n <ImportTableColumnsButton\n onAddColumns={cms => {\n addColumnSet(cms)\n }}\n disabled={isSubmitting}\n />\n </Box>\n </Box>\n )\n}\n\ntype TableColumnSchemaFormRowProps = {\n entityType: EntityType\n columnModelIndex: number\n disabled: boolean\n columnModelValidationErrors: ZodIssue[] | null\n annotationColumnModels?: ColumnModel[]\n originalColumnModels?: ColumnModel[]\n}\n\nfunction TableColumnSchemaFormRow(props: TableColumnSchemaFormRowProps) {\n const {\n columnModelIndex,\n entityType,\n disabled,\n columnModelValidationErrors = null,\n annotationColumnModels,\n originalColumnModels,\n } = props\n const dispatch = useSetAtom(tableColumnSchemaFormDataAtom)\n const columnModel = useAtomValue(\n useMemo(\n () =>\n selectAtom(\n tableColumnSchemaFormDataAtom,\n formData => formData[columnModelIndex],\n isEqual,\n ),\n [columnModelIndex],\n ),\n )\n\n // Find the original column model that matches the current column model by name and type, so we can tell the user what fields have changed\n const originalColumnModel = originalColumnModels\n ? findMatchingColumnModel(originalColumnModels, columnModel)\n : undefined\n\n // Find the closest match between passed column model and current column model with name and type\n const defaultAnnotationModel = annotationColumnModels\n ? findMatchingColumnModel(annotationColumnModels, columnModel)\n : undefined\n\n // Organize the JSON Subcolumn errors into a map of subcolumn index to errors\n const errorsForSubcolumns = useMemo(() => {\n if (columnModelValidationErrors) {\n const errorsForAllSubcolumns = columnModelValidationErrors.filter(e => {\n return e.path[0] === columnModelIndex && e.path[1] == 'jsonSubColumns'\n })\n return groupBy(errorsForAllSubcolumns, e => e.path[2])\n }\n return {}\n }, [columnModelIndex, columnModelValidationErrors])\n\n if (!columnModel) {\n return <></>\n }\n const isDefaultColumn = columnModel.isOriginallyDefaultColumn\n\n return (\n <>\n <ColumnModelForm\n entityType={entityType}\n columnModelIndex={columnModelIndex}\n isDefaultColumn={isDefaultColumn}\n disabled={disabled}\n validationErrors={columnModelValidationErrors}\n defaultAnnotationModel={defaultAnnotationModel}\n originalColumnModel={originalColumnModel}\n />\n {columnModel.columnType === ColumnTypeEnum.JSON &&\n columnModel.jsonSubColumns &&\n columnModel.jsonSubColumns.map((subColumnFacet, index) => (\n <ColumnModelForm\n key={index}\n entityType={entityType}\n columnModelIndex={columnModelIndex}\n jsonSubColumnIndex={index}\n isDefaultColumn={isDefaultColumn}\n disabled={disabled}\n validationErrors={errorsForSubcolumns[index]}\n />\n ))}\n {columnModel.columnType === ColumnTypeEnum.JSON && (\n <>\n <Box\n sx={{\n gridColumn: '1 / span 2',\n }}\n >\n {HIERARCHY_END_COMPONENT}\n </Box>\n <Box\n sx={{\n gridColumn: '3 / span 5',\n }}\n >\n <Button\n startIcon={<AddToList />}\n variant={'text'}\n disabled={disabled}\n onClick={() =>\n dispatch({ type: 'appendJsonSubColumn', columnModelIndex })\n }\n >\n Add sub-column\n </Button>\n </Box>\n </>\n )}\n </>\n )\n}\n\nconst TableColumnSchemaFormInternalWithForwardRef = forwardRef<\n SubmitHandle,\n TableColumnSchemaFormProps\n>(TableColumnSchemaFormInternal)\n\nconst TableColumnSchemaFormWrapped = forwardRef<\n SubmitHandle,\n TableColumnSchemaFormProps\n>(function TableColumnSchemaForm(props: TableColumnSchemaFormProps, ref) {\n // Wrap the form in a Jotai provider so that the internal atoms are scoped to just this component instance\n // Use forwardRef to ensure that the ref can be passed along\n return (\n <Provider>\n <TableColumnSchemaFormInternalWithForwardRef {...props} ref={ref} />\n </Provider>\n )\n})\n\nexport default TableColumnSchemaFormWrapped\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableColumnSchemaForm.js","names":[],"sources":["../../../src/components/TableColumnSchemaEditor/TableColumnSchemaForm.tsx"],"sourcesContent":["import AddToList from '@/assets/icons/AddToList'\nimport {\n useGetAnnotationColumnModels,\n useGetDefaultColumnModels,\n} from '@/synapse-queries/table/useColumnModel'\nimport {\n convertToConcreteEntityType,\n entityTypeToFriendlyName,\n} from '@/utils/functions/EntityTypeUtils'\nimport { AddCircleTwoTone } from '@mui/icons-material'\nimport { Box, Button, styled } from '@mui/material'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n ColumnModel,\n ColumnTypeEnum,\n VIEW_CONCRETE_TYPE_VALUES,\n ViewScope,\n} from '@sage-bionetworks/synapse-types'\nimport { atom, Provider, useAtomValue, useSetAtom } from 'jotai'\nimport { selectAtom, useAtomCallback } from 'jotai/utils'\nimport { groupBy, isEqual, noop, omit, times } from 'lodash-es'\nimport pluralize from 'pluralize'\nimport {\n ForwardedRef,\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useState,\n} from 'react'\nimport { SetOptional } from 'type-fest'\nimport { ZodError, ZodIssue } from 'zod'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport { displayToast } from '../ToastMessage'\nimport ColumnModelForm from './ColumnModelForm'\nimport ImportTableColumnsButton from './ImportTableColumnsButton'\nimport {\n findMatchingColumnModel,\n getAllowedColumnTypes,\n transformColumnModelsToFormData,\n} from './TableColumnSchemaEditorUtils'\nimport { TableColumnSchemaFormActions } from './TableColumnSchemaFormActions'\nimport { tableColumnSchemaFormDataAtom } from './TableColumnSchemaFormReducer'\nimport { validateColumnModelFormData } from './Validators/ColumnModelValidator'\n\nconst COLUMN_SCHEMA_FORM_GRID_TEMPLATE_COLUMNS =\n '18px 18px 1.75fr 1.75fr 0.75fr 1fr 1.25fr 1.25fr 1fr 1.25fr'\nconst GRID_CONTAINER_Y_MARGIN_PX = 6\nexport const HIERARCHY_VERTICAL_LINE_COMPONENT = (\n <Box\n sx={{\n width: '1px',\n height: `calc(100% + 2 * ${GRID_CONTAINER_Y_MARGIN_PX}px)`,\n backgroundColor: 'grey.400',\n marginLeft: '8px',\n }}\n />\n)\nexport const HIERARCHY_END_COMPONENT = (\n <Box\n sx={theme => ({\n width: '50%',\n height: '60%',\n borderLeft: `1px solid ${theme.palette.grey[400]}`,\n borderBottom: `1px solid ${theme.palette.grey[400]}`,\n marginLeft: '8px',\n marginBottom: 'auto',\n marginRight: '0',\n borderBottomLeftRadius: '5px',\n })}\n />\n)\n\nexport type SubmitHandle = {\n // Allow the parent component to trigger a submit of the form, so this may be embedded in an arbitrary modal.\n submit: () => void\n // Imperative handle to get the data out of the form for SWC compatibility\n getEditedColumnModels: () => SetOptional<ColumnModel, 'id'>[]\n // Used to check if all form data is valid. Returns the current validity state\n validate: () => boolean\n}\n\ntype TableColumnSchemaFormProps = {\n /* The type of the Table, which determines various schema restrictions and form functionality */\n entityType: EntityType\n /* If this is an entity view, the ViewScope can be used to determine the default column models and fetch annotation column models */\n viewScope?: ViewScope\n initialData?: SetOptional<ColumnModel, 'id'>[]\n onSubmit?: (newColumnModels: SetOptional<ColumnModel, 'id'>[]) => void\n isSubmitting?: boolean\n /** The original/current column models that are applied to the table, if they exist. */\n originalColumnModels?: ColumnModel[]\n}\n\nconst ColumnHeader = styled(Box, {\n label: 'ColumnHeader',\n})({\n fontWeight: 700,\n})\n\nexport const ADD_ALL_ANNOTATIONS_BUTTON_TEXT = 'Add All Annotations'\n\nfunction TableColumnSchemaFormInternal(\n props: TableColumnSchemaFormProps,\n ref: ForwardedRef<SubmitHandle>,\n) {\n const {\n initialData,\n entityType,\n viewScope,\n onSubmit = noop,\n isSubmitting = false,\n originalColumnModels,\n } = props\n\n const numColumnModels = useAtomValue(\n useMemo(() => atom(get => get(tableColumnSchemaFormDataAtom).length), []),\n )\n\n const dispatch = useSetAtom(tableColumnSchemaFormDataAtom)\n const [validationErrors, setValidationErrors] = useState<ZodError | null>(\n null,\n )\n\n // useAtomCallback will let us imperatively read the form data, instead of tracking it in state and triggering a full re-render of the form when any data changes\n const readFormData = useAtomCallback(\n useCallback(get => {\n return get(tableColumnSchemaFormDataAtom)\n }, []),\n )\n const concreteTableType = convertToConcreteEntityType(entityType)\n const isView = VIEW_CONCRETE_TYPE_VALUES.includes(\n concreteTableType as (typeof VIEW_CONCRETE_TYPE_VALUES)[number],\n )\n const hasAnnotationColumnModels = isView,\n hasDefaultColumnModels = isView\n\n const { data: defaultColumnModels, isLoading: isLoadingDefaultColumns } =\n useGetDefaultColumnModels(\n viewScope?.viewEntityType!,\n viewScope?.viewTypeMask,\n {\n enabled: hasDefaultColumnModels,\n staleTime: Infinity, // The default column models will never change\n },\n )\n\n const annotationColumnModelsQuery = useGetAnnotationColumnModels(\n {\n viewScope: viewScope!,\n includeDerivedAnnotations: true,\n concreteType:\n 'org.sagebionetworks.repo.model.table.ViewColumnModelRequest',\n },\n {\n enabled: hasAnnotationColumnModels,\n },\n )\n\n const {\n data: annotationColumnModels,\n isLoading: isLoadingAnnotationColumns,\n } = annotationColumnModelsQuery\n\n /**\n * Set the initialData in the form state atom on mount, if it exists and we have no data.\n */\n useEffect(() => {\n if (initialData && !isLoadingDefaultColumns) {\n dispatch({\n type: 'setValue',\n value: transformColumnModelsToFormData(\n initialData,\n defaultColumnModels ?? [],\n ),\n })\n }\n // Don't re-run if initial data changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isLoadingDefaultColumns])\n\n const validateInternal = useCallback(() => {\n const result = validateColumnModelFormData(readFormData())\n if (result.success) {\n setValidationErrors(null)\n } else {\n setValidationErrors(result.error)\n }\n return result\n }, [readFormData])\n\n useImperativeHandle(ref, () => {\n return {\n submit() {\n const result = validateInternal()\n if (result.success) {\n onSubmit(result.data)\n }\n },\n getEditedColumnModels() {\n const result = validateInternal()\n if (!result.success) {\n throw new Error('Column models were not valid')\n }\n return result.data\n },\n validate() {\n const result = validateInternal()\n return result.success\n },\n }\n }, [onSubmit, validateInternal])\n\n // Generic function to add a set of columns to the schema (e.g. default columns, annotation columns)\n const addColumnSet = useCallback(\n (newColumns: SetOptional<ColumnModel, 'id'>[]) => {\n const currentFormData = readFormData()\n let columnsToAdd = newColumns.filter(\n (cm: SetOptional<ColumnModel, 'id'>) => {\n // Don't add columns that cannot be added (for example, Views cannot have JSON columns)\n if (\n !getAllowedColumnTypes(isView, false).includes(\n cm.columnType as ColumnTypeEnum,\n )\n ) {\n return false\n }\n // Only add columns that are not already present\n // Use the name column to match because the ID may vary, e.g. if the facetType was changed\n return !currentFormData.find(fd => fd.name === cm.name)\n },\n )\n // Remove the ID column so TableColumnSchemaUtils.createTableUpdateTransactionRequest recognizes these as new columns\n // createTableUpdateTransactionRequest uses the existing column ID to track column updates in the table, so any new columns should have no ID\n // The user can also modify these columns before submitting them, so the ID may not be accurate when we end up submitting them\n columnsToAdd = columnsToAdd.map(cm => omit(cm, ['id']))\n if (columnsToAdd.length > 0) {\n dispatch({\n type: 'setValue',\n value: [\n ...currentFormData,\n ...transformColumnModelsToFormData(\n columnsToAdd,\n defaultColumnModels,\n ),\n ],\n })\n displayToast(\n `${columnsToAdd.length} ${pluralize(\n 'column',\n columnsToAdd.length,\n )} added to schema.`,\n 'success',\n )\n } else {\n displayToast(\n 'No columns added. All columns to add are present in the column schema.',\n 'info',\n )\n }\n },\n [defaultColumnModels, dispatch, isView, readFormData],\n )\n\n const addDefaultColumns = useCallback(() => {\n if (defaultColumnModels) {\n addColumnSet(defaultColumnModels)\n }\n }, [defaultColumnModels, addColumnSet])\n\n const addAnnotationColumns = useCallback(() => {\n if (annotationColumnModels) {\n addColumnSet(annotationColumnModels)\n }\n }, [annotationColumnModels, addColumnSet])\n\n // Put the errors into a map of columnModelIndex -> errors\n const errorsByColumnModel = useMemo(() => {\n if (validationErrors) {\n return groupBy(validationErrors.errors, e => e.path[0])\n }\n return {}\n }, [validationErrors])\n\n return (\n <Box\n component={'form'}\n sx={{\n py: 2.5,\n }}\n >\n <TableColumnSchemaFormActions\n disabled={isSubmitting}\n annotationColumnModelsQuery={annotationColumnModelsQuery}\n />\n <Box\n sx={{\n display: 'grid',\n gap: '8px',\n gridTemplateColumns: COLUMN_SCHEMA_FORM_GRID_TEMPLATE_COLUMNS,\n py: 2.5,\n }}\n >\n <ColumnHeader>{/* Checkbox */}</ColumnHeader>\n <ColumnHeader sx={{ gridColumn: '2 / span 2' }}>\n Column Name\n </ColumnHeader>\n <ColumnHeader>Column Type</ColumnHeader>\n <ColumnHeader>Size</ColumnHeader>\n <ColumnHeader>Max List Length</ColumnHeader>\n <ColumnHeader>Default Value</ColumnHeader>\n <ColumnHeader>Restrict Values</ColumnHeader>\n <ColumnHeader>Facet</ColumnHeader>\n <ColumnHeader>Sort Facet Values</ColumnHeader>\n <Box\n sx={{\n gridColumn: '1 / span 11',\n backgroundColor: 'grey.300',\n height: '2px',\n }}\n />\n {times(numColumnModels, index => {\n return (\n <TableColumnSchemaFormRow\n entityType={entityType}\n columnModelIndex={index}\n disabled={isSubmitting}\n key={index}\n columnModelValidationErrors={errorsByColumnModel[index]}\n annotationColumnModels={annotationColumnModels}\n originalColumnModels={originalColumnModels}\n />\n )\n })}\n </Box>\n <Box\n sx={{\n display: 'flex',\n gap: 1,\n }}\n >\n <Button\n variant={'outlined'}\n onClick={() => {\n dispatch({ type: 'appendColumn' })\n }}\n startIcon={<AddCircleTwoTone />}\n disabled={isSubmitting}\n >\n Add Column\n </Button>\n\n {hasDefaultColumnModels && (\n <Button\n variant={'outlined'}\n startIcon={\n isLoadingDefaultColumns ? (\n <SynapseSpinner />\n ) : (\n <AddCircleTwoTone />\n )\n }\n onClick={() => {\n addDefaultColumns()\n }}\n disabled={isLoadingDefaultColumns || isSubmitting}\n >\n Add Default {entityTypeToFriendlyName(entityType)} Columns\n </Button>\n )}\n\n {hasAnnotationColumnModels && (\n <Button\n variant={'outlined'}\n startIcon={\n isLoadingAnnotationColumns ? (\n <SynapseSpinner />\n ) : (\n <AddCircleTwoTone />\n )\n }\n disabled={isLoadingAnnotationColumns || isSubmitting}\n onClick={() => {\n addAnnotationColumns()\n }}\n >\n {ADD_ALL_ANNOTATIONS_BUTTON_TEXT}\n </Button>\n )}\n <ImportTableColumnsButton\n onAddColumns={cms => {\n addColumnSet(cms)\n }}\n disabled={isSubmitting}\n />\n </Box>\n </Box>\n )\n}\n\ntype TableColumnSchemaFormRowProps = {\n entityType: EntityType\n columnModelIndex: number\n disabled: boolean\n columnModelValidationErrors: ZodIssue[] | null\n annotationColumnModels?: ColumnModel[]\n originalColumnModels?: ColumnModel[]\n}\n\nfunction TableColumnSchemaFormRow(props: TableColumnSchemaFormRowProps) {\n const {\n columnModelIndex,\n entityType,\n disabled,\n columnModelValidationErrors = null,\n annotationColumnModels,\n originalColumnModels,\n } = props\n const dispatch = useSetAtom(tableColumnSchemaFormDataAtom)\n const columnModel = useAtomValue(\n useMemo(\n () =>\n selectAtom(\n tableColumnSchemaFormDataAtom,\n formData => formData[columnModelIndex],\n isEqual,\n ),\n [columnModelIndex],\n ),\n )\n\n // Find the original column model that matches the current column model by name and type, so we can tell the user what fields have changed\n const originalColumnModel = originalColumnModels\n ? findMatchingColumnModel(originalColumnModels, columnModel)\n : undefined\n\n // Find the closest match between passed column model and current column model with name and type\n const defaultAnnotationModel = annotationColumnModels\n ? findMatchingColumnModel(annotationColumnModels, columnModel)\n : undefined\n\n // Organize the JSON Subcolumn errors into a map of subcolumn index to errors\n const errorsForSubcolumns = useMemo(() => {\n if (columnModelValidationErrors) {\n const errorsForAllSubcolumns = columnModelValidationErrors.filter(e => {\n return e.path[0] === columnModelIndex && e.path[1] == 'jsonSubColumns'\n })\n return groupBy(errorsForAllSubcolumns, e => e.path[2])\n }\n return {}\n }, [columnModelIndex, columnModelValidationErrors])\n\n if (!columnModel) {\n return <></>\n }\n const isDefaultColumn = columnModel.isOriginallyDefaultColumn\n\n return (\n <>\n <ColumnModelForm\n entityType={entityType}\n columnModelIndex={columnModelIndex}\n isDefaultColumn={isDefaultColumn}\n disabled={disabled}\n validationErrors={columnModelValidationErrors}\n defaultAnnotationModel={defaultAnnotationModel}\n originalColumnModel={originalColumnModel}\n />\n {columnModel.columnType === ColumnTypeEnum.JSON &&\n columnModel.jsonSubColumns &&\n columnModel.jsonSubColumns.map((subColumnFacet, index) => (\n <ColumnModelForm\n key={index}\n entityType={entityType}\n columnModelIndex={columnModelIndex}\n jsonSubColumnIndex={index}\n isDefaultColumn={isDefaultColumn}\n disabled={disabled}\n validationErrors={errorsForSubcolumns[index]}\n />\n ))}\n {columnModel.columnType === ColumnTypeEnum.JSON && (\n <>\n <Box\n sx={{\n gridColumn: '1 / span 2',\n }}\n >\n {HIERARCHY_END_COMPONENT}\n </Box>\n <Box\n sx={{\n gridColumn: '3 / span 5',\n }}\n >\n <Button\n startIcon={<AddToList />}\n variant={'text'}\n disabled={disabled}\n onClick={() =>\n dispatch({ type: 'appendJsonSubColumn', columnModelIndex })\n }\n >\n Add sub-column\n </Button>\n </Box>\n </>\n )}\n </>\n )\n}\n\nconst TableColumnSchemaFormInternalWithForwardRef = forwardRef<\n SubmitHandle,\n TableColumnSchemaFormProps\n>(TableColumnSchemaFormInternal)\n\nconst TableColumnSchemaFormWrapped = forwardRef<\n SubmitHandle,\n TableColumnSchemaFormProps\n>(function TableColumnSchemaForm(props: TableColumnSchemaFormProps, ref) {\n // Wrap the form in a Jotai provider so that the internal atoms are scoped to just this component instance\n // Use forwardRef to ensure that the ref can be passed along\n return (\n <Provider>\n <TableColumnSchemaFormInternalWithForwardRef {...props} ref={ref} />\n </Provider>\n )\n})\n\nexport default TableColumnSchemaFormWrapped\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TableColumnSchemaFormActions.js","names":[],"sources":["../../../src/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.tsx"],"sourcesContent":["import { useGetAnnotationColumnModels } from '@/synapse-queries/table/useColumnModel'\nimport { Healing, North, South } from '@mui/icons-material'\nimport {\n Box,\n Button,\n ButtonGroup,\n Checkbox,\n Link,\n Tooltip,\n Typography,\n} from '@mui/material'\nimport { useAtomValue, useSetAtom } from 'jotai/index'\nimport pluralize from 'pluralize'\nimport { useState } from 'react'\nimport { ConfirmationDialog } from '../ConfirmationDialog'\nimport IconSvg from '../IconSvg'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport { getNumberOfColumnModelsWithValuesBelowMinimumRecommendedSizes } from './TableColumnSchemaEditorUtils'\nimport {\n getIsAllSelected,\n getNumberOfSelectedItems,\n tableColumnSchemaFormDataAtom,\n} from './TableColumnSchemaFormReducer'\n\nexport const USE_RECOMMENDED_SIZES_BUTTON_TEXT = 'Use Recommended Sizes'\n\nconst RECOMMENDED_SIZES_CONFIRMATION_MODAL_CONTENT = (\n <>\n <Typography variant={'body1'}>\n Proceeding will adjust columns with size values that are shorter than\n longest data in your annotations.\n </Typography>\n <Typography variant={'body1'}>\n Changed size values will appear in blue. Hover to see the previous value.\n </Typography>\n <Typography variant={'body1'}>\n Changes are saved only after clicking “Save” in the Schema editor. Click\n “Cancel” to discard unsaved changes.\n </Typography>\n </>\n)\ntype TableColumnSchemaFormActionsProps = {\n disabled?: boolean\n annotationColumnModelsQuery: ReturnType<typeof useGetAnnotationColumnModels>\n}\n\nexport function TableColumnSchemaFormActions(\n props: TableColumnSchemaFormActionsProps,\n) {\n const { disabled = false, annotationColumnModelsQuery } = props\n const dispatch = useSetAtom(tableColumnSchemaFormDataAtom)\n\n const columnModels = useAtomValue(tableColumnSchemaFormDataAtom)\n const allSelected = getIsAllSelected(columnModels)\n const numSelected = getNumberOfSelectedItems(columnModels)\n\n const [\n showUseRecommendedSizesConfirmationDialog,\n setShowUseRecommendedSizesConfirmationDialog,\n ] = useState(false)\n\n const showUseRecommendedSizesButton =\n annotationColumnModelsQuery.isLoading || annotationColumnModelsQuery.data\n const numberOfColumnsBelowRecommendedSizes = annotationColumnModelsQuery.data\n ? getNumberOfColumnModelsWithValuesBelowMinimumRecommendedSizes(\n columnModels,\n annotationColumnModelsQuery.data,\n )\n : 0\n\n return (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: 1,\n }}\n >\n <Button\n aria-label={'Select All'}\n variant={'outlined'}\n color={'neutral'}\n onClick={() => {\n dispatch({ type: 'toggleSelectAll' })\n }}\n sx={{ alignSelf: 'stretch' }}\n disabled={disabled || columnModels.length == 0}\n >\n <Checkbox\n sx={{ mr: 1 }}\n checked={allSelected}\n indeterminate={numSelected > 0 && !allSelected}\n disabled={disabled || columnModels.length == 0}\n />\n <Typography\n variant=\"smallText1\"\n sx={{\n color: 'text.secondary',\n }}\n >\n {numSelected} selected\n </Typography>\n </Button>\n <ButtonGroup sx={{ alignSelf: 'stretch' }}>\n <Button\n aria-label={'Move Down'}\n variant={'outlined'}\n color={'neutral'}\n onClick={() => {\n dispatch({ type: 'moveDown' })\n }}\n disabled={disabled || numSelected == 0}\n >\n <South fontSize={'small'} />\n </Button>\n <Button\n aria-label={'Move Up'}\n variant={'outlined'}\n color={'neutral'}\n onClick={() => {\n dispatch({ type: 'moveUp' })\n }}\n disabled={disabled || numSelected == 0}\n >\n <North fontSize={'small'} />\n </Button>\n </ButtonGroup>\n <Button\n aria-label={'Delete'}\n variant={'outlined'}\n color={'neutral'}\n onClick={() => {\n dispatch({ type: 'delete' })\n }}\n sx={{ alignSelf: 'stretch' }}\n disabled={disabled || numSelected == 0}\n >\n <IconSvg fontSize={'small'} icon={'delete'} wrap={false} />\n </Button>\n <Box\n sx={{\n flexGrow: 1,\n }}\n >\n {/* spacer */}\n </Box>\n <Link\n sx={{ display: 'block', py: '10px', mr: '10px', textAlign: 'right' }}\n href=\"https://help.synapse.org/docs/Organizing-Data-With-Tables.2011038095.html\"\n target=\"_blank\"\n >\n About schemas and column types\n </Link>\n {showUseRecommendedSizesButton && (\n <>\n <ConfirmationDialog\n open={showUseRecommendedSizesConfirmationDialog}\n onConfirm={() => {\n dispatch({\n type: 'updateColumnSizesToRecommendedValues',\n annotationColumnModels: annotationColumnModelsQuery.data!,\n })\n setShowUseRecommendedSizesConfirmationDialog(false)\n }}\n onCancel={() => {\n setShowUseRecommendedSizesConfirmationDialog(false)\n }}\n title={`This will change ${numberOfColumnsBelowRecommendedSizes.toLocaleString()} ${pluralize(\n 'column',\n numberOfColumnsBelowRecommendedSizes,\n )} in this schema`}\n content={RECOMMENDED_SIZES_CONFIRMATION_MODAL_CONTENT}\n confirmButtonProps={{\n children: USE_RECOMMENDED_SIZES_BUTTON_TEXT,\n }}\n />\n <Tooltip\n title={\n numberOfColumnsBelowRecommendedSizes > 0\n ? ''\n : 'All schema values meet the minimum recommended sizes.'\n }\n >\n <Box>\n <Button\n sx={{ height: '100%' }}\n variant={'outlined'}\n startIcon={\n annotationColumnModelsQuery.isLoading ? (\n <SynapseSpinner />\n ) : (\n <Healing />\n )\n }\n onClick={() => {\n setShowUseRecommendedSizesConfirmationDialog(true)\n }}\n disabled={\n annotationColumnModelsQuery.isLoading ||\n numberOfColumnsBelowRecommendedSizes == 0\n }\n >\n Use Recommended Sizes\n </Button>\n </Box>\n </Tooltip>\n </>\n )}\n </Box>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableColumnSchemaFormActions.js","names":[],"sources":["../../../src/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.tsx"],"sourcesContent":["import { useGetAnnotationColumnModels } from '@/synapse-queries/table/useColumnModel'\nimport { Healing, North, South } from '@mui/icons-material'\nimport {\n Box,\n Button,\n ButtonGroup,\n Checkbox,\n Link,\n Tooltip,\n Typography,\n} from '@mui/material'\nimport { useAtomValue, useSetAtom } from 'jotai/index'\nimport pluralize from 'pluralize'\nimport { useState } from 'react'\nimport { ConfirmationDialog } from '../ConfirmationDialog'\nimport IconSvg from '../IconSvg'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport { getNumberOfColumnModelsWithValuesBelowMinimumRecommendedSizes } from './TableColumnSchemaEditorUtils'\nimport {\n getIsAllSelected,\n getNumberOfSelectedItems,\n tableColumnSchemaFormDataAtom,\n} from './TableColumnSchemaFormReducer'\n\nexport const USE_RECOMMENDED_SIZES_BUTTON_TEXT = 'Use Recommended Sizes'\n\nconst RECOMMENDED_SIZES_CONFIRMATION_MODAL_CONTENT = (\n <>\n <Typography variant={'body1'}>\n Proceeding will adjust columns with size values that are shorter than\n longest data in your annotations.\n </Typography>\n <Typography variant={'body1'}>\n Changed size values will appear in blue. Hover to see the previous value.\n </Typography>\n <Typography variant={'body1'}>\n Changes are saved only after clicking “Save” in the Schema editor. Click\n “Cancel” to discard unsaved changes.\n </Typography>\n </>\n)\ntype TableColumnSchemaFormActionsProps = {\n disabled?: boolean\n annotationColumnModelsQuery: ReturnType<typeof useGetAnnotationColumnModels>\n}\n\nexport function TableColumnSchemaFormActions(\n props: TableColumnSchemaFormActionsProps,\n) {\n const { disabled = false, annotationColumnModelsQuery } = props\n const dispatch = useSetAtom(tableColumnSchemaFormDataAtom)\n\n const columnModels = useAtomValue(tableColumnSchemaFormDataAtom)\n const allSelected = getIsAllSelected(columnModels)\n const numSelected = getNumberOfSelectedItems(columnModels)\n\n const [\n showUseRecommendedSizesConfirmationDialog,\n setShowUseRecommendedSizesConfirmationDialog,\n ] = useState(false)\n\n const showUseRecommendedSizesButton =\n annotationColumnModelsQuery.isLoading || annotationColumnModelsQuery.data\n const numberOfColumnsBelowRecommendedSizes = annotationColumnModelsQuery.data\n ? getNumberOfColumnModelsWithValuesBelowMinimumRecommendedSizes(\n columnModels,\n annotationColumnModelsQuery.data,\n )\n : 0\n\n return (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: 1,\n }}\n >\n <Button\n aria-label={'Select All'}\n variant={'outlined'}\n color={'neutral'}\n onClick={() => {\n dispatch({ type: 'toggleSelectAll' })\n }}\n sx={{ alignSelf: 'stretch' }}\n disabled={disabled || columnModels.length == 0}\n >\n <Checkbox\n sx={{ mr: 1 }}\n checked={allSelected}\n indeterminate={numSelected > 0 && !allSelected}\n disabled={disabled || columnModels.length == 0}\n />\n <Typography\n variant=\"smallText1\"\n sx={{\n color: 'text.secondary',\n }}\n >\n {numSelected} selected\n </Typography>\n </Button>\n <ButtonGroup sx={{ alignSelf: 'stretch' }}>\n <Button\n aria-label={'Move Down'}\n variant={'outlined'}\n color={'neutral'}\n onClick={() => {\n dispatch({ type: 'moveDown' })\n }}\n disabled={disabled || numSelected == 0}\n >\n <South fontSize={'small'} />\n </Button>\n <Button\n aria-label={'Move Up'}\n variant={'outlined'}\n color={'neutral'}\n onClick={() => {\n dispatch({ type: 'moveUp' })\n }}\n disabled={disabled || numSelected == 0}\n >\n <North fontSize={'small'} />\n </Button>\n </ButtonGroup>\n <Button\n aria-label={'Delete'}\n variant={'outlined'}\n color={'neutral'}\n onClick={() => {\n dispatch({ type: 'delete' })\n }}\n sx={{ alignSelf: 'stretch' }}\n disabled={disabled || numSelected == 0}\n >\n <IconSvg fontSize={'small'} icon={'delete'} wrap={false} />\n </Button>\n <Box\n sx={{\n flexGrow: 1,\n }}\n >\n {/* spacer */}\n </Box>\n <Link\n sx={{ display: 'block', py: '10px', mr: '10px', textAlign: 'right' }}\n href=\"https://help.synapse.org/docs/Organizing-Data-With-Tables.2011038095.html\"\n target=\"_blank\"\n >\n About schemas and column types\n </Link>\n {showUseRecommendedSizesButton && (\n <>\n <ConfirmationDialog\n open={showUseRecommendedSizesConfirmationDialog}\n onConfirm={() => {\n dispatch({\n type: 'updateColumnSizesToRecommendedValues',\n annotationColumnModels: annotationColumnModelsQuery.data!,\n })\n setShowUseRecommendedSizesConfirmationDialog(false)\n }}\n onCancel={() => {\n setShowUseRecommendedSizesConfirmationDialog(false)\n }}\n title={`This will change ${numberOfColumnsBelowRecommendedSizes.toLocaleString()} ${pluralize(\n 'column',\n numberOfColumnsBelowRecommendedSizes,\n )} in this schema`}\n content={RECOMMENDED_SIZES_CONFIRMATION_MODAL_CONTENT}\n confirmButtonProps={{\n children: USE_RECOMMENDED_SIZES_BUTTON_TEXT,\n }}\n />\n <Tooltip\n title={\n numberOfColumnsBelowRecommendedSizes > 0\n ? ''\n : 'All schema values meet the minimum recommended sizes.'\n }\n >\n <Box>\n <Button\n sx={{ height: '100%' }}\n variant={'outlined'}\n startIcon={\n annotationColumnModelsQuery.isLoading ? (\n <SynapseSpinner />\n ) : (\n <Healing />\n )\n }\n onClick={() => {\n setShowUseRecommendedSizesConfirmationDialog(true)\n }}\n disabled={\n annotationColumnModelsQuery.isLoading ||\n numberOfColumnsBelowRecommendedSizes == 0\n }\n >\n Use Recommended Sizes\n </Button>\n </Box>\n </Tooltip>\n </>\n )}\n </Box>\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TableColumnSchemaFormReducer.js","names":[],"sources":["../../../src/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.ts"],"sourcesContent":["import { ColumnModel, ColumnTypeEnum } from '@sage-bionetworks/synapse-types'\nimport { atomWithReducer } from 'jotai/utils'\nimport { cloneDeep } from 'lodash-es'\nimport {\n canHaveMaxListLength,\n canHaveSize,\n configureFacetsForType,\n DEFAULT_STRING_SIZE,\n findMatchingColumnModel,\n isFormDataValueSmallerThanRecommendedValue,\n} from './TableColumnSchemaEditorUtils'\nimport {\n ColumnModelFormData,\n JsonSubColumnModelFormData,\n} from './Validators/ColumnModelValidator'\n\nexport function getIsAllSelected(formData: ColumnModelFormData[]) {\n return (\n formData.length > 0 &&\n formData.every(\n cm =>\n // Is selected\n cm.isSelected &&\n // And all subcolumns are selected (true if there are no subcolumns)\n (cm.jsonSubColumns ?? []).every(\n (jsc: JsonSubColumnModelFormData) => jsc.isSelected,\n ),\n )\n )\n}\n\nexport function getNumberOfSelectedItems(formData: ColumnModelFormData[]) {\n return formData.reduce((acc, curr) => {\n if (curr.isSelected) {\n acc += 1\n }\n if (curr.jsonSubColumns) {\n curr.jsonSubColumns.forEach((jsc: JsonSubColumnModelFormData) => {\n if (jsc.isSelected) {\n acc += 1\n }\n })\n }\n return acc\n }, 0)\n}\n\nexport function getDefaultColumnModelFormData(): ColumnModelFormData {\n return {\n name: '',\n columnType: ColumnTypeEnum.STRING,\n maximumSize: DEFAULT_STRING_SIZE,\n isOriginallyDefaultColumn: false,\n isSelected: false,\n }\n}\n\nexport function getDefaultJsonSubColumnFormData(): JsonSubColumnModelFormData {\n return {\n name: '',\n jsonPath: '',\n columnType: ColumnTypeEnum.STRING,\n facetType: 'enumeration',\n isSelected: false,\n }\n}\n\n/**\n * In the provided array, move items up where the predicate evaluates to true\n * @param arr the array to reorder\n * @param predicate a function that returns true if the item should be moved up\n * @returns - a new array with the reordered items\n */\nfunction moveSelectedItemsUp<T = unknown>(\n arr: T[],\n predicate: (item: T) => boolean,\n) {\n const newArr = [...arr]\n newArr.forEach((item, index) => {\n // For each item that should move up, swap it with the previous item\n if (\n // Cannot move index 0 up\n index > 0 &&\n // Only move if the predicate matches\n predicate(item) &&\n // If the previous item should also move, skip the swap\n !predicate(newArr[index - 1])\n ) {\n // swap the items\n const temp = newArr[index - 1]\n newArr[index - 1] = newArr[index]\n newArr[index] = temp\n }\n })\n return newArr\n}\n\n/**\n * In the provided array, move items down where the predicate evaluates to true\n * @param arr the array to reorder\n * @param predicate a function that returns true if the item should be moved down\n * @returns - a new array with the reordered items\n */\nfunction moveSelectedItemsDown<T = unknown>(\n arr: T[],\n predicate: (item: T) => boolean,\n) {\n const newArr = [...arr]\n // Start from the end and work backwards, otherwise items could be moved more than once\n for (let i = newArr.length - 1; i >= 0; i--) {\n const item = newArr[i]\n if (\n // Cannot move the last item down\n i < newArr.length - 1 &&\n // Only move if the predicate matches\n predicate(item) &&\n // If the next item should also be moved, don't swap\n !predicate(newArr[i + 1])\n ) {\n // swap the items\n const temp = newArr[i]\n newArr[i] = newArr[i + 1]\n newArr[i + 1] = temp\n }\n }\n return newArr\n}\n\ntype TableColumnSchemaFormReducerAction =\n | {\n type: 'setValue'\n value: ColumnModelFormData[]\n }\n | {\n type: 'toggleSelect'\n columnModelIndex: number\n jsonSubColumnModelIndex?: number\n }\n | { type: 'toggleSelectAll' }\n | {\n type: 'appendColumn'\n }\n | {\n type: 'appendJsonSubColumn'\n columnModelIndex: number\n }\n | {\n type: 'setColumnModelValue'\n columnModelIndex: number\n jsonSubColumnModelIndex?: number\n value: ColumnModelFormData | JsonSubColumnModelFormData\n }\n | {\n type: 'changeColumnModelType'\n newColumnType: ColumnTypeEnum\n columnModelIndex: number\n jsonSubColumnModelIndex?: number\n }\n | {\n type: 'move'\n from: {\n columnModelIndex: number\n jsonSubColumnModelIndex?: number\n }\n to: { columnModelIndex: number; jsonSubColumnModelIndex?: number }\n }\n | {\n type: 'moveUp'\n }\n | {\n type: 'moveDown'\n }\n | {\n type: 'delete'\n }\n | {\n type: 'updateColumnSizesToRecommendedValues'\n annotationColumnModels: ColumnModel[]\n }\n\nfunction updateColumnSizesToRecommendedValues(\n action: {\n type: 'updateColumnSizesToRecommendedValues'\n annotationColumnModels: ColumnModel[]\n },\n prevState: ColumnModelFormData[],\n): ColumnModelFormData[] {\n const { annotationColumnModels } = action\n return prevState.map(cm => {\n // Note: no need to check JSON subcolumns, because Views cannot have JSON data!\n\n // Find the closest match between passed column model and current column model with name and type\n const defaultAnnotationModel = annotationColumnModels\n ? findMatchingColumnModel(annotationColumnModels, cm)\n : undefined\n\n if (defaultAnnotationModel == null) {\n // No matching annotation column, so do not change it\n return cm\n }\n\n if (\n isFormDataValueSmallerThanRecommendedValue(\n cm.maximumSize,\n defaultAnnotationModel.maximumSize,\n )\n ) {\n cm = { ...cm, maximumSize: defaultAnnotationModel.maximumSize }\n }\n\n if (\n isFormDataValueSmallerThanRecommendedValue(\n cm.maximumListLength,\n defaultAnnotationModel.maximumListLength,\n )\n ) {\n cm = {\n ...cm,\n maximumListLength: defaultAnnotationModel.maximumListLength,\n }\n }\n return cm\n })\n}\n\nfunction changeColumnModelType(\n action: {\n type: 'changeColumnModelType'\n newColumnType: ColumnTypeEnum\n columnModelIndex: number\n jsonSubColumnModelIndex?: number\n },\n prevState: ColumnModelFormData[],\n) {\n const { columnModelIndex, jsonSubColumnModelIndex, newColumnType } = action\n let newColumnModelValue: ColumnModelFormData | JsonSubColumnModelFormData\n\n // Create a copy of the selected column model\n if (prevState && prevState[columnModelIndex]) {\n if (\n prevState[columnModelIndex].jsonSubColumns &&\n jsonSubColumnModelIndex !== undefined\n ) {\n newColumnModelValue = cloneDeep(\n prevState[columnModelIndex].jsonSubColumns[jsonSubColumnModelIndex],\n )\n } else {\n newColumnModelValue = cloneDeep(prevState[columnModelIndex])\n }\n } else {\n throw new Error(\n 'Cannot change column model type for a column that does not exist',\n )\n }\n\n // Update the column model. Remove fields that no longer make sense for the new column type\n newColumnModelValue.columnType = newColumnType\n if (!canHaveSize(newColumnType) && 'maximumSize' in newColumnModelValue) {\n delete newColumnModelValue.maximumSize\n }\n if (\n !canHaveMaxListLength(newColumnType) &&\n 'maximumListLength' in newColumnModelValue\n ) {\n delete newColumnModelValue.maximumListLength\n }\n\n // Remove default and restricted values unconditionally since they may not adhere to the new column type\n if ('enumValues' in newColumnModelValue) {\n delete newColumnModelValue.enumValues\n }\n if ('defaultValue' in newColumnModelValue) {\n delete newColumnModelValue.defaultValue\n }\n\n const allowedFacetTypes = configureFacetsForType(\n newColumnType,\n !!jsonSubColumnModelIndex,\n )\n if (\n 'facetType' in newColumnModelValue &&\n (allowedFacetTypes === null ||\n !allowedFacetTypes.includes(newColumnModelValue.facetType))\n ) {\n delete newColumnModelValue.facetType\n }\n\n if (\n 'jsonSubColumns' in newColumnModelValue &&\n newColumnType !== ColumnTypeEnum.JSON\n ) {\n delete newColumnModelValue.jsonSubColumns\n }\n\n // Replace the value\n if (prevState && prevState[columnModelIndex]) {\n if (\n prevState[columnModelIndex].jsonSubColumns &&\n jsonSubColumnModelIndex !== undefined\n ) {\n prevState[columnModelIndex].jsonSubColumns[jsonSubColumnModelIndex] =\n newColumnModelValue as JsonSubColumnModelFormData\n } else {\n prevState[columnModelIndex] = newColumnModelValue as ColumnModelFormData\n }\n }\n}\n\nfunction toggleSelectAll(prevState: ColumnModelFormData[]) {\n const allSelected = getIsAllSelected(prevState)\n if (allSelected) {\n return prevState.map(cm => ({\n ...cm,\n jsonSubColumns: cm.jsonSubColumns?.map(jsc => ({\n ...jsc,\n isSelected: false,\n })),\n isSelected: false,\n }))\n } else {\n return prevState.map(cm => ({\n ...cm,\n jsonSubColumns: cm.jsonSubColumns?.map(jsc => ({\n ...jsc,\n isSelected: true,\n })),\n isSelected: true,\n }))\n }\n}\n\nfunction setColumnModelValue(\n action: {\n type: 'setColumnModelValue'\n columnModelIndex: number\n jsonSubColumnModelIndex?: number\n value: ColumnModelFormData | JsonSubColumnModelFormData\n },\n prevState: ColumnModelFormData[],\n) {\n const { columnModelIndex, jsonSubColumnModelIndex, value } = action\n if (prevState && prevState[columnModelIndex]) {\n if (\n prevState[columnModelIndex].jsonSubColumns &&\n jsonSubColumnModelIndex !== undefined\n ) {\n prevState[columnModelIndex].jsonSubColumns[jsonSubColumnModelIndex] =\n value as JsonSubColumnModelFormData\n } else {\n prevState[columnModelIndex] = value as ColumnModelFormData\n }\n }\n}\n\nfunction toggleSelect(\n action: {\n type: 'toggleSelect'\n columnModelIndex: number\n jsonSubColumnModelIndex?: number\n },\n prevState: ColumnModelFormData[],\n) {\n const { columnModelIndex, jsonSubColumnModelIndex } = action\n if (prevState && prevState[columnModelIndex]) {\n if (\n prevState[columnModelIndex].jsonSubColumns &&\n jsonSubColumnModelIndex !== undefined\n ) {\n const cm =\n prevState[columnModelIndex].jsonSubColumns[jsonSubColumnModelIndex]\n prevState[columnModelIndex].jsonSubColumns[jsonSubColumnModelIndex] = {\n ...cm,\n isSelected: !cm.isSelected,\n }\n } else {\n const cm = prevState[columnModelIndex]\n prevState[columnModelIndex] = { ...cm, isSelected: !cm.isSelected }\n }\n }\n}\n\nfunction deleteColumnModel(prevState: ColumnModelFormData[]) {\n return prevState\n .filter(cm => !cm.isSelected)\n .map(cm => {\n if (cm.jsonSubColumns) {\n cm = {\n ...cm,\n jsonSubColumns: cm.jsonSubColumns.filter(\n (jsc: JsonSubColumnModelFormData) => !jsc.isSelected,\n ),\n }\n }\n return cm\n })\n}\n\n/**\n * Returns a new, shallowly-cloned array that moves the object from the `fromIndex` to the `toIndex`.\n * Derived from https://stackoverflow.com/a/6470794/9723359\n *\n * Returns the same array if the `fromIndex` and `toIndex` are the same.\n * @param arrayToReorder\n * @param fromIndex\n * @param toIndex\n */\nfunction moveElementInArray<T = unknown>(\n arrayToReorder: Array<T>,\n fromIndex: number,\n toIndex: number,\n): Array<T> {\n if (fromIndex == toIndex) {\n return arrayToReorder\n }\n const newArray = [...arrayToReorder]\n const elementToMove = newArray[fromIndex]\n newArray.splice(fromIndex, 1)\n newArray.splice(toIndex, 0, elementToMove)\n return newArray\n}\n\n/**\n * Moves a column model or jsonSubColumn from the `from` index to the `to` index\n * @param action\n * @param prevState\n */\nfunction moveColumnModel(\n action: {\n type: 'move'\n from: { columnModelIndex: number; jsonSubColumnModelIndex?: number }\n to: { columnModelIndex: number; jsonSubColumnModelIndex?: number }\n },\n prevState: ColumnModelFormData[],\n): ColumnModelFormData[] {\n const { from, to } = action\n const arrayToReorder =\n from.jsonSubColumnModelIndex !== undefined\n ? prevState[from.columnModelIndex].jsonSubColumns!\n : prevState\n\n const fromIndex =\n from.jsonSubColumnModelIndex !== undefined\n ? from.jsonSubColumnModelIndex\n : from.columnModelIndex\n\n const toIndex =\n to.jsonSubColumnModelIndex !== undefined\n ? to.jsonSubColumnModelIndex\n : to.columnModelIndex\n\n // Move the element\n const newArray = moveElementInArray<unknown>(\n arrayToReorder,\n fromIndex,\n toIndex,\n ) as ColumnModelFormData[] | JsonSubColumnModelFormData[]\n\n if (from.jsonSubColumnModelIndex !== undefined) {\n // If we moved a jsonSubColumn, update state to use the new, reordered array\n prevState[from.columnModelIndex].jsonSubColumns =\n newArray as JsonSubColumnModelFormData[]\n return prevState\n } else {\n // Otherwise, return the new, reordered array of column models\n return newArray as ColumnModelFormData[]\n }\n}\n\nexport function reducer(\n prevState: ColumnModelFormData[],\n action: TableColumnSchemaFormReducerAction,\n) {\n switch (action.type) {\n case 'setValue':\n prevState = action.value\n break\n case 'toggleSelectAll': {\n prevState = toggleSelectAll(prevState)\n break\n }\n case 'setColumnModelValue': {\n setColumnModelValue(action, prevState)\n break\n }\n case 'changeColumnModelType': {\n changeColumnModelType(action, prevState)\n break\n }\n\n case 'appendColumn':\n prevState.push(getDefaultColumnModelFormData())\n break\n case 'appendJsonSubColumn': {\n const { columnModelIndex } = action\n prevState[columnModelIndex] = {\n ...prevState[columnModelIndex],\n jsonSubColumns: [\n ...(prevState[columnModelIndex].jsonSubColumns ?? []),\n getDefaultJsonSubColumnFormData(),\n ],\n }\n break\n }\n case 'toggleSelect': {\n toggleSelect(action, prevState)\n break\n }\n case 'delete':\n prevState = deleteColumnModel(prevState)\n break\n case 'move': {\n prevState = moveColumnModel(action, prevState)\n break\n }\n case 'moveUp':\n prevState = moveSelectedItemsUp(prevState, cm => cm.isSelected)\n prevState.forEach(cm => {\n if (cm.jsonSubColumns) {\n cm.jsonSubColumns = moveSelectedItemsUp(\n cm.jsonSubColumns,\n jsc => jsc.isSelected,\n )\n }\n })\n break\n case 'moveDown':\n prevState = moveSelectedItemsDown(prevState, cm => cm.isSelected)\n prevState.forEach(cm => {\n if (cm.jsonSubColumns) {\n cm.jsonSubColumns = moveSelectedItemsDown(\n cm.jsonSubColumns,\n jsc => jsc.isSelected,\n )\n }\n })\n break\n case 'updateColumnSizesToRecommendedValues':\n prevState = updateColumnSizesToRecommendedValues(action, prevState)\n break\n default:\n throw new Error(`Unexpected action`, action)\n }\n return [...prevState]\n}\n\nexport const tableColumnSchemaFormDataAtom = atomWithReducer<\n ColumnModelFormData[],\n TableColumnSchemaFormReducerAction\n>([], reducer)\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableColumnSchemaFormReducer.js","names":[],"sources":["../../../src/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.ts"],"sourcesContent":["import { ColumnModel, ColumnTypeEnum } from '@sage-bionetworks/synapse-types'\nimport { atomWithReducer } from 'jotai/utils'\nimport { cloneDeep } from 'lodash-es'\nimport {\n canHaveMaxListLength,\n canHaveSize,\n configureFacetsForType,\n DEFAULT_STRING_SIZE,\n findMatchingColumnModel,\n isFormDataValueSmallerThanRecommendedValue,\n} from './TableColumnSchemaEditorUtils'\nimport {\n ColumnModelFormData,\n JsonSubColumnModelFormData,\n} from './Validators/ColumnModelValidator'\n\nexport function getIsAllSelected(formData: ColumnModelFormData[]) {\n return (\n formData.length > 0 &&\n formData.every(\n cm =>\n // Is selected\n cm.isSelected &&\n // And all subcolumns are selected (true if there are no subcolumns)\n (cm.jsonSubColumns ?? []).every(\n (jsc: JsonSubColumnModelFormData) => jsc.isSelected,\n ),\n )\n )\n}\n\nexport function getNumberOfSelectedItems(formData: ColumnModelFormData[]) {\n return formData.reduce((acc, curr) => {\n if (curr.isSelected) {\n acc += 1\n }\n if (curr.jsonSubColumns) {\n curr.jsonSubColumns.forEach((jsc: JsonSubColumnModelFormData) => {\n if (jsc.isSelected) {\n acc += 1\n }\n })\n }\n return acc\n }, 0)\n}\n\nexport function getDefaultColumnModelFormData(): ColumnModelFormData {\n return {\n name: '',\n columnType: ColumnTypeEnum.STRING,\n maximumSize: DEFAULT_STRING_SIZE,\n isOriginallyDefaultColumn: false,\n isSelected: false,\n }\n}\n\nexport function getDefaultJsonSubColumnFormData(): JsonSubColumnModelFormData {\n return {\n name: '',\n jsonPath: '',\n columnType: ColumnTypeEnum.STRING,\n facetType: 'enumeration',\n isSelected: false,\n }\n}\n\n/**\n * In the provided array, move items up where the predicate evaluates to true\n * @param arr the array to reorder\n * @param predicate a function that returns true if the item should be moved up\n * @returns - a new array with the reordered items\n */\nfunction moveSelectedItemsUp<T = unknown>(\n arr: T[],\n predicate: (item: T) => boolean,\n) {\n const newArr = [...arr]\n newArr.forEach((item, index) => {\n // For each item that should move up, swap it with the previous item\n if (\n // Cannot move index 0 up\n index > 0 &&\n // Only move if the predicate matches\n predicate(item) &&\n // If the previous item should also move, skip the swap\n !predicate(newArr[index - 1])\n ) {\n // swap the items\n const temp = newArr[index - 1]\n newArr[index - 1] = newArr[index]\n newArr[index] = temp\n }\n })\n return newArr\n}\n\n/**\n * In the provided array, move items down where the predicate evaluates to true\n * @param arr the array to reorder\n * @param predicate a function that returns true if the item should be moved down\n * @returns - a new array with the reordered items\n */\nfunction moveSelectedItemsDown<T = unknown>(\n arr: T[],\n predicate: (item: T) => boolean,\n) {\n const newArr = [...arr]\n // Start from the end and work backwards, otherwise items could be moved more than once\n for (let i = newArr.length - 1; i >= 0; i--) {\n const item = newArr[i]\n if (\n // Cannot move the last item down\n i < newArr.length - 1 &&\n // Only move if the predicate matches\n predicate(item) &&\n // If the next item should also be moved, don't swap\n !predicate(newArr[i + 1])\n ) {\n // swap the items\n const temp = newArr[i]\n newArr[i] = newArr[i + 1]\n newArr[i + 1] = temp\n }\n }\n return newArr\n}\n\ntype TableColumnSchemaFormReducerAction =\n | {\n type: 'setValue'\n value: ColumnModelFormData[]\n }\n | {\n type: 'toggleSelect'\n columnModelIndex: number\n jsonSubColumnModelIndex?: number\n }\n | { type: 'toggleSelectAll' }\n | {\n type: 'appendColumn'\n }\n | {\n type: 'appendJsonSubColumn'\n columnModelIndex: number\n }\n | {\n type: 'setColumnModelValue'\n columnModelIndex: number\n jsonSubColumnModelIndex?: number\n value: ColumnModelFormData | JsonSubColumnModelFormData\n }\n | {\n type: 'changeColumnModelType'\n newColumnType: ColumnTypeEnum\n columnModelIndex: number\n jsonSubColumnModelIndex?: number\n }\n | {\n type: 'move'\n from: {\n columnModelIndex: number\n jsonSubColumnModelIndex?: number\n }\n to: { columnModelIndex: number; jsonSubColumnModelIndex?: number }\n }\n | {\n type: 'moveUp'\n }\n | {\n type: 'moveDown'\n }\n | {\n type: 'delete'\n }\n | {\n type: 'updateColumnSizesToRecommendedValues'\n annotationColumnModels: ColumnModel[]\n }\n\nfunction updateColumnSizesToRecommendedValues(\n action: {\n type: 'updateColumnSizesToRecommendedValues'\n annotationColumnModels: ColumnModel[]\n },\n prevState: ColumnModelFormData[],\n): ColumnModelFormData[] {\n const { annotationColumnModels } = action\n return prevState.map(cm => {\n // Note: no need to check JSON subcolumns, because Views cannot have JSON data!\n\n // Find the closest match between passed column model and current column model with name and type\n const defaultAnnotationModel = annotationColumnModels\n ? findMatchingColumnModel(annotationColumnModels, cm)\n : undefined\n\n if (defaultAnnotationModel == null) {\n // No matching annotation column, so do not change it\n return cm\n }\n\n if (\n isFormDataValueSmallerThanRecommendedValue(\n cm.maximumSize,\n defaultAnnotationModel.maximumSize,\n )\n ) {\n cm = { ...cm, maximumSize: defaultAnnotationModel.maximumSize }\n }\n\n if (\n isFormDataValueSmallerThanRecommendedValue(\n cm.maximumListLength,\n defaultAnnotationModel.maximumListLength,\n )\n ) {\n cm = {\n ...cm,\n maximumListLength: defaultAnnotationModel.maximumListLength,\n }\n }\n return cm\n })\n}\n\nfunction changeColumnModelType(\n action: {\n type: 'changeColumnModelType'\n newColumnType: ColumnTypeEnum\n columnModelIndex: number\n jsonSubColumnModelIndex?: number\n },\n prevState: ColumnModelFormData[],\n) {\n const { columnModelIndex, jsonSubColumnModelIndex, newColumnType } = action\n let newColumnModelValue: ColumnModelFormData | JsonSubColumnModelFormData\n\n // Create a copy of the selected column model\n if (prevState && prevState[columnModelIndex]) {\n if (\n prevState[columnModelIndex].jsonSubColumns &&\n jsonSubColumnModelIndex !== undefined\n ) {\n newColumnModelValue = cloneDeep(\n prevState[columnModelIndex].jsonSubColumns[jsonSubColumnModelIndex],\n )\n } else {\n newColumnModelValue = cloneDeep(prevState[columnModelIndex])\n }\n } else {\n throw new Error(\n 'Cannot change column model type for a column that does not exist',\n )\n }\n\n // Update the column model. Remove fields that no longer make sense for the new column type\n newColumnModelValue.columnType = newColumnType\n if (!canHaveSize(newColumnType) && 'maximumSize' in newColumnModelValue) {\n delete newColumnModelValue.maximumSize\n }\n if (\n !canHaveMaxListLength(newColumnType) &&\n 'maximumListLength' in newColumnModelValue\n ) {\n delete newColumnModelValue.maximumListLength\n }\n\n // Remove default and restricted values unconditionally since they may not adhere to the new column type\n if ('enumValues' in newColumnModelValue) {\n delete newColumnModelValue.enumValues\n }\n if ('defaultValue' in newColumnModelValue) {\n delete newColumnModelValue.defaultValue\n }\n\n const allowedFacetTypes = configureFacetsForType(\n newColumnType,\n !!jsonSubColumnModelIndex,\n )\n if (\n 'facetType' in newColumnModelValue &&\n (allowedFacetTypes === null ||\n !allowedFacetTypes.includes(newColumnModelValue.facetType))\n ) {\n delete newColumnModelValue.facetType\n }\n\n if (\n 'jsonSubColumns' in newColumnModelValue &&\n newColumnType !== ColumnTypeEnum.JSON\n ) {\n delete newColumnModelValue.jsonSubColumns\n }\n\n // Replace the value\n if (prevState && prevState[columnModelIndex]) {\n if (\n prevState[columnModelIndex].jsonSubColumns &&\n jsonSubColumnModelIndex !== undefined\n ) {\n prevState[columnModelIndex].jsonSubColumns[jsonSubColumnModelIndex] =\n newColumnModelValue as JsonSubColumnModelFormData\n } else {\n prevState[columnModelIndex] = newColumnModelValue as ColumnModelFormData\n }\n }\n}\n\nfunction toggleSelectAll(prevState: ColumnModelFormData[]) {\n const allSelected = getIsAllSelected(prevState)\n if (allSelected) {\n return prevState.map(cm => ({\n ...cm,\n jsonSubColumns: cm.jsonSubColumns?.map(jsc => ({\n ...jsc,\n isSelected: false,\n })),\n isSelected: false,\n }))\n } else {\n return prevState.map(cm => ({\n ...cm,\n jsonSubColumns: cm.jsonSubColumns?.map(jsc => ({\n ...jsc,\n isSelected: true,\n })),\n isSelected: true,\n }))\n }\n}\n\nfunction setColumnModelValue(\n action: {\n type: 'setColumnModelValue'\n columnModelIndex: number\n jsonSubColumnModelIndex?: number\n value: ColumnModelFormData | JsonSubColumnModelFormData\n },\n prevState: ColumnModelFormData[],\n) {\n const { columnModelIndex, jsonSubColumnModelIndex, value } = action\n if (prevState && prevState[columnModelIndex]) {\n if (\n prevState[columnModelIndex].jsonSubColumns &&\n jsonSubColumnModelIndex !== undefined\n ) {\n prevState[columnModelIndex].jsonSubColumns[jsonSubColumnModelIndex] =\n value as JsonSubColumnModelFormData\n } else {\n prevState[columnModelIndex] = value as ColumnModelFormData\n }\n }\n}\n\nfunction toggleSelect(\n action: {\n type: 'toggleSelect'\n columnModelIndex: number\n jsonSubColumnModelIndex?: number\n },\n prevState: ColumnModelFormData[],\n) {\n const { columnModelIndex, jsonSubColumnModelIndex } = action\n if (prevState && prevState[columnModelIndex]) {\n if (\n prevState[columnModelIndex].jsonSubColumns &&\n jsonSubColumnModelIndex !== undefined\n ) {\n const cm =\n prevState[columnModelIndex].jsonSubColumns[jsonSubColumnModelIndex]\n prevState[columnModelIndex].jsonSubColumns[jsonSubColumnModelIndex] = {\n ...cm,\n isSelected: !cm.isSelected,\n }\n } else {\n const cm = prevState[columnModelIndex]\n prevState[columnModelIndex] = { ...cm, isSelected: !cm.isSelected }\n }\n }\n}\n\nfunction deleteColumnModel(prevState: ColumnModelFormData[]) {\n return prevState\n .filter(cm => !cm.isSelected)\n .map(cm => {\n if (cm.jsonSubColumns) {\n cm = {\n ...cm,\n jsonSubColumns: cm.jsonSubColumns.filter(\n (jsc: JsonSubColumnModelFormData) => !jsc.isSelected,\n ),\n }\n }\n return cm\n })\n}\n\n/**\n * Returns a new, shallowly-cloned array that moves the object from the `fromIndex` to the `toIndex`.\n * Derived from https://stackoverflow.com/a/6470794/9723359\n *\n * Returns the same array if the `fromIndex` and `toIndex` are the same.\n * @param arrayToReorder\n * @param fromIndex\n * @param toIndex\n */\nfunction moveElementInArray<T = unknown>(\n arrayToReorder: Array<T>,\n fromIndex: number,\n toIndex: number,\n): Array<T> {\n if (fromIndex == toIndex) {\n return arrayToReorder\n }\n const newArray = [...arrayToReorder]\n const elementToMove = newArray[fromIndex]\n newArray.splice(fromIndex, 1)\n newArray.splice(toIndex, 0, elementToMove)\n return newArray\n}\n\n/**\n * Moves a column model or jsonSubColumn from the `from` index to the `to` index\n * @param action\n * @param prevState\n */\nfunction moveColumnModel(\n action: {\n type: 'move'\n from: { columnModelIndex: number; jsonSubColumnModelIndex?: number }\n to: { columnModelIndex: number; jsonSubColumnModelIndex?: number }\n },\n prevState: ColumnModelFormData[],\n): ColumnModelFormData[] {\n const { from, to } = action\n const arrayToReorder =\n from.jsonSubColumnModelIndex !== undefined\n ? prevState[from.columnModelIndex].jsonSubColumns!\n : prevState\n\n const fromIndex =\n from.jsonSubColumnModelIndex !== undefined\n ? from.jsonSubColumnModelIndex\n : from.columnModelIndex\n\n const toIndex =\n to.jsonSubColumnModelIndex !== undefined\n ? to.jsonSubColumnModelIndex\n : to.columnModelIndex\n\n // Move the element\n const newArray = moveElementInArray<unknown>(\n arrayToReorder,\n fromIndex,\n toIndex,\n ) as ColumnModelFormData[] | JsonSubColumnModelFormData[]\n\n if (from.jsonSubColumnModelIndex !== undefined) {\n // If we moved a jsonSubColumn, update state to use the new, reordered array\n prevState[from.columnModelIndex].jsonSubColumns =\n newArray as JsonSubColumnModelFormData[]\n return prevState\n } else {\n // Otherwise, return the new, reordered array of column models\n return newArray as ColumnModelFormData[]\n }\n}\n\nexport function reducer(\n prevState: ColumnModelFormData[],\n action: TableColumnSchemaFormReducerAction,\n) {\n switch (action.type) {\n case 'setValue':\n prevState = action.value\n break\n case 'toggleSelectAll': {\n prevState = toggleSelectAll(prevState)\n break\n }\n case 'setColumnModelValue': {\n setColumnModelValue(action, prevState)\n break\n }\n case 'changeColumnModelType': {\n changeColumnModelType(action, prevState)\n break\n }\n\n case 'appendColumn':\n prevState.push(getDefaultColumnModelFormData())\n break\n case 'appendJsonSubColumn': {\n const { columnModelIndex } = action\n prevState[columnModelIndex] = {\n ...prevState[columnModelIndex],\n jsonSubColumns: [\n ...(prevState[columnModelIndex].jsonSubColumns ?? []),\n getDefaultJsonSubColumnFormData(),\n ],\n }\n break\n }\n case 'toggleSelect': {\n toggleSelect(action, prevState)\n break\n }\n case 'delete':\n prevState = deleteColumnModel(prevState)\n break\n case 'move': {\n prevState = moveColumnModel(action, prevState)\n break\n }\n case 'moveUp':\n prevState = moveSelectedItemsUp(prevState, cm => cm.isSelected)\n prevState.forEach(cm => {\n if (cm.jsonSubColumns) {\n cm.jsonSubColumns = moveSelectedItemsUp(\n cm.jsonSubColumns,\n jsc => jsc.isSelected,\n )\n }\n })\n break\n case 'moveDown':\n prevState = moveSelectedItemsDown(prevState, cm => cm.isSelected)\n prevState.forEach(cm => {\n if (cm.jsonSubColumns) {\n cm.jsonSubColumns = moveSelectedItemsDown(\n cm.jsonSubColumns,\n jsc => jsc.isSelected,\n )\n }\n })\n break\n case 'updateColumnSizesToRecommendedValues':\n prevState = updateColumnSizesToRecommendedValues(action, prevState)\n break\n default:\n throw new Error(`Unexpected action`, action)\n }\n return [...prevState]\n}\n\nexport const tableColumnSchemaFormDataAtom = atomWithReducer<\n ColumnModelFormData[],\n TableColumnSchemaFormReducerAction\n>([], reducer)\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"BooleanSchema.js","names":[],"sources":["../../../../src/components/TableColumnSchemaEditor/Validators/BooleanSchema.ts"],"sourcesContent":["import { z } from 'zod'\n\nconst stringToBoolean = z.enum(['true', 'false']).transform(v => v === 'true')\n\n/**\n * Validates and converts a value to a valid Synapse BOOLEAN value\n */\nexport const booleanSchema = z.union([stringToBoolean, z.boolean()])\n"],"mappings":";;AAEA,IAAM,IAAkB,EAAE,KAAK,CAAC,QAAQ,QAAQ,CAAC,CAAC,WAAU,MAAK,MAAM,OAAO,EAKjE,IAAgB,EAAE,MAAM,CAAC,GAAiB,EAAE,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"BooleanSchema.js","names":[],"sources":["../../../../src/components/TableColumnSchemaEditor/Validators/BooleanSchema.ts"],"sourcesContent":["import { z } from 'zod'\n\nconst stringToBoolean = z.enum(['true', 'false']).transform(v => v === 'true')\n\n/**\n * Validates and converts a value to a valid Synapse BOOLEAN value\n */\nexport const booleanSchema = z.union([stringToBoolean, z.boolean()])\n"],"mappings":";;AAEA,IAAM,IAAkB,EAAE,KAAK,CAAC,QAAQ,OAAO,CAAC,EAAE,WAAU,MAAK,MAAM,MAAM,GAKhE,IAAgB,EAAE,MAAM,CAAC,GAAiB,EAAE,QAAQ,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnModelValidator.js","names":[],"sources":["../../../../src/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.ts"],"sourcesContent":["import { ColumnModel, ColumnTypeEnum } from '@sage-bionetworks/synapse-types'\nimport {\n canHaveMaxListLength,\n canHaveSize,\n MAX_LIST_LENGTH,\n MAX_STRING_SIZE,\n} from '../TableColumnSchemaEditorUtils'\nimport { type SafeParseReturnType, z } from 'zod'\nimport { SetOptional } from 'type-fest'\nimport { getDefaultValueValidator } from './DefaultValueValidator'\nimport getEnumValuesValidator from './EnumValuesValidator'\nimport { optionalStringSchema } from './OptionalStringSchema'\nimport { omit } from 'lodash-es'\n\nconst facetTypeSchema = z.union([z.literal('enumeration'), z.literal('range')])\n\nconst facetColumnSortConfigSchema = z.object({\n property: z.enum(['FREQUENCY', 'VALUE']).optional(),\n direction: z.enum(['DESC', 'ASC']).optional(),\n})\n\nconst columnModelBaseZodSchema = z.object({\n name: z.string().min(1, { message: 'Name is required' }),\n columnType: z.nativeEnum(ColumnTypeEnum),\n})\n\nexport const jsonSubColumnModelZodSchema = columnModelBaseZodSchema.merge(\n z.object({\n jsonPath: z.string().startsWith('$'),\n facetType: facetTypeSchema,\n }),\n)\n\n/**\n * Zod schema whose shape represents a ColumnModel. This unrefined schema is saved in this \"intermediate\" state so\n * that it can be extended with `.merge` to create an inferred type that can applied to form data.\n */\nconst unrefinedColumnModelSchema = columnModelBaseZodSchema.merge(\n z.object({\n id: z.string().optional(),\n defaultValue: z.union([z.string(), z.array(z.any())]).optional(),\n maximumSize: z\n .union([optionalStringSchema, z.number()])\n .pipe(\n z.coerce.number().finite().int().min(1).max(MAX_STRING_SIZE).optional(),\n ),\n maximumListLength: z\n .union([optionalStringSchema, z.number()])\n .pipe(\n z.coerce.number().finite().int().min(1).max(MAX_LIST_LENGTH).optional(),\n ),\n enumValues: z\n .array(\n z\n .union([\n z.string(),\n // enumValues is allowed on INTEGER type, but the backend stores them as strings, so allow passing integers\n z.number().int(),\n ])\n .pipe(z.coerce.string()),\n )\n .optional(),\n jsonSubColumns: z.array(jsonSubColumnModelZodSchema).optional(),\n facetType: facetTypeSchema.optional(),\n facetSortConfig: facetColumnSortConfigSchema.optional(),\n }),\n)\n\n/**\n * Zod schema to validate a column model. The provided data is coerced and transformed to match the ColumnModel type.\n * For this reason, form data may be directly passed into this schema parser.\n *\n * The parse method will return a ColumnModel where all data is properly formed.\n */\nexport const columnModelZodSchema = unrefinedColumnModelSchema\n .refine(data => data.maximumSize == null || canHaveSize(data.columnType), {\n message: 'Size is not allowed for this column type',\n path: ['maximumSize'],\n })\n .refine(\n data =>\n data.maximumListLength == null || canHaveMaxListLength(data.columnType),\n {\n message: 'Maximum list length is not allowed for this column type',\n path: ['maximumListLength'],\n },\n )\n .refine(\n data => {\n if (data.jsonSubColumns != null) {\n return data.columnType === ColumnTypeEnum.JSON\n }\n return true\n },\n {\n message: 'Only JSON columns can have JSON sub-columns.',\n path: ['columnType'],\n },\n )\n .transform((data, ctx) => {\n if (data.defaultValue != null) {\n // Validate and transform the defaultValue based on the columnType\n const defaultValueSchema = getDefaultValueValidator(data.columnType)\n const result = defaultValueSchema.safeParse(data.defaultValue)\n let transformedValue: string | undefined\n if (result.success) {\n transformedValue = result.data\n } else {\n result.error.issues.forEach(issue => {\n ctx.addIssue({ ...issue, path: ['defaultValue'] })\n })\n transformedValue = undefined\n }\n return { ...data, defaultValue: transformedValue }\n }\n return omit(data, 'defaultValue')\n })\n .transform((data, ctx) => {\n // NOTE: This is the same set of steps as the `defaultValue` transform\n // We may be able to refactor this, but it is challenging to do so without breaking the schema's inferred type\n if (data.enumValues != null) {\n // Validate and transform the defaultValue based on the columnType\n const enumValuesSchema = getEnumValuesValidator(data.columnType)\n const result = enumValuesSchema.safeParse(data.enumValues)\n let transformedValue: string[] | undefined\n if (result.success) {\n transformedValue = result.data\n } else {\n result.error.issues.forEach(issue => {\n ctx.addIssue({ ...issue, path: ['enumValues'] })\n })\n transformedValue = undefined\n }\n return { ...data, enumValues: transformedValue }\n }\n return omit(data, 'enumValues')\n })\n\nexport const columnModelFormDataZodSchema = z.array(columnModelZodSchema)\n\nconst jsonSubColumnModelFormDataSchema = jsonSubColumnModelZodSchema.merge(\n z.object({\n isSelected: z.boolean(),\n }),\n)\n\nexport type JsonSubColumnModelFormData = z.input<\n typeof jsonSubColumnModelFormDataSchema\n>\n\n// Use the \"unrefined\" schema since we can extend it with form-only fields\nconst _columnModelFormDataSchema = unrefinedColumnModelSchema.merge(\n z.object({\n isSelected: z.boolean(),\n isOriginallyDefaultColumn: z.boolean(),\n jsonSubColumns: z.array(jsonSubColumnModelFormDataSchema).optional(),\n }),\n)\n\n/**\n * Type that represents possible form input data for a ColumnModel.\n * a\n */\nexport type ColumnModelFormData = z.input<typeof _columnModelFormDataSchema>\n\nexport function validateColumnModelFormData(\n formData: SetOptional<\n ColumnModelFormData,\n 'isOriginallyDefaultColumn' | 'isSelected'\n >[],\n): SafeParseReturnType<\n SetOptional<\n ColumnModelFormData,\n 'isOriginallyDefaultColumn' | 'isSelected'\n >[],\n SetOptional<ColumnModel, 'id'>[]\n> {\n return columnModelFormDataZodSchema.safeParse(formData)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ColumnModelValidator.js","names":[],"sources":["../../../../src/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.ts"],"sourcesContent":["import { ColumnModel, ColumnTypeEnum } from '@sage-bionetworks/synapse-types'\nimport {\n canHaveMaxListLength,\n canHaveSize,\n MAX_LIST_LENGTH,\n MAX_STRING_SIZE,\n} from '../TableColumnSchemaEditorUtils'\nimport { type SafeParseReturnType, z } from 'zod'\nimport { SetOptional } from 'type-fest'\nimport { getDefaultValueValidator } from './DefaultValueValidator'\nimport getEnumValuesValidator from './EnumValuesValidator'\nimport { optionalStringSchema } from './OptionalStringSchema'\nimport { omit } from 'lodash-es'\n\nconst facetTypeSchema = z.union([z.literal('enumeration'), z.literal('range')])\n\nconst facetColumnSortConfigSchema = z.object({\n property: z.enum(['FREQUENCY', 'VALUE']).optional(),\n direction: z.enum(['DESC', 'ASC']).optional(),\n})\n\nconst columnModelBaseZodSchema = z.object({\n name: z.string().min(1, { message: 'Name is required' }),\n columnType: z.nativeEnum(ColumnTypeEnum),\n})\n\nexport const jsonSubColumnModelZodSchema = columnModelBaseZodSchema.merge(\n z.object({\n jsonPath: z.string().startsWith('$'),\n facetType: facetTypeSchema,\n }),\n)\n\n/**\n * Zod schema whose shape represents a ColumnModel. This unrefined schema is saved in this \"intermediate\" state so\n * that it can be extended with `.merge` to create an inferred type that can applied to form data.\n */\nconst unrefinedColumnModelSchema = columnModelBaseZodSchema.merge(\n z.object({\n id: z.string().optional(),\n defaultValue: z.union([z.string(), z.array(z.any())]).optional(),\n maximumSize: z\n .union([optionalStringSchema, z.number()])\n .pipe(\n z.coerce.number().finite().int().min(1).max(MAX_STRING_SIZE).optional(),\n ),\n maximumListLength: z\n .union([optionalStringSchema, z.number()])\n .pipe(\n z.coerce.number().finite().int().min(1).max(MAX_LIST_LENGTH).optional(),\n ),\n enumValues: z\n .array(\n z\n .union([\n z.string(),\n // enumValues is allowed on INTEGER type, but the backend stores them as strings, so allow passing integers\n z.number().int(),\n ])\n .pipe(z.coerce.string()),\n )\n .optional(),\n jsonSubColumns: z.array(jsonSubColumnModelZodSchema).optional(),\n facetType: facetTypeSchema.optional(),\n facetSortConfig: facetColumnSortConfigSchema.optional(),\n }),\n)\n\n/**\n * Zod schema to validate a column model. The provided data is coerced and transformed to match the ColumnModel type.\n * For this reason, form data may be directly passed into this schema parser.\n *\n * The parse method will return a ColumnModel where all data is properly formed.\n */\nexport const columnModelZodSchema = unrefinedColumnModelSchema\n .refine(data => data.maximumSize == null || canHaveSize(data.columnType), {\n message: 'Size is not allowed for this column type',\n path: ['maximumSize'],\n })\n .refine(\n data =>\n data.maximumListLength == null || canHaveMaxListLength(data.columnType),\n {\n message: 'Maximum list length is not allowed for this column type',\n path: ['maximumListLength'],\n },\n )\n .refine(\n data => {\n if (data.jsonSubColumns != null) {\n return data.columnType === ColumnTypeEnum.JSON\n }\n return true\n },\n {\n message: 'Only JSON columns can have JSON sub-columns.',\n path: ['columnType'],\n },\n )\n .transform((data, ctx) => {\n if (data.defaultValue != null) {\n // Validate and transform the defaultValue based on the columnType\n const defaultValueSchema = getDefaultValueValidator(data.columnType)\n const result = defaultValueSchema.safeParse(data.defaultValue)\n let transformedValue: string | undefined\n if (result.success) {\n transformedValue = result.data\n } else {\n result.error.issues.forEach(issue => {\n ctx.addIssue({ ...issue, path: ['defaultValue'] })\n })\n transformedValue = undefined\n }\n return { ...data, defaultValue: transformedValue }\n }\n return omit(data, 'defaultValue')\n })\n .transform((data, ctx) => {\n // NOTE: This is the same set of steps as the `defaultValue` transform\n // We may be able to refactor this, but it is challenging to do so without breaking the schema's inferred type\n if (data.enumValues != null) {\n // Validate and transform the defaultValue based on the columnType\n const enumValuesSchema = getEnumValuesValidator(data.columnType)\n const result = enumValuesSchema.safeParse(data.enumValues)\n let transformedValue: string[] | undefined\n if (result.success) {\n transformedValue = result.data\n } else {\n result.error.issues.forEach(issue => {\n ctx.addIssue({ ...issue, path: ['enumValues'] })\n })\n transformedValue = undefined\n }\n return { ...data, enumValues: transformedValue }\n }\n return omit(data, 'enumValues')\n })\n\nexport const columnModelFormDataZodSchema = z.array(columnModelZodSchema)\n\nconst jsonSubColumnModelFormDataSchema = jsonSubColumnModelZodSchema.merge(\n z.object({\n isSelected: z.boolean(),\n }),\n)\n\nexport type JsonSubColumnModelFormData = z.input<\n typeof jsonSubColumnModelFormDataSchema\n>\n\n// Use the \"unrefined\" schema since we can extend it with form-only fields\nconst _columnModelFormDataSchema = unrefinedColumnModelSchema.merge(\n z.object({\n isSelected: z.boolean(),\n isOriginallyDefaultColumn: z.boolean(),\n jsonSubColumns: z.array(jsonSubColumnModelFormDataSchema).optional(),\n }),\n)\n\n/**\n * Type that represents possible form input data for a ColumnModel.\n * a\n */\nexport type ColumnModelFormData = z.input<typeof _columnModelFormDataSchema>\n\nexport function validateColumnModelFormData(\n formData: SetOptional<\n ColumnModelFormData,\n 'isOriginallyDefaultColumn' | 'isSelected'\n >[],\n): SafeParseReturnType<\n SetOptional<\n ColumnModelFormData,\n 'isOriginallyDefaultColumn' | 'isSelected'\n >[],\n SetOptional<ColumnModel, 'id'>[]\n> {\n return columnModelFormDataZodSchema.safeParse(formData)\n}\n"],"mappings":";;;;;;;;AAcA,IAAM,IAAkB,EAAE,MAAM,CAAC,EAAE,QAAQ,aAAa,GAAG,EAAE,QAAQ,OAAO,CAAC,CAAC,GAExE,IAA8B,EAAE,OAAO;CAC3C,UAAU,EAAE,KAAK,CAAC,aAAa,OAAO,CAAC,EAAE,SAAS;CAClD,WAAW,EAAE,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,SAAS;AAC9C,CAAC,GAEK,IAA2B,EAAE,OAAO;CACxC,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,mBAAmB,CAAC;CACvD,YAAY,EAAE,WAAW,CAAc;AACzC,CAAC,GAEY,IAA8B,EAAyB,MAClE,EAAE,OAAO;CACP,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG;CACnC,WAAW;AACb,CAAC,CACH,GAMM,IAA6B,EAAyB,MAC1D,EAAE,OAAO;CACP,IAAI,EAAE,OAAO,EAAE,SAAS;CACxB,cAAc,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS;CAC/D,aAAa,EACV,MAAM,CAAC,GAAsB,EAAE,OAAO,CAAC,CAAC,EACxC,KACC,EAAE,OAAO,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAe,EAAE,SAAS,CACxE;CACF,mBAAmB,EAChB,MAAM,CAAC,GAAsB,EAAE,OAAO,CAAC,CAAC,EACxC,KACC,EAAE,OAAO,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAA,GAAmB,EAAE,SAAS,CACxE;CACF,YAAY,EACT,MACC,EACG,MAAM,CACL,EAAE,OAAO,GAET,EAAE,OAAO,EAAE,IAAI,CACjB,CAAC,EACA,KAAK,EAAE,OAAO,OAAO,CAAC,CAC3B,EACC,SAAS;CACZ,gBAAgB,EAAE,MAAM,CAA2B,EAAE,SAAS;CAC9D,WAAW,EAAgB,SAAS;CACpC,iBAAiB,EAA4B,SAAS;AACxD,CAAC,CACH,GAQa,IAAuB,EACjC,QAAO,MAAQ,EAAK,eAAe,QAAQ,EAAY,EAAK,UAAU,GAAG;CACxE,SAAS;CACT,MAAM,CAAC,aAAa;AACtB,CAAC,EACA,QACC,MACE,EAAK,qBAAqB,QAAQ,EAAqB,EAAK,UAAU,GACxE;CACE,SAAS;CACT,MAAM,CAAC,mBAAmB;AAC5B,CACF,EACC,QACC,MACM,EAAK,kBAAkB,OAGpB,KAFE,EAAK,eAAe,EAAe,MAI9C;CACE,SAAS;CACT,MAAM,CAAC,YAAY;AACrB,CACF,EACC,WAAW,GAAM,MAAQ;CACxB,IAAI,EAAK,gBAAgB,MAAM;EAG7B,IAAM,IADqB,EAAyB,EAAK,UAC1C,EAAmB,UAAU,EAAK,YAAY,GACzD;EASJ,OARI,EAAO,UACT,IAAmB,EAAO,QAE1B,EAAO,MAAM,OAAO,SAAQ,MAAS;GACnC,EAAI,SAAS;IAAE,GAAG;IAAO,MAAM,CAAC,cAAc;GAAE,CAAC;EACnD,CAAC,GACD,IAAmB,KAAA,IAEd;GAAE,GAAG;GAAM,cAAc;EAAiB;CACnD;CACA,OAAO,EAAK,GAAM,cAAc;AAClC,CAAC,EACA,WAAW,GAAM,MAAQ;CAGxB,IAAI,EAAK,cAAc,MAAM;EAG3B,IAAM,IADmB,EAAuB,EAAK,UACtC,EAAiB,UAAU,EAAK,UAAU,GACrD;EASJ,OARI,EAAO,UACT,IAAmB,EAAO,QAE1B,EAAO,MAAM,OAAO,SAAQ,MAAS;GACnC,EAAI,SAAS;IAAE,GAAG;IAAO,MAAM,CAAC,YAAY;GAAE,CAAC;EACjD,CAAC,GACD,IAAmB,KAAA,IAEd;GAAE,GAAG;GAAM,YAAY;EAAiB;CACjD;CACA,OAAO,EAAK,GAAM,YAAY;AAChC,CAAC,GAEU,IAA+B,EAAE,MAAM,CAAoB,GAElE,IAAmC,EAA4B,MACnE,EAAE,OAAO,EACP,YAAY,EAAE,QAAQ,EACxB,CAAC,CACH;AAOmC,EAA2B,MAC5D,EAAE,OAAO;CACP,YAAY,EAAE,QAAQ;CACtB,2BAA2B,EAAE,QAAQ;CACrC,gBAAgB,EAAE,MAAM,CAAgC,EAAE,SAAS;AACrE,CAAC,CACH;AAQA,SAAgB,EACd,GAUA;CACA,OAAO,EAA6B,UAAU,CAAQ;AACxD"}
@@ -1 +1 @@
1
- {"version":3,"file":"DatetimeSchema.js","names":[],"sources":["../../../../src/components/TableColumnSchemaEditor/Validators/DatetimeSchema.ts"],"sourcesContent":["import { z } from 'zod'\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\n\ndayjs.extend(utc)\n\n// Accepts a string that is either a UNIX timestamp in milliseconds or in ISO 8601 format, and returns a string in ISO 8601 format\nconst dateTimeString = z.string().transform(data => {\n // Note: can't use parseInt on a timestamp! \"2000-01-01T00:00:00Z\" will be parsed as 2000\n const isInt = data.match(/^\\d+$/)\n if (isInt) {\n return dayjs.utc(parseInt(data)).toISOString()\n }\n return dayjs.utc(data).toISOString()\n})\n\n/**\n * Validates and converts a value to a valid Synapse DATE value\n */\nexport const dateTimeSchema = z\n .union([z.number(), dateTimeString, z.date()])\n .transform(timestampMs => dayjs(timestampMs).toISOString())\n"],"mappings":";;;;AAIA,EAAM,OAAO,EAAI;AAGjB,IAAM,IAAiB,EAAE,QAAQ,CAAC,WAAU,MAE5B,EAAK,MAAM,QACrB,GACK,EAAM,IAAI,SAAS,EAAK,CAAC,CAAC,aAAa,GAEzC,EAAM,IAAI,EAAK,CAAC,aAAa,CACpC,EAKW,IAAiB,EAC3B,MAAM;CAAC,EAAE,QAAQ;CAAE;CAAgB,EAAE,MAAM;CAAC,CAAC,CAC7C,WAAU,MAAe,EAAM,EAAY,CAAC,aAAa,CAAC"}
1
+ {"version":3,"file":"DatetimeSchema.js","names":[],"sources":["../../../../src/components/TableColumnSchemaEditor/Validators/DatetimeSchema.ts"],"sourcesContent":["import { z } from 'zod'\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\n\ndayjs.extend(utc)\n\n// Accepts a string that is either a UNIX timestamp in milliseconds or in ISO 8601 format, and returns a string in ISO 8601 format\nconst dateTimeString = z.string().transform(data => {\n // Note: can't use parseInt on a timestamp! \"2000-01-01T00:00:00Z\" will be parsed as 2000\n const isInt = data.match(/^\\d+$/)\n if (isInt) {\n return dayjs.utc(parseInt(data)).toISOString()\n }\n return dayjs.utc(data).toISOString()\n})\n\n/**\n * Validates and converts a value to a valid Synapse DATE value\n */\nexport const dateTimeSchema = z\n .union([z.number(), dateTimeString, z.date()])\n .transform(timestampMs => dayjs(timestampMs).toISOString())\n"],"mappings":";;;;AAIA,EAAM,OAAO,CAAG;AAGhB,IAAM,IAAiB,EAAE,OAAO,EAAE,WAAU,MAE5B,EAAK,MAAM,OACrB,IACK,EAAM,IAAI,SAAS,CAAI,CAAC,EAAE,YAAY,IAExC,EAAM,IAAI,CAAI,EAAE,YAAY,CACpC,GAKY,IAAiB,EAC3B,MAAM;CAAC,EAAE,OAAO;CAAG;CAAgB,EAAE,KAAK;AAAC,CAAC,EAC5C,WAAU,MAAe,EAAM,CAAW,EAAE,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultValueValidator.js","names":[],"sources":["../../../../src/components/TableColumnSchemaEditor/Validators/DefaultValueValidator.ts"],"sourcesContent":["import { ColumnTypeEnum } from '@sage-bionetworks/synapse-types'\nimport { z, ZodType } from 'zod'\nimport { isArray, isEmpty } from 'lodash-es'\nimport getZodSchemaForColumnType from './getZodSchemaForColumnType'\n\n/**\n * Returns a validator for a ColumnModel's `defaultValue` field.\n * This validator will transform the field to match the correct type of defaultValue, which is an optional string.\n * @param columnType the columnType of the ColumnModel\n */\nexport function getDefaultValueValidator(\n columnType: ColumnTypeEnum,\n): ZodType<string | undefined> {\n const schema = getZodSchemaForColumnType(columnType)\n return z\n .union([\n z.null(),\n z\n .string()\n .length(0)\n .transform(() => null),\n schema,\n ])\n .optional()\n .refine(data => {\n if (columnType.endsWith('_LIST')) {\n return data == null || isArray(data)\n }\n return true\n }, 'Default value cannot be an array for a non-list column type')\n .transform(data => {\n if (data == null || data === '' || (isArray(data) && isEmpty(data))) {\n return undefined\n } else if (typeof data === 'string') {\n return data\n } else {\n return JSON.stringify(data)\n }\n })\n}\n"],"mappings":";;;;AAUA,SAAgB,EACd,GAC6B;CAC7B,IAAM,IAAS,EAA0B,EAAW;AACpD,QAAO,EACJ,MAAM;EACL,EAAE,MAAM;EACR,EACG,QAAQ,CACR,OAAO,EAAE,CACT,gBAAgB,KAAK;EACxB;EACD,CAAC,CACD,UAAU,CACV,QAAO,MACF,EAAW,SAAS,QAAQ,GACvB,KAAQ,QAAQ,EAAQ,EAAK,GAE/B,IACN,8DAA8D,CAChE,WAAU,MAAQ;AACb,aAAQ,QAAQ,MAAS,MAAO,EAAQ,EAAK,IAAI,EAAQ,EAAK,EAKhE,QAHS,OAAO,KAAS,WAClB,IAEA,KAAK,UAAU,EAAK;GAE7B"}
1
+ {"version":3,"file":"DefaultValueValidator.js","names":[],"sources":["../../../../src/components/TableColumnSchemaEditor/Validators/DefaultValueValidator.ts"],"sourcesContent":["import { ColumnTypeEnum } from '@sage-bionetworks/synapse-types'\nimport { z, ZodType } from 'zod'\nimport { isArray, isEmpty } from 'lodash-es'\nimport getZodSchemaForColumnType from './getZodSchemaForColumnType'\n\n/**\n * Returns a validator for a ColumnModel's `defaultValue` field.\n * This validator will transform the field to match the correct type of defaultValue, which is an optional string.\n * @param columnType the columnType of the ColumnModel\n */\nexport function getDefaultValueValidator(\n columnType: ColumnTypeEnum,\n): ZodType<string | undefined> {\n const schema = getZodSchemaForColumnType(columnType)\n return z\n .union([\n z.null(),\n z\n .string()\n .length(0)\n .transform(() => null),\n schema,\n ])\n .optional()\n .refine(data => {\n if (columnType.endsWith('_LIST')) {\n return data == null || isArray(data)\n }\n return true\n }, 'Default value cannot be an array for a non-list column type')\n .transform(data => {\n if (data == null || data === '' || (isArray(data) && isEmpty(data))) {\n return undefined\n } else if (typeof data === 'string') {\n return data\n } else {\n return JSON.stringify(data)\n }\n })\n}\n"],"mappings":";;;;AAUA,SAAgB,EACd,GAC6B;CAC7B,IAAM,IAAS,EAA0B,CAAU;CACnD,OAAO,EACJ,MAAM;EACL,EAAE,KAAK;EACP,EACG,OAAO,EACP,OAAO,CAAC,EACR,gBAAgB,IAAI;EACvB;CACF,CAAC,EACA,SAAS,EACT,QAAO,MACF,EAAW,SAAS,OAAO,IACtB,KAAQ,QAAQ,EAAQ,CAAI,IAE9B,IACN,6DAA6D,EAC/D,WAAU,MAAQ;EACb,WAAQ,QAAQ,MAAS,MAAO,EAAQ,CAAI,KAAK,EAAQ,CAAI,IAK/D,OAHS,OAAO,KAAS,WAClB,IAEA,KAAK,UAAU,CAAI;CAE9B,CAAC;AACL"}
@@ -1 +1 @@
1
- {"version":3,"file":"DoubleSchema.js","names":[],"sources":["../../../../src/components/TableColumnSchemaEditor/Validators/DoubleSchema.ts"],"sourcesContent":["import { z } from 'zod'\n\n/**\n * Schema that converts strings to valid Synapse DOUBLE values. Zod will return an error if the string cannot be parsed as a number.\n */\nconst doubleString = z.string().transform((data, ctx) => {\n // Synapse permits NaN/Infinity, so we can keep these strings\n if (['NaN', 'Infinity', '-Infinity'].includes(data)) {\n return data\n }\n const parsed = Number(data)\n // If the parse result is NaN, then this was not a valid number\n if (isNaN(parsed)) {\n ctx.addIssue({\n code: z.ZodIssueCode.invalid_type,\n expected: 'number',\n received: 'string',\n path: [],\n message: 'Must be a number',\n })\n }\n return parsed\n})\n\n/**\n * Validates and converts a value to a valid Synapse DOUBLE value. Zod will return an error if the value cannot be converted to a number.\n */\nexport const doubleSchema = z\n .union([z.number(), z.nan(), doubleString])\n .transform((val): string | number => {\n if (typeof val === 'number') {\n // JSON does not support NaN/Infinity, but Synapse does if they are strings\n if (isNaN(val)) {\n return 'NaN'\n } else if (val === Infinity) {\n return 'Infinity'\n } else if (val === -Infinity) {\n return '-Infinity'\n }\n return val\n }\n return val\n })\n"],"mappings":";;AAKA,IAAM,IAAe,EAAE,QAAQ,CAAC,WAAW,GAAM,MAAQ;AAEvD,KAAI;EAAC;EAAO;EAAY;EAAY,CAAC,SAAS,EAAK,CACjD,QAAO;CAET,IAAM,IAAS,OAAO,EAAK;AAW3B,QATI,MAAM,EAAO,IACf,EAAI,SAAS;EACX,MAAM,EAAE,aAAa;EACrB,UAAU;EACV,UAAU;EACV,MAAM,EAAE;EACR,SAAS;EACV,CAAC,EAEG;EACP,EAKW,IAAe,EACzB,MAAM;CAAC,EAAE,QAAQ;CAAE,EAAE,KAAK;CAAE;CAAa,CAAC,CAC1C,WAAW,MACN,OAAO,KAAQ,WAEb,MAAM,EAAI,GACL,QACE,MAAQ,WACV,aACE,MAAQ,YACV,cAEF,IAEF,EACP"}
1
+ {"version":3,"file":"DoubleSchema.js","names":[],"sources":["../../../../src/components/TableColumnSchemaEditor/Validators/DoubleSchema.ts"],"sourcesContent":["import { z } from 'zod'\n\n/**\n * Schema that converts strings to valid Synapse DOUBLE values. Zod will return an error if the string cannot be parsed as a number.\n */\nconst doubleString = z.string().transform((data, ctx) => {\n // Synapse permits NaN/Infinity, so we can keep these strings\n if (['NaN', 'Infinity', '-Infinity'].includes(data)) {\n return data\n }\n const parsed = Number(data)\n // If the parse result is NaN, then this was not a valid number\n if (isNaN(parsed)) {\n ctx.addIssue({\n code: z.ZodIssueCode.invalid_type,\n expected: 'number',\n received: 'string',\n path: [],\n message: 'Must be a number',\n })\n }\n return parsed\n})\n\n/**\n * Validates and converts a value to a valid Synapse DOUBLE value. Zod will return an error if the value cannot be converted to a number.\n */\nexport const doubleSchema = z\n .union([z.number(), z.nan(), doubleString])\n .transform((val): string | number => {\n if (typeof val === 'number') {\n // JSON does not support NaN/Infinity, but Synapse does if they are strings\n if (isNaN(val)) {\n return 'NaN'\n } else if (val === Infinity) {\n return 'Infinity'\n } else if (val === -Infinity) {\n return '-Infinity'\n }\n return val\n }\n return val\n })\n"],"mappings":";;AAKA,IAAM,IAAe,EAAE,OAAO,EAAE,WAAW,GAAM,MAAQ;CAEvD,IAAI;EAAC;EAAO;EAAY;CAAW,EAAE,SAAS,CAAI,GAChD,OAAO;CAET,IAAM,IAAS,OAAO,CAAI;CAW1B,OATI,MAAM,CAAM,KACd,EAAI,SAAS;EACX,MAAM,EAAE,aAAa;EACrB,UAAU;EACV,UAAU;EACV,MAAM,CAAC;EACP,SAAS;CACX,CAAC,GAEI;AACT,CAAC,GAKY,IAAe,EACzB,MAAM;CAAC,EAAE,OAAO;CAAG,EAAE,IAAI;CAAG;AAAY,CAAC,EACzC,WAAW,MACN,OAAO,KAAQ,WAEb,MAAM,CAAG,IACJ,QACE,MAAQ,WACV,aACE,MAAQ,YACV,cAEF,IAEF,CACR"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityIdSchema.js","names":[],"sources":["../../../../src/components/TableColumnSchemaEditor/Validators/EntityIdSchema.ts"],"sourcesContent":["import { z } from 'zod'\n\n/**\n * Validates and converts a value to a valid Synapse ENTITYID value\n */\nexport const entityIdSchema = z.union([\n // Matches a string of digits, optionally prefixed with 'syn'\n z.string().regex(/^(syn)?\\d+$/),\n z.number().int(),\n])\n"],"mappings":";;AAKA,IAAa,IAAiB,EAAE,MAAM,CAEpC,EAAE,QAAQ,CAAC,MAAM,cAAc,EAC/B,EAAE,QAAQ,CAAC,KAAK,CACjB,CAAC"}
1
+ {"version":3,"file":"EntityIdSchema.js","names":[],"sources":["../../../../src/components/TableColumnSchemaEditor/Validators/EntityIdSchema.ts"],"sourcesContent":["import { z } from 'zod'\n\n/**\n * Validates and converts a value to a valid Synapse ENTITYID value\n */\nexport const entityIdSchema = z.union([\n // Matches a string of digits, optionally prefixed with 'syn'\n z.string().regex(/^(syn)?\\d+$/),\n z.number().int(),\n])\n"],"mappings":";;AAKA,IAAa,IAAiB,EAAE,MAAM,CAEpC,EAAE,OAAO,EAAE,MAAM,aAAa,GAC9B,EAAE,OAAO,EAAE,IAAI,CACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"EnumValuesValidator.js","names":[],"sources":["../../../../src/components/TableColumnSchemaEditor/Validators/EnumValuesValidator.ts"],"sourcesContent":["import { ColumnTypeEnum } from '@sage-bionetworks/synapse-types'\nimport { z, ZodType } from 'zod'\nimport { isEmpty } from 'lodash-es'\nimport getZodSchemaForColumnType from './getZodSchemaForColumnType'\n\n/**\n * Returns a validator for a ColumnModel's `enumValues` field.\n * This validator will transform the field to match the correct type of defaultValue, which is an optional array of strings.\n * @param columnType the columnType of the ColumnModel\n */\nexport default function getEnumValuesValidator(\n columnType: ColumnTypeEnum,\n): ZodType<string[] | undefined> {\n const schema = getZodSchemaForColumnType(columnType)\n return z\n .union([\n z.array(schema),\n z.null(),\n z\n .string()\n .length(0)\n .transform(() => null),\n schema.transform(v => [v]),\n ])\n .optional()\n .transform(data => {\n if (data == null) {\n return undefined\n }\n // Remove empty strings and null values\n data = data.filter(v => v !== '' && v != null)\n if (isEmpty(data)) {\n return undefined\n }\n\n // Each value must be converted to a string\n return data.map(v => (typeof v === 'string' ? v : JSON.stringify(v)))\n })\n}\n"],"mappings":";;;;AAUA,SAAwB,EACtB,GAC+B;CAC/B,IAAM,IAAS,EAA0B,EAAW;AACpD,QAAO,EACJ,MAAM;EACL,EAAE,MAAM,EAAO;EACf,EAAE,MAAM;EACR,EACG,QAAQ,CACR,OAAO,EAAE,CACT,gBAAgB,KAAK;EACxB,EAAO,WAAU,MAAK,CAAC,EAAE,CAAC;EAC3B,CAAC,CACD,UAAU,CACV,WAAU,MAAQ;AACb,WAAQ,SAIZ,IAAO,EAAK,QAAO,MAAK,MAAM,MAAM,KAAK,KAAK,EAC1C,GAAQ,EAAK,EAKjB,QAAO,EAAK,KAAI,MAAM,OAAO,KAAM,WAAW,IAAI,KAAK,UAAU,EAAE,CAAE;GACrE"}
1
+ {"version":3,"file":"EnumValuesValidator.js","names":[],"sources":["../../../../src/components/TableColumnSchemaEditor/Validators/EnumValuesValidator.ts"],"sourcesContent":["import { ColumnTypeEnum } from '@sage-bionetworks/synapse-types'\nimport { z, ZodType } from 'zod'\nimport { isEmpty } from 'lodash-es'\nimport getZodSchemaForColumnType from './getZodSchemaForColumnType'\n\n/**\n * Returns a validator for a ColumnModel's `enumValues` field.\n * This validator will transform the field to match the correct type of defaultValue, which is an optional array of strings.\n * @param columnType the columnType of the ColumnModel\n */\nexport default function getEnumValuesValidator(\n columnType: ColumnTypeEnum,\n): ZodType<string[] | undefined> {\n const schema = getZodSchemaForColumnType(columnType)\n return z\n .union([\n z.array(schema),\n z.null(),\n z\n .string()\n .length(0)\n .transform(() => null),\n schema.transform(v => [v]),\n ])\n .optional()\n .transform(data => {\n if (data == null) {\n return undefined\n }\n // Remove empty strings and null values\n data = data.filter(v => v !== '' && v != null)\n if (isEmpty(data)) {\n return undefined\n }\n\n // Each value must be converted to a string\n return data.map(v => (typeof v === 'string' ? v : JSON.stringify(v)))\n })\n}\n"],"mappings":";;;;AAUA,SAAwB,EACtB,GAC+B;CAC/B,IAAM,IAAS,EAA0B,CAAU;CACnD,OAAO,EACJ,MAAM;EACL,EAAE,MAAM,CAAM;EACd,EAAE,KAAK;EACP,EACG,OAAO,EACP,OAAO,CAAC,EACR,gBAAgB,IAAI;EACvB,EAAO,WAAU,MAAK,CAAC,CAAC,CAAC;CAC3B,CAAC,EACA,SAAS,EACT,WAAU,MAAQ;EACb,SAAQ,SAIZ,IAAO,EAAK,QAAO,MAAK,MAAM,MAAM,KAAK,IAAI,GACzC,GAAQ,CAAI,IAKhB,OAAO,EAAK,KAAI,MAAM,OAAO,KAAM,WAAW,IAAI,KAAK,UAAU,CAAC,CAAE;CACtE,CAAC;AACL"}
@@ -1 +1 @@
1
- {"version":3,"file":"IntegerSchema.js","names":[],"sources":["../../../../src/components/TableColumnSchemaEditor/Validators/IntegerSchema.ts"],"sourcesContent":["import { z } from 'zod'\n\n/**\n * Validates and converts a value to a valid Synapse INTEGER value\n */\nexport const integerSchema = z\n .union([\n z\n .string()\n // Transform empty string to null\n .transform(data => (data === '' ? null : data)),\n z.null(),\n z.number().int(),\n ])\n .pipe(z.union([z.null(), z.coerce.number().int()]))\n"],"mappings":";;AAKA,IAAa,IAAgB,EAC1B,MAAM;CACL,EACG,QAAQ,CAER,WAAU,MAAS,MAAS,KAAK,OAAO,EAAM;CACjD,EAAE,MAAM;CACR,EAAE,QAAQ,CAAC,KAAK;CACjB,CAAC,CACD,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"IntegerSchema.js","names":[],"sources":["../../../../src/components/TableColumnSchemaEditor/Validators/IntegerSchema.ts"],"sourcesContent":["import { z } from 'zod'\n\n/**\n * Validates and converts a value to a valid Synapse INTEGER value\n */\nexport const integerSchema = z\n .union([\n z\n .string()\n // Transform empty string to null\n .transform(data => (data === '' ? null : data)),\n z.null(),\n z.number().int(),\n ])\n .pipe(z.union([z.null(), z.coerce.number().int()]))\n"],"mappings":";;AAKA,IAAa,IAAgB,EAC1B,MAAM;CACL,EACG,OAAO,EAEP,WAAU,MAAS,MAAS,KAAK,OAAO,CAAK;CAChD,EAAE,KAAK;CACP,EAAE,OAAO,EAAE,IAAI;AACjB,CAAC,EACA,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,EAAE,OAAO,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"OptionalStringSchema.js","names":[],"sources":["../../../../src/components/TableColumnSchemaEditor/Validators/OptionalStringSchema.ts"],"sourcesContent":["import { z } from 'zod'\n\n/**\n * Schema for an optional string. Converts empty string to undefined.\n */\nexport const optionalStringSchema = z\n .string()\n .optional()\n .transform(v => (v === '' ? undefined : v))\n"],"mappings":";;AAKA,IAAa,IAAuB,EACjC,QAAQ,CACR,UAAU,CACV,WAAU,MAAM,MAAM,KAAK,KAAA,IAAY,EAAG"}
1
+ {"version":3,"file":"OptionalStringSchema.js","names":[],"sources":["../../../../src/components/TableColumnSchemaEditor/Validators/OptionalStringSchema.ts"],"sourcesContent":["import { z } from 'zod'\n\n/**\n * Schema for an optional string. Converts empty string to undefined.\n */\nexport const optionalStringSchema = z\n .string()\n .optional()\n .transform(v => (v === '' ? undefined : v))\n"],"mappings":";;AAKA,IAAa,IAAuB,EACjC,OAAO,EACP,SAAS,EACT,WAAU,MAAM,MAAM,KAAK,KAAA,IAAY,CAAE"}